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
$ 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囉!
eksctl是AWS提供使用者管理EKS的CLI介面,讓建立EKS的流程可以簡單的用一行指令達成。
Step 1. 建立EKS
目前EKS支援用fargate與ec2兩種方式來部署。
使用eksctl建立fargate的EKS Cluster
Step 2. 確認kubectl
執行完 create cluster後,會自動更新 kubectl config。來試試kubectl 能不能正常work吧!
Step 3. AWS IAM
使用curl下載policy json
建立IAM policy
建立IAM OIDC provider
建立iamserviceaccount
Step 4. Load Balancer Controller
使用helm安裝load balancer controller
$ 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狀態。
大約一分鐘後就可以變為Running
因為是使用Fargate來開啟Pod,所以在要開啟Pod之前,我們需要先定義fargateprofile,只有通過選擇條件(目前支援Label, Namespace)的Pod才能夠被Fargate開啟。我們的範例是說定義在namespace 為game-2048底下的Pod可以被開啟。
Step 5. 測試ALB
建立2048
過一下後,就可以看到ingress被分配了一個IP
把這個ADDRESS貼到瀏覽器上,就可以開始玩2048囉!