在前面我們一直不停的提到物件 Immutable 的重要性,因為只要物件是 Immutable 的,那只要系統異常都可以重新一份新的來取代,那要怎麼知道系統是正常還是異常呢?Kubernetes 的 Liveness
跟 Readiness
就是負責這重責大任的物件。
如果是正常,你可以在 GKE 的 workload 頁面,看到綠色的 icon。
局部範例
livenessProbe:
httpGet:
path: /
port: 80
# initialDelaySeconds: 5
# timeoutSeconds: 1
# periodSeconds: 30
# failureThreshold: 3
readinessProbe:
httpGet:
path: /
port: 80
Liveness(活耀度) 的作用是確認 pod 是否正常的運行著,預設是每隔五秒就會檢查一次。
kubectl get pods
kubectl describe pod nginx-deployment-76f5d6ddc6-l4f8n
輸出的結果
...省略...
Liveness: http-get http://:80/ delay=5s timeout=1s period=30s #success=1 #failure=3
Readiness: http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3
...省略...
Readiness 的作用是確任容器是否已經就緒(啟動完成),可以開始接收外部的呼叫。
nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
timeoutSeconds: 1
periodSeconds: 30
failureThreshold: 3
readinessProbe:
httpGet:
path: /
port: 80
ports:
- containerPort: 80