一、ReplicaSet YAML
副本控制器,简写
rs
。
作用:使定义的 pod 副本数量始终维持在设置的值。
官方推荐使用Deployment
代替ReplicaSet
。
-
查看
ReplicaSet
相关 yaml 字段说明,与pod
相同
kubectl explain replicaset
-
ReplicaSet 的
replicaset.meatdata
字段,与pod
相同
kubectl explain replicaset.meatdata
-
ReplicaSet 的
replicaset.spec
字段
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
-
Deployment 的
deployment.spec
字段
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 ::type : string ,参数如下: Recreate : 创建新资源前,先把旧资源删除。风险超高RollingUpdate : 默认,根据 rollingUpdate 定义的策略进行 |
* template |
Object |
创建资源时使用的模板deployment.spec.template.metadata 内容与 pod.metadata 相同。 deployment.spec.template.spec 内容和与 pod.spce 相同
|
-
Deployment 的
deployment.spec.strategy.rollingUpdate
字段,更新策略
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 个副本存活 |
: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
网友评论