1.容器的重啓策略
always:默認的重啓策略,當容器停止,會創建新的容器 onFailure:容器異常退出,重啓容器 Never:當容器終止退出,從不重啓容器
2.健康策略
livenessProbe:如果檢查失敗,根據pod的restartPolicy來操作 readinessProbe:如果檢查失敗,kubernetes會把pod從service endpoint中刪除
3. 健康檢查的三種方式
httpGet: 發送http請求,返回狀態200-400狀態碼爲成功 exec:執行shell命令返回爲0 表示成功 tcpSocket:發送TCP socket建立成功
4.測試
apiVersion: v1 kind: Pod metadata: name: nginx-pod labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 livenessProbe: httpGet: path: /index.html port: 80
5.觀察
kubectl create -f nginx.yaml [root@k8s-master ~]# kubectl logs nginx-pod -f 172.17.52.1 - - [13/Oct/2018:09:55:57 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "kube-probe/1.9" "-" 172.17.52.1 - - [13/Oct/2018:09:56:07 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "kube-probe/1.9" "-" 172.17.52.1 - - [13/Oct/2018:09:56:17 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "kube-probe/1.9" "-" 172.17.52.1 - - [13/Oct/2018:09:56:27 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "kube-probe/1.9" "-" 172.17.52.1 - - [13/Oct/2018:09:56:37 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "kube-probe/1.9" "-" 172.17.52.1 - - [13/Oct/2018:09:56:47 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "kube-probe/1.9" "-" 172.17.52.1 - - [13/Oct/2018:09:56:57 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "kube-probe/1.9" "-" [root@k8s-master ~]# kubectl describe pod nginx-pod Name: nginx-pod Namespace: default Node: 192.168.56.12/192.168.56.12 Start Time: Sat, 13 Oct 2018 17:55:44 +0800 Labels: app=nginx Annotations: <none> Status: Running IP: 172.17.52.2 Containers: nginx: Container ID: docker://c03454a77f363b4b3f7dc31091dd92bd234200cb1eb341f262b1573f874a0315 Image: nginx Image ID: docker-pullable://nginx@sha256:9ad0746d8f2ea6df3a17ba89eca40b48c47066dfab55a75e08e2b70fc80d929e Port: 80/TCP State: Running Started: Sat, 13 Oct 2018 17:55:51 +0800 Ready: True Restart Count: 0 Liveness: http-get http://:80/index.html delay=0s timeout=1s period=10s #success=1 #failure=3 ##############策略 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-jjkz6 (ro) Conditions: Type Status Initialized True Ready True PodScheduled True Volumes: default-token-jjkz6: Type: Secret (a volume populated by a Secret) SecretName: default-token-jjkz6 Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: <none> Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m default-scheduler Successfully assigned nginx-pod to 192.168.56.12 Normal SuccessfulMountVolume 2m kubelet, 192.168.56.12 MountVolume.SetUp succeeded for volume "default-token-jjkz6" Normal Pulling 2m kubelet, 192.168.56.12 pulling image "nginx" Normal Pulled 2m kubelet, 192.168.56.12 Successfully pulled image "nginx" Normal Created 2m kubelet, 192.168.56.12 Created container Normal Started 2m kubelet, 192.168.56.12 Started container [root@k8s-master ~]# 上面可以看出健康檢查的策略 以及頻率
6.如果把nginx的默認的index.html刪除會出現什麼情況呢
刪除了容器的index.html以後 容器健康檢查 失敗 然後根據默認的容器重啓策略 新建立容器,restartPolicy可以自定義,新建的容器也是用最初的yaml建立的 而且是一個名字。如下是新建立的容器 index.html還是存在的
root@nginx-pod:/usr/share/nginx/html# ll bash: ll: command not found root@nginx-pod:/usr/share/nginx/html# ls -l total 8 -rw-r--r-- 1 root root 494 Oct 2 14:49 50x.html -rw-r--r-- 1 root root 612 Oct 2 14:49 index.html root@nginx-pod:/usr/share/nginx/html#