Technical Blog テクニカルブログ
  1. HOME
  2. テクニカルブログ
  3. 【Amazon EKS】第一回 クラスターの作成からkubectlコマンドの実行までやってみた!

【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の紹介ページもありますので、一読していただけますと幸いです

目次へ戻る

ページのトップへ