具體的liveness-httpget.yaml文件以下:html
apiVersion: v1 kind: Pod metadata: name: liveness-httpget-pod namespace: default spec: containers: - name: liveness-exec-container image: ikubernetes/myapp:v1 imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 livenessProbe: httpGet: port: http path: /index.html initialDelaySeconds: 1 periodSeconds: 3 [root@master manifests]# cat liveness-httpget.yaml apiVersion: v1 kind: Pod metadata: name: liveness-httpget-pod namespace: default spec: containers: - name: liveness-exec-container image: ikubernetes/myapp:v1 imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 livenessProbe: httpGet: port: http path: /index.html initialDelaySeconds: 1 periodSeconds: 3
建立該podnode
[root@master manifests]# kubectl create -f liveness-httpget.yaml pod/liveness-httpget-pod created
查看當前pod的狀態nginx
[root@master manifests]# kubectl describe pod liveness-httpget-pod Name: liveness-httpget-pod Namespace: default Priority: 0 PriorityClassName: <none> Node: node02/192.168.18.130 Start Time: Fri, 17 Aug 2018 18:24:26 +0800 Labels: <none> Annotations: <none> Status: Running IP: 10.244.2.40 Containers: liveness-exec-container: Container ID: docker://b00bc09eac7c4dcadb482dd9795a9f7e6d9b68ca63e75384da18feb0ef7bdc6d Image: ikubernetes/myapp:v1 Image ID: docker-pullable://ikubernetes/myapp@sha256:9c3dc30b5219788b2b8a4b065f548b922a34479577befb54b03330999d30d513 Port: 80/TCP Host Port: 0/TCP State: Running Started: Fri, 17 Aug 2018 18:24:27 +0800 Ready: True Restart Count: 0 Liveness: http-get http://:http/index.html delay=1s timeout=1s period=3s #success=1 #failure=3 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-qcfxf (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: default-token-qcfxf: Type: Secret (a volume populated by a Secret) SecretName: default-token-qcfxf Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Pulled 37s kubelet, node02 Container image "ikubernetes/myapp:v1" already present on machine Normal Created 37s kubelet, node02 Created container Normal Started 37s kubelet, node02 Started container Normal Scheduled 32s default-scheduler Successfully assigned default/liveness-httpget-pod to node02
使用命令 kubectl exec liveness-httpget-pod -c liveness-exec-container -it -- /bin/sh
登錄容器docker
[root@master manifests]# kubectl exec liveness-httpget-pod -c liveness-exec-container -it -- /bin/sh / # ls bin dev etc home lib media mnt proc root run sbin srv sys tmp usr var / # mv /usr/share/nginx/html/index.html index.html / # command terminated with exit code 137
能夠看到,當咱們把index.html移走後,這個容器立馬就退出了。api
此時,查看pod的信息app
[root@master manifests]# kubectl describe pod liveness-httpget-pod Name: liveness-httpget-pod Namespace: default Priority: 0 PriorityClassName: <none> Node: node02/192.168.18.130 Start Time: Fri, 17 Aug 2018 18:24:26 +0800 Labels: <none> Annotations: <none> Status: Running IP: 10.244.2.40 Containers: liveness-exec-container: Container ID: docker://ac663b9e29c2cbc9c1d0283f1609914be69964149247945266ddcc8b33dde12f Image: ikubernetes/myapp:v1 Image ID: docker-pullable://ikubernetes/myapp@sha256:9c3dc30b5219788b2b8a4b065f548b922a34479577befb54b03330999d30d513 Port: 80/TCP Host Port: 0/TCP State: Running Started: Fri, 17 Aug 2018 18:48:07 +0800 Last State: Terminated Reason: Completed Exit Code: 0 Started: Fri, 17 Aug 2018 18:24:27 +0800 Finished: Fri, 17 Aug 2018 18:48:06 +0800 Ready: True Restart Count: 1 Liveness: http-get http://:http/index.html delay=1s timeout=1s period=3s #success=1 #failure=3 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-qcfxf (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: default-token-qcfxf: Type: Secret (a volume populated by a Secret) SecretName: default-token-qcfxf Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 24m default-scheduler Successfully assigned default/liveness-httpget-pod to node02 Warning Unhealthy 1m (x3 over 1m) kubelet, node02 Liveness probe failed: HTTP probe failed with statuscode: 404 Normal Pulled 1m (x2 over 24m) kubelet, node02 Container image "ikubernetes/myapp:v1" already present on machine Normal Created 1m (x2 over 24m) kubelet, node02 Created container Normal Started 1m (x2 over 24m) kubelet, node02 Started container Normal Killing 1m kubelet, node02 Killing container with id docker://liveness-exec-container:Container failed liveness probe.. Container will be killed and recreated.
看輸出,容器因爲健康檢查未經過,pod會被殺掉,並從新建立測試
[root@master manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE liveness-httpget-pod 1/1 Running 1 33m
restarts
爲 1spa
從新登錄容器,發現index.html又出現了,證實容器是被重拉了。3d
[root@master manifests]# kubectl exec liveness-httpget-pod -c liveness-exec-container -it -- /bin/sh / # cat /usr/share/nginx/html/index.html Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>