k8s控制器
控制器类型
ReplicationController和ReplicaSet Rc被Rs取代
Deployment
DeamonSet
StateFulSet
Job/Cronjob
Horizontal Pod Autoscaling
1、Deployment
• 部署无状态应用
• 管理Pod和ReplicaSet
• 具有上线部署、副本设定、滚动升级、回滚等功能
• 提供声明式更新,例如只更新一个新的Image
应用场景:Web服务,微服务
更新策略
maxSurge最多可用多少个,或者百分比,如果百分比不足1将补1
maxUnavailable 更新过程中最多不可用为多少个,或者可以写百分比,如果百分比不足1将补1
创建deployment的时候会根据pod模板创建rs,
pod的名字格式 deployment的name-rs的name-随机字符串
2、DaemonSet
官网文档地址https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
• 在每一个Node上运行一个Pod
• 新加入的Node也同样会自动运行一个Pod
• 也支持滚动更新
• 也支持pod死亡重新拉起一个新的,包括健康监测
更新类型type
RollingUpdate
OnDelete:在删除的时候更新
更新策略
只有maxUnavailabl(这里的数量指的节点数量)一次更新几个节点也可以百分比 只能先删1或多个个节点的在更新一个, 删除以后更新
kubectl set 也支持ds
应用场景:Agent
而且创建daemonset的时候,因为是每个节点一个也可以使用hostNetwork、hostIPC、hostPID,使用宿主机网络,能做到访问宿主机直接访问该服务,在pod模板中定义
3、SatefulSet
特点:
部署有状态应用
解决Pod独立生命周期,保持Pod启动顺序和唯一性
稳定,唯一的网络标识符,持久存储(例如: etcd 配置文件,节点地址发生变化,将无法使用)
有序,优雅的部署和扩展、删除和终止(例如: mysql 主从关系,先启动主,再启动从)
有序,滚动更新
- 稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
- 稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有 Cluster IP的Service)来实现
- 有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从0到 N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实 现
- 有序收缩,有序删除(即从N-1到0)
应用场景: 数据库
有状态和无状态的区别:
无状态:
1)deployment认为所有的pod都是一样的
2)不用考虑顺序的要求
3)不用考虑在哪个node节点上运行
4)可以随意扩容和缩容
有状态:
1)实例之间有差别,每个实例都有自己的独特性,元数据不同,例如etcd, zookeeper
2)实例之间不对等的关系,以及依靠外部存储的应用。
4、Job和 CronJob
Job
Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束
CronJob
Cron Job 管理基于时间的 Job,即:
在给定时间点只运行一次
周期性地在给定时间点运行
使用前提条件:**当前使用的 Kubernetes 集群,版本 >= 1.8(对 CronJob)。对于先前版本的集群,版本 < 1.8,启动 API Server时,通过传递选项 --runtime-config=batch/v2alpha1=true 可以开启 batch/v2alpha1 API**
典型的用法如下所示:
在给定的时间点调度 Job 运行
创建周期性运行的 Job,例如:数据库备份、发送邮件
5、Horizontal Pod Autoscaling
应用的资源使用率通常都有高峰和低谷的时候,如何削峰填谷,提高集群的整体资源利用率,让service中的Pod 个数自动调整呢?这就有赖于Horizontal Pod Autoscaling了,顾名思义,使Pod水平自动缩放
学会放弃比坚持容易的多,但还没听过放弃也有收获。年轻人加油!!!

浙公网安备 33010602011771号