Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无效,则会重新新建pod的资源。
1.2 pod控制器有多种类型
ReplicationController(RC):RC保证了在所有时间内,都有特定数量的Pod副本正在运行,如果太多了,RC就杀死几个,如果太少了,RC会新建几个
ReplicaSet(RS):代用户创建指定数量的pod副本数量,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和缩容功能。
Deployment(重要):工作在ReplicaSet之上,用于管理无状态应用,目前来说最好的控制器。支持滚动更新和回滚功能,还提供声明式配置。
DaemonSet:用于确保集群中的每一个节点只运行特定的pod副本,通常用于实现系统级后台任务。比如ELK服务
Job:只要完成就立即退出,不需要重启或重建。
CronJob:周期性任务控制,不需要持续后台运行
StatefulSet:管理有状态应用
本文主要讲解ReplicaSet、Deployment、DaemonSet 三中类型的pod控制器。
2、ReplicaSet 2.1 认识ReplicaSet
(1)什么是ReplicaSet?
ReplicaSet是下一代复本控制器,是Replication Controller(RC)的升级版本。ReplicaSet和 Replication Controller之间的唯一区别是对选择器的支持。ReplicaSet支持labels user guide中描述的set-based选择器要求, 而Replication Controller仅支持equality-based的选择器要求。
(2)如何使用ReplicaSet
大多数kubectl 支持Replication Controller 命令的也支持ReplicaSets。rolling-update命令除外,如果要使用rolling-update,请使用Deployments来实现。
虽然ReplicaSets可以独立使用,但它主要被 Deployments用作pod 机制的创建、删除和更新。当使用Deployment时,你不必担心创建pod的ReplicaSets,因为可以通过Deployment实现管理ReplicaSets。
(3)何时使用ReplicaSet?
ReplicaSet能确保运行指定数量的pod。然而,Deployment 是一个更高层次的概念,它能管理ReplicaSets,并提供对pod的更新等功能。因此,我们建议你使用Deployment来管理ReplicaSets,除非你需要自定义更新编排。
这意味着你可能永远不需要操作ReplicaSet对象,而是使用Deployment替代管理 。后续讲解Deployment会详细描述。
2.2 ReplicaSet定义资源清单几个字段
apiVersion: app/v1 版本
kind: ReplicaSet 类型
metadata 元数据
spec 期望状态
minReadySeconds:应为新创建的pod准备好的最小秒数
replicas:副本数; 默认为1
selector:标签选择器
template:模板(必要的)
metadata:模板中的元数据
spec:模板中的期望状态
status 当前状态
2.3 演示:创建一个简单的ReplicaSet
(1)编写yaml文件,并创建启动
简单创建一个replicaset:启动2个pod
[root@master manifests]# vim rs-damo.yaml apiVersion: apps/v1 kind: ReplicaSet metadata: name: myapp namespace: default spec: replicas: 2 selector: matchLabels: app: myapp release: canary template: metadata: name: myapp-pod labels: app: myapp release: canary environment: qa spec: containers: - name: myapp-container image: ikubernetes/myapp:v1 ports: - name: http containerPort: 80 [root@master manifests]# kubectl create -f rs-damo.yaml replicaset.apps/myapp created