クイックスタート: ウェブアプリケーションをデプロイしてデータを保存する
このクイックスタートチュートリアルでは、eksctl
このチュートリアルでは、次の作業を行いました。
以下の eksctl
クラスターテンプレートを使用して、マネージド型ノードグループを持つ Amazon EKS クラスターを構築します。これは次のコンポーネントで構成されます。
- VPC 設定
-
以下の eksctl クラスターテンプレートを使用すると、eksctl はクラスターの IPv4 仮想プライベートクラウド (VPC) を自動的に作成します。デフォルトでは、eksctl はパブリックエンドポイントとプライベートエンドポイントの両方を作成するだけでなく、すべてのネットワーク要件に対応する VPC を設定します。
- インスタンスタイプ
-
t3.medium インスタンスタイプを使用します。このインスタンスタイプは、コンピューティング、メモリ、ネットワークリソースのバランスが取れた組み合わせを提供します。需要が時折急増する可能性のある、CPU 使用率が中程度のアプリケーションに最適です。
- 認証
-
IRSA マッピングを確立して、Kubernetes ポッドと AWS サービス間の通信を容易にします。テンプレートは、認証と認可のために OpenID Connect (OIDC) エンドポイント をセットアップするように設定されています。また、アプリケーションの公開とトラフィックの管理を担当するコントローラーである AWS Load Balancer Controller (LBC)
のサービスアカウントも確立します。 - データの永続性
-
AWS EBS CSI ドライバーマネージドアドオンを統合して、ポッドの再起動や障害が発生するシナリオでも、アプリケーションデータの永続性を確保します。テンプレートは、アドオンをインストールしてサービスアカウントを確立するように設定されています。
- 外部アプリケーションアクセス
-
AWS Load Balancer Controller (LBC) アドオンをセットアップして統合し、2048 ゲームアプリケーション
を公開し、LBC を使用して Application Load Balancer (ALB) を動的にプロビジョニングします。
前提条件
開始する前に、Amazon EKS を使用するように以下の前提条件が設定されていることを確認してください。
ステップ 1: クラスターを設定する
このセクションでは、2 つのノードを含む t3.mediumeksctl
アドオンについては、eksctl
ドキュメントの「Discovering addons
-
cluster-config.yaml
ファイルを作成して、次の内容を貼り付けます。region-code
を、us-east-1
などの有効なリージョンに置き換えます。次に出力例を示します。
apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: web-quickstart region:
region-code
managedNodeGroups: - name: eks-mng instanceType: t3.medium desiredCapacity: 2 iam: withOIDC: true serviceAccounts: - metadata: name: aws-load-balancer-controller namespace: kube-system wellKnownPolicies: awsLoadBalancerController: true addons: - name: aws-ebs-csi-driver wellKnownPolicies: # Adds an IAM service account ebsCSIController: true cloudWatch: clusterLogging: enableTypes: ["*"] logRetentionInDays: 30
ステップ 2: クラスターを作成する
これで、Amazon EKS クラスターを作成する準備が整いました。このプロセスが完了するまでに数分かかります。ステータスをモニタリングする場合は、AWS CloudFormation
-
Amazon EKS クラスターを作成し、cluster-config.yaml を指定します。
eksctl create cluster -f cluster-config.yaml
注記
レスポンスで
Error: checking STS access
を受け取った場合は、現在のシェルセッションに正しいユーザー ID を使用しているか確認してください。また、名前付きプロファイル (--profile clusteradmin
など) を指定するか、AWS CLI の新しいセキュリティトークンを取得する必要がある場合があります。完了すると、以下のようなレスポンス出力が表示されます。
2024-07-04 21:47:53 [✔] EKS cluster "web-quickstart" in "region-code" region is ready
ステップ 3: AWS Load Balancer Controller (LBC) を使用してアプリケーションへの外部アクセスをセットアップする
クラスターが運用可能になったら、次のステップとして、コンテナ化されたアプリケーションを外部からアクセスできるようにします。これは、Application Load Balancer (ALB) をデプロイして、クラスター外のトラフィックをサービス、つまりアプリケーションに転送することで実現されます。クラスターを作成したときに、ALB を動的に作成するために必要なアクセス許可を持つ Load Balancer Controller (LBC)
環境変数を設定するには
-
Amazon EKS クラスターの
CLUSTER_REGION
環境変数を設定します。region-code
のサンプル値を置き換えます。export CLUSTER_REGION=
region-code
-
Amazon EKS クラスターの
CLUSTER_VPC
環境変数を設定します。export CLUSTER_VPC=$(aws eks describe-cluster --name web-quickstart --region $CLUSTER_REGION --query "cluster.resourcesVpcConfig.vpcId" --output text)
AWS Load Balancer Controller (LBC) をインストールするには
AWS Load Balancer Controller (LBC) は、Kubernetes のカスタムリソース定義 (CRD) を活用して AWS Elastic Load Balancer (ELB) を管理します。これらの CRD は、ロードバランサーや TargetGroupBindings などのカスタムリソースを定義し、Kubernetes クラスターがそれらを認識および管理できるようにします。
-
Helm
を使用して、Amazon EKS チャートリポジトリを Helm に追加します。 helm repo add eks https://aws.github.io/eks-charts
-
リポジトリを更新して、Helm がチャートの最新バージョンを認識していることを確認します。
helm repo update eks
-
次の Helm
コマンドを実行して、カスタムリソース定義 (CRD) と AWS Load Balancer Controller (AWS LBC) のメインコントローラーを同時にインストールします。CRD のインストールをスキップするには、 --skip-crds
フラグを渡します。これは、CRD が既にインストールされている場合や、特定のバージョンの互換性が必要な場合、あるいはアクセスコントロールとカスタマイズのニーズが厳しい環境において便利です。helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ --namespace kube-system \ --set clusterName=web-quickstart \ --set serviceAccount.create=false \ --set region=${CLUSTER_REGION} \ --set vpcId=${CLUSTER_VPC} \ --set serviceAccount.name=aws-load-balancer-controller
以下のようなレスポンス出力が表示されます。
NAME: aws-load-balancer-controller LAST DEPLOYED: Wed July 3 19:43:12 2024 NAMESPACE: kube-system STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: AWS Load Balancer controller installed!
ステップ 4: 2048 ゲームサンプルアプリケーションをデプロイする
ロードバランサーがセットアップされたので、クラスター内のコンテナ化されたアプリケーションの外部アクセスを有効にします。このセクションでは、人気のある「2048 ゲーム」をクラスター内のサンプルアプリケーションとしてデプロイする手順について説明します。提供されるマニフェストには、Application Load Balancer (ALB) のカスタム注釈、具体的には「scheme」の注釈
-
--save-config
フラグを付けてgame-2048
という Kubernetes 名前空間を作成します。kubectl create namespace game-2048 --save-config
以下のようなレスポンス出力が表示されます。
namespace/game-2048 created
-
2048 ゲームサンプルアプリケーション
をデプロイします。 kubectl apply -n game-2048 -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.8.0/docs/examples/2048/2048_full.yaml
このマニフェストは、
game-2048
名前空間の Kubernetes デプロイ、サービス、およびイングレスをセットアップし、クラスター内でgame-2048
アプリケーションをデプロイして公開するために必要なリソースを作成します。これには、ポート80
でのデプロイを公開するservice-2048
という名前のサービスの作成と、受信 HTTP トラフィックのルーティングルールと internet-facing Application Load Balancer (ALB) の注釈を定義するingress-2048
という名前のイングレスリソースの作成が含まれます。以下のようなレスポンス出力が表示されます。namespace/game-2048 configured deployment.apps/deployment-2048 created service/service-2048 created ingress.networking.k8s.io/ingress-2048 created
-
次のコマンドを実行して、
game-2048
名前空間のイングレスリソースを取得します。kubectl get ingress -n game-2048
以下のようなレスポンス出力が表示されます。
NAME CLASS HOSTS ADDRESS PORTS AGE ingress-2048 alb * k8s-game2048-ingress2-eb379a0f83-378466616.
region-code
.elb.amazonaws.com 80 31sApplication Load Balancer (ALB) がプロビジョニングされるまで数分待ってから、次のステップを開始する必要があります。
-
ウェブブラウザを開き、前のステップの
ADDRESS
を入力してウェブアプリケーションにアクセスします。例:k8s-game2048-ingress2-eb379a0f83-378466616.
region-code
.elb.amazonaws.comブラウザに 2048 ゲームが表示されるはずです。プレイしてください!
ステップ 5: Amazon EBS CSI ドライバーノードを使用してデータを保持する
2048 ゲームが Amazon EKS クラスターで稼働しているので、Amazon EBS CSI ドライバーマネージドアドオンを使用してゲームデータが安全に保持されるようにします。このアドオンは、作成プロセス中にクラスターにインストールされました。この統合は、Kubernetes ポッドまたはノードが再起動された場合や置き換えられた場合にも、ゲームの進行状況とデータを保持するのに不可欠です。
-
EBS CSI ドライバーのストレージクラス
を作成します。 kubectl apply -n game-2048 -f https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/examples/kubernetes/dynamic-provisioning/manifests/storageclass.yaml
-
ゲームデータのストレージをリクエストするには、永続ボリュームのクレーム (PVC) を作成します。
ebs-pvc.yaml
という名前のファイルを作成し、そのファイルに以下の内容を追加します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: game-data-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: ebs-sc
-
PVC をクラスターに適用します。
kubectl apply -f ebs-pvc.yaml
以下のようなレスポンス出力が表示されます。
persistentvolumeclaim/game-data-pvc created
-
次に、データの保存にこの PVC を使用するように 2048 ゲームデプロイを更新する必要があります。次のデプロイは、ゲームデータの保存に PVC を使用するように設定されています。
ebs-deployment.yaml
という名前のファイルを作成し、そのファイルに以下の内容を追加します。apiVersion: apps/v1 kind: Deployment metadata: namespace: game-2048 name: deployment-2048 spec: replicas: 3 # Adjust the number of replicas as needed selector: matchLabels: app.kubernetes.io/name: app-2048 template: metadata: labels: app.kubernetes.io/name: app-2048 spec: containers: - name: app-2048 image: public.ecr.aws/l6m2t8p7/docker-2048:latest imagePullPolicy: Always ports: - containerPort: 80 volumeMounts: - name: game-data mountPath: /var/lib/2048 volumes: - name: game-data persistentVolumeClaim: claimName: game-data-pvc
-
更新されたデプロイを適用します。
kubectl apply -f ebs-deployment.yaml
以下のようなレスポンス出力が表示されます。
deployment.apps/deployment-2048 configured
これらのステップで、Amazon EKS の 2048 ゲームが Amazon EBS CSI ドライバーを使用してデータを保持するようにセットアップされました。これにより、ポッドやノードに障害が発生した場合でも、ゲームの進行状況とデータは安全になります。
このチュートリアルが気に入った場合は、フィードバックを提供してお知らせください。これにより、このようなユースケース固有のクイックスタートチュートリアルをより多く提供できるようになります。
ステップ 6: クラスターとノードを削除する
このチュートリアルのために作成したクラスターとノードの使用が終了したら、クリーンアップのために、次のコマンドを使用してそれらのクラスターとノードを削除する必要があります。クリーンアップする前にこのクラスターでやることがある場合は、「次のステップ」を参照してください。
eksctl delete cluster -f ./cluster-config.yaml
完了すると、以下のようなレスポンス出力が表示されます。
2024-07-05 17:26:44 [✔] all cluster resources were deleted
次のステップ
以下のトピックは、クラスターの機能を拡張するのに役立ちます。
-
クラスターを作成した IAM プリンシパルは、
kubectl
または AWS Management Console を使用して Kubernetes API サーバーを呼び出すことができる唯一のプリンシパルです。他の IAM プリンシパルがクラスターにアクセスできるようにする場合は、それらを追加する必要があります。詳細については、IAM ユーザーおよびロールに Kubernetes API へのアクセスを付与するおよび必要なアクセス許可を参照してください。 -
本番用にクラスターをデプロイする前に、クラスターとノードのすべての設定を理解しておくことをお勧めします。Amazon EC2 ノードへの SSH アクセスの有効化など一部の設定は、クラスターの作成時に行う必要があります。
-
クラスターのセキュリティを強化するには、サービスアカウントの IAM ロールを使用する Amazon VPC コンテナネットワークインターフェイスプラグインの設定を行ってください。
さまざまなタイプのクラスターを作成する方法を調べるには: