クイックスタート: ウェブアプリケーションをデプロイしてデータを保存する - アマゾン EKS

このページの改善にご協力ください

本ユーザーガイドの改善にご協力いただけませんか? すべてのページの右側のペインにある GitHub リンクで、このページの編集を選択してください。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。

クイックスタート: ウェブアプリケーションをデプロイしてデータを保存する

ゲームアプリケーションをデプロイし、そのデータを Amazon EKS に保持する

このクイックスタートチュートリアルでは、eksctl を使用して 2048 ゲームサンプルアプリケーションをデプロイし、そのデータを Amazon EKS Auto Mode クラスターに保持する手順を示します。Amazon EKS Auto Mode は、クラスターブロックストレージ、ネットワーク、ロードバランシング、コンピューティングの自動スケーリングのルーチンタスクを自動化します。

先に進んだら、クラスターのセットアッププロセスについて説明します。Amazon EKS Auto Mode は、EC2 マネージドインスタンスを使用したノードの作成、アプリケーションロードバランサーの作成、EBS ボリュームの作成のタスクを自動化します。

全体としては、AWS サービスとの完全統合に必要なカスタム注釈を含むサンプルワークロードをデプロイします。

このチュートリアルでは、次の作業を行いました。

次の eksctl クラスターテンプレートを使用して、自動ノードプロビジョニング用の EKS 自動モードでクラスターを構築します。

VPC 設定 以下の eksctl クラスターテンプレートを使用すると、eksctl はクラスターの IPv4 仮想プライベートクラウド (VPC) を自動的に作成します。デフォルトでは、eksctl はパブリックエンドポイントとプライベートエンドポイントの両方を作成するだけでなく、すべてのネットワーク要件に対応する VPC を設定します。

インスタンス管理 EKS Auto Mode は、Kubernetes アプリケーションの需要に基づいて、EKS クラスター内のノードを動的に追加または削除します。

データ永続性 EKS Auto Mode のブロックストレージ機能を使用して、ポッドの再起動や障害が発生するシナリオでも、アプリケーションデータの永続性を確保します。

外部アプリケーションアクセス EKS Auto Mode の負荷分散機能を使用して、Application Load Balancer (ALB) を動的にプロビジョニングします。

前提条件

開始する前に、Amazon EKS を使用するように以下の前提条件が設定されていることを確認してください:

  • AWS CLI のセットアップと認証情報の設定

  • eksctl をインストールする

  • kubectl をインストールする

詳細については、「Amazon EKS を使用するようにセットアップする」を参照してください。

クラスターを設定する

このセクションでは、動的ノードプロビジョニングに EKS Auto Mode を使用してクラスターを作成します。

cluster-config.yaml ファイルを作成して、次の内容を貼り付けます。region-code を、us-east-1 などの有効なリージョンに置き換えます。

apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: web-quickstart region: <region-code> autoModeConfig: enabled: true

これで、クラスターを作成する準備が整いました。

Amazon EKS クラスターを作成する:

eksctl create cluster -f cluster-config.yaml
重要

eksctl を使用してクラスターを作成しない場合は、VPC サブネットに手動でタグ付けする必要があります。

IngressClass を作成する

EKS Auto Mode の Kubernetes IngressClass を作成します。IngressClass は、EKS Auto Mode が Ingress リソースを処理する方法を定義します。このステップでは、EKS Auto Mode の負荷分散機能を設定します。アプリケーションの Ingress リソースを作成すると、EKS Auto Mode はこの IngressClass を使用してロードバランサーを自動的にプロビジョニングおよび管理し、Kubernetes アプリケーションを AWS ロードバランシングサービスと統合します。

次の yaml ファイルを ingressclass.yaml として保存します。

apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb annotations: ingressclass.kubernetes.io/is-default-class: "true" spec: controller: eks.amazonaws.com/alb

IngressClass をクラスターに適用します。

kubectl apply -f ingressclass.yaml

2048 ゲームサンプルアプリケーションをデプロイする

このセクションでは、人気のある「2048 ゲーム」をクラスター内のサンプルアプリケーションとしてデプロイする手順について説明します。提供されたマニフェストには、Application Load Balancer (ALB) のカスタム注釈が含まれています。これらの注釈は EKS と統合され、受信 HTTP トラフィックを「internet-facing」として処理し、ターゲットタイプ「ip」を使用して「game-2048」名前空間の適切なサービスにルーティングするように指示します。

  1. --save-config フラグを付けて game-2048 という Kubernetes 名前空間を作成します。

    kubectl create namespace game-2048 --save-config

    以下のようなレスポンス出力が表示されます。

    namespace/game-2048 created
  2. 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
  3. 次のコマンドを実行して、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 31s

    Application Load Balancer (ALB) がプロビジョニングされるまで数分待ってから、次のステップを開始する必要があります。

  4. ウェブブラウザを開き、前のステップの ADDRESS を入力してウェブアプリケーションにアクセスします。以下に例を示します。

    k8s-game2048-ingress2-eb379a0f83-378466616.region-code.elb.amazonaws.com

    ブラウザに 2048 ゲームが表示されるはずです。プレイしてください!

    2048 ゲームをプレイする

Amazon EKS 自動モードを使用してデータを永続化する

2048 ゲームが Amazon EKS クラスターで稼働しているので、Amazon EKS Auto Mode のブロックストレージ機能を使用してゲームデータが安全に保持されるようにします。

  1. storage-class.yaml という名前のファイルを作成します。

    apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: auto-ebs-sc annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: ebs.csi.eks.amazonaws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp3 encrypted: "true"
  2. StorageClass を適用します:

    kubectl apply -f storage-class.yaml
  3. ゲームデータのストレージをリクエストするには、永続ボリュームのクレーム (PVC) を作成します。ebs-pvc.yaml という名前のファイルを作成し、そのファイルに以下の内容を追加します。

    apiVersion: v1 kind: PersistentVolumeClaim metadata: name: game-data-pvc namespace: game-2048 spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: auto-ebs-sc
  4. PVC をクラスターに適用します。

    kubectl apply -f ebs-pvc.yaml

    以下のようなレスポンス出力が表示されます。

    persistentvolumeclaim/game-data-pvc created
  5. 次に、データの保存にこの 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
  6. 更新されたデプロイを適用します。

    kubectl apply -f ebs-deployment.yaml

    以下のようなレスポンス出力が表示されます。

    deployment.apps/deployment-2048 configured

これらのステップでは、クラスター上の 2048 ゲームが、Amazon EKS Auto Mode のブロックストレージ機能を使用してデータを保持するように設定されました。これにより、ポッドやノードに障害が発生した場合でも、ゲームの進行状況とデータは安全になります。

このチュートリアルが気に入った場合は、フィードバックを提供してお知らせください。これにより、このようなユースケース固有のクイックスタートチュートリアルをより多く提供できるようになります。

クラスターとノードを削除する

このチュートリアルのために作成したクラスターの使用が終了したら、クリーンアップのために、次のコマンドを使用してそれらのクラスターを削除する必要があります。クリーンアップする前にこのクラスターでやることがある場合は、「次のステップ」を参照してください。

eksctl delete cluster -f ./cluster-config.yaml

EKS は、クラスターが削除されたときにプロビジョニングされたノードを自動的にクリーンアップします。