K8S之控制器类型
什么是控制器
Kubernetes 中内建了很多 controller(控制器),这些相当于一个状态机,用来控制 Pod 的具体状态和行为
常见的控制类型
Pod控制器:又称之为工作负载,由master的kube-contriller-manager组件提供,常见的有:
- ReplicationController
- ReplicaSet
- Deployment
- Statefulset
- Daemonset
- Job
- Cronjob
Pod对象的管理通常是有某种控制器的特定对象来实现的,包括其创建、删除及重新调度等。
有状态、无状态服务区别
在k8s中首先应该搞清楚什么是有状态服务?什么是无状态服务?搞清楚这一点,才能仔细体会到控制器之间的区别
无状态:
- deployment 认为所有的pod都是一样的
- 不用考虑顺序的要求
- 不用考虑在哪个node节点上运行
- 可以随意扩容和缩容
有状态:
- 实例之间有差别,每个实例都有自己的独特性,元数据不同,例如etcd
- 实例之间不对等的关系,以及依靠外部存储的应用
Deployment控制器
Deployment控制器和ReplicationController控制器以及ReplicaSet控制器都有很深的联系
ReplicationController(RC):维持集群pod的期望值,有伸缩功能,RC的标签和Pod模板标签必须一一对应
ReplicaSet(RS):RS和RC基本相同,区别在于RS有label selector功能,RS 支持集合式的 selector
Deployment:Deployment是通过管理RS的方式对pod来进行管理的
Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义(declarative)方法,用来替代以前的RC方便的管理应用。
在k8s中死亡的容器,会自动回收,不需要手动删除
注意:如果创建pod时不指定控制器类型,默认是deployment
定义方式:
声明式定义:可以实时更改命令的执行状态,改变命令的执行方式和结果(在命令或任务的执行过程中随时根据指令进行调整)
apply命令就是专门为声明式开发的命令
kubectl apply -f a.yaml # 声明式创建,能够后期更改,对于使用是特别方便的
举例;
[root@master ~]#kubectl apply -f a.yaml # 使用声明式创建deployment类型的控制器
[root@master ~]#vim a.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx-1 # 修改了一下nginx容器的名称
image: 10.0.0.136:9090/library/nginx:v1
本文介绍了Kubernetes中的控制器,包括Deployment、StatefulSet、DaemonSet、Job和CronJob。Deployment用于无状态服务的管理,支持滚动更新和版本回滚;StatefulSet适用于有状态应用,确保持久化存储和有序部署;DaemonSet确保每个Node上运行一个Pod;Job处理一次性任务,CronJob则管理周期性任务。
最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



