スキップしてコンテンツを表示

Amazon EKS マネージドノードグループのプロパティを更新する方法を教えてください。

所要時間2分
0

Amazon Elastic Kubernetes Service (Amazon EKS) マネージドノードグループのプロパティを変更したいと考えています。

簡単な説明

マネージドノードグループのプロパティを更新するプロセスは、変更するプロパティタイプによって異なります。

次のプロパティを更新するには、UpdateNodegroupConfig または UpdateNodegroupVersion を使用します。

  • labels
  • taints
  • scalingConfig
  • nodeRepairConfig
  • updateConfig
  • launchTemplate
    注: launchTemplate プロパティを編集するには、そのプロパティをマネージドノードグループの作成時に指定する必要があります。

次のプロパティを更新するには、カスタム起動テンプレートを使用します。

  • diskSize
  • remoteAccess
  • tags
    注: TagResource API を使用してタグを更新することもできます。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

instanceType プロパティを変更するには、マネージドノードグループの作成時に、起動テンプレートでインスタンスタイプを指定します。その後、起動テンプレート内で更新します。

amiType プロパティを変更するには、マネージドノードグループの作成時に、起動テンプレートで ImageId を指定します。その後、起動テンプレート内で値を更新し、他の Amazon マシンイメージ (AMI) ID を指定します。

直接変更できないプロパティを更新するには、まずマネージドノードグループを作成する必要があります。次に、必要に応じて Pod Disruption Budget (PDB) を設定し、既存のノードをドレインし、古いマネージドノードグループを削除します。

新しいマネージドノードグループを作成する

次の手順を実行します。

  1. 新しいマネージドノードグループを作成します
  2. 作成したマネージドノードグループから起動したノードが、クラスターに正常に参加できたかどうかを確認します。次のコマンドを実行します。
    kubectl get node -l 'eks.amazonaws.com/nodegroup=my-new-node-group-name'
    注: my-new-node-group-name を新しいノードグループに設定したい名前に置き換えてください。
    ノードがクラスターに正常に参加できた場合は、次の例に類似した出力が表示されます。
    NAME                            STATUS   ROLES    AGE     VERSION
    ip-192-168-95-10.ec2.internal   Ready    <none>   3m33s   v1.33.3-eks-3abbec1
    ip-192-168-96-53.ec2.internal   Ready    <none>   3m32s   v1.33.3-eks-3abbec1

オプション: PDB を設定する

Pod を新しく作成したマネージドノードグループに安全に移行し、可用性を維持するには、ワークロードに PDB を設定することをおすすめします。

既に PDB を使用している場合は、構成を確認します。次のコマンドを実行します。

kubectl get pdb -n your_namespace

注: your-namespace を名前空間名に置き換えてください。

出力例:

NAME       MIN AVAILABLE   MAX UNAVAILABLE   ALLOWED DISRUPTIONS   AGE
my-pdb     2               N/A               2                     95d

PDB を構成済みでない場合は、ワークロードごとに、次のテンプレートを使用して作成します。

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: mypdb
  namespace: your_namespace
spec:
  minAvailable: 2
  selector:
    matchLabels:
      app: myapp

注: your_namespace を名前空間名に置き換えてください。

詳細については、「Pod Disruption Budgets で重要なワークロードを保護する」を参照してください。

既存のノードをドレインする

既存のノードをスケジュール不可としてマークし、そのノードで実行されているポッドを削除します。

注: Kubernetes Cluster Autoscaler を使用する場合は、スケーリングアクションでの競合を避けるために、デプロイのレプリカ数をゼロにスケールダウンします。次のコマンドを実行します。

kubectl scale deployments/cluster-autoscaler --replicas=0 -n kube-system

次の手順を実行します。

  1. 新しいポッドがスケジュールされないようにします。次のコマンドを実行します。
    kubectl cordon -l 'eks.amazonaws.com/nodegroup=my-old-node-group-name'
    注: my-old-node-group-name を既存のノードグループ名に置き換えてください。
  2. スケジュールできない各ノードから、ワークロードを 1 つずつ削除します。次のコマンドを実行します。
    kubectl drain --ignore-daemonsets --delete-emptydir-data your_node
    注: your-node をノード名に置き換えてください。
  3. エビクトした Pod が、新しいノードで実行されるようになったことを確認します。次のコマンドを実行します。
    kubectl get deploy -n your_namespace
    注: your_namespace を名前空間名に置き換えてください。
    出力例:
    NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/test                 4/4     4            4           5d3h
    

古いマネージドノードグループを削除する

既存ノードから DaemonSet 以外のすべてのポッドがエビクトされた後、古いマネージドノードグループを削除します。

関連情報

Kubernetes データプレーン

AWS公式更新しました 3ヶ月前
コメントはありません

関連するコンテンツ