Pod控制器详解
文章目录
一、pod简介
在kubernetes中,按照pod的创建方式可以将其分为两类:
自主式pod: kubernetes直接创建出来的pod,这种podi除后就没有了,也不会重建
控制器创建的pod:通过控制器创建的pod,这种pod删除了之后还会自动重建
什么是Pod控制器
Pod控制器是管理pod的中间层,使用了pod控制器之后,我们只需要告诉pod控制器,想要多少个什么样的pod就可以了。它就会创建出满足条件的pod并确保每—个pod处于用户期望的状态,如果pod在运行中出现故障,控制器会基于指定策略重启动或者重建pod。
kubernetes中,有很多类型的pod控制器,每种都有自己的适合的场景,常见的有下面这些:
- ReplicationController:比较原始的pod控制器,已经被废弃,由Replicaset替代
- Replicaset:保证指定数量的pod运行,并支持pod数量变更,镜像版本变更
- Deployment:通过控制Replicaset来控制pod,并支持滚动升级、版本回退
- Horizontal Pod Autoscaler:可以根据集群负载自动调整Pod的数量,实现削峰填谷
- Daemonset:在集群中的指定Node上都运行一个副本,一般用于守护进程类的任务
- Job:它创建出来的pod只要完成任务就立即退出,用于执行一次性任务
- Cronjob:它创建的pod会周期性的执行,用于执行周期性任务
- Statefulset:用于管理有状态应用
二、 Replicaset(rs)
Replicaset的主要作用是保证一定数量的pod能够正常运行,它会持续监听这些pod的运行状态, 一旦pod发生 故障,就会重启或重建。同时它还支持对pod数量的扩縮容和版本镜像的升级。
配置文件编写
pc-replicaset.yml
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:1.17.1
#创建rs
kubectl create -f pc-replicaset.yml
#查看rs
kubectl get rs pc-replicaset -n dev -o wide
扩缩容
方法一:edit
方法二:scale
镜像版本的升降级
方法一:edit
也是可以直接使用edit命令编辑,修改镜像包的版本号 后保存就可以了
方法二:set
kubectl set image rs pc-replicaset nginx=nginx:1.17.2 -n dev
# 注意第一个nginx是容器名
删除Replicaset
方法一:会先将replicas数量调整为0,然后删除pod,最后再删除Replicaset
kubectl delete rs pc-replicaset -n dev
方法二:首选
kubectl delete -f pc-replicaset.yml
三、Deployment(Deploy)
为了更好的解决服务编排的问题,kubernetes在V1.2版本开始,引l入了Deployment控制器。值得一提的是, 这种控制器并不直接管理pod,而是通过管理Replicaset来间接管理Pod,即:Deployment管理ReplicaSet, Replicaset管理Pod。 所以DeploymentttReplicaset功能更加强大。
Deployment主要功能有下面几个:
• 支持Replicaset的所有功能
• 支持发布的停止、继续
• 支持版本滚动更新和版本回退
Deployment的资源清单文件:
编写yml文件,创建deployment
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
创建deploymet,查看deploy