ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Pod应用控制器进阶

2021-11-21 18:34:33  阅读:156  来源: 互联网

标签:容器 控制器 name 探测 Pod pod containers 进阶


Pod应用控制器进阶

Pod的生命周期

  1. pod状态 : pending 调度尚未完成
  2. runing 运行中
  3. failed 失败
  4. succeeded 成功
  5. unknow 未知 有可能某个组件进程挂掉 kubelet…

 

创建pod过程:

  • 请求–> apiserver–>保存请求到etcd中
  • apiserver–>scheduler–>将调度的结果保存在etcd的pod资源的状态信息中
  • 目标节点上的kubelet通过apiserver获取用户创建的清单
  • kubelet根据清单在当前节点上创建并运行pod并发送节点状态给apiserver
  • 再次保存信息到etcd当中

pod生命周期的重要行为

初始化容器

容器探测

liveness          //用于探测容器内主程序或容器是否存活(存活性探测)存活未必就绪
readiness       //用于提供容器内服务是否能提供服务,类似于进程 (就绪性探测)

探针类型有三种

ExecAction 执行命令 ps等
TCPSocketAction TCP套接字探测()
HTTPGetAction 根据响应码判断容器状态

pod内容器探测重启策略

restartPolicy: //重启逻辑:时间叠加,最长为5分钟
always //默认总是重启
onfailure //当容器状态错误时重启,正常退出不会重启
nerver //从不

Pod终止:宽限期为30s,若30秒后容器未终止,则强制杀死。

 

容器探测-ExecAction探针demo

apiVersion: v1
kind: Pod     //自主式Pod资源
metadata:
  name: liveness-exec-pod
  namespace: default
spec:
  containers:
  - name: liveness-exec-containers
    image: busybox:latest
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh","-c","touch /heslthy; sleep 30; rm -f /tmp/healthy; sleep 3600"]
    livenessProbe:             //指定为存活性探测
      exec:                         //探针类型
        command: ["test","-e","/healthy"]       
      initialDelaySeconds: 5        //容器启动后5秒开始探测
      periodSeconds: 3              //失败三次才算失败,重启容器

HTTPGetAction 探针类型演示

 apiVersion: v1
kind: Pod      //自主式Pod资源
metadata:
  name: liveness-httpget-pod
  namespace: default
spec:
  containers:
  - name: liveness-httpget-containers
    image: nginx:latest
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 90      //指定不存在的端口用于测试
    livenessProbe:
      httpGet:                 //指定探针类型
        port: http             //指定名称为http的端口
        path: /index.html     //指定探测路径
      initialDelaySeconds: 5
      periodSeconds: 3

就绪性探测demo

apiVersion: v1
kind: Pod      //自主式Pod资源
metadata:
  name: readiness-httpget-pod
  namespace: default
spec:
  containers:
  - name: readiness-httpget-containers
    image: nginx:latest
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80
    readinessProbe:      //指定容器探测为就绪性探测
      httpGet:                //探针类型为httpGet方法
        port: http
        path: /index.html       //监控该文件是否就绪
      initialDelaySeconds: 5
      periodSeconds: 3

容器启动后钩子

apiVersion: v1
kind: Pod
metadata:
  name: poststart-pod
  namespace: default
spec:
  containers:
  - name: busybox-httpd
    image: busybox:latest
    imagePullPolicy: IfNotPresent
    lifecycle:
      postStart:
        exec:
          command: ['/bin/sh','-c','echo haha >> /data/web/html/index.html']     //错误示范,此处明白原理即可
    command: ['/bin/sh','-c','sleep 3600']

 

总结:容器探测 liveness 与 readiness 的原因
由于动态有生命周期的pod访问是由service转发至后端,当创建新的pod后由标签选择器立即关联至service,此时当用户请求立即被调度到此pod,但是由于pod内容器未初始化完成或未就绪,可能会导致客户访问失败

标签:容器,控制器,name,探测,Pod,pod,containers,进阶
来源: https://www.cnblogs.com/rtnb/p/15585345.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有