透過Kops工具在AWS中部署K8S集群
這篇文章主要是講述如何在AWS雲服務中部署Kubernetes集群
首先,我們需要準備使用一下工具進行設置
- KOps - 一個能讓我們輕鬆無痛部署Kubernetes到任何雲服務的工具,可以想象為集群的kubectl
- AWS IAM - 申請一個能讓Kops存取權限的賬號
- AWS S3 Bucket - 用來作為存取Kubernets資料的資料庫
- AWS Route53 - 用於使用自定義Domain Name 並連接到Master Node中
- GoDady - 作為DNS 服務供應商
前置工作
在電腦中安裝KOps工具用於幫助我們部署集群
想要了解更多關於KOps的讀者,可以參閱 kOps-Kubernetes Operations
安裝: Linux
Macos
或者使用 Homebrew 安裝
| |
Window
- 到
KOps的github
中的Release中下載
kops-windows-amd64 - 重新命名為
kOps,並設置為環境變數
安裝AWS Cli
到AWS 的官方網站中直接下載安裝即可 AWS CLI
設置IAM 賬號用於kOps 存取 AWS資源
如果還沒有AWS 賬號,可以先去申請一個再完成下面的步驟
透過UI設置
搜尋
IAM,在Access management中選擇Users。 如下圖所示
新增用戶
Add users,輸入使用者賬號並選擇Access key - Programmatic access。如下圖所示
3.選擇Attact existing policies directly並選擇以下的Policies
- AmazonEC2FullAccess
- AmazonRoute53FullAccess
- AmazonS3FullAccess
- IAMFullAccess
- AmazonVPCFullAccess
- AmazonSQSFullAccess
- AmazonEventBridgeFullAccess
新增使用者

記錄
Access key ID和Secret access key
打開
Terminal設置AWS Cli的Configure中的存取賬號(KOps 會使用這組Token操作AWS)
aws configure

- 輸入剛才申請賬號的
Access key ID(因我已經設置過了,就不重複設置了) - 輸入剛才申請賬號的
Secret access key(因我已經設置過了,就不重複設置了) Default region name可以不輸入,使用DEFAULT即可Default output format可以不輸入 ,使用DEFAULT即可
透過AWS Cli 設置
| |
記得要設置AWS
使用AWS Route53 設置DNS
故博主已在GoDady購買Domain Name - 所以以projectdomaindns.com
透過UI建立aws route53
搜尋
Route53新增
Domain Name- 注意:Domain Name 必須要跟註冊的一樣!
進入到建立好的
Host,將裡面的Name Server(NS)到DNS 服務商中設定(以GoDady為例)
Godady DNS設置跟Route53 NS一樣

透過Terminal建立 aws route53
注意:Domain Name 必須要跟註冊的一樣!
| |
設置完畢後,會回傳一組NS,到DNS 供應商中設置為這組NS即可
使用AWS S3 用於保存Cluster資料
博主設置的地區是新加坡 - Asia Pacific (Singapore) ap-southeast-1 透過UI建立aws s3
- 搜尋
aws S3 - 建立
Bucket- Bucket名字必須是唯一的
要注意的是
Region以及Block Public Access settings for this bucket
- Region 要記得你設置的區域,建議跟部署集群地區一致~
Block Public Access設置為public~
透過Terminal建立 aws s3
–create-bucket-configuration LocationConstraint=ap-southeast-1 這個設定對於us-east-1地區以外的都必須要加上,不然會出錯
以上都為準備階段,所要完成的工作,接下來就是重頭戲了!
透過kOps新增Cluster - 還沒正在開始建立(設定而已啦~)
先建立SSH-key - 之後登入到Cluster會用到這組key
ssh-keygen -f .ssh/id_rsa
- name - K8S集群的名字
- cloud - 雲服務商
- zones - Nodes要部署的地區,而博主的設置的地區是
ap-southeast-1,該對應的地區Code就是ap-southeast-1a - master-size - master node的機器類型(可參考AWS)
- node-size - 一般node的機器的類型(可以參考AWS)
- node-count - 一般node的數量
- state - 存放S3的Bucket
以上指令運行完後的結果如下:
如果設置完,需要修改可以使用 kops edit
建立Cluster
如果設定都沒有問題,就可以開始建立咯~ (有點久就是了 哈哈哈哈哈)
複製Finally configure your cluster with:後面的指令,加上--state=${s3 bucket url}
| |
然後就是漫長的等待…… 5 - 20分鐘左右.
可以透過一下指令檢查是否完成部署,使用--wait 10m 10分鐘內會不斷的檢測~
| |
完成部署後,會顯示ready的狀態
透過kubectl get nodes也可以看到3個nodes,他們的Name就會是AWS EC2主機的名字咯~

如果我們會看一下AWS上面的狀態,會發現EC2多了3台運行中的機器

Route53以及S3中也會有新的資料哦~

如果讀書讀者的話,會發現
api.projectdomaindns.com所導向的IP正是Master Node的public IP! 也就是說我們可以透過這個url直接存取Master Node!
AWS S3中也多出了Cluster的資料呢~

使用Cluster
現在我們嘗試一下部署簡單的應用到這集群上看看能不能成功運行!
如果讀者還沒有學過K8S基礎,建議去K8S官網玩玩看教學!
這是我準備的簡單WebServer 應用,裡面只包含了一個API,透過/ping,server會回傳pong
| |
上面這份config簡單來說就是會有3個一模一樣的pod,但是IP不同
建立Deployment物件
| |
透過kubectl get pods指令會發現有3個pod正在運行

透過kubectl get deploy指令會發現有一個deployment,也就是我們剛才所建立的deployment 物件

我們是沒有辦法直接存取Cluster內部的Pod的,所以必須先透過Service 物件來幫助我們,將他們expose出來,才能存取
以下指令會將我們Deployment物件的8080,透過與service expose出去
| |
執行kubectl get service會發現多了一個service的Name為deploy-svc,也就是我們剛才所建立的!

現在我們只需要透過expose 的port,port:31176,就可以存取了!
注意:要先去將Master node(EC2)的31176 port 對外開放哦~ 不然會進不去 哈哈哈 - 設置secret group 的inbound 即可
打開瀏覽器輸入http://13.212.80.234:31176/ping,就會看到pong回傳回來!
13.212.80.234為Master node 的public ip

太棒了!恭喜我們成功上雲٩(˃̶͈̀௰˂̶͈́)و
如果想要刪除cluster的話,使用以下指令就可以把所有東西移除掉了唷(EC2,S3)!
| |





