捕鱼大亨网络版

A 捕鱼大亨网络版方式 提供声明性更新 豆荚副本集.

你描述一个 理想状态 在捕鱼大亨网络版中,以及捕鱼大亨网络版 控制者 以受控速率将实际状态更改为所需状态。您可以定义捕鱼大亨网络版以创建新的副本集,或删除现有的捕鱼大亨网络版并在新的捕鱼大亨网络版中采用其所有资源。

注意: 不要管理捕鱼大亨网络版拥有的副本集。如果您的用例未在下面介绍,请考虑在Kubernetes主存储库中打开问题。

用例

以下是捕鱼大亨网络版的典型用例:

创建捕鱼大亨网络版

The following is an example of a 捕鱼大亨网络版方式. It creates a 复制集 to bring up three nginx 豆荚:

apiVersion: apps/v1
kind: 捕鱼大亨网络版方式
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  复制品: 3
  选择器:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

在此示例中:

  • A 捕鱼大亨网络版方式 named nginx-deployment is created, indicated by the .metadata.name field.

  • The 捕鱼大亨网络版方式 creates three replicated 豆荚, indicated by the .spec.replicas field.

  • The .spec.selector field defines how the 捕鱼大亨网络版方式 finds which 豆荚 to manage. In this case, you simply select a label that is defined in the 吊舱模板 (app: nginx)。 但是,可能会有更复杂的选择规则, 只要Pod模板本身满足规则。

    注意: The .spec.selector.matchLabels field is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, 其键字段为“键”的运算符为“输入”,而values数组仅包含“ value”。 All of the requirements, from both matchLabelsmatchExpressions, must be satisfied in 要么der to match.
  • The template field contains the following sub-fields:

    • The 豆荚 are labeled app: nginxusing the .metadata.labels field.
    • The 吊舱模板's specification, 要么 .template.spec field, indicates that the 豆荚 run one container, nginx, which runs the nginx Docker中心 图像版本为1.14.2。
    • Create one container 和 name it nginx using the .spec.template.spec.containers[0].name field.

在开始之前,请确保您的Kubernetes集群已启动并正在运行。 请按照以下给出的步骤创建上述捕鱼大亨网络版:

  1. 通过运行以下命令来创建捕鱼大亨网络版:

    Kubectl apply -f //k8s.io/examples/controllers/nginx-deployment.yaml
    
注意: You can specify the --record flag to write the command executed in the resource annotation kubernetes.io/change-cause. 记录的更改对于将来的自省很有用。例如,查看在每个Deployment版本中执行的命令。
  1. Run Kubectl get deployments to check if the 捕鱼大亨网络版方式 was created.

    如果仍在创建Deployment,则输出类似于以下内容:

    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   0/3     0            0           1s
    

    当您检查群集中的捕鱼大亨网络版时,将显示以下字段:

    • NAME 列出名称空间中捕鱼大亨网络版的名称。
    • READY 显示您的用户可以使用多少个应用程序副本。它遵循准备/期望的模式。
    • UP-TO-DATE 显示已更新以达到所需状态的副本数。
    • AVAILABLE 显示您的用户可以使用多少个应用程序副本。
    • AGE 显示应用程序已运行的时间。

    没有 tice how the number of desired 复制品 is 3 according to .spec.replicas field.

  2. To see the 捕鱼大亨网络版方式 rollout status, run Kubectl rollout status deployment/nginx-deployment.

    输出类似于:

    Waiting for rollout to finish: 2 out of 3 new 复制品 have been updated...
    deployment "nginx-deployment" successfully rolled out
    
  3. Run the Kubectl get deployments again a few seconds later. 输出类似于以下内容:

    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   3/3     3            3           18s
    

    请注意,Deployment已创建了所有三个副本,并且所有副本都是最新的(它们包含最新的Pod模板)并且可用。

  4. To see the 复制集 (rs) created by the 捕鱼大亨网络版方式, run Kubectl get rs. 输出类似于以下内容:

    NAME                          DESIRED   CURRENT   READY   AGE
    nginx-deployment-75675f5897   3         3         3       18s
    

    复制集输出显示以下字段:

    • NAME 列出名称空间中ReplicaSet的名称。
    • DESIRED 显示所需的数量 复制品 在创建展开时定义的应用程序的名称。这是 理想状态.
    • CURRENT 显示当前正在运行多少个副本。
    • READY 显示您的用户可以使用多少个应用程序副本。
    • AGE 显示应用程序已运行的时间。

    没有 tice that the name of the 复制集 is always formatted as [DEPLOYMENT-NAME]-[RANDOM-STRING]. The random string is randomly generated 和 uses the pod-template-hash as a seed.

  5. To see the labels automatically generated for each 荚, run Kubectl get pods --show-labels. 输出类似于:

    NAME                                READY     STATUS    RESTARTS   AGE       LABELS
    nginx-deployment-75675f5897-7ci7o   1/1       Running   0          18s       app=nginx,pod-template-hash=3123191453
    nginx-deployment-75675f5897-kzszj   1/1       Running   0          18s       app=nginx,pod-template-hash=3123191453
    nginx-deployment-75675f5897-qqcnn   1/1       Running   0          18s       app=nginx,pod-template-hash=3123191453
    

    The created 复制集 ensures that there are three nginx 豆荚.

注意:

您必须在Deployment中指定适当的选择器和Pod模板标签 (in this case, app: nginx)。

不要将标签或选择器与其他控制器(包括其他Deployment和StatefulSet)重叠。 Kubernetes不会阻止您重叠,并且如果多个控制器具有重叠的选择器,则这些控制器可能会发生冲突并发生意外行为。

荚模板哈希标签

警告: 请勿更改此标签。

The pod-template-hash label is added by the 捕鱼大亨网络版方式 controller to every 复制集 that a 捕鱼大亨网络版方式 creates 要么 adopts.

This label ensures that child 副本集 of a 捕鱼大亨网络版方式 do not overlap. It is generated by hashing the 荚Template of the 复制集 和 using the resulting hash as the label value that is added to the 复制集 选择器, 吊舱模板 labels, 以及ReplicaSet可能具有的任何现有Pod中。

更新捕鱼大亨网络版

注意: A 捕鱼大亨网络版方式's rollout is triggered if 和 only if the 捕鱼大亨网络版方式's 吊舱模板 (that is, .spec.template) 更改,例如,如果模板的标签或容器图像已更新。其他更新(例如扩展Deployment)不会触发捕鱼大亨网络版。

请按照以下步骤更新您的捕鱼大亨网络版:

  1. Let's update the nginx 豆荚 to use the nginx:1.16.1 image instead of the nginx:1.14.2 image.

    Kubectl --record deployment.apps/nginx-deployment set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1
    

    或简单地使用以下命令:

    Kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 --record
    

    输出类似于以下内容:

    deployment.apps/nginx-deployment image updated
    

    Alternatively, you can edit the 捕鱼大亨网络版方式 和 change .spec.template.spec.containers[0].image from nginx:1.14.2 to nginx:1.16.1:

    Kubectl edit deployment.v1.apps/nginx-deployment
    

    输出类似于以下内容:

    deployment.apps/nginx-deployment edited
    
  2. 要查看捕鱼大亨网络版状态,请运行:

    Kubectl rollout status deployment/nginx-deployment
    

    输出类似于以下内容:

    Waiting for rollout to finish: 2 out of 3 new 复制品 have been updated...
    

    要么

    deployment "nginx-deployment" successfully rolled out
    

获取有关更新的捕鱼大亨网络版的更多详细信息:

  • After the rollout succeeds, you can view the 捕鱼大亨网络版方式 by running Kubectl get deployments. 输出类似于以下内容:

    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   3/3     3            3           36s
    
  • Run Kubectl get rs to see that the 捕鱼大亨网络版方式 updated the 豆荚 by creating a new 复制集 和 scaling it 最多3个副本,以及将旧的ReplicaSet缩小为0个副本。

    Kubectl get rs
    

    输出类似于以下内容:

    NAME                          DESIRED   CURRENT   READY   AGE
    nginx-deployment-1564180365   3         3         3       6s
    nginx-deployment-2035384211   0         0         0       36s
    
  • Running get pods should now show only the new 豆荚:

    Kubectl get pods
    

    输出类似于以下内容:

    NAME                                READY     STATUS    RESTARTS   AGE
    nginx-deployment-1564180365-khku8   1/1       Running   0          14s
    nginx-deployment-1564180365-nacti   1/1       Running   0          14s
    nginx-deployment-1564180365-z9gth   1/1       Running   0          14s
    

    下次您要更新这些Pod时,只需再次更新Deployment的Pod模板。

    捕鱼大亨网络版可确保仅在更新某些Pod时将它们关闭。默认, 这样可以确保至少有75%的所需Pod可用(最大不超过25%)。

    捕鱼大亨网络版还可以确保仅在所需数量的Pod之上创建一定数量的Pod。 默认情况下,它可以确保最多容纳期望数量的Pod的125%(最大浪涌为25%)。

    例如,如果您仔细查看上述捕鱼大亨网络版,您将看到它首先创建了一个新的Pod, 然后删除一些旧的Pod,然后创建新的Pod。直到足够数量的 新的Pod出现了,并且直到足够数量的Old 荚被杀死后才创建新的Pod。 确保至少有2个Pod可用,最多总共有4个Pod可用。

  • 获取有关捕鱼大亨网络版的详细信息:

    Kubectl describe deployments
    

    输出类似于以下内容:

    Name:                   nginx-deployment
    Namespace:              default
    CreationTimestamp:      Thu, 30 没有 v 2017 10:56:25 +0000
    Labels:                 app=nginx
    Annotations:            deployment.kubernetes.io/revision=2
    Selector:               app=nginx
    Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
    StrategyType:           RollingUpdate
    MinReadySeconds:        0
    RollingUpdateStrategy:  25% max unavailable, 25% max surge
    Pod Template:
      Labels:  app=nginx
       货柜:
        nginx:
          Image:        nginx:1.16.1
          Port:         80/TCP
          Environment:  <none>
          Mounts:       <none>
        卷数:        <none>
      Conditions:
        Type           Status  Reason
        ----           ------  ------
        Available      True    MinimumReplicasAvailable
        Progressing    True    NewReplicaSetAvailable
      OldReplicaSets:  <none>
      NewReplicaSet:   nginx-deployment-1564180365 (3/3 复制品 created)
      Events:
        Type    Reason             Age   From                   Message
        ----    ------             ----  ----                   -------
        没有 rmal  ScalingReplicaSet  2m    deployment-controller  Scaled up replica set nginx-deployment-2035384211 to 3
        没有 rmal  ScalingReplicaSet  24s   deployment-controller  Scaled up replica set nginx-deployment-1564180365 to 1
        没有 rmal  ScalingReplicaSet  22s   deployment-controller  Scaled down replica set nginx-deployment-2035384211 to 2
        没有 rmal  ScalingReplicaSet  22s   deployment-controller  Scaled up replica set nginx-deployment-1564180365 to 2
        没有 rmal  ScalingReplicaSet  19s   deployment-controller  Scaled down replica set nginx-deployment-2035384211 to 1
        没有 rmal  ScalingReplicaSet  19s   deployment-controller  Scaled up replica set nginx-deployment-1564180365 to 3
        没有 rmal  ScalingReplicaSet  14s   deployment-controller  Scaled down replica set nginx-deployment-2035384211 to 0
    

    在这里您会看到,首次创建展开时,它创建了一个ReplicaSet(nginx-deployment-2035384211) 并将其直接扩展到3个副本。更新捕鱼大亨网络版时,它创建了一个新的副本集。 (nginx-deployment-1564180365)并将其缩放至1,然后将旧的ReplicaSet缩放至2,因此 至少有2个Pod可用,并且在任何时候最多创建4个Pod。然后,它继续向上和向下扩展 新的和旧的ReplicaSet,具有相同的滚动更新策略。最后,您将有3个可用副本 在新的ReplicaSet中,而旧的ReplicaSet则缩小为0。

过渡(又名进行中的多个更新)

每次捕鱼大亨网络版控制器观察到新的捕鱼大亨网络版时,都会创建一个ReplicaSet来启动 所需的豆荚。如果捕鱼大亨网络版已更新,则控制其标签的Pod的现有ReplicaSet match .spec.selector but whose template does not match .spec.template are scaled down. Eventually, the new ReplicaSet is scaled to .spec.replicas 和 all old 副本集 is scaled to 0.

如果在进行现有捕鱼大亨网络版时更新捕鱼大亨网络版,则捕鱼大亨网络版将创建一个新的副本集。 按照更新并开始扩大规模,然后将其扩展到以前扩大的ReplicaSet -将其添加到其旧的副本集列表中,并开始按比例缩小比例。

For example, suppose you create a 捕鱼大亨网络版方式 to create 5 复制品 of nginx:1.14.2, but then update the 捕鱼大亨网络版方式 to create 5 复制品 of nginx:1.16.1, when only 3 replicas of nginx:1.14.2 had been created. In that case, the 捕鱼大亨网络版方式 immediately starts killing the 3 nginx:1.14.2 豆荚 that it had created, 和 starts creating nginx:1.16.1 豆荚. It does not wait for the 5 复制品 of nginx:1.14.2 to be created 在改变路线之前。

标签选择器更新

通常不建议更新标签选择器,建议您预先计划选择器。 无论如何,如果您需要执行标签选择器更新,请格外小心,并确保已掌握 所有的含义。

注意: In API version apps/v1, a 捕鱼大亨网络版方式's 标签选择器 is immutable after it gets created.
  • 选择器的添加也需要在Deployment规范中的Pod模板标签也使用新标签进行更新, 否则返回验证错误。此更改是非重叠的,这意味着新选择器会执行 不选择使用旧选择器创建的ReplicaSets和Pod,导致孤立所有旧ReplicaSets和 创建一个新的ReplicaSet。
  • 选择器更新会更改选择器键中的现有值-产生与添加相同的行为。
  • 选择器的删除会从“捕鱼大亨网络版”选择器中删除现有的密钥-不需要对 Pod模板标签。现有的副本集不会被孤立,也不会创建新的副本集,但是请注意, 任何现有的Pod和ReplicaSets中仍然存在删除的标签。

回滚捕鱼大亨网络版

有时,您可能需要回滚捕鱼大亨网络版;例如,当捕鱼大亨网络版不稳定时(例如崩溃循环)。 默认情况下,所有“捕鱼大亨网络版”的推出历史记录都保留在系统中,以便您可以随时回滚 (您可以通过修改修订历史记录限制来更改此设置)。

注意: 触发捕鱼大亨网络版的捕鱼大亨网络版时,将创建捕鱼大亨网络版的修订版。这意味着 new revision is created if 和 only if the 捕鱼大亨网络版方式's 吊舱模板 (.spec.template) is changed, 例如,如果您更新模板的标签或容器图像。其他更新,例如扩展捕鱼大亨网络版, 不要创建Deployment版本,以便您可以同时进行手动或自动扩展。 这意味着当您回滚到早期版本时,只有Deployment的Pod模板部分是 rolled back.
  • Suppose that you made a typo 而 updating the 捕鱼大亨网络版方式, by putting the image name as nginx:1.161 instead of nginx:1.16.1:

    Kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.161 --record=true
    

    输出类似于以下内容:

    deployment.apps/nginx-deployment image updated
    
  • 推出卡住了。您可以通过检查展示状态来验证它:

    Kubectl rollout status deployment/nginx-deployment
    

    输出类似于以下内容:

    Waiting for rollout to finish: 1 out of 3 new 复制品 have been updated...
    
  • 按Ctrl-C停止上述推出状态监视。有关卡住的推广的更多信息, 在这里阅读更多.

  • You see that the number of old 复制品 (nginx-deployment-1564180365nginx-deployment-2035384211) is 2, 和 new 复制品 (nginx-deployment-3066724191) is 1.

    Kubectl get rs
    

    输出类似于以下内容:

    NAME                          DESIRED   CURRENT   READY   AGE
    nginx-deployment-1564180365   3         3         3       25s
    nginx-deployment-2035384211   0         0         0       36s
    nginx-deployment-3066724191   1         1         0       6s
    
  • 查看创建的Pod,您会看到1个由新ReplicaSet创建的Pod卡在了图像提取循环中。

    Kubectl get pods
    

    输出类似于以下内容:

    NAME                                READY     STATUS             RESTARTS   AGE
    nginx-deployment-1564180365-70iae   1/1       Running            0          25s
    nginx-deployment-1564180365-jbqqo   1/1       Running            0          25s
    nginx-deployment-1564180365-hysrc   1/1       Running            0          25s
    nginx-deployment-3066724191-08mng   0/1       ImagePullBackOff   0          6s
    
    注意: The 捕鱼大亨网络版方式 controller stops the bad rollout automatically, 和 stops scaling up the new 复制集. This depends on the rollingUpdate parameters (maxUnavailable specifically) that you have specified. Kubernetes by default sets the value to 25%.
  • 获取捕鱼大亨网络版的描述:

    Kubectl describe deployment
    

    输出类似于以下内容:

    Name:           nginx-deployment
    Namespace:      default
    CreationTimestamp:  Tue, 15 Mar 2016 14:48:04 -0700
    Labels:         app=nginx
    Selector:       app=nginx
    Replicas:       3 desired | 1 updated | 4 total | 3 available | 1 unavailable
    StrategyType:       RollingUpdate
    MinReadySeconds:    0
    RollingUpdateStrategy:  25% max unavailable, 25% max surge
    Pod Template:
      Labels:  app=nginx
      货柜:
       nginx:
        Image:        nginx:1.161
        Port:         80/TCP
        Host Port:    0/TCP
        Environment:  <none>
        Mounts:       <none>
      卷数:        <none>
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Available      True    MinimumReplicasAvailable
      Progressing    True    复制集Updated
    OldReplicaSets:     nginx-deployment-1564180365 (3/3 复制品 created)
    NewReplicaSet:      nginx-deployment-3066724191 (1/1 复制品 created)
    Events:
      FirstSeen LastSeen    Count   From                    SubObjectPath   Type        Reason              Message
      --------- --------    -----   ----                    -------------   --------    ------              -------
      1m        1m          1       {deployment-controller }                没有 rmal      ScalingReplicaSet   Scaled up replica set nginx-deployment-2035384211 to 3
      22s       22s         1       {deployment-controller }                没有 rmal      ScalingReplicaSet   Scaled up replica set nginx-deployment-1564180365 to 1
      22s       22s         1       {deployment-controller }                没有 rmal      ScalingReplicaSet   Scaled down replica set nginx-deployment-2035384211 to 2
      22s       22s         1       {deployment-controller }                没有 rmal      ScalingReplicaSet   Scaled up replica set nginx-deployment-1564180365 to 2
      21s       21s         1       {deployment-controller }                没有 rmal      ScalingReplicaSet   Scaled down replica set nginx-deployment-2035384211 to 1
      21s       21s         1       {deployment-controller }                没有 rmal      ScalingReplicaSet   Scaled up replica set nginx-deployment-1564180365 to 3
      13s       13s         1       {deployment-controller }                没有 rmal      ScalingReplicaSet   Scaled down replica set nginx-deployment-2035384211 to 0
      13s       13s         1       {deployment-controller }                没有 rmal      ScalingReplicaSet   Scaled up replica set nginx-deployment-3066724191 to 1
    

    要解决此问题,您需要回滚到稳定的Deployment的先前版本。

检查捕鱼大亨网络版的推出历史记录

请按照以下步骤检查发布历史记录:

  1. 首先,检查此捕鱼大亨网络版的修订:

    Kubectl rollout history deployment.v1.apps/nginx-deployment
    

    输出类似于以下内容:

    deployments "nginx-deployment"
    REVISION    CHANGE-CAUSE
    1           Kubectl apply --filename=//k8s.io/examples/controllers/nginx-deployment.yaml --record=true
    2           Kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1 --record=true
    3           Kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.161 --record=true
    

    CHANGE-CAUSE is copied from the 捕鱼大亨网络版方式 annotation kubernetes.io/change-cause to its revisions upon creation. You can specify theCHANGE-CAUSE message by:

    • 注释捕鱼大亨网络版 Kubectl annotate deployment.v1.apps/nginx-deployment kubernetes.io/change-cause="image updated to 1.16.1"
    • Append the --record flag to save the Kubectl command that is making changes to the resource.
    • 手动编辑资源清单。
  2. 要查看每个修订的详细信息,请运行:

    Kubectl rollout history deployment.v1.apps/nginx-deployment --revision=2
    

    输出类似于以下内容:

    deployments "nginx-deployment" revision 2
      Labels:       app=nginx
              pod-template-hash=1159050644
      注解:  kubernetes.io/change-cause=kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1 --record=true
      货柜:
       nginx:
        Image:      nginx:1.16.1
        Port:       80/TCP
         QoS Tier:
            cpu:      BestEffort
            memory:   BestEffort
        Environment Variables:      <none>
      没有  volumes.
    

回滚到以前的修订

请按照下面给出的步骤将捕鱼大亨网络版从当前版本回滚到以前的版本2。

  1. 现在,您已决定撤消当前的推出并回滚到以前的版本:

    Kubectl rollout undo deployment.v1.apps/nginx-deployment
    

    输出类似于以下内容:

    deployment.apps/nginx-deployment rolled back
    

    Alternatively, you can rollback to a specific revision by specifying it with --to-revision:

    Kubectl rollout undo deployment.v1.apps/nginx-deployment --to-revision=2
    

    输出类似于以下内容:

    deployment.apps/nginx-deployment rolled back
    

    有关与推出相关命令的更多详细信息,请阅读 Kubectl rollout.

    The 捕鱼大亨网络版方式 is now rolled back to a previous stable revision. As you can see, a 捕鱼大亨网络版方式Rollback event 从Deployment 控制者生成用于回滚到修订版2的文件。

  2. 检查回滚是否成功并且Deployment是否按预期运行,请运行:

    Kubectl get deployment nginx-deployment
    

    输出类似于以下内容:

    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   3/3     3            3           30m
    
  3. 获取捕鱼大亨网络版的描述:

    Kubectl describe deployment nginx-deployment
    

    输出类似于以下内容:

    Name:                   nginx-deployment
    Namespace:              default
    CreationTimestamp:      Sun, 02 Sep 2018 18:17:55 -0500
    Labels:                 app=nginx
    Annotations:            deployment.kubernetes.io/revision=4
                            kubernetes.io/change-cause=kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1 --record=true
    Selector:               app=nginx
    Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
    StrategyType:           RollingUpdate
    MinReadySeconds:        0
    RollingUpdateStrategy:  25% max unavailable, 25% max surge
    Pod Template:
      Labels:  app=nginx
      货柜:
       nginx:
        Image:        nginx:1.16.1
        Port:         80/TCP
        Host Port:    0/TCP
        Environment:  <none>
        Mounts:       <none>
      卷数:        <none>
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Available      True    MinimumReplicasAvailable
      Progressing    True    NewReplicaSetAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   nginx-deployment-c4747d96c (3/3 复制品 created)
    Events:
      Type    Reason              Age   From                   Message
      ----    ------              ----  ----                   -------
      没有 rmal  ScalingReplicaSet   12m   deployment-controller  Scaled up replica set nginx-deployment-75675f5897 to 3
      没有 rmal  ScalingReplicaSet   11m   deployment-controller  Scaled up replica set nginx-deployment-c4747d96c to 1
      没有 rmal  ScalingReplicaSet   11m   deployment-controller  Scaled down replica set nginx-deployment-75675f5897 to 2
      没有 rmal  ScalingReplicaSet   11m   deployment-controller  Scaled up replica set nginx-deployment-c4747d96c to 2
      没有 rmal  ScalingReplicaSet   11m   deployment-controller  Scaled down replica set nginx-deployment-75675f5897 to 1
      没有 rmal  ScalingReplicaSet   11m   deployment-controller  Scaled up replica set nginx-deployment-c4747d96c to 3
      没有 rmal  ScalingReplicaSet   11m   deployment-controller  Scaled down replica set nginx-deployment-75675f5897 to 0
      没有 rmal  ScalingReplicaSet   11m   deployment-controller  Scaled up replica set nginx-deployment-595696685f to 1
      没有 rmal  捕鱼大亨网络版方式Rollback  15s   deployment-controller  Rolled back deployment "nginx-deployment" to revision 2
      没有 rmal  ScalingReplicaSet   15s   deployment-controller  Scaled down replica set nginx-deployment-595696685f to 0
    

扩展捕鱼大亨网络版

您可以使用以下命令扩展捕鱼大亨网络版:

Kubectl scale deployment.v1.apps/nginx-deployment --replicas=10

输出类似于以下内容:

deployment.apps/nginx-deployment scaled

假设 水平Pod自动缩放 已启用 在您的集群中,您可以为您的捕鱼大亨网络版设置自动缩放器,并选择最小和最大数量 您要基于现有Pod的CPU利用率运行的Pod。

Kubectl autoscale deployment.v1.apps/nginx-deployment --min=10 --max=15 --cpu-percent=80

输出类似于以下内容:

deployment.apps/nginx-deployment scaled

比例缩放

RollingUpdate捕鱼大亨网络版支持同时运行一个应用程序的多个版本。当你 或自动缩放器缩放在推出期间(正在进行中)的RollingUpdate捕鱼大亨网络版 或已暂停),Deployment控制器会平衡现有活动数据库中的其他副本 ReplicaSets(带有Pod的ReplicaSets)以减轻风险。这就是所谓的 比例缩放.

例如,您正在运行具有10个副本的Deployment, maxSurge= 3,并且 maxUnavailable=2.

  • 确保捕鱼大亨网络版中的10个副本正在运行。

    Kubectl get deploy
    

    输出类似于以下内容:

    NAME                 DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment     10        10        10           10          50s
    
  • 您将更新到一个刚从群集内部无法解析的新映像。

    Kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:sometag
    

    输出类似于以下内容:

    deployment.apps/nginx-deployment image updated
    
  • 映像更新使用ReplicaSet nginx-deployment-1989198191开始新的发布,但由于 maxUnavailable 您上面提到的要求。查看推出状态:

    Kubectl get rs
    
    输出类似于以下内容:
    
    NAME                          DESIRED   CURRENT   READY     AGE
    nginx-deployment-1989198191   5         5         0         9s
    nginx-deployment-618515232    8         8         8         1m
    
  • 然后出现了一个新的扩展请求。自动缩放器会递增Deployment副本 到15.捕鱼大亨网络版控制器需要决定将这5个新副本添加到何处。如果你不使用 按比例缩放,所有5个都将添加到新的ReplicaSet中。通过比例缩放,您可以 将其他副本分布在所有副本集上。更大的比例转到带有 大多数副本和比例较低的副本将转到副本较少的副本集。任何剩余的都将添加到 具有最多副本的ReplicaSet。副本数为零的副本集不会按比例放大。

在上面的示例中,将3个副本添加到旧的ReplicaSet中,将2个副本添加到旧的ReplicaSet中。 新的ReplicaSet。捕鱼大亨网络版过程最终应将所有副本移至新的ReplicaSet,假设 新副本变得健康。要确认这一点,请运行:

Kubectl get deploy

输出类似于以下内容:

NAME                 DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment     15        18        7            8           7m

推出状态确认副本如何添加到每个副本集。

Kubectl get rs

输出类似于以下内容:

NAME                          DESIRED   CURRENT   READY     AGE
nginx-deployment-1989198191   7         7         0         7m
nginx-deployment-618515232    11        11        11        7m

暂停和恢复捕鱼大亨网络版

您可以在触发一个或多个更新之前暂停捕鱼大亨网络版,然后再恢复它。这使您能够 在暂停和恢复之间应用多个修复程序,而不会触发不必要的捕鱼大亨网络版。

  • 例如,对于刚刚创建的捕鱼大亨网络版: 获取捕鱼大亨网络版详细信息:

    Kubectl get deploy
    

    输出类似于以下内容:

    NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    nginx     3         3         3            3           1m
    

    获取推广状态:

    Kubectl get rs
    

    输出类似于以下内容:

    NAME               DESIRED   CURRENT   READY     AGE
    nginx-2142116321   3         3         3         1m
    
  • 通过运行以下命令来暂停:

    Kubectl rollout pause deployment.v1.apps/nginx-deployment
    

    输出类似于以下内容:

    deployment.apps/nginx-deployment paused
    
  • 然后更新捕鱼大亨网络版的映像:

    Kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1
    

    输出类似于以下内容:

    deployment.apps/nginx-deployment image updated
    
  • 请注意,没有新的捕鱼大亨网络版开始:

    Kubectl rollout history deployment.v1.apps/nginx-deployment
    

    输出类似于以下内容:

    deployments "nginx"
    REVISION  CHANGE-CAUSE
    1   <none>
    
  • 获取捕鱼大亨网络版状态,以确保成功更新捕鱼大亨网络版:

    Kubectl get rs
    

    输出类似于以下内容:

    NAME               DESIRED   CURRENT   READY     AGE
    nginx-2142116321   3         3         3         2m
    
  • 您可以根据需要进行任意数量的更新,例如,更新将使用的资源:

    Kubectl set resources deployment.v1.apps/nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi
    

    输出类似于以下内容:

    deployment.apps/nginx-deployment resource requirements updated
    

    捕鱼大亨网络版在暂停之前的初始状态将继续其功能,但是对 只要暂停捕鱼大亨网络版,捕鱼大亨网络版将不会有任何效果。

  • 最终,恢复捕鱼大亨网络版并观察新的ReplicaSet以及所有新的更新:

    Kubectl rollout resume deployment.v1.apps/nginx-deployment
    

    输出类似于以下内容:

    deployment.apps/nginx-deployment resumed
    
  • 观察推广的状态,直到完成为止。

    Kubectl get rs -w
    

    输出类似于以下内容:

    NAME               DESIRED   CURRENT   READY     AGE
    nginx-2142116321   2         2         2         2m
    nginx-3926361531   2         2         0         6s
    nginx-3926361531   2         2         1         18s
    nginx-2142116321   1         2         2         2m
    nginx-2142116321   1         2         2         2m
    nginx-3926361531   3         2         1         18s
    nginx-3926361531   3         2         1         18s
    nginx-2142116321   1         1         1         2m
    nginx-3926361531   3         3         1         18s
    nginx-3926361531   3         3         2         19s
    nginx-2142116321   0         1         1         2m
    nginx-2142116321   0         1         1         2m
    nginx-2142116321   0         0         0         2m
    nginx-3926361531   3         3         3         20s
    
  • 获取最新发布的状态:

    Kubectl get rs
    

    输出类似于以下内容:

    NAME               DESIRED   CURRENT   READY     AGE
    nginx-2142116321   0         0         0         2m
    nginx-3926361531   3         3         3         28s
    
注意: 您不能回滚已暂停的捕鱼大亨网络版,直到您恢复它为止。

捕鱼大亨网络版状态

捕鱼大亨网络版在其生命周期中会进入各种状态。有可能 进步的 而 推出新的ReplicaSet,可以 完成,或者可以 未能进步.

进行中的捕鱼大亨网络版

Kubernetes将捕鱼大亨网络版标记为 进步的 当执行以下任务之一时:

  • 捕鱼大亨网络版将创建一个新的ReplicaSet。
  • 捕鱼大亨网络版正在扩展其最新的ReplicaSet。
  • 捕鱼大亨网络版正在缩减其较旧的ReplicaSet。
  • 新Pod已准备就绪或可用(至少准备就绪) MinReadySeconds)。

You can monitor the progress for a 捕鱼大亨网络版方式 by using Kubectl rollout status.

完成捕鱼大亨网络版

Kubernetes将捕鱼大亨网络版标记为 完成 具有以下特征时:

  • 与Deployment关联的所有副本已更新为您指定的最新版本,即任何 您请求的更新已完成。
  • 与捕鱼大亨网络版关联的所有副本均可用。
  • 没有捕鱼大亨网络版的旧副本正在运行。

You can check if a 捕鱼大亨网络版方式 has 完成d by using Kubectl rollout status. If the rollout 完成d successfully, Kubectl rollout status returns a zero exit code.

Kubectl rollout status deployment/nginx-deployment

输出类似于以下内容:

Waiting for rollout to finish: 2 of 3 updated 复制品 are available...
deployment "nginx-deployment" successfully rolled out

和 the exit status from Kubectl rollout is 0 (success):

echo $?
0

捕鱼大亨网络版失败

尝试捕鱼大亨网络版其最新的ReplicaSet可能会遇到麻烦,而没有完成。这可能发生 由于以下某些因素:

  • 配额不足
  • 准备就绪探针故障
  • 图像拉出错误
  • 权限不足
  • 极限范围
  • 应用程序运行时配置错误

检测这种情况的一种方法是在“捕鱼大亨网络版”规范中指定一个截止日期参数: (.spec.progressDeadlineSeconds)。 .spec.progressDeadlineSeconds denotes the 捕鱼大亨网络版控制器在指示(处于“捕鱼大亨网络版”状态)之前等待的秒数 捕鱼大亨网络版进度已停止。

The following Kubectl command sets the spec with progressDeadlineSeconds to make the controller report 10分钟后捕鱼大亨网络版进度不足:

Kubectl patch deployment.v1.apps/nginx-deployment -p '{"spec":{"progressDeadlineSeconds":600}}'

输出类似于以下内容:

deployment.apps/nginx-deployment patched

一旦超过了最后期限,Deployment控制器将添加一个DeploymentCondition并包含以下内容: attributes to the 捕鱼大亨网络版方式's .status.conditions:

  • 类型=进行中
  • 状态=假
  • 原因=超过进度截止期限

Kubernetes API约定 有关状态条件的更多信息。

注意: Kubernetes对停滞的捕鱼大亨网络版不采取任何措施,只能通过以下方式报告状态情况: 原因=超过进度截止期限。较高级别的编排者可以利用它并相应地采取行动, 例如,将Deployment回滚到其先前版本。
注意: 如果暂停捕鱼大亨网络版,Kubernetes不会在指定的期限内检查进度。 您可以在推出过程中安全地暂停捕鱼大亨网络版并继续执行而无需触发 超过期限的条件。

由于您设置的超时时间短或 由于任何其他类型的错误都可以视为暂时错误。例如,假设您有 配额不足。如果描述捕鱼大亨网络版,您将注意到以下部分:

Kubectl describe deployment nginx-deployment

输出类似于以下内容:

<...>
Conditions:
  Type            Status  Reason
  ----            ------  ------
  Available       True    MinimumReplicasAvailable
  Progressing     True    复制集Updated
  ReplicaFailure  True    FailedCreate
<...>

If you run Kubectl get deployment nginx-deployment -o yaml, the 捕鱼大亨网络版状态 is similar to this:

status:
  availableReplicas: 2
  conditions:
  - lastTransitionTime: 2016-10-04T12:25:39Z
    lastUpdateTime: 2016-10-04T12:25:39Z
    message: Replica set "nginx-deployment-4262182780" is 进步的.
    reason: 复制集Updated
    status: "True"
    type: Progressing
  - lastTransitionTime: 2016-10-04T12:25:42Z
    lastUpdateTime: 2016-10-04T12:25:42Z
    message: 捕鱼大亨网络版方式 has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  - lastTransitionTime: 2016-10-04T12:25:39Z
    lastUpdateTime: 2016-10-04T12:25:39Z
    message: 'Error creating: pods "nginx-deployment-4262182780-" is forbidden: exceeded quota:
      object-counts, requested: pods=1, used: pods=3, limited: pods=2'
    reason: FailedCreate
    status: "True"
    type: ReplicaFailure
  observedGeneration: 3
  复制品: 2
  unavailableReplicas: 2

最终,一旦超过了捕鱼大亨网络版进度的最后期限,Kubernetes便会更新状态并更新 病情进展的原因:

Conditions:
  Type            Status  Reason
  ----            ------  ------
  Available       True    MinimumReplicasAvailable
  Progressing     False   ProgressDeadlineExceeded
  ReplicaFailure  True    FailedCreate

您可以通过缩减捕鱼大亨网络版,缩减其他捕鱼大亨网络版来解决配额不足的问题 您可能正在运行的控制器,或者通过增加名称空间中的配额。如果您满足配额 条件,然后“捕鱼大亨网络版”控制器完成“捕鱼大亨网络版”卷展栏,您将看到 Deployment's status update with a successful condition (Status=TrueReason=NewReplicaSetAvailable)。

Conditions:
  Type          Status  Reason
  ----          ------  ------
  Available     True    MinimumReplicasAvailable
  Progressing   True    NewReplicaSetAvailable

Type=Available with Status=True means that your 捕鱼大亨网络版方式 has minimum availability. Minimum availability is dictated by the parameters specified in the deployment strategy. 类型=进行中 with Status=True means that your 捕鱼大亨网络版方式 处于发布过程中并且正在进行中,或者它已成功完成其进度和最低要求 所需的新副本可用(请参见特殊条件的原因-在我们的情况下 Reason=NewReplicaSetAvailable 表示捕鱼大亨网络版已完成)。

You can check if a 捕鱼大亨网络版方式 has failed to progress by using Kubectl rollout status. Kubectl rollout status 如果捕鱼大亨网络版已超过进度期限,则返回非零退出代码。

Kubectl rollout status deployment/nginx-deployment

输出类似于以下内容:

Waiting for rollout to finish: 2 out of 3 new 复制品 have been updated...
error: deployment "nginx" exceeded its progress deadline

和 the exit status from Kubectl rollout is 1 (indicating an error):

echo $?
1

对失败的捕鱼大亨网络版进行操作

适用于完整捕鱼大亨网络版的所有操作也适用于失败的捕鱼大亨网络版。您可以放大/缩小,回滚 到以前的版本,或者如果您需要在Deployment 荚模板中应用多个调整,甚至暂停它。

清理政策

You can set .spec.revisionHistoryLimit field in a 捕鱼大亨网络版方式 to specify how many old 副本集 for 您想要保留的捕鱼大亨网络版。其余的将在后台进行垃圾收集。默认, it is 10.

注意: 将此字段明确设置为0,将清除所有Deployment的历史记录 因此捕鱼大亨网络版将无法回滚。

金丝雀捕鱼大亨网络版

如果要使用“捕鱼大亨网络版”将发行版发布到一部分用户或服务器,则可以 可以按照以下内容中描述的canary模式创建多个Deployment,每个版本一个。 管理资源.

编写捕鱼大亨网络版规范

As with all other Kubernetes configs, a 捕鱼大亨网络版方式 needs .apiVersion, .kind, 和 .metadata fields. 有关使用配置文件的一般信息,请参见 捕鱼大亨网络版应用, 配置容器,以及 使用kubectl管理资源 文件。 捕鱼大亨网络版对象的名称必须是有效的 DNS子域名.

捕鱼大亨网络版还需要一个 .spec 部分.

吊舱模板

The .spec.template.spec.selector are the only required field of the .spec.

The .spec.template is a 吊舱模板。它的架构与 , except it is nested 和 does not have an apiVersion 要么 kind.

除了Pod的必填字段外,捕鱼大亨网络版中的Pod模板还必须指定适当的字段 标签和适当的重启策略。对于标签,请确保不要与其他控制器重叠。看到 选择器.

只有一个 .spec.template.spec.restartPolicy equal to Always is 允许,如果未指定,则为默认值。

复制品

.spec.replicas 是一个可选字段,用于指定所需Pod的数量。默认为1。

选择器

.spec.selector 是必填字段,用于指定 标签选择器 适用于此捕鱼大亨网络版目标的Pod。

.spec.selector must match .spec.template.metadata.labels, 要么 it will be rejected by the API.

In API version apps/v1, .spec.selector.metadata.labels do not default to .spec.template.metadata.labels if not set. So they must be set explicitly. Also note that .spec.selector is immutable after creation of the 捕鱼大亨网络版方式 in apps/v1.

如果捕鱼大亨网络版的模板不同,则捕鱼大亨网络版可能会终止其标签与选择器匹配的Pod from .spec.template 要么 if the total number of such 豆荚 exceeds .spec.replicas. It brings up new Pods with .spec.template if the number of 豆荚 is less than the desired number.

注意: 您不应该直接通过创建以下标签来与此选择器匹配的其他Pod: 另一个捕鱼大亨网络版,或者通过创建另一个控制器(例如ReplicaSet或复制控制器)。如果你 这样做,第一个Deployment认为它创建了其他Pod。 Kubernetes不会阻止您这样做。

如果您有多个具有重叠选择器的控制器,则这些控制器将与每个 其他并且行为不正确。

战略

.spec.strategy 指定用于用新Pod替换旧Pod的策略。 .spec.strategy.type 可以是“重新创建”或“ RollingUpdate”。 “ RollingUpdate”是 the default value.

重新创建捕鱼大亨网络版

All existing 豆荚 are killed before new ones are created when .spec.strategy.type==Recreate.

注意: 这只能保证在创建升级之前终止Pod。如果升级捕鱼大亨网络版,则所有Pod 的旧修订版本将立即终止。在成功将新Pod移除之前,需要等待成功删除 版本已创建。如果您手动删除Pod,则生命周期由ReplicaSet和 替换将立即创建(即使旧的Pod仍处于终止状态)。如果您需要 为您的Pods提供“至多”的保证,您应该考虑使用 有状态集.

滚动更新捕鱼大亨网络版

捕鱼大亨网络版更新中滚动更新的Pod fashion when .spec.strategy.type==RollingUpdate. You can specify maxUnavailablemaxSurge to control 滚动更新过程。

最大值不可用

.spec.strategy.rollingUpdate.maxUnavailable 是一个可选字段,用于指定最大数量 在更新过程中可能无法使用的Pod数量。该值可以是绝对数字(例如5) 或所需Pod的百分比(例如10%)。绝对数由百分比计算得出 rounding down. The value cannot be 0 if .spec.strategy.rollingUpdate.maxSurge is 0. The default value is 25%.

例如,当此值设置为30%时,旧的ReplicaSet可以按比例缩小到所需的70% 滚动更新开始时立即放置。一旦准备好新的Pod,就可以缩放旧的ReplicaSet 进一步降低,然后扩展新的ReplicaSet,确保可用的Pod总数 在更新过程中,始终至少需要所需Pod的70%。

最大浪涌

.spec.strategy.rollingUpdate.maxSurge 是一个可选字段,用于指定Pod的最大数量 可以在所需数量的Pod上创建。该值可以是绝对数字(例如5),也可以是 percentage of desired 豆荚 (for example, 10%). The value cannot be 0 if MaxUnavailable is 0. The absolute number 由四舍五入的百分比计算得出。默认值为25%。

例如,当该值设置为30%时,新的ReplicaSet可以在 开始滚动更新,以使旧的和新的Pod总数不超过所需的130% 豆荚。旧的Pod被杀死后,新的ReplicaSet可以进一步扩大规模,从而确保 更新期间随时运行的Pod总数最多为所需Pod的130%。

进度截止秒

.spec.progressDeadlineSeconds 是一个可选字段,用于指定所需的秒数 在系统报告捕鱼大亨网络版已完成之前等待捕鱼大亨网络版继续进行 进度失败 - surfaced as a condition with 类型=进行中, 状态=假. and 原因=超过进度截止期限 in the status of the resource. The 捕鱼大亨网络版方式 controller will keep 重试捕鱼大亨网络版。默认值为600。将来,一旦实施自动回滚,捕鱼大亨网络版 一旦发现这种情况,控制器将回退捕鱼大亨网络版。

If specified, this field needs to be greater than .spec.minReadySeconds.

最小准备秒

.spec.minReadySeconds 是一个可选字段,用于指定新 创建的Pod应该已经准备就绪,不会发生任何容器崩溃的情况,才能被视为可用。 默认为0(准备就绪后,该Pod将被视为可用)。进一步了解何时 Pod已准备就绪,请参阅 容器探针.

修订历史记录限制

捕鱼大亨网络版的修订历史记录存储在它控制的ReplicaSets中。

.spec.revisionHistoryLimit 是一个可选字段,用于指定要保留的旧副本集的数量 to allow rollback. These old 副本集 consume resources in etcd 和 crowd the output of Kubectl get rs. The configuration of each 捕鱼大亨网络版方式 revision is stored in its 副本集; therefore, once an old 复制集 is deleted, you lose the ability to rollback to that revision of 捕鱼大亨网络版方式. By default, 10 old 副本集 will be kept, however its ideal value depends on the frequency 和 stability of new 捕鱼大亨网络版.

更具体地说,将此字段设置为零意味着将清除所有具有0个副本的旧ReplicaSet。 在这种情况下,由于已清除其修订历史记录,因此无法撤消新的“捕鱼大亨网络版”捕鱼大亨网络版。

已暂停

.spec.paused 是一个可选的布尔字段,用于暂停和恢复捕鱼大亨网络版。之间的唯一区别 暂停的捕鱼大亨网络版和不暂停的捕鱼大亨网络版是对暂停的PodTemplateSpec的任何更改 只要暂停捕鱼大亨网络版,捕鱼大亨网络版就不会触发新的捕鱼大亨网络版。默认情况下,捕鱼大亨网络版不会暂停 it is created.

上次修改时间:太平洋标准时间2020年12月8日下午6:29: 更新捕鱼大亨网络版捕鱼大亨网络版命令(fd411a39c)