

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

In 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，以停止叢集中的登入節點）。叢集的登入節點停止後，您可以更新叢集 （叢集 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)) 以啟用變更。例如，如果您使用Slurm排程器搭配 [`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，則會啟動運算機群。

**更新政策：必須停止運算機群和登入節點，才能變更此設定以進行更新。**  
當運算機群存在或使用登入節點時，無法變更這些設定。必須還原變更或必須停止運算機群和登入節點 （可以使用 停止運算機群[`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/InstanceType](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Instances)，則可以在不停止運算機群的情況下更新叢集。若要從 [Instances/InstanceType](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Instances) 移除現有的執行個體類型，必須先停止運算機群 （使用 [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) 必須設定為 TERMINATE。在運算機群停止或 [QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy) 設定為 TERMINATE 之後，您可以更新叢集 ([叢集 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) 設定為 TERMINATE：  
+ 已新增新的 [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) 必須設定為 TERMINATE。在運算機群停止或 [QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy) 設定為 TERMINATE 之後，您可以更新叢集 ([叢集 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"
        ]
      }
    ]
  }
  ```
+ 此範例示範一些允許變更的 dryrun 更新。Dryrun 有助於在不啟動更新的情況下報告變更集。

  ```
  $ 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"
      }
    ]
  }
  ```