具体的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>