其他分享
首页 > 其他分享> > k8s控制器探针

k8s控制器探针

作者:互联网

Health Check:由发起者对容器进行周期性检测   dockers health check实现方式: #第一种方式:docker-compose cat <<EOF >docker-compose.yaml version: '3.6' service:   nginx-service:     image: nginx     expose:     - 80     - 443     ports:     - "80:80"     - "443:443"     restart: always     healthcheck: #添加服务健康状态检查       test: ["CMD", "curl", "-f", "http://localhost"]       interval: 5s #健康状态检查的间隔时间,默认为30s       timeout: 5s #单次检查的失败超时时间,默认为30s       retries: 3 #连续失败次数默认3次,当连续失败retrise次数后将容器置为unhealthy状态       start_period: 60s #容器启动60s后,interval做第一次健康检查 EOF #第二种方式:dockerfile制作镜像的时候加上 FROM nginx:1.20.2 HEALTHCHECK --interval=5s --timeout=2s --retries=3  CMD curl --silent --fail localhost:80 || exit 1   验证:
  1. 在检查通过之前容器处于starting状态
  2. 检测通过(检测返回状态码为0)之后为healthy状态
  3. 检测失败(检测返回状态码为1)之后为unhealthy状态
  ######################################################################################################   pod生命周期:     initcontainer -> poststart ->{ readinessProbe - livenessProbe} -> prestop   探针简介:探针是有kubelet对容器执行的定期诊断,以保证pod的状态始终处于运行状态,要执行诊断,kubelet调用由容器实现的Handler(处理程序),也称为Hook(钩子),由三种类型处理程序:   pod一旦配置探针,在检测失败的时候会基于restartPolicy对Pod进行下一步操作 pod重启策略(restartPolicy):   镜像拉取策略(imagePullPolicy):   探针类型:   探针参数说明:   HTTPGetAction: HTTPGetAction的yaml示例: containers: - name: pod-HTTPGetAction   #readnessProbe:   livenessProbe:     httpGet:       path: /index.html       port: 80       scheme: http     initialDelaySeconds: 10     periodSeconds: 5     timeoutSeconds: 5     successThreshold: 1     failureThresnold: 3   TCPSocketAction的yaml示例: containers: - name: pod-TCPSocketAction   #readnessProbe:   livenessProbe:     tcpSocket:       port: 80     initialDelaySeconds: 10     periodSeconds: 5     timeoutSeconds: 5     successThreshold: 1     failureThresnold: 3   ExecAction的yaml示例: containers: - name: pod-ExecAction   #readnessProbe:   livenessProbe:     exec:       command:       - /usr/local/bin/redis-cli       - quit     initialDelaySeconds: 10     periodSeconds: 5     timeoutSeconds: 5     successThreshold: 1     failureThresnold: 3     postStart和preStop说明: yaml示例: containers: - name: pod-lifecycle   #readnessProbe:   livenessProbe:     postStart:       exec:         command: ["/bin/bash", "-c", "echo 'Hellow from then postStart handler' >> /usr/local/tomcat/webapps/ROOT/index.html"]     preStop:       exec:         command: ["/usr/local/tomcat/bin/catalina.sh", "stop"]   pod的创建流程和终止流程: #创建
  1. 创建pod
  2. 完成调度
  3. 容器启动并执行postStart
  4. 探针检测(readness和liveness)容器进入running状态
  5. service关联pod
  6. 接收客户端请求
#删除
  1. 删除pod
  2. pod被设置为“Terminating”状态,从service的Endpoint里面中删除端点
  3. 执行preStop
  4. k8s想pod中的容器发送SIGTERM信号(正常终止信号)终止pod里面的主进程,这个信号让容器知道自己即将要被关闭(默认宽限30s,30秒内可以优雅的关闭)
  5. 默认的30s内关闭或者30s后发送信号SIGKILL到Pod,并删除Pod
延长优雅关闭的时间(deploy.spec.template.spec.terminationGracePeriodSeconds):     terminationGracePeriodSeconds:终止等待时间,如果未设置,最多等待30s,k8s将等待关闭的时间称为优雅终止宽限期,值得注意的地方是等待期与preStop和SIGTERM一起执行,即k8s可能不会等待preStop HOOK的完成                 

标签:容器,控制器,检测,探针,默认,镜像,pod,k8s
来源: https://www.cnblogs.com/wyh-l6/p/16587222.html