技術分享與學習資源
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 --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 98s v1.21.2-eks-06eac09
fargate-ip-192-168-147-176.ap-northeast-1.compute.internal Ready 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 --approve
建立 iamserviceaccount
- 請修改範例中的 111111111 為你自己的帳號
$ eksctl create iamserviceaccount \
--cluster= \
--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= \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller \
--set region= \
--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 \
--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網創資訊是全方位一站式雲端顧問服務,可針對客戶的企業做出診斷,在需求、預算、所在地區等多重考量下,提供量身訂做的雲端服務。還在猶疑如何挑選合適的雲端服務?想進一步了解雲端運算需求?歡迎立即與我們聯絡,我們將有專人協助你找到合適的解決方案並滿足企業所需!
如需進一步了解我們的雲端服務解決方案,歡迎聯絡我們。






