一、ReplicaSet YAML

副本控制器,简写 rs
作用:使定义的 pod 副本数量始终维持在设置的值。
官方推荐使用 Deployment 代替 ReplicaSet

kubectl explain replicaset
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 多滚动升级、回滚、扩容、缩容、暂停和继续等功能。

kubectl explain deployment
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: 说明看 \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 字段,更新策略} Deploymentdeployment.spec.strategy.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 时定义 replicas3maxSurge 定义为 2,则最多副本数为 5
maxUnavailable string 最多有几个不可用,也可以说必须存活的副本数;

如:创建 deployment 时定义 replicas3maxSurge 定义为 2,则最多副本数为 5maxUnavailable 定义为 2,则更新过程中必须有 5 - 2 个副本存活
注意 \color{red}{注意} 注意maxSurgemaxUnavailable 不能同时为 0

示例: maxSurgemaxUnavailabel 计算方式

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

更多推荐