このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? このページの下部までスクロールし、[GitHub でこのページの編集] を選択します。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
AWS Outposts で Amazon EKS クラスターをデプロイする
このトピックでは、Outpost でローカルクラスターを実行する際に考慮すべき事項について、概要を説明します。また、Outpost でローカルクラスターをデプロイする方法についても説明します。
考慮事項
重要
-
これらの考慮事項は、関連する Amazon EKS ドキュメントには記載されていません。Amazon EKS ドキュメントに記載されている他のトピックの情報が、ここに紹介する考慮事項と競合する場合は、こちらの考慮事項を優先してください。
-
これらの考慮事項は変更される可能性があり、変更は頻繁に行われる場合があります。そのため、このトピックは定期的に確認することをお勧めします。
-
考慮事項の多くは、AWS クラウド でクラスターを作成する場合の考慮事項とは異なります。
-
ローカルクラスターは Outpost ラックのみをサポートします。単一のローカルクラスターは、単一の論理 Outpost を構成する複数の物理 Outpost ラックにわたって実行できます。単一のローカルクラスターを複数の論理 Outposts にわたって実行することはできません。各論理 Outpost には、単一の Outpost ARN があります。
-
ローカルクラスターは、Outpost のアカウントで Kubernetes コントロールプレーンを実行および管理します。Kubernetes コントロールプレーンインスタンスでワークロードを実行したり、Kubernetes コントロールプレーンのコンポーネントを変更することはできません。これらのノードは Amazon EKS サービスによって管理されます。Kubernetes コントロールプレーンへの変更は、パッチ適用などの自動 Amazon EKS 管理アクションでは存続しません。
-
ローカルクラスターは、セルフマネージド理型アドオンとセルフマネージド型 Amazon Linux ノードグループをサポートしています。Amazon VPC CNI plugin for Kubernetes、kube-proxy、および CoreDNS アドオンはローカルクラスターに自動的にインストールされます。
-
ローカルクラスターでは、Outposts で Amazon EBS を使用する必要があります。お客様の Outpost では、Kubernetes コントロールプレーンストレージに使用できる Amazon EBS が必要です。
-
ローカルクラスターは、Outposts で Amazon EBS を使用します。お客様の Outpost では、Kubernetes コントロールプレーンストレージに使用できる Amazon EBS が必要です。Outposts は、Amazon EBS
gp2
ボリュームのみをサポートします。 -
Amazon EBS のバックアップ対象である Kubernetes
PersistentVolumes
は、Amazon EBS CSI ドライバーを使用してサポートされています。
前提条件
-
Outposts deployment options (Outposts デプロイオプション)、キャパシティに関する考慮事項に基づいて、AWS Outposts で Amazon EKS クラスターのインスタンスタイプとプレイスメントグループを選択する、および AWS Outposts で Amazon EKS クラスターの VPC とサブネットを作成する に精通していること。
-
既存の Outpost。詳細については、「AWS Outposts とは」を参照してください。
-
コンピュータまたは AWS CloudShell に、
kubectl
コマンドラインツールがインストールされていること。バージョンは、ご使用のクラスターの Kubernetes バージョンと同じか、1 つ前のマイナーバージョン以前、あるいはそれより新しいバージョンが使用できます。例えば、クラスターのバージョンが1.29
である場合、kubectl
のバージョン1.28
、1.29
、または1.30
が使用できます。kubectl
をインストールまたはアップグレードする方法については、「kubectl および eksctl のセットアップ」を参照してください。 -
ご使用のデバイスまたは AWS CloudShell で、バージョン
2.12.3
以降、または AWS Command Line Interface (AWS CLI) のバージョン1.27.160
以降がインストールおよび設定されていること。現在のバージョンを確認するには、「
」を参照してください。macOS のaws --version | cut -d / -f2 | cut -d ' ' -f1
yum
、apt-get
、または Homebrew などのパッケージマネージャは、AWS CLI の最新バージョンより数バージョン遅れることがあります。最新バージョンをインストールするには、「AWS Command Line Interface ユーザーガイド」の「AWS CLI のインストール、更新、およびアンインストール」と「aws configure でのクイック設定」を参照してください。AWS CloudShell にインストールされている AWS CLI バージョンは、最新バージョンより数バージョン遅れている可能性もあります。更新するには、「AWS CloudShell ユーザーガイド」の「ホームディレクトリへの AWS CLI のインストール」を参照してください。 -
Amazon EKS クラスターへの
create
およびdescribe
のアクセス許可を持つ IAM プリンシパル (ユーザーまたはロール)。詳細については、Outpost にローカル Kubernetes クラスターを作成しますおよびすべてのクラスターの一覧表示または説明を参照してください。
ローカルの Amazon EKS クラスターが作成される時点で、クラスターを作成する IAM プリンシパルが恒久的に追加されています。とりわけ、プリンシパルは管理者として、Kubernetes RBAC 承認テーブルに追加されます。このエンティティには system:masters
アクセス許可が付与されています。このエンティティの ID は、クラスター設定には表示されません。したがって、クラスターを作成したエンティティに注意し、削除しないようにすることが重要です。初期状態では、サーバーを作成したプリンシパルのみが、kubectl
を使用して Kubernetes API サーバーへのコールを実行することができます。コンソールを使用してクラスターを作成する場合は、クラスター上で kubectl
コマンドを実行する際、同じ IAM 認証情報が AWS SDK 認証情報チェーンにあることを確認する必要があります。クラスターの作成が完了したら、他の IAM プリンシパルにクラスターへのアクセスを付与できます。
ローカルの Amazon EKS ローカルクラスターを作成するには
eksctl
、AWS Management Console、AWS CLI、Amazon EKS API、AWS SDK
-
ローカルクラスターを作成する。
-
クラスターを作成すると、作成された Amazon EC2 コントロールプレーンのインスタンスを表示できます。
aws ec2 describe-instances --query 'Reservations[*].Instances[*].{Name:Tags[?Key==`Name`]|[0].Value}' | grep
my-cluster-
control-plane出力例は次のとおりです。
"Name": "
my-cluster
-control-plane-id1
" "Name": "my-cluster
-control-plane-id2
" "Name": "my-cluster
-control-plane-id3
"各インスタンスは
node-role.eks-local.amazonaws.com/control-plane
で汚染されているため、コントロールプレーンインスタンスでワークロードがスケジュールされることはありません。テイントの詳細については、Kubernetes ドキュメントの「テイントと容認」を参照してください。Amazon EKS はローカルクラスターの状態を継続的に監視します。セキュリティパッチや問題のあるインスタンスの修復などの自動管理アクションを実行します。ローカルクラスターがクラウドから切断されると、再接続時にクラスターが正常な状態に修復されるようアクションが実行されます。 -
eksctl
を使用してクラスターを作成した場合、このステップはスキップできます。eksctl
がこのステップを完了します。新しいコンテキストをkubectl
config
ファイルに追加して、kubectl
がクラスターと通信できるようにします。ファイルを作成し更新する手順については、「kubeconfig ファイルを作成して kubectl を EKS クラスターに接続する」を参照しください。aws eks update-kubeconfig --region
region-code
--namemy-cluster
出力例は次のとおりです。
Added new context arn:aws:eks:
region-code
:111122223333
:cluster/my-cluster
to/home/username/
.kube/config -
ローカルクラスターの Kubernetes API サーバーに接続するには、サブネットのローカルゲートウェイにアクセスするか、VPC 内から接続します。Outpost ラックをオンプレミスネットワークに接続する方法の詳細については、「AWS Outposts ユーザーガイド」の「How local gateways for racks work」(ラックのローカルゲートウェイの仕組み) を参照してください。ダイレクト VPC ルーティングを使用しており、Outpost サブネットにローカルゲートウェイへのルートがある場合、Kubernetes コントロールプレーンインスタンスのプライベート IP アドレスがローカルネットワークを介して自動的にブロードキャストされます。ローカルクラスターの Kubernetes API サーバーエンドポイントは Amazon Route 53 (Route 53) でホストされます。API サービスエンドポイントは、パブリック DNS サーバーによって Kubernetes API サーバーのプライベート IP アドレスに解決されます。
ローカルクラスターの Kubernetes コントロールプレーンインスタンスは、クラスターのライフサイクルを通じて変更されない固定プライベート IP アドレスを静的なエラスティックネットワークインターフェイスで構成されます。Kubernetes API サーバーとやり取りするマシンは、ネットワーク接続が切断されている間は Route 53 に接続できない場合があります。このような場合は、操作の継続性を確保するために、静的プライベート IP アドレスを使用して
/etc/hosts
を構成することをお勧めします。また、ローカル DNS サーバーを設定して Outpost に接続することもお勧めします。詳細については、「AWS Outpostsドキュメント」を参照してください。次のコマンドを実行して、クラスターとの通信が確立されていることを確認します。kubectl get svc
出力例は次のとおりです。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 28h
-
(オプション) AWS クラウド から切断された状態のときにローカルクラスターへの認証をテストします。手順については、AWS Outposts でローカル Amazon EKS クラスターを準備して、ネットワークの切断に備える を参照してください。
内部リソース
Amazon EKS はクラスターで次のリソースを作成します。リソースは、Amazon EKS 内部で使用するためのものです。クラスターが適切に機能しなくなるため、これらのリソースは編集または変更しないでください。
-
次のミラー Pods
: -
aws-iam-authenticator-
node-hostname
-
eks-certificates-controller-
node-hostname
-
etcd-
node-hostname
-
kube-apiserver-
node-hostname
-
kube-controller-manager-
node-hostname
-
kube-scheduler-
node-hostname
-
-
次のセルフマネージド型アドオン:
-
kube-system/coredns
-
kube-system/
kube-proxy
(最初のノードを追加するまで作成されません) -
kube-system/aws-node
(最初のノードを追加するまで作成されません)。ローカルクラスターは、クラスターネットワークに Amazon VPC CNI plugin for Kubernetes プラグインを使用します。コントロールプレーンインスタンス (名前がaws-node-controlplane-*
のポッド) の設定を変更しないでください。プラグインが新しいネットワークインターフェイスを作成したときに、デフォルト値を変更できる設定変数があります。詳細については、GitHub のドキュメントを参照してください。
-
-
次のサービス:
-
default/kubernetes
-
kube-system/kube-dns
-
-
eks.system
という名前のPodSecurityPolicy
-
eks:system:podsecuritypolicy
という名前のClusterRole
-
eks:system
という名前のClusterRoleBinding
-
デフォルトの PodSecurityPolicy
-
クラスターセキュリティグループに加えて、Amazon EKS は
eks-local-internal-do-not-use-or-edit-
という名前の AWS アカウント にセキュリティグループを作成します。このセキュリティグループにより、コントロールプレーンインスタンスで実行されている Kubernetes コンポーネント間のトラフィックが自由に流れるようになります。cluster-name
-uniqueid
推奨される次の手順は以下の通りです。
-
クラスターを作成した IAM プリンシパルに、AWS Management Console 内の Kubernetes リソースを表示するために必要な許可を付与します
-
IAM エンティティにクラスターへのアクセスを許可する。エンティティに Amazon EKS コンソールで Kubernetes リソースを表示させる場合は、必要なアクセス許可 をエンティティに付与します。
-
ネットワークの切断中に何が起こるかをよく理解してください。
-
etcd
のバックアップ計画を設定することを検討してください。Amazon EKS は、ローカルクラスターのetcd
の自動バックアップと復元をサポートしていません。詳細については、「Kubernetes ドキュメント」の「etcd
クラスターのバックアップ」を参照してください。2 つの主なオプションは、 etcdctl
を使用してスナップショットの作成を自動化する、または Amazon EBS ストレージボリュームのバックアップを使用することです。