kubernetes实践之四:深入理解控制器(workload)

一.Pod与controllers的关系

  • controllers:在集群上管理和运行容器的对象
  • 通过label-selector相关联
  • Pod通过控制器实现应用的运维,如伸缩,升级等

kubernetes实践之四:深入理解控制器(workload)

二.Deployment

  • 部署无状态应用
  • 管理Pod和ReplicaSet
  • 具有上线部署、副本设定、滚动升级、回滚等功能
  • 提供声明式更新,例如只更新一个新的Image

    应用场景:Web服务,微服务

kubernetes实践之四:深入理解控制器(workload)

创建Deployment:

# kubectl apply -f nginx-deployment.yaml

查看Deployment信息:

#kubectl get deployments

kubernetes实践之四:深入理解控制器(workload)

上图中涉及到数量解释如下:

READY:0/3 当前准备好的副本数量0,期望副本数3 (即Deployment里面定义的replicas)

UP-TO-DATE: 最新版本副本数量,在滚动升级中,有多少副本已经升级成功

AVAILABLE:当前集群可用的副本数量,及存活的Pod数量

最终结果如下:

kubernetes实践之四:深入理解控制器(workload)

查看副本数量:

# kubectl get rs

kubernetes实践之四:深入理解控制器(workload)

查看Deployment控制pod水平拓展过程

# kubectl describe deployment nginx-deployment

三.StatefulSet

  • 部署有状态应用
  • 每个节点都有固定身份ID
  • 集群的规模比较固定
  • 如果磁盘损坏,集群内的某个节点无法运行

    应用场景:mysql集群,MongoDB集群,Zookeeper集群

四.DaemonSet

  • 在每一个Node上运行一个Pod
  • 新加入的Node也同样会自动运行一个Pod

    应用场景:zabbix agent,saltstack agent    

kubernetes实践之四:深入理解控制器(workload)

创建DaemonSet:

# kubectl apply -f agent.yaml

查看daemonset信息

# kubectl get daemonset

kubernetes实践之四:深入理解控制器(workload)

kubernetes实践之四:深入理解控制器(workload)

五.Job

  • 普通任务(Job)

一次性执行

官方案例:https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/

    应用场景:离线数据处理

     kubernetes实践之四:深入理解控制器(workload)

部署perl

# kubectl apply -f https://k8s.io/examples/controllers/job.yaml

查看job

#kubectl get jobs

kubernetes实践之四:深入理解控制器(workload)

查看日志:

# kubectl logs pi-lzsh6

kubernetes实践之四:深入理解控制器(workload)

六.控制器小结

  • Deployment:无状态部署
  • StatefulSet:有状态部署
  • DaemonSet:守护进程部署
  • Job & CronJob:批处理