このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
クイックスタート: ウェブアプリケーションをデプロイしてデータを保存する
このクイックスタートチュートリアルでは、eksctl
Amazon EKS Auto Mode は、ブロックストレージ、ネットワーク、ロードバランシング、コンピューティングの自動スケーリングなどのルーチンタスクを自動化することで、クラスター管理を簡素化します。セットアップ中、EC2 マネージドインスタンス、Application Load Balancer、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) を動的にプロビジョニングします。
前提条件
始める前に、次のタスクを実行していることを確認してください。
クラスターを設定する
このセクションでは、動的ノードプロビジョニングに 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
これで、クラスターを作成する準備が整いました。
cluster-config.yaml` を使用して 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 名前空間の適切なサービスにルーティングするように指示します。
注記
この例の docker-2048 イメージは x86_64 コンテナイメージであり、他のアーキテクチャでは実行できません。
-
--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 ゲームが表示されるはずです。プレイしてください!
Amazon EKS 自動モードを使用してデータを永続化する
2048 ゲームが Amazon EKS クラスターで稼働しているので、Amazon EKS Auto Mode のブロックストレージ機能を使用してゲームデータが安全に保持されるようにします。
-
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" -
StorageClassを適用します。kubectl apply -f storage-class.yaml -
ゲームデータのストレージをリクエストするには、永続ボリュームのクレーム (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 -
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
これらのステップでは、クラスター上の 2048 ゲームが、Amazon EKS Auto Mode のブロックストレージ機能を使用してデータを保持するように設定されました。これにより、ポッドやノードに障害が発生した場合でも、ゲームの進行状況とデータは安全になります。
このチュートリアルが気に入った場合は、フィードバックを提供してお知らせください。これにより、このようなユースケース固有のクイックスタートチュートリアルをより多く提供できるようになります。
クリーンアップ
今後の料金が発生しないようにするには、関連する CloudFormation スタックを手動で削除して、VPC ネットワークを含め、このガイドで作成したすべてのリソースを削除する必要があります。
CloudFormation スタックを削除します。
eksctl delete cluster -f ./cluster-config.yaml