一、概述

Pod控制器:又称之为工作负载,由master的kube-contriller-manager组件提供,常见的有:

  1. Deployment
  2. StatefulSet
  3. DaemonSet
  4. Job
  5. CronJob
    在这里插入图片描述
    Pod对象的管理通常是有某种控制器的特定对象来实现的,包括其创建、删除及重新调度等。

二、有状态、无状态服务区别

无状态:
1)deployment 认为所有的pod都是一样的
2)不用考虑顺序的要求
3)不用考虑在哪个node节点上运行
4)可以随意扩容和缩容

有状态
1)实例之间有差别,每个实例都有自己的独特性,元数据不同,例如etcd,zookeeper
2)实例之间不对等的关系,以及依靠外部存储的应用

三、Deployment控制器

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

更新策略:

  1. 滚动更新:旧控制器的Pod数量不断减少,同时新控制器的Pod不断增加,具有以下两个属性:

    maxSurge:最多扩容内容是原本的百分之多少
    maxUnavailabe:最多缩减内容是原本的百分之多少
    
  2. 灰度发布:在第一批新的Pod资源创建完成后立即停止更新,然后筛选小部分用户的请求路由至新版本的Pod应用,并持续观察其是否能够稳定地按期望的方式运行。确定没有问题就继续滚动更新,否则立即回滚更新操作。

四、SatefulSet控制器

  • 部署有状态应用
  • kind:service
  • 解决Pod独立生命周期,保持Pod启动顺序和唯一性
  • 稳定,唯一的网络标识符,持久存储(例如:etcd配置文件,节点地址发生变化,将无法使用)
  • 有序,优雅的部署和扩展、删除和终止(例如:mysql主从关系,先启动主,再启动从),有序,滚动更新
  • 应用场景:数据库

常规service和无头服务区别

  • service:一组Pod访问策略,提供cluster-IP群集之间通讯,还提供负载均衡和服务发现。
  • Headless service 无头服务,不需要cluster-IP,直接绑定具体的Pod的IP

官方案例:https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
在这里插入图片描述

五、DaemonSet控制器

  • 在每一个Node上运行一个Pod
  • 新加入的Node也同样会自动运行一个Pod
  • 应用场景:Agent
  • 官方案例(监控)
    https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
    在这里插入图片描述

六、Job控制器

  • Job分为普通任务(Job)和定时任务(CronJob)
  • 一次性执行
  • 应用场景:离线数据处理,视频解码等业务

官方案例:https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
在这里插入图片描述

七、CronJob 控制器

  • 周期性任务,像Linux的Crontab一样。
  • 应用场景:通知,备份

官方案例:https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐