- k8s 中 Pod 的控制器
- 前言
- Replication Controller
- ReplicaSet
- Deployment
- 更新 Deployment
- 回滚 deployment
- StatefulSet
- DaemonSet
- Job 和 CronJob
- 总结
- 参考
Pod 控制器由 master 的
kube-controller-manager
组件提供 , 常见的此类控制器有 Replication Controller、ReplicaSet、Deployment、DaemonSet、StatefulSet、Job
和 CronJob 等,它们分别以不同的方式管理 Pod 资源对象 。Replication ControllerRC 是 k8s 集群中最早的保证 Pod 高可用的 API 对象 。它的作用就是保证集群中有指定数目的 pod 运行 。
当前运行的 pod 数目少于指定的数目,RC 就会启动新的 pod 副本,保证运行 pod 数量等于指定数目 。
当前运行的 pod 数目大于指定的数目,RC 就会杀死多余的 pod 副本 。
直接上栗子
cat <<EOF >./pod-rc.yamlapiVersion: v1kind: ReplicationControllermetadata:name: nginxspec:replicas: 3selector:app: nginxtemplate:metadata:name: nginxlabels:app: nginxspec:containers:- name: nginximage: nginxports:- containerPort: 80EOF
在新版的 Kubernetes 中建议使用 ReplicaSet (RS)来取代 ReplicationController 。ReplicaSet 跟 ReplicationController 没有本质的不同,只是名字不一样,但 ReplicaSet 支持集合式 selector 。
关于 ReplicationController 这里也不展开讨论了 , 主要看下 ReplicaSet 。
ReplicaSetRS 是新一代 RC,提供同样的高可用能力,区别主要在于 RS 后来居上 , 能支持支持集合式 selector 。
副本集对象一般不单独使用,而是作为 Deployment 的理想状态参数使用 。
下面看下 Deployment 中是如何使用 ReplicaSet 的 。
Deployment一个 Deployment 为 Pod 和 ReplicaSet 提供声明式的更新能力,每一个 Deployment 都对应集群中的一次部署 。
一般使用 Deployment 来管理 RS , 可以用来创建一个新的服务 , 更新一个新的服务,也可以用来滚动升级一个服务 。
滚动升级一个服务,滚动升级一个服务 , 实际是创建一个新的 RS,然后逐渐将新 RS 中副本数增加到理想状态,将旧 RS 中的副本数减小到 0 的复合操作;这样一个复合操作用一个 RS 是不太好描述的,所以用一个更通用的 Deployment 来描述 。
举个栗子
cat <<EOF >./nginx-deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: nginx-deploymentlabels:app: nginxspec:replicas: 3selector:matchLabels: # 这里定义需要管理的 pod,通过 Pod 的标签进行匹配app: nginxtemplate:metadata:labels: # 运行的 pod 的标签app: nginxspec:containers: # pod 中运行的容器- name: nginximage: nginx:1.14.2ports:- containerPort: 80EOF
部署$ kubectl apply -f nginx-deployment.yaml -n study-k8sdeployment.apps/nginx-deployment created$ study-k8s kubectl describe deployment nginx-deployment -n study-k8sName:nginx-deploymentNamespace:study-k8sCreationTimestamp:Mon, 26 Sep 2022 09:06:16 +0800Labels:app=nginxAnnotations:deployment.kubernetes.io/revision: 1Selector:app=nginxReplicas:3 desired | 3 updated | 3 total | 1 available | 2 unavailableStrategyType:RollingUpdate # 默认是滚动更新MinReadySeconds:0RollingUpdateStrategy:25% max unavailable, 25% max surge# 滚动更新的策略,最大 25% 不可用,最大 25% 增加Pod Template:Labels:app=nginxContainers:nginx:Image:nginx:1.14.2Port:80/TCPHost Port:0/TCPEnvironment:<none>Mounts:<none>Volumes:<none>Conditions:TypeStatusReason----------------AvailableFalseMinimumReplicasUnavailableProgressingTrueReplicaSetUpdatedOldReplicaSets:<none>NewReplicaSet:nginx-deployment-66b6c48dd5 (3/3 replicas created)Events:TypeReasonAgeFromMessage-------------------------NormalScalingReplicaSet3sdeployment-controllerScaled up replica set nginx-deployment-66b6c48dd5 to 3
可以看到 Deployment 中默认的更新方式滚动更新,并且默认的滚动更新的策略是 最大 25% 不可用,最大 25% 增加 。更新 Deployment1、直接更新
$ kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.20.1 -n study-k8s# 或者$ kubectl set image deployment/nginx-deployment nginx=nginx:1.20.1 -n study-k8s
【k8s 中 Pod 的控制器】2、对 Deployment 执行 edit 操作$ kubectl get deployment -n study-k8sNAMEREADYUP-TO-DATEAVAILABLEAGEnginx-deployment3/33318m$ kubectl edit deployment -n study-k8s# 修改对应的镜像版本,保存即可spec:containers:- image: nginx:1.20.3imagePullPolicy: IfNotPresentname: nginx
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 世界银行的两条贫困线 世界贫困线标准
- 内增高鞋十大品牌是哪些呢。 中国鞋垫十大排名
- mapboxgl加载tiff
- 是否还能在我怀中叫我一声老公 叫我一声老公
- 中国移动大众卡最新收费标准 中国移动资费一览表
- 高铁行驶途中李易峰广告被紧急撤换的简单介绍
- 上 git-secret:在 Git 存储库中加密和存储密钥
- 在王者荣耀游戏中,怎么破解上官婉儿的连招
- 目前世界上肥胖人口是多少 中国肥胖人口数据
- 中国阶层等级划分 中国收入阶层划分图