一、普通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