最新消息



雲端技能學習

【雲端技能學習】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囉!

Contact
Contact