ワーカーノードを Amazon EKS クラスターに参加させるにはどうすればよいですか?

所要時間4分
0

ワーカーノードが Amazon Elastic Kubernetes Service (Amazon EKS) クラスターに参加しません。

簡単な説明

ワーカーノードを Amazon EKS クラスターに参加させるには、以下の手順を実行します。

  • AWS Systems Manager 自動化ランブックを使用して、一般的な問題を特定してください。
  • Amazon 仮想プライベートクラウド (Amazon VPC) の DNS サポートがあるかどうかを確認します。
  • インスタンスプロファイルのワーカーノードに正しい権限があるかを確認します。
  • ワーカーノードのユーザーデータを設定します。
  • Amazon VPC サブネットにネットワークが正しく設定されているかを確認します。
  • ワーカーノードが EKS クラスターと同じ VPC にあることを確認します。
  • aws-auth ConfigMap をワーカーノードの NodeInstanceRole で更新してください。
  • ワーカーノードのセキュリティグループ要件を満たしてください。
  • ワーカーノードのタグを設定します。
  • ワーカーノードが EKS クラスターの API サーバーエンドポイントに到達できるかを確認します。
  • クラスターロールが EKS クラスターに正しく設定されているかを確認します。
  • AWS セキュリティトークンサービス (AWS STS) エンドポイントをサポートする AWS リージョンの場合は、リージョナル AWS STS エンドポイントがアクティブになっているかを確認します。
  • AMI が Amazon EKS と連携するように設定され、必要なコンポーネントが含まれているかを確認してください。
  • SSH を使用してワーカーノードの Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに接続し、 kubelet エージェントログでエラーを検索します。
  • Amazon EKS ログコレクタースクリプトを使用してエラーをトラブルシューティングします。

**重要:**以下の手順には、以下の条件が満たされない環境にワーカーノードを登録するために必要な構成は含まれていません。

  • クラスターの VPC では、設定パラメータのドメイン名サーバーが** AmazonProvidedDNS **に設定されています。 詳細については、「DHCP オプションセット」を参照してください。
  • Amazon EKS に最適化された Linux Amazon マシンイメージ (AMI) を使用してワーカーノードを起動しています。
    注:Amazon EKS に最適化された Linux AMI には、** /etc/eks/bootstrap.sh ** ブートストラップスクリプトなど、ワーカーノードをクラスターに登録するために必要なすべての設定が用意されています。

解決方法

Systems Manager 自動化ランブックを使用して一般的な問題を特定してください

AWS Support-TroubleshootEksWorkerNode ランブックを使用して、ワーカーノードがクラスターに参加できない一般的な問題を見つけてください。

重要:自動化が機能するには、ワーカーノードに Systems Manager にアクセスする権限があり、Systems Manager が実行されている必要があります。このアクセス権限を付与するには、 Amazon SSMManagedInstanceCore ポリシーを AWS アイデンティティおよびアクセス管理 (IAM) ロールにアタッチしてください。これは Amazon EC2 インスタンスプロファイルに対応する IAM ロールです。これは、eksctl を使用して作成する Amazon EKS マネージドノードグループのデフォルト設定です。クラスター名には次の形式を使用してください:\ [-a-za-Z0-9] {1,100} $。

  1. ランブックを開きます
  2. AWS マネジメントコンソールの AWS リージョンがクラスターと同じリージョンに設定されているかを確認します。
    注:ランブックの詳細については、ランブックのドキュメント詳細セクションを参照してください。
  3. 入力パラメータ」セクションの「clusterName」フィールドにクラスターの名前を指定し、「WorkerID」フィールドに Amazon EC2 インスタンス ID を指定します。
  4. **(オプション) ** AutomationAssumeRole フィールドで、システムマネージャーがアクションを実行できるようにする IAM ロールを指定します。指定しない場合、現在の IAM エンティティの IAM 権限を使用して Runbook 内のアクションを実行します。
  5. **[実行]**を選択します。
  6. **Outputs ** セクションをチェックして、ワーカーノードがクラスターに参加しない理由と、それを解決するための手順を確認してください。

Amazon VPC が DNS をサポートしていることを確認する

EKS クラスターの Amazon VPC で DNS ホスト名DNS 解決がオンになっているかを確認します。

これらの属性を確認してオンにするには、次の手順を実行してください。

  1. Amazon VPC コンソールを開きます。
  2. ナビゲーションペインで [Your VPC] を選択します。
  3. 編集する VPC を選択します。
  4. 詳細」タブから、 DNS ホスト名と DNS 解決が有効になっているかどうかを確認します。
  5. オンになっていない場合は、両方の属性で [有効にする] を選択します。
  6. [変更の保存] を選択します。

詳細については、「](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-updating)VPC の DNS 属性の表示と更新[ 」を参照してください。

インスタンスプロファイルのワーカーノードに適切な権限があることを確認する

インスタンスプロファイルのワーカーノードに関連付けられているロールに次の AWS 管理ポリシーをアタッチします。

  • Amazon EKS ワーカーノードポリシー
  • Amazon EKS\ _CNI\ _ポリシー
  • Amazon EC2 コンテナレジストリ読み取り専用

ポリシーをロールにアタッチするには、「IAM ID 権限の追加 (コンソール)」を参照してください。

ワーカーノードのユーザーデータを設定します

**注:**AWS CloudFormation を使用してワーカーノードを起動する場合、ワーカーノードのユーザーデータを設定する必要はありません。代わりに、AWS マネジメントコンソールの「自己管理型 Amazon Linux ノードを起動する」手順に従ってください。

マネージドノードグループを使用してワーカーノードを起動する場合、Amazon EKS に最適化された Amazon Linux AMI でユーザーデータを設定する必要はありません。カスタム AMI を使用してマネージドノードグループを通じてワーカーノードを起動する場合にのみ、ユーザーデータを設定する必要があります。

カスタム起動テンプレートで Amazon マネージドノードグループを使用している場合は、起動テンプレートに正しいユーザーデータを指定してください。Amazon EKS クラスターが VPC エンドポイントを使用して接続を行う完全専用クラスターである場合は、ユーザーデータに以下を指定します。

  • 認証局
  • API サーバーエンドポイント
  • DNS クラスタ IP

必要に応じて、Amazon EKS に最適化された Linux/Bottlerocket AMI に含まれている bootstrap.sh ファイルに引数を渡すためのユーザーデータを提供してください

ワーカーノードのユーザーデータを設定するには、 Amazon EC2 インスタンスを起動するときにユーザーデータを指定します。

たとえば、Terraform などのサードパーティツールを使用している場合は、ユーザーデータフィールドを更新して EKS ワーカーノードを起動します。

#!/bin/bash
set -o xtrace
/etc/eks/bootstrap.sh ${ClusterName} ${BootstrapArguments}

重要:

  • **$ {clusterName} ** をご使用の EKS クラスターの名前に置き換えてください。
  • **$ {bootstraParguments} ** を追加のブートストラップ値に置き換えるか、このプロパティを空白のままにしてください。

Amazon VPC サブネットにネットワークが正しく設定されているか確認する

  • インターネットゲートウェイを使用する場合は、ブラックホールなしでルートテーブルに正しく接続されているかを確認してください。
  • NAT ゲートウェイを使用する場合は、パブリックサブネットで正しく設定されているかを確認してください。また、ルートテーブルにブラックホールが含まれていないかを確認してください。
  • 完全プライベートクラスターに VPC プライベートエンドポイントを使用する場合は、次のエンドポイントがあるかを確認してください。
    com.amazonaws.region.ec2 (インターフェイスエンドポイント)
    com.amazonaws.region.ecr.api (インターフェイスエンドポイント)
    com.amazonaws.region.ecr.dkr (インターフェイスエンドポイント)
    com.amazonaws.region.s3 (ゲートウェイエンドポイント)
    com.amazonaws.region.sts (インターフェイスエンドポイント)
  • サービスアカウントの IAM ロールを使用して設定したポッドは、AWS セキュリティトークンサービス (AWS STS) API 呼び出しから認証情報を取得します。アウトバウンドのインターネットアクセスがない場合は、VPC に AWS STS VPC エンドポイントを作成して使用する必要があります。
  • VPC エンドポイントのセキュリティグループには、ポート 443 からのトラフィックを許可するインバウンドルールが必要です。詳細については、「セキュリティグループを使用してリソースへのトラフィックを制御する」を参照してください。
  • IAM ユーザーまたはロールにアタッチされているポリシーに必要なアクセス権限があることを確認します。

**注:**他の AWS サービスを使用している場合は、それらのエンドポイントを作成する必要があります。一般的に使用されるサービスとエンドポイントについては、「プライベートクラスターの要件」を参照してください。また、ユースケースに基づいてエンドポイントサービスを作成することもできます。

ワーカーノードが EKS クラスターと同じ Amazon VPC にあることを確認する

  1. Amazon EKS コンソールを開きます。
  2. [クラスター] を選択し、次にクラスターを選択します。
  3. ネットワーキングセクションで、クラスターに関連付けられているサブネットを特定します。

**注:**ワーカーノードを起動するサブネットはさまざまな設定が可能です。サブネットは同じ Amazon VPC に存在し、適切にタグ付けされている必要があります。Amazon EKS は、クラスターの作成時に設定したサブネットのタグのみを自動的に管理します。そのため、サブネットには必ず適切なタグを付けてください。

詳細については、「サブネットの要件と考慮事項」を参照してください。

aws-auth ConfigMap をワーカーノードの NodeInstanceRole で更新してください

aws-auth ConfigMap がインスタンスプロファイルではなくワーカーノードの IAM ロールで正しく設定されているかを確認します。

aws-auth ConfigMap ファイルを確認するには、以下のコマンドを実行します。

kubectl describe configmap -n kube-system aws-auth

aws-auth ConfigMap が正しく設定されていない場合、次のエラーが表示されます。

571 reflector.go:153\] k8s.io/kubernetes/pkg/kubelet/kubelet.go:458 : Failed to list \*v1.Node: Unauthorized

ワーカーノードのセキュリティグループ要件を満たしてください

コントロールプレーンのセキュリティグループとワーカーノードセキュリティグループが、インバウンドとアウトバウンドトラフィックのベストプラクティスとなる設定で構成されているかを確認します。また、カスタムネットワーク ACL ルールが、ポート 80443 、および 1025-655350.0.0.0/0 からのトラフィックを許可するように設定されていることを確認してください。

ワーカーノードのタグを設定します

ワーカーノードのタグプロパティについては、「キー」を **Kubernetes.io/cluster/clusterName **に設定し、「」を「所有」に設定します。

詳細については、「VPC の要件と考慮事項」を参照してください。

ワーカーノードが EKS クラスターの API サーバーエンドポイントに到達できるかを確認します。

次の点を考慮に入れてください。

  • NAT またはインターネットゲートウェイを経由して API エンドポイントにルーティングするルートテーブルに関連付けられたサブネットでワーカーノードを起動することができます。
  • 制限付きのプライベートネットワークでワーカーノードを起動する場合は、ワーカーノードが EKS API サーバーエンドポイントに到達できることを確認してください。
  • AmazonProvidedDNS の代わりにカスタム DNS を使用する Amazon VPC でワーカーノードを起動すると、エンドポイントが解決されない可能性があります。エンドポイントへのパブリックアクセスが非アクティブ化され、プライベートアクセスのみがアクティブ化されると、未解決のエンドポイントが発生します。詳細については、「Amazon EKS クラスターエンドポイントの DNS 解決を有効にする」を参照してください。

クラスターロールがクラスターに正しく設定されているかを確認します

クラスターには、AmazonEKsClusterPolicy の最低限の権限を持つクラスターロールが必要です。また、クラスターとの信頼関係によっては、eks.amazonaws.com サービスが sts:AssumeRole に対応している必要があります。

例:

{
  "Version": "2012-10-17",
  "Statement": \[
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "eks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  \]
}

詳細については、「Amazon EKS クラスター IAM ロール」を参照してください。

リージョナル STS エンドポイントがアクティブになっていることを確認する

クラスターが STS エンドポイントをサポートするリージョンにある場合はリージョン STS エンドポイントをアクティブ化して kubelet を認証します。これで、 kubelet はノードオブジェクトを作成できます。

AMI が EKS と連携するよう設定され、必要なコンポーネントが含まれているかを確認してください。

ワーカーノードに使用されている AMI が Amazon EKS に最適化された Amazon Linux AMI ではない場合、次の Kubernetes コンポーネントがアクティブな状態であることを確認してください。

  • kubelet
  • AWS IAM Authenticator
  • ドッカー (Amazon EKS バージョン 1.23 およびそれ以前)
  • コンテナ

SSH で EKS ワーカーノードインスタンスに接続し、kubelet エージェントのログを確認します

kubelet エージェントは systemd サービスとして設定されています。

  1. kubelet ログを検証するには、次のコマンドを実行します。
journalctl -f -u kubelet
  1. 問題を解決するには、Amazon EKS トラブルシューティングガイドで一般的なエラーを確認してください。

Amazon EKS ログコレクタースクリプトを使用してエラーをトラブルシューティングする

ログファイルとオペレーティングシステムログを使用して Amazon EKS の問題をトラブルシューティングできます。

SSH を使用して問題のあるワーカーノードに接続し、次のスクリプトを実行する必要があります。

curl -O https://raw.githubusercontent.com/awslabs/amazon-eks-ami/master/log-collector-script/linux/eks-log-collector.sh

sudo bash eks-log-collector.sh

関連情報

Amazon EKS マネージドノードグループ作成の失敗をトラブルシューティングする方法を教えてください。

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ