DevOps課程-Configuration Management with Ansible 22
Project Automate K8s Deployment
要先讓遠端主控機台可以透過Terraform建置EKS
在遠端主控機除了前面有安裝anisble工具(參考第18篇筆記)
後續為了配合Terraform連動驅動Ansible腳本
又在主控機上安裝AWS Cli & Terraform工具(參考第20篇筆記)
接著就可以考慮更進階的K8S相關Ansible自動化腳本作業
Introduction
前面課程學會了透過Anislbe腳本自動化安裝Nexus,Java應用程式
也學會安裝docker,甚至自動化運行Container
接著就要來學著自動化佈署應用程式到K8s上
並且會有以下幾個階段建置:
- 透過Terraform建置EKS叢集,可能會建在別的region
- 設置Ansible去連線到該EKS叢集
- 佈署Deployment與Service到EKS上(此時會自動化接到ALB暴露服務)
這邊使用的就是Terraform課程建立的EKS的建置腳本
Create EKS cluster with Terraform
抓取之前Terraform最後完成的筆記,也就是github上的EKS建置的程式碼
重新抓到主控機上面
#執行以下指令:
terraform init
#建置:
terraform apply
建置完成後,到指定的region查詢EKS服務確認有成功建立
由於建立是指定到不同region來確認結果:
所以要切換一下region去查看EKS是否正常建立(大概要十幾分鐘)
#參考以前Terraform建置EKS的PART 3筆記
#執行以下aws工具指令取得該Region指定的EKS Cluster名稱的kubeconfig檔:
aws eks update-kubeconfig --name myapp-eks-cluster --region eu-west-2
(如果目錄下已經有kubeconfig檔,就會報錯)
#順便主控機安裝kubectl工具(指定版本,參考k8s官網)
curl -LO https://dl.k8s.io/release/v1.27.1/bin/linux/amd64/kubectl
#搬到一般使用者工具目錄:
sudo mv kubectl /usr/local/bin/
sudo chmod u+x /usr/local/bin/kubectl
隨便試一下指令看到:
Create a NameSpace in EKS Cluster
透過kubeconfig檔案這個檔案即可對EKS Cluster進行相關操作
裡面描述了EKS Cluster溝通的api Server的真實位置
接著Ansible也會需要該檔案來進行EKS Cluster相關操作
回到Ansible腳本目錄內,建立新的Ansible腳本
名稱叫做:deploy-to-k8s.yaml
然後使用找到以下K8S的Ansible module:
community.kubernetes.k8s
這邊開始撰寫操作EKS Cluster的Ansible腳本,但是首先會注意到
上面這個module會需要:
- OpenShift Python client是用來K8S物件的CRUD操作
- openShift = Python client for OpenShift Platform
- PyYAML = YAML parser and emitter for Python
這邊有幾個簡單指令可以檢查是否有安裝上述Python模組
#執行pip編譯指令來檢測是否有相關模組:
python3 -c "import openshift"
#另外確認PyYAML則是:
python3 -c "import yaml"
所以目前缺openshift
#執行pip工具安裝opensihft模組
#但是現在指定安裝到登入的使用者層級去安裝就好,不要裝到系統層
#不然還會有權限問題,所以加入--user:
pip3 install openshift --user
#如果上面yaml沒裝的話就順便:
pip3 install PyYAML --user
最後確認都裝好了:
開始編輯deploy-to-k8s.yaml
也可以參考文件透過環境變數去指定kubeconfig檔
這樣可以指定到特定的kubeconfig檔名的絕對路徑
另外由於指定的機台是localhost
所以設定檔依據之前課程指定到inventory_aws_ec2.yaml就要改回hosts
這時候把腳本放到主控機的anislbe目錄下,就可以使用
#執行以下指令:
ansible-playbook deploy-to-k8s.yaml
上面就把NameSpace建立完了
接著其他元件部分可以寫成YAML來建立,先寫為nginx-config.yaml檔案:
把上面這檔案放到主控機的ansible執行目錄去,然後腳本加入:
#再次執行以下指令:
ansible-playbook deploy-to-k8s.yaml
上面外網暴露的位置可以直接打,但是通常要等個幾分鐘才能等到ALB建立
我大概等1~2分鐘看到:
而實際上這個k8s的Ansible module也可以透過他的格式直接創建k8s元件
寫成他定義的definition格式:
Set environment variable for kubeconfig
每個Play中去填寫以下這行會變得非常瑣碎:
#可以直接放到環境變數去使用:
export K8S_AUTH_KUBECONFIG=~/.kube/config
腳本就可以改為:
#再次執行以下指令:
ansible-playbook deploy-to-k8s.yaml