3-1.pod控制器
时间:2023-01-29 19:30:01
一、Pod控制器简介
在kubernetes中,按照pod可分为两类:
自主式pod:kubernetes直接创建Pod,这种pod删除后不会重建
创建了控制器pod:kubernetes通过创建了控制器pod,这种pod删除后,将自动重建
1.Pod控制器
Pod控制器是管理pod使用中间层Pod控制器完成后,只需告诉我Pod控制器,你想要多少?Pod没关系。它将创建满足条件的产品Pod确保每一个Pod如果资源处于用户期望的目标状态。Pod资源在运行中出现故障,将根据指定策略重新安排Pod。
2.Pod控制器类型
控制器类型 | 作用 |
---|---|
ReplicaSet | 保证副本数量保持在预期值,并支持pod数量扩展容量,镜像版升级 |
Deployment | 通过控制ReplicaSet来控制Pod,并支持滚动升级和退回版本 |
Horizontal Pod Autoscaler | 可根据集群负载自动水平进行调整Pod削峰填谷实现数量 |
DaemonSet | 指定集群Node上操作,只操作一个副本,一般用于保护过程任务 |
Job | 它创造的pod只要完成任务就立即退出,不需要重启或重建,用于执行一次性任务 |
Cronjob | 它创建的Pod负责周期性任务控制,无需后台连续运行 |
StatefulSet | 管理有状态应用 |
二、ReplicaSet(RS)
ReplicaSet主要作用是保证一定数量pod正常运行,它将继续监控这些Pod一旦Pod如果发生故障,将重新启动或重建。它还支持对方pod镜像版本的数量扩展和升降。
[root@t3-tkhijbs-jcsszy-app09 yaml]# cat nginx-pod.yaml apiVersion: apps/v1 kind: ReplicaSet metadata: name: pc-replicaset namespace: dev spec: replicas: 3 selector: matchLabels: app: nginx-pod template: metadata: labels: app: nginx-pod spec: containers: - name: nginx image: nginx
其中,需要新了解的配置项是spec
以下选项:
(1)replicas:指定的副本数量实际上是当前的rs创建出来的pod默认为1
(2)selector:选择器的作用是建立pod控制器和pod使用的关系Label Selector机制在pod模板上定义label,在控制器上定义选择器(selector),当前控制器能管理什么?pod了
(3)template:模板是当前控制器的创建pod使用的模板实际上是前面解释的pod的定义
1.扩 缩pod数量
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get ReplicaSet -n dev NAME DESIRED CURRENT READY AGE pc-replicaset 3 3 3 27m [root@t3-tkhijbs-jcsszy-app09 ~]# kubectl edit rs pc-replicaset -n dev #编辑rs修改副本数量spec:replicas: 5即可 .这个数字是根据你的要求修改的
2.镜像升降级
root@t3-tkhijbs-jcsszy-app09 ~]# kubectl edit rs pc-replicaset -n dev #直接修改镜像版本即可
3.删除RS
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl delete rs pc-replicaset -n dev
或者
[root@t3-tkhijbs-jcsszy-app09 yaml]# kubectl delete -f nginx-pod.yaml
三、deployment(deploy)
为了更好的解决服务编排的问题,kubernetes在V1.2版本开始,引入了Deployment控制器。值得一提的是,这种控制器并不直接管理pod,而是通过管理ReplicaSet来简介管理Pod,即:Deployment管理ReplicaSet,ReplicaSet管理Pod。所以Deployment比ReplicaSet功能更加强大。
支持ReplicaSet的所有功能
支持发布的停止、继续
支持滚动升级和回滚版本
[root@t3-tkhijbs-jcsszy-app09 yaml]# cat nginx-pod.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: pc-deployment
namespace: dev
spec:
replicas: 3
selector:
matchLabels:
app: nginx-pod
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx
[root@t3-tkhijbs-jcsszy-app09 yaml]# kubectl apply -f nginx-pod.yaml
deployment.apps/pc-deployment created
1.Pod容器扩缩容
[root@t3-tkhijbs-jcsszy-app09 yaml]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
pc-deployment-7d4f548fb9-mlksf 1/1 Running 0 94s
pc-deployment-7d4f548fb9-w5p2l 1/1 Running 0 94s
pc-deployment-7d4f548fb9-xlvvv 1/1 Running 0 94s
[root@t3-tkhijbs-jcsszy-app09 yaml]# kubectl edit deploy pc-deployment -n dev
#修改这里的数字就好了
replicas: 5
[root@t3-tkhijbs-jcsszy-app09 yaml]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
pc-deployment-7d4f548fb9-5z7n8 1/1 Running 0 27s
pc-deployment-7d4f548fb9-gfg7p 1/1 Running 0 27s
pc-deployment-7d4f548fb9-mlksf 1/1 Running 0 3m43s
pc-deployment-7d4f548fb9-w5p2l 1/1 Running 0 3m43s
pc-deployment-7d4f548fb9-xlvvv 1/1 Running 0 3m43s
2.版本回退
2.1 --record
此参数会记录更新的过程
[root@t3-tkhijbs-jcsszy-app09 yaml]# cat nginx-pod.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: pc-deployment
namespace: dev
spec:
replicas: 3
selector:
matchLabels:
app: nginx-pod
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.17.1
[root@t3-tkhijbs-jcsszy-app09 yaml]# kubectl apply -f nginx-pod.yaml --record
deployment.apps/pc-deployment created
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get rs -n dev
NAME DESIRED CURRENT READY AGE
pc-deployment-858db84f89 3 3 3 9s
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get pod -n dev -w
NAME READY STATUS RESTARTS AGE
pc-deployment-858db84f89-8r5kg 1/1 Running 0 20s
pc-deployment-858db84f89-lc7wb 1/1 Running 0 20s
pc-deployment-858db84f89-s4f8f 1/1 Running 0 20s
开始更新镜像
kubectl set image deployment pc-deployment nginx=nginx:1.17.2 -n dev
更新完毕之后发现,产生了一个新的rs控制器pc-deployment-6c78d7875b
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get rs -n dev
NAME DESIRED CURRENT READY AGE
pc-deployment-6c78d7875b 3 3 3 85s
pc-deployment-858db84f89 0 0 0 4m14s
新的pod也是基于pc-deployment-6c78d7875b产生的
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
pc-deployment-6c78d7875b-9j27t 1/1 Running 0 3m1s
pc-deployment-6c78d7875b-c4wfl 1/1 Running 0 3m
pc-deployment-6c78d7875b-k5jsc 1/1 Running 0 2m57s
2.2 rollout
kubectl rollout: 版本升级相关功能,支持下面的选项:
status 显示当前升级状态
history 显示 升级历史记录
pause 暂停版本升级过程
resume 继续已经暂停的版本升级过程
restart 重启版本升级过程
undo 回滚到上一级版本(可以使用–to-revision回滚到指定版本)
实例:
[root@t3-tkhijbs-jcsszy-app09 yaml]# cat nginx-pod.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: pc-deployment
namespace: dev
spec:
replicas: 3
selector:
matchLabels:
app: nginx-pod
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.17.1
[root@t3-tkhijbs-jcsszy-app09 yaml]# kubectl apply -f nginx-pod.yaml --record
deployment.apps/pc-deployment created
[root@t3-tkhijbs-jcsszy-app09 yaml]# kubectl get rs -n dev
NAME DESIRED CURRENT READY AGE
pc-deployment-858db84f89 3 3 3 23s
[root@t3-tkhijbs-jcsszy-app09 yaml]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
pc-deployment-858db84f89-khkml 1/1 Running 0 29s
pc-deployment-858db84f89-swkkv 1/1 Running 0 29s
pc-deployment-858db84f89-tnn8z 1/1 Running 0 29s
更改镜像版本
[root@t3-tkhijbs-jcsszy-app09 yaml]# vim nginx-pod.yaml
image: nginx:1.17.2
更新配置
[root@t3-tkhijbs-jcsszy-app09 yaml]# kubectl apply -f nginx-pod.yaml --record
deployment.apps/pc-deployment configured
查看更新历史记录
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl rollout history deploy pc-deployment -n dev
deployment.apps/pc-deployment
REVISION CHANGE-CAUSE
1 kubectl apply --filename=nginx-pod.yaml --record=true
2 kubectl apply --filename=nginx-pod.yaml --record=true
rs控制器也更新了
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get rs -n dev
NAME DESIRED CURRENT READY AGE
pc-deployment-6c78d7875b 3 3 3 19m
pc-deployment-858db84f89 0 0 0 33m
开始回滚到上一个版本
这里直接使用–to-revision=1回滚到了1版本, 如果省略这个选项,就是回退到上个版本
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl rollout undo deployment pc-deployment --to-revision=1 -n dev
deployment.apps/pc-deployment rolled back
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get rs -n dev
NAME DESIRED CURRENT READY AGE
pc-deployment-6c78d7875b 0 0 0 21m
pc-deployment-858db84f89 3 3 3 34m