Fargate の Amazon EKS クラスターに AWS Load Balancer Controller をセットアップしてから 2048 ゲームをデプロイするにはどうすれば良いですか?
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) ポリシーを作成する
クラスターとポリシーを作成するには、次の操作を行います。
-
eksctl を使用して Amazon EKS クラスターを作成するには、次のコマンドを実行します。
eksctl create cluster --name YOUR_CLUSTER_NAME --version 1.28 --fargate
注: Fargate ポッド (--fargate) のみを使用するクラスターの Fargate ポッド実行ロールを作成する必要はありません。
-
クラスターがサービスアカウントに 「AWS Identity and Access Management (IAM)」を使用できるよう次のコマンドを実行します。
eksctl utils associate-iam-oidc-provider --cluster YOUR_CLUSTER_NAME --approve
注: FargateExecutionRole は、kubelet と kube-proxy が Fargate ポッドを実行するのに使用されるロールです。ただし、これは Fargate ポッド (つまり、aws-load-balancer-controller) に使用されるロールではありません。Fargate ポッドでは、サービスアカウントの IAM ロールを使用してください。詳細については、「サービスアカウントの IAM ロール」を参照してください。
-
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
-
ダウンロードしたポリシーを使用して IAM ポリシーを作成します。以下のコマンドを使用します。
aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json
-
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
-
次のコマンドのいずれかを実行して、新規のサービスロールが作成済みであることを確認します。
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 をインストールするには、以下を実行します。
-
Helm に Amazon EKS チャートを追加するには、次のコマンドを実行します。
helm repo add eks https://aws.github.io/eks-charts
-
リポジトリを更新して最新のチャートをプルします。
helm repo update eks
-
次のコマンドを実行して Helm チャートをインストールします。注: clusterName、region、vpcId を自分の値で置き換えます。
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
-
コントローラーが正常にインストールされていることを確認します。
$ 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 というサンプルアプリをデプロイするには、次の手順を実行します。
-
ゲームのデプロイに必要な Fargate プロファイルを作成します。以下のコマンドを使用します。
eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
-
サンプルゲームをデプロイして 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
-
数分後に、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
ログには、デプロイの問題の診断に役立つエラーメッセージが含まれていることがあります。
-
サンプルアプリケーションを表示するには、ブラウザーを開きます。次に、前のコマンド出力の ADDRESS URL に移動します。
注: サンプルアプリケーションが表示されない場合は、数分待ってからブラウザーを更新します。
サンプルアプリケーションをデプロイする
Network Load Balancer の IP アドレスモードサービスを使用してサンプルアプリケーションをデプロイするには、以下を実行します。
-
Fargate プロファイルを作成するには、次のコマンドを実行します。
eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
-
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
-
ステップ 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
-
サービスオブジェクトを変更します。
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
-
サービスとデプロイマニフェストを作成するには、次のコマンドを実行します。
kubectl apply -f 2048-game.yaml
-
サービスの作成と 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
-
ロードバランサーがアクティブになるまで数分待ちます。次に、デプロイに到達できることを確認します。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」を参照してください。
関連するコンテンツ
- 質問済み 2年前lg...
- 質問済み 2ヶ月前lg...
- 質問済み 4ヶ月前lg...
- AWS公式更新しました 3ヶ月前