Contents

GCP - Terraform & Ansible 在 GCP 上自動部署 K8S 叢集

手動部署 K8s 叢集是件重複又繁瑣的事情,除了要先準備好基礎機器環境之外,還要每一台機器安裝依賴套件後,並一個一個加入叢集內,透過 Terraform + Ansible Iac 最佳組合自動化完成一整個系列從無到有創建。

1. DEMO 執行範例

https://i.imgur.com/mNot4JE.png
初始化

https://i.imgur.com/JxsisIM.png
Terraform 自動創建 GCE

https://i.imgur.com/u1USg5g.png
Ansible 自動部署 K8s

https://i.imgur.com/IjiaeAp.png
K8s 狀態


2. Quick Start

透過 Docker 快速創建 Terraform & Ansible 環境及 Iac Code。

  1. 啟動建立好的環境。
1
docker run --rm -it jeffwen0105/iac-gce-k8s bash
  1. 使用 vi 編輯 credentials ,將 GCP 具備創建 VPC 及 GCE 的 credentials 貼上。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
  "type": "service_account",
  "project_id": "<project_id>",
  "private_key_id": "<private_key_id>",
  "private_key": "<private_key>",
  "client_email": "<client_email>",
  "client_id": "<client_id>",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "<client_x509_cert_url>"
}
  1. 使用 vi 編輯 Project ,將專案修改專案 Project id。

如果是 GCP 新專案,需先啟動 Enable Compute Engine Api ..

  1. 執行自動部屬腳本。

該環境會使用既有的金鑰遠端連線執行 Ansible 操作,如果擔心金鑰重複的安全性,可以先執行 bash regenerateKey.sh 來重新產生一組公私鑰。

1
bash run.sh
釋放資源

上述會自動創建 VPC、NAT、GCE 及 Firewall 等各種資源,透過腳本可以輕易地將所有創建資源收回,並免額度浪費。

1
bash destroy.sh

https://i.imgur.com/eQYC9a3.png


3. GitHub 下載原始碼

JeffWen0105/iac-gce-k8s: Automatic deployment of K8s Cluster on GCE using Terraform & Ansible

3.1. 運作流程

  1. 由 Terraform 在 us-west1-b (奧勒岡州) 區域創建下列資源 :
    • VPC
    • 兩個子網段 ( 公有 10.10.110.0/24 及私有 10.10.220.0/24 )。
    • 創建 GW 及 NAT 並分別綁定公有及私有網段。
    • 創建 Filewall 防火牆定義流量進出規則。
    • 創建 GCE Instances。
  2. 待上述資源創建完畢後,由 Ansible 執行套件安裝及部署 K8s 作業。

3.2. 目錄結構

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[root@hoshos iac-gce-k8s]# tree -F .
.
├── ansible.cfg
├── credentials
├── destroy.sh*
├── inventory.tf
├── main.tf
├── playbook.yml
├── project
├── run.sh*
├── templates/
│   └── hosts.tpl
└── variables.tf

1 directory, 10 files
  1. run.sh => 程式進入點。
  2. *.tf => Terraform 執行的 IaC 程式碼。
  3. *.yml => Ansible 執行的 IaC 程式碼。

3.3. 使用方式

  1. 安裝 Terraform、 Ansible、 Git 等所依賴套件
  2. 確保已經產生一組公私鑰,並且存放在該使用者的 ~/.ssh/ 目錄下 (檔名為預設 id_rsa* )
  3. 修改 Credentials
  4. 修改 Project ID
  5. 執行 bash.sh 進入點程式。

3.4. 修改自動創建數量

預設會創建三台機器,如需增減可以修改 variables.tf 檔案,除 Master 必須存在外,可以自行延伸機器會修改名稱,修改後會自動依據機器數量所創建。

https://i.imgur.com/6JKwxVw.png

如要增加兩台 Worker,可修改如下 :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
variable "hostname" {
  type=set(string)
  default = [
    "master",
    "node1",
    "node2",
    "node3",
    "node4",
    "node5"
  ]
}

4. 小結

IaC 基礎設施即程式碼是非常方便又快速的好物,除了可以降低人為操作上的失誤,也能彈性的大量部署所需的環境及收回資源。



如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!