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

AL2023 Amazon EKS ノードでカスタムユーザーデータを使用する方法を教えてください。

所要時間2分
0

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-typeamazon-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 が起動せず、ノードがクラスターに参加できません。

コメントはありません

関連するコンテンツ