一、普通command命令
1、創建yaml
apiVersion: v1
kind: Pod
metadata:
name: busybox
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox
command: ['sh', '-c', 'echo The app is running! > /tmp/test&& sleep 3600']
2、驗證

二、postStart
簡介:1、應用容器啟動之后如果要做點配置之類的 ,可以使用postStart。
2、postStart 處理函數的調用不保證早於容器的入口點(entrypoint)的執行,postStart和entrypoint異步執行
3、Kubernetes 的容器管理邏輯會一直阻塞等待 postStart 處理函數執行完畢。只有 postStart 處理函數執行完畢,
容器的狀態才會變成 RUNNING
1、舉例
apiVersion: v1
kind: Pod
metadata:
name: lifecycle-demo
spec:
containers:
- name: lifecycle-demo-container
image: nginx
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
2、驗證結果

三、preStop
概念:1、Kubernetes 在容器結束前立即發送 preStop 事件
2、Kubernetes 的容器管理邏輯 會一直阻塞等待 preStop 處理函數執行完畢
1、舉例
apiVersion: v1
kind: Pod
metadata:
name: hook-demo2
labels:
app: hook
spec:
containers:
- name: hook-demo2
image: nginx
ports:
- name: webport
containerPort: 80
volumeMounts:
- name: message
mountPath: /usr/share/
lifecycle:
preStop:
exec:
command: ['/bin/sh','-c','echo Hello from the preStop Handler > /usr/share/wuchang']
volumes:
- name: message
hostPath:
path: /tmp
2、創建之后查看本地/tmp目錄下文件
[root@k8s-master pod]# kubectl apply -f pod1.yaml pod "hook-demo2" created [root@k8s-master pod]# kubectl get pods NAME READY STATUS RESTARTS AGE hook-demo2 1/1 Running 0 1m

3、執行刪除pod操作,再查看/tmp目錄下,文件存在
[root@k8s-master pod]# kubectl delete pods --all pod "hook-demo2" deleted

四、探針
liveness探針:影響的是單個容器,
readiness探針:影響的是整個pod,即如果pod中有多個容器,只要有一個容器的readiness探針診斷失敗,那么整個pod都會處於unready狀態
ExecAction:在容器內執行指定命令,如果命令退出時返回碼為0,則認為診斷成功
TCPSocketAction:kubelet嘗試打開容器上的某個端口,如果連接成功建立則診斷通過,否則失敗
HTTPGetAction:每進行一次HTTP健康檢查都會curl訪問一次指定的URL,如果返回的HTTP狀態碼在200和399之間,則認為容器運轉正常,否則認為容器運轉不正常
且小於400,則診斷被認為是成功的
Ⅰ、就緒探針(readinessProbe)
簡介:指示容器是否准備好服務請求。如果就緒探測失敗,斷點控制器將從與pod匹配的所有service的端點中刪除該
pod的ip地址。初始延遲之前的就緒狀態為Failure。如果容器不提供就緒探測,則默認為Success
1、創建readinessProbe-httpget
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx
readinessProbe:
httpGet:
port: 80 //通過http訪問,訪問的是/usr/share/nginx/html下的頁面
path: /index1.html //檢測根目錄下是否有該文件
initialDelaySeconds: 1
periodSeconds: 3
2、查看pods的狀態為running,但是ready為0/1,證明沒有就緒
3、進入pod內創建文件
[root@k8s-master probe]# kubectl exec -it nginx-pod -- /bin/sh # cd /usr/share/nginx/html # echo "123" > index1.html
4、檢測pod狀態,已經就緒

Ⅱ、存活探針(livenessProbe)
簡介:指示容器是否正在運行,如果存活探測失敗,則kubelet會殺死容器,並且容器將收到其重啟策略的影響。
如果容器不提供存活探針,則默認為success
1、livenessProbe-exec
apiVersion: v1
kind: Pod
metadata:
name: liveness-exec-pod
labels:
app: busybox
spec:
containers:
- name: liveness-exec-container
image: busybox
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c","touch /tmp/live ; sleep 60; rm -rf /tmp/live; se=leep 3600"]
livenessProbe:
exec:
command: ["test","-e","/tmp/live"]
initialDelaySeconds: 1
periodSeconds: 3

