• Kubernetes实践之深入掌握Pod——Pod健康检查和服务可用性检查


    Pod健康检查和服务可用性检查

    Kubernetes对Pod的健康状态可以通过两类探针来检查:

    (1)LivenessProbe探针:用于判断容器是否存活(Running状态),如果LivenessProbe探针探测到容器不健康,则kubelet将杀掉该容器,并根据容器的重启策略做相应的处理。
    (2)ReadinessProbe探针:用于判断容器服务是否可用(Ready状态),达到Ready状态的Pod才可以接收请求。对于被Service管理的 Pod,Service与Pod Endpoint的关联关系也将基于Pod是否Ready进行设置。如果在运行过程中Ready状态变为False,则系统自动将其从Service 的后端Endpoint列表中隔离出去,后续再把恢复到Ready状态的Pod加回 后端Endpoint列表。

    对于LivenessProbe和ReadinessProbe用法都一样,拥有相同的参数和相同的监测方式。

    • initialDelaySeconds:用来表示初始化延迟的时间,也就是告诉监测从多久之后开始运行,单位是秒
    • timeoutSeconds: 用来表示监测的超时时间,如果超过这个时长后,则认为监测失败

     LivenessProbe和ReadinessProbe均可配置以下三种实现方式

    例子中只使用livenessProbe更换只需要改为readinessProbe:

    (1)ExecAction:在容器内部执行一个命令,如果该命令的返回码为0,则表明容器健康

    在下面的例子中,通过执行“cat /tmp/health”命令来判断一个容器运行是否正常。在该Pod运行后,将在创建/tmp/health文件10s后删除该文 件,而LivenessProbe健康检查的初始探测时间(initialDelaySeconds)为 15s,探测结果是Fail,将导致kubelet杀掉该容器并重启它

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        test: liveness
      name: liveness-exec
    spec:
      containers:
      - name: liveness
        image: busybox
    	command: ["sh", "-c"]
        args:
        - /bin/sh
        - -c
        - echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 600
        livenessProbe:
          exec:
            command:
            - cat
            - /tmp/health
          initialDelaySeconds: 15
          timeoutSeconds: 1
    
    [root@lab-26 ~]# kubectl apply -f /data/k8s-yaml/test/dp.yaml
    

    (2)TCPSocketAction:通过容器的IP地址和端口号执行TCP检 查,如果能够建立TCP连接,则表明容器健康

    在下面的例子中,通过与容器内的localhost:80建立TCP连接进行健康检查:

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-with-healthcheck2
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        livenessProbe:
          tcpSocket:
            port: 80
          initialDelaySeconds: 30
          timeoutSeconds: 1
    

    (3)HTTPGetAction:通过容器的IP地址、端口号及路径调用HTTP Get方法,如果响应的状态码大于等于200且小于400,则认为容器健康

     在下面的例子中,kubelet定时发送HTTP请求到 localhost:80/_status/healthz来进行容器应用的健康检查(文件是之前build镜像创建的

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-with-healthcheck
    spec:
      containers:
      - name: nginx
        imagePullPolicy: Never
        image: harbor.op.com/public/nginx-hralthz:latest
        ports:
        - containerPort: 80
        livenessProbe:
          httpGet:
            path: /healthz
            port: 80
          initialDelaySeconds: 10
          timeoutSeconds: 1
    
    [root@lab-26 ~]# kubectl apply -f /data/k8s-yaml/test/dp.yaml
    
    [root@lab-26 ctchat]# kubectl get pod -owide
    NAME                    READY   STATUS    RESTARTS   AGE     IP              NODE       NOMINATED NODE   READINESS GATES
    dapi-test-pod-volume    1/1     Running   0          6h41m   172.152.106.4   minikube              
    pod-with-healthcheck    1/1     Running   0          44s     172.152.106.6   minikube              
    pod-with-healthcheck2   1/1     Running   0          68m     172.152.106.7   minikube              
    [root@lab-26 ctchat]# curl http://172.152.106.6/healthz
    ok
    
  • 相关阅读:
    php 高级 提高PHP代码的性能10条建议
    CSRF预防手段
    如何在PHP中防止SQL注入
    网络安全 如何防范 XSS 攻击
    php 算法知识 冒泡排序
    php 基础知识 常见面试题
    MySQL高级 InnoDB 和 MyISAM 的区别
    php 算法知识 猴子选大王
    MySQL高级-索引1
    [POI2007]POW-The Flood(并查集)
  • 原文地址:https://www.cnblogs.com/Wshile/p/12951429.html
Copyright © 2020-2023  润新知