K8S學習筆記之八-command和探針


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM