在建置公有雲資源的時候通常會使用 IaC
的工具 (Terraform
, CloudFromation
) 來自動化部署和管理基礎設施,可如果像是應用程式或是套件依賴的安裝儘管在這些工具上也可以達成,但就顯得不利索。在這個範例中使用 CloudFormation + Ansbile
來搭配完成整個基礎設施和 Kubernetes Cluster (Control Plane with Single Master Node)的自動化建置。
在工作機上安裝以下軟體:
- Ansible
- AWS CLI 和配置 credentials
- Boto3 (AWS SDK)
site.yaml
作為 ansible 主要的執行程式
cloudformation/k8s_tmplate.yaml
定義在 AWS
想要建置的基礎設施 (Ideal State)
- 啟動
EC2
和EC2Fleet
- 設定
Security Group
(kubernetes required ports)
roles
劃分不同種類的工作內容
roles/k8s-common
針對所有伺服器都需要執行的設定(安裝 docker、kubeadm 等等)roles/master
針對 master 伺服器 需要執行的設定(安裝 kubectl 以及設定 CNI 等等)roles/worker
針對 worker 伺服器 需要執行的設定 (加入 K8s cluster)
-
Ansible 藉由 Boto3 (AWS SDK) 呼叫
CloudFormation
去建置cloudformation/k8s_tmplate.yaml
所定義的資源 -
Ansible 再由 Boto3 (AWS SDK) 去取得所有
EC2 instance
的 Domain Name -
透過
Ansible Dynamic Inventory
去註冊已取得的 Domain Name -
Ansible 安裝 Kubernetes 在這些
EC2 instance
上
-
進入
Kubernetes-On-EC2s
專案-
$ cd <your_workspace>/Kubernetes-On-EC2s
-
-
修改
groups_var/all.yaml
的ansible_ssh_private_key_file
的 value 為自己的 ec2 key -
(Optional) 在
host_vars
設定 AWS 的客製化參數 -
執行 ansible 的 playbook
-
ansible-playbook site.yaml
-
- Single master node
- Multiple worker nodes
- High Availability Control Plane (multi-master cluster)
- Nodes across multi-az