Fargate の Amazon EKS クラスターに AWS Load Balancer Controller をセットアップしてから 2048 ゲームをデプロイするにはどうすれば良いですか?

所要時間4分
0

AWS Load Balancer Controller を Amazon Elastic Kubernetes Service (Amazon EKS) Cluster for AWS Fargate にセットアップしたいと考えています。その後に 2048 ゲームをデプロイします。

簡単な説明

AWS Load Balancer Controller は、既存の Application Load Balancer (ALB) Ingress Controller のデプロイなしで設定できます。

新規の Fargate クラスターに AWS Load Balancer Controller をセットアップする前に、次の操作を完了してください。

  • AWS ALB Ingress Controller for Kubernetes をアンインストールする。AWS Load Balancer Controller が、AWS ALB Ingress Controller の機能に取って代わります。
  • eksctl バージョン 0.109.0 以降を使用してください。詳細については、eksctl ウェブサイトのインストールを参照してください。
  • ワークステーションに Helm をインストールします。
  • コードスニペットのプレースホルダー値をご自身の値に置き換えます。

解決策

Amazon EKS クラスター、サービスアカウントポリシー、ロールベースアクセスコントロール (RBAC) ポリシーを作成する

クラスターとポリシーを作成するには、次の操作を行います。

  1. eksctl を使用して Amazon EKS クラスターを作成するには、次のコマンドを実行します。

    eksctl create cluster --name YOUR_CLUSTER_NAME --version 1.28 --fargate

    注: Fargate ポッド (--fargate) のみを使用するクラスターの Fargate ポッド実行ロールを作成する必要はありません。

  2. クラスターがサービスアカウントに 「AWS Identity and Access Management (IAM)」を使用できるよう次のコマンドを実行します。

    eksctl utils associate-iam-oidc-provider --cluster YOUR_CLUSTER_NAME --approve

    注: FargateExecutionRole は、kubeletkube-proxy が Fargate ポッドを実行するのに使用されるロールです。ただし、これは Fargate ポッド (つまり、aws-load-balancer-controller) に使用されるロールではありません。Fargate ポッドでは、サービスアカウントの IAM ロールを使用してください。詳細については、「サービスアカウントの IAM ロール」を参照してください。

  3. AWS Load Balancer Controller がユーザーに代わって AWS API を呼び出すことを許可する IAM ポリシーをダウンロードするには、次のコマンドを実行します。

    curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/install/iam_policy.json
  4. ダウンロードしたポリシーを使用して IAM ポリシーを作成します。以下のコマンドを使用します。

    aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json
  5. AWS Load Balancer Controller の kube-system 名前空間に aws-load-balancer-controller という名前のサービスアカウントを作成します。以下のコマンドを使用します。

    eksctl create iamserviceaccount \    
    --cluster=YOUR_CLUSTER_NAME \  
    --namespace=kube-system \  
    --name=aws-load-balancer-controller \  
    --attach-policy-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy \  
    --override-existing-serviceaccounts \  
    --approve
  6. 次のコマンドのいずれかを実行して、新規のサービスロールが作成済みであることを確認します。

    eksctl get iamserviceaccount --cluster YOUR_CLUSTER_NAME --name aws-load-balancer-controller --namespace kube-system

    -または-

    kubectl get serviceaccount aws-load-balancer-controller --namespace kube-system

Helm を使用して AWS Load Balancer Controller をインストールする

AWS Load Balancer Controller をインストールするには、以下を実行します。

  1. Helm に Amazon EKS チャートを追加するには、次のコマンドを実行します。

    helm repo add eks https://aws.github.io/eks-charts
  2. リポジトリを更新して最新のチャートをプルします。

      helm repo update eks
  3. 次のコマンドを実行して Helm チャートをインストールします。注: clusterNameregionvpcId を自分の値で置き換えます。

    helm install aws-load-balancer-controller eks/aws-load-balancer-controller \      
    --set clusterName=YOUR_CLUSTER_NAME \  
    --set serviceAccount.create=false \  
    --set region=YOUR_REGION_CODE \  
    --set vpcId=<VPC_ID> \  
    --set serviceAccount.name=aws-load-balancer-controller \  
    -n kube-system
  4. コントローラーが正常にインストールされていることを確認します。

    $ kubectl get deployment -n kube-system aws-load-balancer-controller     

    出力例:

    NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
    aws-load-balancer-controller   2/2     2            2           84s

AWS Load Balancer Controller のテストを行う

AWS Load Balancer Controller を使用して Ingress 用の Application Load Balancer または Network Load Balancer を作成します。これらのいずれかを使用して k8s サービスを作成します。Application Load Balancer の Ingress を使用して 2048 というサンプルアプリをデプロイするには、次の手順を実行します。

  1. ゲームのデプロイに必要な Fargate プロファイルを作成します。以下のコマンドを使用します。

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
  2. サンプルゲームをデプロイして AWS Load Balancer Controller が ALB Ingress リソースを作成しているのを確認するには、次のコマンドを実行します。

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
  3. 数分後に、Ingress リソースが作成されたことを次のコマンドで確認します。

    kubectl get ingress/ingress-2048 -n game-2048

    次の出力が表示されます。

    NAME           CLASS    HOSTS   ADDRESS. PORTS   AGE
    ingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-

    注: 数分経っても Ingress が作成されない場合は、次に示すコマンドを実行して、AWS Load Balancer Controlle のログを表示します。

    kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller

    ログには、デプロイの問題の診断に役立つエラーメッセージが含まれていることがあります。

  4. サンプルアプリケーションを表示するには、ブラウザーを開きます。次に、前のコマンド出力の ADDRESS URL に移動します。
    注: サンプルアプリケーションが表示されない場合は、数分待ってからブラウザーを更新します。

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

Network Load Balancer の IP アドレスモードサービスを使用してサンプルアプリケーションをデプロイするには、以下を実行します。

  1. Fargate プロファイルを作成するには、次のコマンドを実行します。

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
  2. 2048 ゲームをデプロイするためのマニフェストを取得するには、次のコマンドを実行してください。

    curl -o 2048-game.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
  3. ステップ 2 のマニフェストで、次の Ingress セクションを削除します。

    apiVersion: networking.k8s.io/v1kind: Ingress
    metadata:
      namespace: game-2048
      name: ingress-2048
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/target-type: ip
    spec:ingressClassName: alb
      rules:
        - http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: service-2048           
                    port:
                      number: 80
  4. サービスオブジェクトを変更します。

    apiVersion: v1
    kind: Service
    metadata:
      namespace: game-2048
      name: service-2048
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
        service.beta.kubernetes.io/aws-load-balancer-type: external
        service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
    spec:
      ports:
        - port: 80
          targetPort: 80
          protocol: TCP
      type: LoadBalancer
      selector:
        app.kubernetes.io/name: app-2048
  5. サービスとデプロイマニフェストを作成するには、次のコマンドを実行します。

    kubectl apply -f 2048-game.yaml
  6. サービスの作成と Network Load Balancer の DNS 名を確認するには、次のコマンドを実行します。

    kubectl get svc -n game-2048

    次のような出力が得られます。

    NAME           TYPE           CLUSTER-IP       EXTERNAL-IP                                                                PORT(S)        AGE
    service-2048   LoadBalancer   10.100.114.197   k8s-game2048-service2-xxxxxxxxxx-yyyyyyyyyy.us-east-2.elb.amazonaws.com   80:30159/TCP   23m
  7. ロードバランサーがアクティブになるまで数分待ちます。次に、デプロイに到達できることを確認します。Web ブラウザーの EXTERNAL-IP セクションの参照 NLB の完全修飾ドメイン名 (FQDN) を開きます。

AWS Load Balancer Controller のトラブルシューティング

コントローラーのセットアップに問題がある場合は、次のコマンドを実行してください。

$ kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller
$ kubectl get endpoints -n game-2048
$ kubectl get ingress/ingress-2048 -n game-2048

logs コマンドの出力は、エラーメッセージ (タグやサブネットに関するものなど) を返します。これらのエラーメッセージは、一般的なエラー (Kubernetes GitHub ウェブサイトから) のトラブルシューティングに役立ちます。get endpoints コマンドは、バックアップ済みのデプロイポッドが正しく登録されたかどうかを示します。get ingress コマンドは、Ingress リソースがデプロイされたかどうかを示します。詳細については、Kubernetes ウェブサイトの「AWS Load Balancer Controller」を参照してください。

AWS公式
AWS公式更新しました 2ヶ月前
コメントはありません

関連するコンテンツ