技術分享與學習資源

Kubernetes 簡單學 : 教你用 Fargate 打開 EKS,打造屬於自己的 2048 小遊戲

eksctl 是 AWS 提供使用者管理 EKS 的 CLI 介面,讓建立 EKS 的流程可以簡單的用一行指令達成。

還沒安裝的可以參考這邊
https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html

Step 1. 建立EKS

目前 EKS 支援用 fargate 與 ec2 兩種方式來部署。

使用 eksctl 建立 fargate 的 EKS Cluster

				
					$ eksctl create cluster --name <Cluster Name> --region region-code --fargate
				
			

Step 2. 確認 kubectl

執行完 create cluster後,會自動更新 kubectl config。來試試 kubectl 能不能正常 work 吧!

				
					$ kubectl get no
NAME                                                         STATUS   ROLES    AGE   VERSION
fargate-ip-192-168-106-11.ap-northeast-1.compute.internal    Ready    <none>   98s   v1.21.2-eks-06eac09
fargate-ip-192-168-147-176.ap-northeast-1.compute.internal   Ready    <none>   94s   v1.21.2-eks-06eac09

				
			

Step 3. AWS IAM

使用 curl 下載 policy json

				
					$ curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.0/docs/install/iam_policy.json
				
			

建立 IAM policy

				
					$ aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json
				
			

如果想確認有哪些 policy可以用

				
					aws iam list-policies
				
			

建立 IAM OIDC provider

				
					$ eksctl utils associate-iam-oidc-provider --cluster <Cluster Name> --approve
				
			

建立 iamserviceaccount

  • 請修改範例中的 111111111 為你自己的帳號
				
					$ eksctl create iamserviceaccount \
  --cluster=<Cluster Name> \
  --namespace=kube-system \
  --name=aws-load-balancer-controller \
  --attach-policy-arn=arn:aws:iam::111111111:policy/AWSLoadBalancerControllerIAMPolicy \
  --override-existing-serviceaccounts \
  --approve

				
			

Step 4. Load Balancer Controller

使用 helm 安裝 load balancer controller

如果沒有安裝helm可以參考此連結
https://helm.sh/docs/intro/install/

				
					$ helm repo add eks https://aws.github.io/eks-charts
$ helm repo update
$ helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
  -n kube-system \
  --set clusterName=<Cluster Name> \
  --set serviceAccount.create=false \
  --set serviceAccount.name=aws-load-balancer-controller \
  --set region=<region-code> \
  --set vpcId=vpc-ooxxoxox
				
			

這時候可以在 kube-system 底下看到 load balancer controller 的 Pod 處於 Pending 狀態。

				
					$ kubectl get po -n kube-system
NAME                                            READY   STATUS    RESTARTS   AGE
aws-load-balancer-controller-546c68c975-cnjss   0/1     Pending   0          13s
aws-load-balancer-controller-546c68c975-dktj9   0/1     Pending   0          13s
coredns-9f6f89c76-njp57                         1/1     Running   0          30m
coredns-9f6f89c76-qnldm                         1/1     Running   0          30m
				
			

大約一分鐘後就可以變為 Running

				
					$ kubectl get po -n kube-system
NAME                                            READY   STATUS    RESTARTS   AGE
aws-load-balancer-controller-546c68c975-cnjss   1/1     Running   0          69s
aws-load-balancer-controller-546c68c975-dktj9   1/1     Running   0          69s
coredns-9f6f89c76-njp57                         1/1     Running   0          31m
coredns-9f6f89c76-qnldm                         1/1     Running   0          31m
				
			

因為是使用 Fargate 來開啟 Pod,所以在要開啟 Pod 之前,我們需要先定義 fargateprofile,只有通過選擇條件(目前支援 Label, Namespace) 的 Pod 才能夠被 Fargate 開啟。我們的範例是說定義在 namespace 為 game-2048 底下的 Pod 可以被開啟。

				
					$ eksctl create fargateprofile \
    --cluster <Cluster Name> \
    --region region-code \
    --name alb-sample-app \
    --namespace game-2048
				
			

如果想瞭解更多fargateprofile的資訊,可以到aws官網去研究研究https://docs.aws.amazon.com/zh_tw/eks/latest/userguide/fargate-profile.html

Step 5. 測試 ALB

建立 2048

				
					$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.0/docs/examples/2048/2048_full.yaml
				
			

過一下後,就可以看到 ingress 被分配了一個 IP

				
					$ kubectl get ing -n game-2048
NAME           CLASS   HOSTS   ADDRESS                                                                        PORTS   AGE
ingress-2048   alb     *       k8s-game2048-ingress2-44de7d92ff-1241231425.ap-northeast-1.elb.amazonaws.com   80      51s
				
			

把這個 ADDRESS 貼到瀏覽器上,就可以開始玩 2048 囉!

Netron網創資訊是全方位一站式雲端顧問服務,可針對客戶的企業做出診斷,在需求、預算、所在地區等多重考量下,提供量身訂做的雲端服務。還在猶疑如何挑選合適的雲端服務?想進一步了解雲端運算需求?歡迎立即與我們聯絡,我們將有專人協助你找到合適的解決方案並滿足企業所需!

如需進一步了解我們的雲端服務解決方案,歡迎聯絡我們。

返回頂端