【Amazon EKS】第一回 クラスターの作成からkubectlコマンドの実行までやってみた!
投稿者:高橋 慶多
はじめに
こんにちは! ハイブリッドクラウド部の高橋です。
ハイブリッドクラウド部ではAmazon EKSについてのテックブログを投稿していきます!
Amazon EKS(Amazon Elastic Kubernetes Service)は、Amazon Web Servicesが提供するKubernetes環境のマネージドサービスです。Kubernetesはコンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するオープンソースのシステムで、EKSを利用することでその運用負荷を軽減できます。
初回は、そんなAmazon EKSのクラスターとノードグループの作成を行い、踏み台サーバからクラスターへの接続が出来るようになるまでの手順をまとめます。
今回構築するサービスは以下の図のようになります。
目次
事前準備
1. クラスター用IAMロールの作成
クラスター作成時にクラスターにIAMロールをアタッチする必要があるため、事前に作成しておきます。
IAMのサービスページからロールを選択し、「ロールを作成」をクリックします。
「AWSのサービス」が選択されていることを確認します。
「他のAWSのサービスのユースケース」からEKSを選択し、EKS – Clusterを選択して次へ行きます。
許可ポリシーに「AmazonEKSClusterPolicy」があることを確認して次へ行きます。
ロール名を入力して作成します。
IAMロールが作成されたことを確認します。
クラスター用IAMロールには、もう一つのポリシーを付与する必要があります。
作成したロールを選択して、「ポリシーをアタッチ」をクリックします。
「AmazonEKSServicePolicy」を選択して、許可を追加をクリックします。
「AmazonEKSClusterPolicy」と「AmazonEKSServicePolicy」の二つがロールに付与されたことを確認します。
2. ノードグループ用IAMロールの作成
続いて、ノードグループに付与するIAMロールを作成します。
「AWSのサービス」が選択されていることを確認します。
「ユースケース」はEC2を選択し、次へ行きます。
ここで以下の3つのIAMポリシーを選択します。
- AmazonEKSWorkerNodePolicy
- AmazonEC2ContainerRegistryReadOnly
- AmazonEKS_CNI_Policy
ロール名を入力し、適切な3つのポリシーが選択されていることを確認して作成します。
ノードグループ用のロールが作成できました。
クラスターの作成
クラスターとノードグループの作成に必要な事前準備が完了しました。
次にAWSマネジメントコンソールからクラスターの作成をします。
EKSのサービスページから、クラスターを作成します。
クラスター名を入力し、「Kubernetesバージョン」と「クラスターサービスロール」を選択します。
クラスターサービスロールでは事前準備で作成したクラスター用IAMロールを選びます。
次へをクリックします。
適切なVPC、サブネットを指定します。
今回はプライベートサブネットを選択します。
「クラスターエンドポイントアクセス」はパブリックを指定して次へ行きます。
「コントロールプレーンのログ記録」について設定します。
今回は全てオンで進めます。
「Amazon EKS アドオン」の設定はデフォルトのまま次へ進みます。
「選択したアドオン設定を構成する」ページもデフォルトのまま次へ進みます。
最後に設定を確認したらクラスターを作成します。
クラスターが作成されました。
ノードグループの作成
続いて、クラスターにノードグループを作成します。
コンピューティングから、ノードグループを追加をクリックします。
ノードグループの名前を入力し、事前準備で作成したノードグループ用IAMロールを選択して次へ行きます。
AMIタイプ、キャパシティタイプ、インスタンスタイプ、ディスクサイズの設定を行います。
ノードグループのスケーリング設定と更新設定も併せて行います。
利用不可能な最大数とは、ワーカーノードが更新される際に、ノードが何個まで停止できるかを設定する項目です。
ノードを実行するサブネットを指定します。
今回はノードへのリモートアクセスを出来るように設定します。
事前に作成しておいたキーペアを選択します。このタイミングで作成することも可能です。
ノードへのリモートアクセスの許可設定を行い、次へ行きます。
設定内容が適切か確認し、ノードグループを作成します。
ノードグループが作成されたことを確認します。
クラスターへの接続設定
踏み台からkubectlコマンドを使用するためには、まずクラスターに接続する必要があります。
クラスターへの接続にはいくつかの手順が必要です。
1. kubectlのインストール
踏み台サーバにkubectlをインストールする必要があります。
以下のコマンドを順番に実行します。
#kubectl バイナリを Amazon S3 からダウンロード
$ curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl
#バイナリへの実行アクセス許可を適用
$ chmod +x ./kubectl
#バイナリを PATH のフォルダにコピー
$ mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH
#kubectlがインストールされていることを確認
$ kubectl version --short --client
2. AWS CLI ver2のインストール
この後の手順では、AWS CLIのバージョン 2.11.26 以降または 1.27.150 以降がインストールおよび設定されていることが前提条件となります。※既にインストールされている方はこの手順はスキップしてください。
今回こちら側では、踏み台サーバのAMIはAmazon Linux2で作成しています。
現時点でAmazon Linux2にデフォルトでインストールされているAWS CLIは ver1.18.147 のため、要件を満たしていません。
そのため今回は、デフォルトで存在しているCLIを一旦削除して、最新のCLIを改めてインストールします。
まずAWS CLI を削除します。
#CLIのパスを確認
$ which aws
=> /usr/bin/aws
#CLIを削除
$ sudo rm -rf /usr/bin/aws
#CLIが削除されたことを確認
$ aws --version
=> command not found: aws
次に、最新のAWS CLIをインストールします。
#インストールファイルをダウンロード
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
#インストーラを解凍
unzip awscliv2.zip
#インストールプログラムを実行
$ sudo ./aws/install
#最新のAWS CLIがインストールされたことを確認
$ aws --version
3. AWS認証情報の設定
AWS CLIで使用する認証情報の設定を行います。
もう少し後の手順で、クラスターへ接続するためにaws eks update-kubeconfigというコマンドを実行します。その際に、CLIの持つAWS認証情報がEKSクラスターを作成したものと一致している必要があります。そのために、クラスター作成者と同じ認証情報を与えるために、IAMユーザーの認証情報をCLIに設定します。
まず最初に、IAMユーザーのアクセスキーを作成します。
「ユースケース」はコマンドラインインターフェイス(CLI)を選択し、「確認」にチェックを入れて次へ行きます。
説明タグの設定(任意)をして、アクセスキーを作成します。
この時に表示される「アクセスキー」と「シークレットアクセスキー」をメモしておきます。
踏み台サーバで、aws configureコマンドを実行します。
ここで先ほどメモしておいた、アクセスキーとシークレットアクセスキーを入力します。
Default region name は今回はap-northeast-1(東京)にしています。
Default output formatでは、AWS CLIからの出力結果のフォーマットを設定します。
json、yaml、text、tableの中から選択します。
$ aws configure
AWS Access Key ID [None]: (IAMユーザーのアクセスキー)
AWS Secret Access Key [None]: (IAMユーザーのシークレットアクセスキー)
Default region name [None]: ap-northeast-1
Default output format [None]: json
aws sts get-caller-identityコマンドを実行して、
AWS CLIに認証情報が設定されたことを確認します。
$ aws sts get-caller-identity
{
"UserId": "ユーザーID",
"Account": "アカウントID",
"Arn": "arn:aws:iam::アカウントID:user/ユーザー名"
}
4. kubeconfig ファイルを作成
kubeconfigファイルには、クラスタへの接続情報(エンドポイントなど)やユーザーの認証情報が含まれており、これを作成することでクラスターに接続できます。
kubeconfigファイルを作成するために、以下のコマンドを実行します。
成功すると、下記のような実行結果が返ってきます。
※AccessDeniedException エラーが発生する場合は、eks:DescribeClusterの権限がIAMユーザーに不足している可能性があります。
$ aws eks update-kubeconfig --region リージョンコード --name クラスター名
Added new context arn:aws:eks:ap-northeast-1:アカウントID:cluster/NIC_Cluster to /home/ec2-user/.kube/config
5. kubectlコマンドを実行してみる
クラスターへの接続設定が完了したため、実際にkubectlコマンドを実行してみます。
kubectl get nodesコマンドで、ノードの情報を取得します。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-10-0-20-171.ap-northeast-1.compute.internal Ready <none> 2m58s v1.25.11-eks-a5565ad
ip-10-0-21-224.ap-northeast-1.compute.internal Ready <none> 3m v1.25.11-eks-a5565ad
ノードが確認できました!
まとめ
今回のブログでは、以下のステップでAmazon EKSクラスターの設定から操作までの具体的な手順を紹介しました。
- 事前準備: IAMロールの作成
- クラスターの作成
- ノードグループの作成
- クラスターへの接続設定
これらのステップにより、EKSクラスターを設定し、踏み台サーバからkubectlを使用してクラスタを管理できるようになりました。EKSのセットアップ方法について、このブログが皆さまの一助となれば幸いです。この機会に、皆さまもぜひEKSを触ってみてください!
第二回では、AWS Load Balancer Controllerのインストール、アプリケーションのデプロイとそのアクセスまで行います。次回も楽しみにお待ちください!
AWS社とAWSソリューションプロバイダープログラム契約を結び、AWSのアカウントの手配から設計、環境構築、システム運用までワンストップのソリューションを提供いたします。
コンテナ技術には特に力を入れており、Amazon EKSだけでなく、Red Hat OpenShiftのソリューションもございます。
OpenShiftのソリューションページや、運用ソリューションであるNI+C Multicloud MSPの紹介ページもありますので、一読していただけますと幸いです