[root@k8smaster ~]# kubectl explain pods.spec.containers.livenessProbe.execKIND: PodVERSION: v1RESOURCE: exec DESCRIPTION: One and only one of the following should be specified. Exec specifies the action to take. ExecAction describes a "run in container" action.FIELDS: command <[]string> #运行命令以后来探测其是否执行成功了,如果这个命令的返回值是成功表示存活,若返回值状态码是不成功表示不存活。 Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
[root@k8smaster manifests]# lsliveness-exec.yaml pod-demo.yaml[root@k8smaster manifests]# cat liveness-exec.yaml apiVersion: v1kind: Podmetadata: name: liveness-exec-pod namespace: defaultspec: containers: - name: liveness-exec-container image: busybox:latest imagePullPolicy: IfNotPresent command: ["/bin/sh","-c","touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 3600"] livenessProbe: exec: command: ["test","-e","/tmp/healthy"] #判断此文件是否存在 initialDelaySeconds: 1 #容器启动后等待1秒开始探测 periodSeconds: 3 #每隔3秒探测一次 restartPolicy: Always [root@k8smaster manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE liveness-exec-pod 1/1 Running 6 9m myapp-848b5b879b-5k4s4 1/1 Running 0 4d myapp-848b5b879b-bzblz 1/1 Running 0 4d myapp-848b5b879b-hzbf5 1/1 Running 0 4d nginx-deploy-5b595999-d9lv5 1/1 Running 0 4d pod-demo 2/2 Running 3 5h [root@k8smaster manifests]# kubectl describe pod liveness-exec-pod Name: liveness-exec-pod Namespace: default Priority: 0 PriorityClassName: Node: k8snode2/192.168.10.12 Start Time: Thu, 09 May 2019 19:59:15 +0800 Labels: Annotations: Status: Running IP: 10.244.2.17 Containers: liveness-exec-container: Container ID: docker://37b9faa3b66df5f74ce43943e20d414a6e0498b261b65e11e7c89ab26c633109 Image: busybox:latest Image ID: docker-pullable://busybox@sha256:4b6ad3a68d34da29bf7c8ccb5d355ba8b4babcad1f99798204e7abb43e54ee3d Port: Host Port: Command: /bin/sh -c touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 3600 State: Running Started: Thu, 09 May 2019 20:07:42 +0800 Last State: Terminated Reason: Error Exit Code: 137 Started: Thu, 09 May 2019 20:05:00 +0800 Finished: Thu, 09 May 2019 20:06:09 +0800 Ready: True Restart Count: 6 Liveness: exec [test -e /tmp/healthy] delay=1s timeout=1s period=3s #success=1 #failure=3 Environment: Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-jvtl7 (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: default-token-jvtl7: Type: Secret (a volume populated by a Secret) SecretName: default-token-jvtl7 Optional: false QoS Class: BestEffort Node-Selectors: Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Pulled 4d (x4 over 4d) kubelet, k8snode2 Container image "busybox:latest" already present on machine Normal Created 4d (x4 over 4d) kubelet, k8snode2 Created container Normal Started 4d (x4 over 4d) kubelet, k8snode2 Started container Normal Killing 4d (x3 over 4d) kubelet, k8snode2 Killing container with id docker://liveness-exec-container:Container failed liveness probe.. Container will be killed and recreate d. Warning Unhealthy 4d (x13 over 4d) kubelet, k8snode2 Liveness probe failed: Normal Scheduled 9m default-scheduler Successfully assigned default/liveness-exec-pod to k8snode2
5、基于tcpSocket探测
[root@k8smaster manifests]# kubectl explain pods.spec.containers.livenessProbe.tcpSocketKIND: PodVERSION: v1RESOURCE: tcpSocket DESCRIPTION: TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TCPSocketAction describes an action based on opening a socketFIELDS: host #基于主机,默认为pod自己的IP地址 Optional: Host name to connect to, defaults to the pod IP. port -required- #基于端口 Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.
6、httpGet探测
[root@k8smaster manifests]# kubectl explain pods.spec.containers.livenessProbe.httpGetKIND: PodVERSION: v1RESOURCE: httpGet DESCRIPTION: HTTPGet specifies the http request to perform. HTTPGetAction describes an action based on HTTP Get requests.FIELDS: host Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. httpHeaders <[]Object> Custom headers to set in the request. HTTP allows repeated headers. path #指定地址指定端口的url发送请求,如果响应码为200则ok Path to access on the HTTP server. port -required- #可以直接引用service的名称而不用端口号 Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. scheme Scheme to use for connecting to the host. Defaults to HTTP.
[root@k8smaster manifests]# cat readiness-httpget.yaml apiVersion: v1kind: Podmetadata: name: readiness-httpget-pod namespace: defaultspec: containers: - name: readiness-httpget-container image: ikubernetes/myapp:v1 imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 readinessProbe: httpGet: port: http #也可以使用80 path: /index.html initialDelaySeconds: 1 #容器启动后等待1秒开始探测 periodSeconds: 3 #每隔3秒探测一次 restartPolicy: Always[root@k8smaster manifests]# kubectl create -f readiness-httpget.yaml pod/readiness-httpget-pod created[root@k8smaster manifests]# kubectl get podsNAME READY STATUS RESTARTS AGEliveness-httpget-pod 1/1 Running 1 32mmyapp-848b5b879b-5k4s4 1/1 Running 0 4dmyapp-848b5b879b-bzblz 1/1 Running 0 4dmyapp-848b5b879b-hzbf5 1/1 Running 0 4dnginx-deploy-5b595999-d9lv5 1/1 Running 0 5dpod-demo 2/2 Running 4 6hreadiness-httpget-pod 1/1 Running 0 6s[root@k8smaster manifests]# kubectl describe pod readiness-httpget-podName: readiness-httpget-podNamespace: defaultPriority: 0PriorityClassName: Node: k8snode2/192.168.10.12Start Time: Thu, 09 May 2019 21:02:50 +0800Labels: Annotations: Status: RunningIP: 10.244.2.19Containers: readiness-httpget-container: Container ID: docker://2972a892e1c91c2cfa6168f5729cbf1dae02e079f5bd1e8dc370e2ed56dcbf61 Image: ikubernetes/myapp:v1 Image ID: docker-pullable://ikubernetes/myapp@sha256:9c3dc30b5219788b2b8a4b065f548b922a34479577befb54b03330999d30d513 Port: 80/TCP Host Port: 0/TCP State: Running Started: Thu, 09 May 2019 21:02:51 +0800 Ready: True Restart Count: 0 Readiness: http-get http://:http/index.html delay=1s timeout=1s period=3s #success=1 #failure=3 Environment: Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-jvtl7 (ro)Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: default-token-jvtl7: Type: Secret (a volume populated by a Secret) SecretName: default-token-jvtl7 Optional: falseQoS Class: BestEffortNode-Selectors: Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300sEvents: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Pulled 4d kubelet, k8snode2 Container image "ikubernetes/myapp:v1" already present on machine Normal Created 4d kubelet, k8snode2 Created container Normal Started 4d kubelet, k8snode2 Started container Normal Scheduled 23s default-scheduler Successfully assigned default/readiness-httpget-pod to k8snode2#进入容器删除index.html发现不再ready[root@k8smaster manifests]# kubectl get podsNAME READY STATUS RESTARTS AGEliveness-httpget-pod 1/1 Running 1 34mmyapp-848b5b879b-5k4s4 1/1 Running 0 4dmyapp-848b5b879b-bzblz 1/1 Running 0 4dmyapp-848b5b879b-hzbf5 1/1 Running 0 4dnginx-deploy-5b595999-d9lv5 1/1 Running 0 5dpod-demo 2/2 Running 4 6hreadiness-httpget-pod 0/1 Running 0 2m
8、lifecycle <Object> #生命周期,定义启动后和终止前钩子的
[root@k8smaster manifests]# kubectl explain pods.spec.containers.lifecycleKIND: PodVERSION: v1RESOURCE: lifecycle DESCRIPTION: Actions that the management system should take in response to container lifecycle events. Cannot be updated. Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.FIELDS: postStart #容器启动后立即执行的操作 PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks preStop #容器终止前执行的操作 PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks