k8s学习笔记-P21-探针-实操

191 阅读2分钟

教程:尚硅谷Kubernetes教程(K8s入门到精通)_哔哩哔哩_bilibili

笔记摘自视频章节:第四章-p22


主题

测试k8s中的探针: readinessliveness

操作

就绪检测 readiness

  • 创建一个带就绪探针的pod yaml文件
apiVersion: v1
kind: Pod
metadata:
  name: readiness-httpget-pod
  namespace: default
spec:
  containers:
  - name: readiness-httpget-container
    image: wangyanglinux/myapp:v1
    imagePullPolicy: IfNotPresent
    readinessProbe:
      httpGet:
        port: 80
        path: /index1.html
      initialDelaySeconds: 1
      periodSeconds: 3
  • 字段讲解

    • imagePullPolicy: 镜像下载策略
    • readinessProbe: 就绪检测方案
      • httpGet: 检查http
      • inititalDelaySeconds: 延时策略
      • periodSeconds: 周期执行时间
  • 查看pod 状态,一直未就绪

kubectl get pod
NAME                               READY   STATUS      RESTARTS       AGE
readiness-httpget-pod    0/1     Running         0                    12s
  • 分析原因: 确认为404,所以一直在未就绪状态
kubectl describd pods readiness-httpget-pod
Events:
  Type     Reason     Age                    From               Message
  ----     ------     ----                   ----               -------
  Normal   Scheduled  14m                    default-scheduler  Successfully assigned default/readiness-httpget-pod to jjh-k8s-demo-node1
  Normal   Pulling    14m                    kubelet            Pulling image "wangyanglinux/myapp:v1"
  Normal   Pulled     14m                    kubelet            Successfully pulled image "wangyanglinux/myapp:v1" in 12.760578508s
  Normal   Created    14m                    kubelet            Created container readiness-httpget-container
  Normal   Started    14m                    kubelet            Started container readiness-httpget-container
  Warning  Unhealthy  4m15s (x205 over 14m)  kubelet            Readiness probe failed: HTTP probe failed with statuscode: 404
  • 尝试恢复,使得改html存在,httpGet条件满足后,期望pod的readiness检查通过。
    • sh进入pod:kubectl exec readiness-httpget-pod -it -- /bin/sh
    • 创建文件: echo "123" >> /usr/share/nginx/html/index1.html
    • 退出
    • 查看pod状态,已经恢复正常

存活检测 liveness

case1: 文件检查

  • 创建yaml,就绪条件为:检查文件/tmp/live存在
apiVersion: v1
kind: Pod
metadata:
  name: liveness-exec-pod
  namespace: default
spec:
  containers:
    - name: liveness-exec-container
      image: busybox
      imagePullPolicy: IfNotPresent
      command: ["/bin/sh","-c", "touch /tmp/live ; sleep 60; rm -rf /tmp/live; sleep 3600"]
      livenessProbe:
        exec:
          command: ["test","-e","/tmp/live"]
        initialDelaySeconds: 1
        periodSeconds: 3
  • 创建pod:

    kubectl create -f p21_liveness_probe.yaml
    pod/liveness-exec-pod created
    
  • 状态跟踪

    • 一开始一直是运行着的
    kubectl get pods
    NAME                READY   STATUS    RESTARTS   AGE
    liveness-exec-pod   1/1     Running   0          8s
    
    • 监测,等待一分钟,发现pod在一分钟后重启,探活机制成功触发
    kubectl get pods -w
    NAME                READY   STATUS    RESTARTS   AGE
    liveness-exec-pod   1/1     Running   0          36s
    liveness-exec-pod   1/1     Running   1 (1s ago)   100s
    

case2: tcpSocket

  • 文件
apiVersion: v1
kind: Pod
metadata:
  name: probe-tcp
spec:
  containers:
  - name: nginx
    image: wangyanglinux/myapp:v1
    imagePullPolicy: IfNotPresent
    livenessProbe:
      initialDelaySeconds: 5
      timeoutSeconds: 1
      tcpSocket:
        port: 21212
  • 查看发现不断重启,这是因为21212单口一直没有就绪
kubectl get pod -o wide -w
NAME        READY   STATUS    RESTARTS   AGE   IP            NODE                 NOMINATED NODE   READINESS GATES
probe-tcp   1/1     Running   0          4s    10.244.1.17   jjh-k8s-demo-node1   <none>           <none>
probe-tcp   1/1     Running   1 (1s ago)   31s   10.244.1.17   jjh-k8s-demo-node1   <none>           <none>
probe-tcp   1/1     Running   2 (1s ago)   61s   10.244.1.17   jjh-k8s-demo-node1   <none>           <none>
probe-tcp   1/1     Running   3 (1s ago)   91s   10.244.1.17   jjh-k8s-demo-node1   <none>           <none>

其他

还有readiness和liveness组合使用的case,不作赘述