

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

# 更新 AWS PCS 叢集的排程器版本
<a name="working-with_clusters_version_update_procedure"></a>

使用這些步驟來更新叢集上的排程器版本。根據您是否可以容忍任務中斷，有兩個選項。如需選擇選項的詳細資訊，請參閱 [在 AWS PCS 中更新叢集的排程器版本](working-with_clusters_version_update.md)。

## 選項 1：滾動更新
<a name="version_update-procedure-option1"></a>

當機群持續執行時，控制器會更新。現有的節點會繼續使用先前的 Slurm 版本，直到耗盡並取代為止。更新後啟動的新節點會使用目標版本。執行中的任務不會中斷。

**使用時機：**
+ 叢集控制器位於 Slurm 24.05 版或更新版本。
+ 您可以提供同時包含目前和目標 Slurm 版本的 AMIs。

### 步驟 0 — 檢查啟動狀態
<a name="version_update-procedure-option1-step0"></a>

您的叢集正在執行控制器版本 "A" （例如 24.11)，而您想要遷移至版本 "B" （例如 25.11)。確認機群中的所有運算節點都從叢集節點使用此命令執行相同的主要版本：

```
scontrol show nodes | grep "Version="

# Example output:
#   NodeAddr=compute-1 NodeHostName=compute-1 Version=24.11.7
#   NodeAddr=compute-2 NodeHostName=compute-2 Version=24.11.7
```

確認運算節點上的 AWS PCS 代理程式版本。使用 Systems Manager 連線至節點，並檢查引導日誌：

```
grep "PCS Agent version" /var/log/amazon/pcs/bootstrap.log | tail -1

# Example output:
#   /opt/aws/pcs/bin/pcs_bootstrap_init.sh: INFO: Bootstrap starting with PCS Agent version: 1.3.2-1
```

滾動更新在所有運算節點 AMI 上都需要 AWS PCS 代理程式 1.4.0 版或更新版本。 AMIs 如需詳細資訊，請參閱[AWS PCS 代理程式版本](pcs-agent-versions.md)。

### 步驟 1 — 準備和推出雙版本 AMIs
<a name="version_update-procedure-option1-step1"></a>

建置或識別**同時包含 Slurm 版本 A 和版本 B 以及最新 AWS PCS 代理程式**AMIs。
+ 您可以使用最新的 **PCS 就緒 DLAMIs**。這類 AMIs隨附最新三個支援的 Slurm 版本。如需詳細資訊，請參閱[搭配 PCS 使用 AWS PCS 就緒 DLAMI](working-with_ami_pcs-ready-dlami.md)。
+ 您可以依照 Slurm 套件和 AWS PCS 代理程式的安裝步驟來建置**自訂 AMI**。如需詳細資訊，請參閱[AWS PCS 的自訂 Amazon Machine Image AMIs)](working-with_ami_custom.md)。
+ **您無法使用** **AWS PCS 範例 AMI**。這類 AMIs 並非針對生產所設計，目前僅包含單一 Slurm 版本。

**注意**  
如果您的 AMI 包含兩個以上的 Slurm 版本， AWS PCS 會自動選取符合控制器的版本。安裝其他版本不會造成問題。

AMIs準備就緒後：

1. 在每個運算節點群組`UpdateComputeNodeGroup`上呼叫 ，以設定新的雙版本 AMI。節點將由 AWS PCS 設定為 DRAIN，並將遷移至新的 AMI。

1. 等待耗盡的節點完成其任務、終止，並使用新的雙版本 AMI 取代節點。檢查叢集中的所有 EC2 執行個體是否使用新的 AMI 搭配：

   ```
   aws ec2 describe-instances \
       --filters "Name=tag:aws:pcs:cluster-id,Values={{cluster-id}}" \
       --query "Reservations[].Instances[].[InstanceId,ImageId,State.Name]" \
       --output table
   ```

### 步驟 2 — 更新叢集控制器
<a name="version_update-procedure-option1-step2"></a>

呼叫 ，`UpdateCluster`並將 `scheduler.version` 設定為版本 B。

------
#### [ AWS Management Console ]

1. 在 https：//[https://console.aws.amazon.com/pcs/](https://console.aws.amazon.com/pcs/) 開啟 AWS PCS 主控台。

1. 在導覽窗格中，選擇**叢集**。

1. 選取要更新的叢集，然後選擇**編輯**。

1. 在**叢集詳細資訊**下，從排程器下拉式清單中選取目標**排程器**版本。

1. 選擇**更新**以提交版本更新。

1. 監控叢集狀態。叢集會在更新`UPDATING`期間顯示為 ，並在完成`ACTIVE`時傳回 。更新通常會在 5-15 分鐘內完成。

------
#### [ AWS CLI ]

```
aws pcs update-cluster \
  --cluster-identifier {{cluster-id}} \
  --scheduler version={{25.11}}
```

等待叢集返回 `ACTIVE`。更新通常會在 5-15 分鐘內完成。

------

在此操作期間，控制器會短暫無法使用：
+ 在運算節點上執行的任務**會繼續執行**。
+ 在更新完成之前，新的任務提交和排程器命令都無法使用。
+ 自動擴展會暫停，直到叢集返回 為止`ACTIVE`。

更新之後，運算機群處於**混合狀態**：在更新繼續使用 Slurm 版本 A 的 之前執行的節點`slurmd`；新節點使用 Slurm 版本 B。這是預期的。

**注意**  
當機群仍包含 A 版上的節點時，請勿新增 B 版特定的 Slurm 設定。組態會分佈到所有節點；舊的 `slurmd`可能無法辨識新參數。

如果叢集未在 30 分鐘內返回 `ACTIVE` 或 `UPDATE_FAILED` ，請聯絡 AWS Support 尋求協助。

### 步驟 3 — 耗盡仍在執行 Slurm 版本 A 的節點
<a name="version_update-procedure-option1-step3"></a>

識別和耗盡仍在先前版本的節點。從叢集的節點執行：

```
scontrol show nodes | grep "Version="
scontrol update NodeName={{node}} State=DRAIN Reason="Slurm version update"
```

一旦耗盡的節點完成目前的任務，它們就會終止，並由 Slurm 版本 B 上的節點取代。

### 步驟 4 — 在 Slurm 版本 B 上驗證一致的機群
<a name="version_update-procedure-option1-step4"></a>

確認所有節點報告版本 B。從叢集的節點執行：

```
scontrol show nodes | grep "Version="
```

所有節點現在都應該報告 Slurm 版本 B。更新已完成。

## 選項 2：完整機群資源回收
<a name="version_update-procedure-option2"></a>

在更新控制器之前，會終止整個機群，然後使用目標 Slurm 版本從新的 AMI 向上擴展。此程序較簡單，但需要終止所有節點和執行中的任務。

**使用時機：**
+ 您無法提供已安裝 Slurm 版本的 AMIs。
+ 叢集控制器位於 23.11 版 （選項 1 不適用於 23.11 叢集）。

**注意**  
一次終止整個機群會增加擴展時容量不足錯誤的可能性。考慮在離峰時間使用預留容量或排程。

### 步驟 0 — 檢查啟動狀態
<a name="version_update-procedure-option2-step0"></a>

您的叢集正在執行控制器版本 "A" （例如 24.11)，而您想要遷移至版本 "B" （例如 25.11)。確認機群中的所有運算節點都從叢集節點使用此命令執行相同的主要版本：

```
scontrol show nodes | grep "Version="

# Example output:
#   NodeAddr=compute-1 NodeHostName=compute-1 Version=24.11.7
#   NodeAddr=compute-2 NodeHostName=compute-2 Version=24.11.7
```

確認運算節點上的 AWS PCS 代理程式版本。使用 Systems Manager 連線至節點，並檢查引導日誌：

```
grep "PCS Agent version" /var/log/amazon/pcs/bootstrap.log | tail -1

# Example output:
#   /opt/aws/pcs/bin/pcs_bootstrap_init.sh: INFO: Bootstrap starting with PCS Agent version: 1.3.2-1
```

在目標 AMIs 上使用最新的 AWS PCS 代理程式。如需詳細資訊，請參閱[AWS PCS 代理程式版本](pcs-agent-versions.md)。

### 步驟 1 — 準備目標 AMIs
<a name="version_update-procedure-option2-step1"></a>

建置或識別包含 **Slurm B 版和最新 AWS PCS 代理程式**AMIs。
+ 您可以使用最新的 **PCS 就緒 DLAMIs**。這類 AMIs隨附最新三個支援的 Slurm 版本。如需詳細資訊，請參閱[搭配 PCS 使用 AWS PCS 就緒 DLAMI](working-with_ami_pcs-ready-dlami.md)。
+ 您可以依照 Slurm 套件和 AWS PCS 代理程式的安裝步驟來建置**自訂 AMI**。如需詳細資訊，請參閱[AWS PCS 的自訂 Amazon Machine Image AMIs)](working-with_ami_custom.md)。
+ **AWS 不建議使用 PCS 範例 AMI**。這類 AMIs 並非專為生產而設計。

### 步驟 2 — 縮減整個機群
<a name="version_update-procedure-option2-step2"></a>

記錄`maxNodeCount`每個運算節點群組的目前 `minNodeCount`和 - 您將在步驟 4 中還原這些節點。

```
for cng in $(aws pcs list-compute-node-groups --cluster-identifier {{cluster-id}} --query "computeNodeGroups[].id" --output text); do
    aws pcs get-compute-node-group \
      --cluster-identifier {{cluster-id}} \
      --compute-node-group-identifier "$cng" \
      --query "computeNodeGroup.{Id:id,AmiId:amiId,Min:scalingConfiguration.minInstanceCount,Max:scalingConfiguration.maxInstanceCount}" \
      --output table
  done
```

**警告**  
下列操作會終止所有執行中的節點及其任務。

在每個運算節點群組`0`上將 `minNodeCount`和 `maxNodeCount` 設定為 ：

```
aws pcs update-compute-node-group \
  --cluster-identifier {{cluster-id}} \
  --compute-node-group-identifier {{cng-id}} \
  --scaling-configuration '{"minNodeCount": 0, "maxNodeCount": 0}'
```

在繼續之前，請確認沒有標記為`aws:pcs:cluster-id`符合叢集的執行個體正在執行：

```
aws ec2 describe-instances \
    --filters "Name=tag:aws:pcs:cluster-id,Values={{cluster-id}}" \
    --query "Reservations[].Instances[].[InstanceId,ImageId,State.Name]" \
    --output table
```

### 步驟 3 — 更新叢集控制器
<a name="version_update-procedure-option2-step3"></a>

------
#### [ AWS Management Console ]

1. 在 https：//[https://console.aws.amazon.com/pcs/](https://console.aws.amazon.com/pcs/) 開啟 AWS PCS 主控台。

1. 在導覽窗格中，選擇**叢集**。

1. 選取要更新的叢集，然後選擇**編輯**。

1. 在**叢集詳細資訊**下，從排程器下拉式清單中選取目標**排程器**版本。

1. 選擇**更新**以提交版本更新。

1. 監控叢集狀態。叢集會在更新`UPDATING`期間顯示為 ，並在完成`ACTIVE`時傳回 。更新通常會在 5-15 分鐘內完成。

------
#### [ AWS CLI ]

```
aws pcs update-cluster \
  --cluster-identifier {{cluster-id}} \
  --scheduler version={{25.11}}
```

等待叢集返回 `ACTIVE`。更新通常會在 5-15 分鐘內完成。

如果叢集未在 30 分鐘內返回 `ACTIVE` 或 `UPDATE_FAILED` ，請聯絡 AWS Support 尋求協助。

------

### 步驟 4 — 更新運算節點群組和還原容量
<a name="version_update-procedure-option2-step4"></a>

對於每個運算節點群組，設定新的 AMI 並還原原始容量下限和上限：

```
aws pcs update-compute-node-group \
  --cluster-identifier {{cluster-id}} \
  --compute-node-group-identifier {{cng-id}} \
  --ami-id {{new-ami-id}} \
  --scaling-configuration '{"minNodeCount": {{previous-min}}, "maxNodeCount": {{previous-max}}}'
```

叢集會向上擴展。所有新節點都會使用最新的 AWS PCS 代理程式執行 Slurm 版本 B。

## 範例：跨多個版本更新
<a name="version_update-procedure-multi-hop"></a>

如果目標版本超出目前版本的相容性時段，您必須將控制器移至一或多個中繼版本，一次更新一個躍點。每個躍點都必須以目前控制器版本的相容性時段內支援的版本為目標。

由於 會在更新控制器之前將機群[選項 2：完整機群資源回收](#version_update-procedure-option2)擴展為零，因此控制器在版本之間移動時不會執行運算節點。因此，您的 AMIs可以直接使用**最終**目標版本，每個躍點只會重複控制器更新 （步驟 3)。

下列範例使用選項 **2 程序，將叢集從 23.11 更新至 25.11**。 23.11 超出 25.11 的相容性時段，因此控制器會在兩個躍點中更新 (23.11 至 25.05，然後 25.05 至 25.11)。遵循選項 2 步驟，步驟 3 在每個躍點分割為一個更新：

1. **步驟 1 — 準備目標 AMIs。**使用**最終**版本 (25.11) 和最新的 AWS PCS 代理程式建置或識別 AMIs。請參閱 [步驟 1 — 準備目標 AMIs](#version_update-procedure-option2-step1)。

1. **步驟 2 — 縮減整個機群。**記錄目前容量 （請參閱 [步驟 2 — 縮減整個機群](#version_update-procedure-option2-step2))，然後將每個運算節點群組設為零。

   ```
   aws pcs update-compute-node-group \
   --cluster-identifier {{my-cluster}} \
   --compute-node-group-identifier {{my-cng}} \
   --scaling-configuration '{"minNodeCount": 0, "maxNodeCount": 0}'
   ```

1. **步驟 3a：將控制器從 23.11 更新至 25.05。**等待叢集返回 `ACTIVE`。

   ```
   aws pcs update-cluster --cluster-identifier {{my-cluster}} \
   --scheduler version=25.05
   ```

1. **步驟 3b — 將控制器從 25.05 更新至 25.11。**等待叢集返回 `ACTIVE`。

   ```
   aws pcs update-cluster --cluster-identifier {{my-cluster}} \
   --scheduler version=25.11
   ```

1. **步驟 4 — 更新運算節點群組並還原容量。**在每個運算節點群組上設定 25.11 AMI，並還原原始容量限制 （請參閱 [步驟 4 — 更新運算節點群組和還原容量](#version_update-procedure-option2-step4))。

   ```
   aws pcs update-compute-node-group \
   --cluster-identifier {{my-cluster}} \
   --compute-node-group-identifier {{my-cng}} \
   --ami-id {{ami-0123456789abcdef0}} \
   --scaling-configuration '{"minNodeCount": {{previous-min}}, "maxNodeCount": {{previous-max}}}'
   ```

**注意**  
每個控制器跳轉必須位於前一個控制器跳轉的相容性時段內的版本。若要尋找有效的中繼版本，請參閱 [版本相容性](working-with_clusters_version_update.md#version_update-cluster-compatibility)。機群透過步驟 3a 和 3b 保持為零，因此不需要中繼 AMI 更新。