

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 `pcluster update-cluster`
<a name="using-pcluster-update-cluster-v3"></a>

在 AWS ParallelCluster 3.x 中，[`pcluster update-cluster`](pcluster.update-cluster-v3.md)分析用于创建当前集群的设置以及配置文件中的设置是否存在问题。如果发现任何问题，就会进行报告并显示修复这些问题所要执行的步骤。例如，如果更改了计算 [`InstanceType`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-InstanceType)，则必须先停止计算实例集，然后才能继续进行更新。此问题发现后即会报告。如果未发现阻止更新的问题，则会启动更新过程并报告更改。

在运行更新之前，您可以使用 [`pcluster update-cluster`](pcluster.update-cluster-v3.md) `--dryrun option` 来查看更改。有关更多信息，请参阅 [`pcluster update-cluster` 示例](#pcluster-update-cluster-examples)。

有关故障排除指导，请参阅[AWS ParallelCluster 故障排除](troubleshooting-v3.md)。

## 更新策略：定义
<a name="pcluster-update-policy-definitions"></a>

**更新策略：必须停止集群中的登录节点，才能更改此设置进行更新。**  
在使用集群中的登录节点时，无法更改这些设置。要么恢复更改，要么停止集群登录节点。（您可以通过将每个池的计数设置为 0 来停止群集中的登录节点）。集群的登录节点停止后，您可以更新集群（pcluster update-cluster）以激活更改。  
从 3.7.0 AWS ParallelCluster 版开始支持此更新政策。

**更新策略：可以添加登录节点池，但移除池需要停止集群中的所有登录节点。**  
要移除池，必须停止集群中的所有登录节点。（将每个池的计数设置为 0，即可停止集群中的登录节点）。集群的登录节点停止后，您可以更新集群（[`pcluster update-cluster`](pcluster.update-cluster-v3.md)）以激活更改。  
从 3.11.0 AWS ParallelCluster 版开始支持此更新政策。

**更新策略：必须停止池中的登录节点，才能更改此设置进行更新。**  
当池中的登录节点处于使用状态时，您无法更改这些设置。要么恢复更改，要么停止池登录节点。（将池的计数设置为 0，即可停止池中的登录节点）。池的登录节点停止后，您可以更新集群（[`pcluster update-cluster`](pcluster.update-cluster-v3.md)）以激活更改。  
从 3.11.0 AWS ParallelCluster 版开始支持此更新政策。

**更新策略：可以在更新期间更改此设置。**  
更改此设置后，可以使用 [`pcluster update-cluster`](pcluster.update-cluster-v3.md) 更新集群。

**更新策略：如果更改此设置，则不允许更新。**  
更改此设置后，无法更新集群。您必须还原原始集群的设置，并使用更新的设置创建一个新集群。您可以在将来删除原始集群。要创建新集群，请使用 [`pcluster create-cluster`](pcluster.create-cluster-v3.md)。要删除原始集群，请使用 [`pcluster delete-cluster`](pcluster.delete-cluster-v3.md)。

**更新策略：在更新期间不分析此设置。**  
可以更改这些设置，并使用 [`pcluster update-cluster`](pcluster.update-cluster-v3.md) 更新集群。

**更新策略：必须停止计算实例集才能更改此设置以进行更新。**  
当存在计算实例集时，无法更改这些设置。必须还原更改，或者必须停止计算实例集（使用 [`pcluster update-compute-fleet`](pcluster.update-compute-fleet-v3.md)）。停止计算实例集后，您可以更新集群 ([`pcluster update-cluster`](pcluster.update-cluster-v3.md)) 以激活更改。例如，如果您要在 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)/ - [`Name`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Name)/[`MinCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MinCount) > 0 的情况下使用 Slurm 调度器，则会启动一个计算实例集。

**更新策略：必须停止计算实例集和登录节点才能更改此设置以进行更新。**  
如果计算实例集存在，或登录节点正在使用中，则无法更改这些设置。要么恢复更改，要么停止计算实例集和登录节点（可使用 [`pcluster update-compute-fleet`](pcluster.update-compute-fleet-v3.md) 停止计算实例集）。计算实例集和登录节点停止后，您可以更新集群（[`pcluster update-cluster`](pcluster.update-cluster-v3.md)）以激活更改。

**更新策略：更新期间不能减小此设置。**  
这些设置可以更改，但不能减小。如果必须减小这些设置，您必须还原原始集群的设置，并使用更新的设置创建一个新集群。您可以在将来删除原始集群。要创建新集群，请使用 [`pcluster create-cluster`](pcluster.create-cluster-v3.md)。要删除原始集群，请使用 [`pcluster delete-cluster`](pcluster.delete-cluster-v3.md)。

**更新策略：如果更改此设置，则不允许更新。如果您强制更新，则将忽略新值并使用旧值。**  
更改此设置后，无法更新集群。您必须还原原始集群的设置，并使用更新的设置创建一个新集群。您可以在将来删除原始集群。要创建新集群，请使用 [`pcluster create-cluster`](pcluster.create-cluster-v3.md)。要删除原始集群，请使用 [`pcluster delete-cluster`](pcluster.delete-cluster-v3.md)。

**更新策略：必须停止计算实例集或必须设置 [`QueueUpdateStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy) 才能更改此设置以进行更新。**  
可以更改这些设置。必须停止计算实例集（使用 [`pcluster update-compute-fleet`](pcluster.update-compute-fleet-v3.md)），或者必须设置 [`QueueUpdateStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)。停止计算实例集或设置 [`QueueUpdateStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy) 后，您可以更新集群 ([`pcluster update-cluster`](pcluster.update-cluster-v3.md)) 以激活更改。  
从 3.2.0 AWS ParallelCluster 版开始支持此更新政策。

**更新策略：对于此列表值设置，可以在更新期间添加新值，或者在删除现有值时必须停止计算实例集。**  
可以在更新期间为这些设置添加新值。向列表中添加新值后，可以使用 ([`pcluster update-cluster`](pcluster.update-cluster-v3.md)) 更新集群。  
要从列表中删除现有值，必须停止计算实例集（使用 [`pcluster update-compute-fleet`](pcluster.update-compute-fleet-v3.md)）。  
例如，如果您正在使用Slurm调度程序并向 [Instances/](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Instances) 添加新的实例类型InstanceType，则可以在不停止计算队列的情况下更新集群。[要从 [Instances/](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Instances) 中移除现有实例类型InstanceType，必须先停止计算队列（使用 pcluster）。 update-compute-fleet](pcluster.update-compute-fleet-v3.md)  
从 3.2.0 AWS ParallelCluster 版开始支持此更新政策。

**更新策略：要缩小队列的大小，需要停止计算队列或者**[QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)**必须将其设置为 TERMINATE 才能更改此设置以进行更新。**  
可以更改这些设置，但是如果更改会缩小队列的大小，则必须停止计算队列（使用 pcluster update-compute-fleet）或[QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)必须将其设置为 TERMINATION。在计算队列停止或设置[QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)为终止后，您可以更新集群（[pcluster update-cluster）以激活](pcluster.update-cluster-v3.md)更改。  
在调整集群容量时，设置 TERMINATE 只会终止节点列表后面的节点，而不会触及同一分区的所有其它节点。  
例如，如果集群的初始容量为 `MinCount = 5` 和 `MaxCount = 10`，则节点为 `st-[1-5]; dy-[1-5]`。将集群大小调整为 `MinCount = 3` 和 `MaxCount = 5` 时，新的集群容量将由节点 `st-[1-3]; dy-[1-2]` 构成，更新期间不会触及这些节点。在更新过程中，只有 `st-[4-5]; dy-[3-5]` 节点会被终止。  
支持以下更改，并且不需要停止计算队列，也不要求将其[QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)设置为 TERMINATION：  
+ 添加了一个新[SlurmQueue](Scheduling-v3.md#Scheduling-v3-SlurmQueues)的
+ 添加了一个新[ComputeResource](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)的
+ [MaxCount](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount)增加了
+ [MinCount](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MinCount)增加[MaxCount](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount)并且增加的金额至少相同

  **注意：**从 3.9.0 AWS ParallelCluster 版开始支持此更新政策。

**更新策略：对于此列表值设置，必须停止计算实例集或必须设置 [`QueueUpdateStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy) 才能添加新值；删除现有值时必须停止计算实例集。**  
可以在更新期间为这些设置添加新值。必须停止计算实例集（使用 [`pcluster update-compute-fleet`](pcluster.update-compute-fleet-v3.md)），或者必须设置 [`QueueUpdateStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)。停止计算实例集或设置 [`QueueUpdateStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy) 后，您可以更新集群 ([`pcluster update-cluster`](pcluster.update-cluster-v3.md)) 以激活更改。  
要从列表中删除现有值，必须停止计算实例集（使用 [`pcluster update-compute-fleet`](pcluster.update-compute-fleet-v3.md)）。  
从 3.3.0 AWS ParallelCluster 版开始支持此更新政策。

**更新策略：必须停止所有计算节点才能删除托管置放群组。必须停止计算实例集或必须设置 [`QueueUpdateStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy) 才能更改此设置以进行更新。**  
必须停止计算实例集（使用 [`pcluster update-compute-fleet`](pcluster.update-compute-fleet-v3.md)）才能删除托管置放群组。如果您在停止计算实例集之前运行集群更新以删除托管置放群组，则会返回一条配置无效消息，并且不会继续更新。停止计算实例集可以保证没有实例在运行。

## `pcluster update-cluster` 示例
<a name="pcluster-update-cluster-examples"></a>

可以更改这些设置，但是如果更改会缩小队列的大小，则必须停止计算队列（使用 pcluster update-compute-fleet）或[QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)必须将其设置为 TERMINATION。在计算队列停止或设置[QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)为终止后，您可以更新集群（[pcluster update-cluster）以激活](pcluster.update-cluster-v3.md)更改。
+ 此示例演示了一些允许的更改的更新，并且直接开始更新。

  ```
  $ pcluster update-cluster --cluster-name cluster_name --cluster-config ~/.parallelcluster/test_cluster --region us-east-1
  {
    "cluster": {
      "clusterName": cluster_name,
      "cloudformationStackStatus": "UPDATE_IN_PROGRESS",
      "cloudformationStackArn": stack_arn,
      "region": "us-east-1",
      "version": "3.15.0",
      "clusterStatus": "UPDATE_IN_PROGRESS"
    },
    "changeSet": [
      {
        "parameter": "HeadNode.Networking.AdditionalSecurityGroups",
        "requestedValue": [
          "sg-0cd61884c4ad11234"
        ],
        "currentValue": [
          "sg-0cd61884c4ad16341"
        ]
      }
    ]
  }
  ```
+ 此示例演示了一些允许的更改的试运行更新。试运行可用于在不启动更新的情况下报告更改集。

  ```
  $ pcluster update-cluster --cluster-name cluster_name --cluster-config ~/.parallelcluster/test_cluster --region us-east-1 --dryrun true
  {
    "message": "Request would have succeeded, but DryRun flag is set.",
    "changeSet": [
      {
        "parameter": "HeadNode.Networking.AdditionalSecurityGroups",
        "requestedValue": [
          "sg-0cd61884c4ad11234"
        ],
        "currentValue": [
          "sg-0cd61884c4ad16341"
        ]
      }
    ]
  }
  ```
+ 此示例演示了一些阻止更新的更改的更新。

  ```
  $ pcluster update-cluster --cluster-name cluster_name --cluster-config ~/.parallelcluster/test_cluster --region us-east-1
  {
    "message": "Update failure",
    "updateValidationErrors": [
      {
        "parameter": "HeadNode.Ssh.KeyName",
        "requestedValue": "mykey_2",
        "message": "Update actions are not currently supported for the 'KeyName' parameter. Restore 'KeyName' value to 'jenkinsjun'. If you need this change, please consider creating a new cluster instead of updating the existing one.",
        "currentValue": "mykey_1"
      },
      {
        "parameter": "Scheduling.SlurmQueues[queue1].ComputeResources[queue1-t2micro].InstanceType",
        "requestedValue": "c4.xlarge",
        "message": "All compute nodes must be stopped. Stop the compute fleet with the pcluster update-compute-fleet command",
        "currentValue": "t2.micro"
      },
      {
        "parameter": "SharedStorage[ebs1].MountDir",
        "requestedValue": "/my/very/very/long/shared_dir",
        "message": "Update actions are not currently supported for the 'MountDir' parameter. Restore 'MountDir' value to '/shared'. If you need this change, please consider creating a new cluster instead of updating the existing one.",
        "currentValue": "/shared"
      }
    ],
    "changeSet": [
      {
        "parameter": "HeadNode.Networking.AdditionalSecurityGroups",
        "requestedValue": [
          "sg-0cd61884c4ad11234"
        ],
        "currentValue": [
          "sg-0cd61884c4ad16341"
        ]
      },
      {
        "parameter": "HeadNode.Ssh.KeyName",
        "requestedValue": "mykey_2",
        "currentValue": "mykey_1"
      },
      {
        "parameter": "Scheduling.SlurmQueues[queue1].ComputeResources[queue1-t2micro].InstanceType",
        "requestedValue": "c4.xlarge",
        "currentValue": "t2.micro"
      },
      {
        "parameter": "SharedStorage[ebs1].MountDir",
        "requestedValue": "/my/very/very/long/shared_dir",
        "currentValue": "/shared"
      }
    ]
  }
  ```