Kubernetes中的基本概念(五) pods的生命周期

分类: AUTOMATION 发布于:

抽象能力是区分人和低等生物的重要特征。

pod 的声明周期

  • Pending

  • Running

  • Succeeded

  • Failed

  • Unknown

pod 状态查询(conditions)

https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#podcondition-v1-core

容器探头(probes)
  • ExecAction 执行容器内的命令

  • TCPSocketAction 通过socket监听特定端口的数据。

诊断依据是查看port是否打开。

  • HTTPGetAction 7层http的GET动作确认

  • liveness or readiness 探头的区别

liveness 依据探头返回的状态,去决定是否杀掉并重启容器。

readiness 依据探头返回的状态,去决定是否发送流量到容器。

初始化容器
  • 执行成功则退出,失败则中断后续任务。

应用场景

  • 设置前置任务

  • 应用任务分层设计

  • before callback

 apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
  annotations:
    pod.beta.kubernetes.io/init-containers: '[
        {
            "name": "init-myservice",
            "image": "busybox",
            "command": ["sh", "-c", "until nslookup myservice; do echo waiting for myservice; sleep 2; done;"]
        },
        {
            "name": "init-mydb",
            "image": "busybox",
            "command": ["sh", "-c", "until nslookup mydb; do echo waiting for mydb; sleep 2; done;"]
        }
    ]'
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
pod preset

工作流程

当收到pod创建请求时,

  • 检查集群内所有的PodPreset

  • 如果存在匹配的前置命令集(通过label selector),合并prset定义的资源到pod的定义中。

  • 为修改过的pod定义添加注解。

主动和被动中断(disruptions/voluntary or involuntary)

如何从集群中安全移除一个节点

ReplicaSet(复制控制器)

通常使用deployments, 除非发布一次性应用(不需要更新)。

ReplicaController

维护监控管辖内的pods,少则增加,多则移除。

通常配合其他对象,实现

  • 扩容

  • 分流

Deployment
  • 管理replicaset

  • 更新pod的状态

  • 回滚发布历史

  • 自动扩容

  • 管理发布状态(中止或重新开始)