要在 AWS EKS 搭建服務前我們需要先做一些設定或者安裝指令如 aws-cli, mac 的用戶有以下方式可以安裝
- 使用 brew 安裝 python, 再透過 python 的 pip 去安裝 aws-cli
brew install python && pip install aws-cli
2. 直接使用 homebrew 去安裝 aws-cli
brew install aws-cli
3. 也可以直接根據官網教學去下載檔案或者去 curl 下來進行安裝
https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
安裝aws-cli 完成後我們要在本地設定 aws-cli 的 configuration, 我們使用如下指令去設定 configuration
aws configure --profile default
這個指令會建立一個 profile 為 default 的 configure, 且在輸入指令時會發現他會們要我們輸入 access key 以及 secret key 等,我們可以透過 dashboard 去做新增。
新增 access key, secret key 方法如下:
- 首先進入到 aws dashboard 點選右上角的人頭你會看到 security credentials
2. 進到 crednetials 頁面後往下滑會看到 access key 會看到create access key, 點選 create access key 就會創建 secret key 了,建議可以把.csv 檔案下載下來保存好,免得離開此頁面後就會看不到 secret key 了!
3. 將access key, secret key 貼到第一步驟上, 且 region 的部分則設定自己操作的 region, 以作者來說的話是設定在 ap-northeast-1 (東京)
aws configure --profile default
設定完成後可以隨便使用 aws-cli 指令來進行測試看是否設定完善,我是使用以下指令去測試, 看會不會輸出 aws user
aws iam list-users
題外話假如以設定完善,你也可以去家目錄的 .aws 資料夾的 config 查看自己的設定
vim ~/.aws/config
以上都設定完成後接著創建 EKS 所用使用到的 IAM Role, 在創建 Cluster 時會需要一個 Cluster Role, 然後在創建 node group 的時候也會需要一個 node group role。
創建 Cluster Role 如下
而創建 NodeGroup Role 時 Service 要選擇 EC2 且分配以下 policy 給此 Role
都建立好後進入到 eks dashboard 進行增加 EKS Cluster 以及 Node Group, 而創建 EKS Cluster 時可以都先使用 default 值,只是記得 Role 的部分要使用前面所建立好了 EKS Cluster Role。
EKS Cluster 創建好後緊接著創建 Node Group, 我們進入到剛剛所建立的 EKS Cluster, 點選 Compute tab
而往下滑會看到一個 node group 區塊, 我們點選 add node group
輸入能識別的名稱以及前面所新增的 node group role, 然後假如有想要自己設定 launch template 甚至是 tag 的話也可以自行設定,沒有的話可以直接按 Next
而這邊我們選擇使用 t2.micro 的instance 且硬碟空間為 20G
設定 auto scaling 相關的參數, 假如到時在建立 pod 時發生 node 不足,記得在增加 desired size 以及 maximum size 的數量。這邊範例設定為 4,也就是說到時 node 裡面會有 4 個 ec2 的 instance 規格為 t2-micro 空間大小為20G。
網路的 subnet 也使用預設值即可
最後都確認好參數值後按下 Create, 接著你可以進入到 EC2 的 dashboard 你可以看到會有 instance 被你建立起來,且數量就是前面所設定的 desired size,也可以去 auto scaling 看也會發現 EKS 幫我們建立的 auto scale。
都建置好後透過以下指令去更新本地的 kubectl context
aws eks update-kubeconfig --region <region> --name <EKS_cluster_name>
<region> 設定 eks cluster 所建立的 region
<EKS_cluster_name> 設定 eks cluster 的名稱
設定好資料可以透過以下指令查看目前 kubectl config, 會發先增加了 aws eks 的 context
kubectl config view
此時也可以確認一下目前所在的 context, 會發現目前所在的 context 為 aws eks context
kubectl config current-context
緊接著我們可以透過 kubectl 去查看目前的節點會發現就是 ec2 的資訊
kubectl get nodes
以上指令都正常運作的話接下來進行 k8s load balancer 測試
首先為了測試 k8s load balancer 我們會建立 nginx service 以及 nginx deployment 檔案內容如下:
nginx_deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
以上建立一個 nginx deployment 且會有 2 個 nginx 的 replica。
nginx_service.yml 如下
apiVersion: v1
kind: Service
metadata:
name: nginx-service
labels:
app: nginx
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- port: 80
targetPort: 80
protocol: TCP
以上建立一個 service 名為 nginx-service 且類行為 LoadBalancer, 此步驟會建立 ELB 且 port 為 80。
將以上 deployment 以及service 應用至kubectl
kubectl apply -f nginx_deployment.yml nginx_service.yml
透過以下指令查看 pods 以及 service
kubectl get pods
kubectl get svc
透過以上指令會發現已建立我們所指定的 pod 數量。
緊接著因為上面建立了 load balancer , 所以我們可以在 kubectl get svc 這個指令看到 load balancer 的 DNS, 將其複製貼到網頁上即可看到 welcome nginx 畫面
參考文件: