上次建立了nestjs專案,並且快速的建立了CRUD,這次我們來把nestjs專案放到eks上,不過不同的是,我們來使用fargate的方式建立eks~
fargate 是啥?AWS Fargate 是無伺服器,依用量計費的運算引擎,讓您專注於建置應用程式,而無需管理伺服器。AWS Fargate 適用於搭配 Amazon Elastic Container Service (ECS) 和 Amazon Elastic Kubernetes Service (EKS) 使用。
建立k8s集群,只是後面多了–fargate
1 | $ eksctl create cluster --name YOUR_CLUSTER_NAME --version 1.21 --fargate |
允許 AWS Identity and Access Management (IAM) 用於服務賬戶
1 | $ eksctl utils associate-iam-oidc-provider --cluster YOUR_CLUSTER_NAME --approve |
下載並安裝,允許 AWS 負載均衡器控制器代表您調用 AWS API 的 IAM 策略
1 | $ curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.1/docs/install/iam_policy.js |
1 | $ aws iam create-policy \ |
建立一個iam service account
1 | $ eksctl create iamserviceaccount \ |
驗證一下是否建立成功
1 | $ kubectl get serviceaccount aws-load-balancer-controller --namespace kube-system |
Install the AWS Load Balancer Controller using Helm
1 | $ helm repo add eks https://aws.github.io/eks-charts |
安裝 TargetGroupBinding 自定義資源定義 (CRD)
1 | $ kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master" |
開始安裝
1 | helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ |
如果你要確認你的VPC ID
1 | aws cloudformation describe-stacks --stack-name eksctl-andy-lab-cluster | jq -r '[.Stacks[0].Outputs[] | {key: .OutputKey, value: .OutputValue}] | from_entries' | jq -r '.VPC' |
準備好docker file
1 | FROM node:alpine AS dev |
先建立 fargateprofile
1 | eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace default |
建立Deployment
1 | apiVersion: apps/v1 |
建立service
1 | apiVersion: v1 |
確認一下svc有沒有跑出LB位置
1 | $ kubectl get svc |
後記
其實使用fargate eks建立pod頗簡單,且不用特別去管理主機問題,省事許多,不過fargate有一些限制,這部分可以參考AWS的說明。