Amazon Elastic Kubernetes Service (Amazon EKS) 内の Amazon Linux 2023 (AL2023) Amazon マシンイメージ (AMI) でカスタムスクリプト、セルフマネージドノード、またはカスタム起動テンプレートを使用しています。カスタムユーザーデータを指定したいです。
簡単な説明
AL 2023 では、YAML 構成スキーマを使用するノード初期化プロセスである nodeadm を使用します。セルフマネージドノードグループまたはカスタム起動テンプレートを使用するマネージドノードグループでは、新しいノードグループを作成する際、追加のクラスターメタデータを指定する必要があります。YAML 設定スキーマに含める必要があるメタデータの最小要件は、クラスター名、API サーバーエンドポイント、認証機関、サービス CIDR です。
最低限必要なパラメータを含む設定例:
---
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
cluster:
name: EKS-CLUSTER-NAME
apiServerEndpoint: API-SERVER-ENDPOINT
certificateAuthority: CERTIFICATE-AUTHORITY
cidr: SERVICE-IPv4-RANGE
詳細については、「Amazon EKS 最適化 Amazon Linux 2023 AMI が利用可能になりました」の「AL2023 にアップグレードする前に」セクションを参照してください。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
AL2023 上で動作する Amazon EKS AMI を使用する必要があります。AMI ID を確認するには、次の AWS CLI コマンド get-parameter を実行します。
aws ssm get-parameter --name /aws/service/eks/optimized-ami/kubernetes-version/ami-type/recommended/image_id \
--region region-code --query "Parameter.Value" --output text
注: kubernetes-version をサポート対象の Amazon EKS バージョンに、region-code を実際の AWS リージョンに置き換えます。さらに、ami-type を amazon-linux-2023/x86_64/standard (x86 ベースのインスタンス) または、amazon-linux-2023/arm64/standard (ARM インスタンス) に置き換えます。
最低限必要なパラメータを、次の形式でユーザーデータに追加します。
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="BOUNDARY"
--BOUNDARY
Content-Type: application/node.eks.aws
---
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec: ...
--BOUNDARY--
注: MIME マルチパートドキュメント内にパラメータを埋め込むこともできます。詳細については、cloud-init のウェブサイトで「Mime マルチパートアーカイブ」を参照してください。
DescribeCluster API を使用すると ClusterDetails が表示されます。最小限必須のパラメータを確認してください。たとえば、NodeConfigSpec を使用する際は、kubelet に config および flag kubelet オプションを渡します。詳細については、Kubernetes のウェブサイトで CredentialProviderConfig および kubelet を参照してください。
ユーザーデータ設定の例:
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="BOUNDARY"
--BOUNDARY
Content-Type: application/node.eks.aws
---
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
cluster:
apiServerEndpoint: API_SERVER_ENDPOINT
certificateAuthority: CERTIFICATE
cidr: SERVICE_IPv4_RANGE
name: CLUSTER_NAME
kubelet:
config:
maxPods: 17
flags:
- "--node-labels=key=value"
--BOUNDARY
Content-Type: text/x-shellscript;
#!/bin/bash
set -o xtrace
yum install htop -y
--BOUNDARY--
注: 起動テンプレートにユーザーデータを入力する際、コードに余分なスペースやインデントを含めないようにしてください。スペースを不適切に使用すると、nodeadm が起動せず、ノードがクラスターに参加できません。