美文网首页
Kubernetes YAML 详解之工作负载一(Replica

Kubernetes YAML 详解之工作负载一(Replica

作者: 河码匠 | 来源:发表于2023-02-19 09:09 被阅读0次

    一、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}{说明看}\color{blue}{Deployment 的 deployment.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
    

    相关文章

      网友评论

          本文标题:Kubernetes YAML 详解之工作负载一(Replica

          本文链接:https://www.haomeiwen.com/subject/nqnmkdtx.html