Kubernetes YAML 详解之工作负载一(ReplicaSet 和 Deployment)
·
一、ReplicaSet YAML
副本控制器,简写
rs。
作用:使定义的 pod 副本数量始终维持在设置的值。
官方推荐使用Deployment代替ReplicaSet。
-
查看
ReplicaSet相关 yaml 字段说明,与pod相同
kubectl explain replicaset
-
ReplicaSet 的
replicaset.meatdata字段,与pod相同
kubectl explain replicaset.meatdata
kubectl explain replicaset.spec
| 字段 | 值类型 | 说明 |
|---|---|---|
minReadySeconds |
integer |
过多长时间进行后续操作,默认 0 |
replicas |
integer |
启动的副本数量 |
* selector |
Object |
标签选择器,选择关联的 template,根据 template.metadata.labels 匹配 匹配方式: matchExpressions:表达式方式匹配 pod,参考上面示例有很多matchLabels:标签 pod 匹配 map[string]string 这个类型 |
* template |
Object |
创建资源时使用的模板replicaset.spec.template.metadata 内容与 pod.metadata 相同。replicaset.spec.template.spec 内容与 pod.spce 相同 |
示例: 创建 ReplicaSet 类型资源
apiVersion: apps/v1
kind: ReplicaSet # 定义 ReplicaSet
metadata:
name: replicaset-test
namespace: default
labels:
app: replicaset-test
spec:
replicas: 3 # 定义副本数
selector: # 定义使用的资源模板
matchLabels: # 按标签匹配
app: mastch-labels # 匹配资源模板标签 key 和 value,就是下面的 labels
template: # 定义模板
metadata:
labels: # 定义模板标签
app: mastch-labels
spec:
containers: # 定义模板容器的规则,和 pod 相同
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
二、Deployment YAML
无状态服务,管理的 pod 的 ip、名字、启动顺序都是随机的。个体对整体没有影响。如:nginx
Deployment 会创建一个 ReplicaSet 来管理下面的 pod。
每次修改 Deployment 都会创建一个新的 ReplicaSet。新旧 ReplicaSet 就是各种版本。
Deployment 比 ReplicaSet 多滚动升级、回滚、扩容、缩容、暂停和继续等功能。
-
查看
Deployment相关 yaml 字段说明,与pod相同
kubectl explain deployment
-
Deployment 的
deployment.meatdata字段,与pod相同
kubectl explain deployment.meatdata
kubectl explain deployment.spec
| 字段 | 值类型 | 说明 |
|---|---|---|
minReadySeconds |
integer |
过多长时间进行后续操作,默认 0 |
paused |
boolean |
暂停,部署资源时可以先设置暂停,然后在继续 |
progressDeadlineSeconds |
integer |
|
replicas |
integer |
启动的副本数量 |
revisionHistoryLimit |
integer |
保留的历史版本数量,默认 10 |
* selector |
Object |
选择关联的 template,根据 template.metadata.labels 匹配 匹配方式: matchExpressions:表达式方式匹配 pod,参考上面示例有很多matchLabels:标签 pod 匹配 map[string]string 这个类型 |
strategy |
Object |
更新策略rollingUpdate: 说明看 \color{red}{说明看} 说明看: D e p l o y m e n t 的 d e p l o y m e n t . s p e c . s t r a t e g y . r o l l i n g U p d a t e 字段,更新策略 \color{blue}{Deployment 的 deployment.spec.strategy.rollingUpdate 字段,更新策略} Deployment的deployment.spec.strategy.rollingUpdate字段,更新策略type: string,参数如下: Recreate: 创建新资源前,先把旧资源删除。风险超高RollingUpdate: 默认,根据 rollingUpdate 定义的策略进行 |
* template |
Object |
创建资源时使用的模板deployment.spec.template.metadata 内容与 pod.metadata 相同。 deployment.spec.template.spec 内容和与 pod.spce 相同 |
kubectl explain deployment.spec.strategy.rollingUpdate
| 字段 | 值类型 | 说明 |
|---|---|---|
maxSurge |
string |
更新资源过程中最多可以有几个资源;可以是数字或百分比如:创建 deployment 时定义 replicas 为 3,maxSurge 定义为 2,则最多副本数为 5 |
maxUnavailable |
string |
最多有几个不可用,也可以说必须存活的副本数; 如:创建 deployment 时定义 replicas 为 3,maxSurge 定义为 2,则最多副本数为 5,maxUnavailable 定义为 2,则更新过程中必须有 5 - 2 个副本存活 |
注意 \color{red}{注意} 注意:maxSurge 和 maxUnavailable 不能同时为 0 |
示例: maxSurge 和 maxUnavailabel 计算方式
spce:
replicas: 5
stratedy:
rollingUpdate:
maxSurge: 25% # 5 * 0.25 = 1.25 点几都进位 1 也就是 5 + 2 = 7; 就是说更新最多有 7 个副本
maxUnavailabel: 25% # 5 * 0.25 = 1.25 点几都退位 1 也就是 5 - 1 = 4; 就是说更新最少有 4 个存活
示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2 # 定义副本数
selector: # 定义标签选择器
matchLabels: # 定义标签筛选
app: nginx
version: v1
strategy: # 定义更新策略
rollingUpdate: # 定义滚动更新
maxSurge: 1 # 最多可以有 2 + 1 个副本
maxUnavailable: 1 # 最少存活 2 -1 个副本
type: RollingUpdate # 默认就是这个 可以不写
template:
metadata:
labels: # 定义 pod 标签
app: nginx
version: v1
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
更多推荐
所有评论(0)