CICD
工具做DevOps
kubectl
使用者端連線即可)原理很簡單,使用ansible
管理模板,呼叫kubectl
執行部署
ansible-templates -> deploy.yml -> kubectl -> kubenertes
執行過程使用tag
標記,如-t deploy
執行deploy
部分
根據執行過程,大致分為以下步驟模組
模板目錄 roles/k8s/templates
根據服務類別分為如下子目錄
jetty
的服務構建和部署模板針對不同k8s環境如dev、prod,使用各自引數設定如儲存、映象倉庫、資源限制等
使用ansible -i 指定inventory路徑並使用對應的組變數
如dev環境的k8s組態檔 group_vars/dev/k8s.yml
服務app-v1的dev環境設定 group_vars/dev/k8s_apps/app-v1.yml
prod環境使用對應設定路徑 group_vars/prod/k8s_apps/app-v1.yml
執行截圖
export Ver=1.22.16 #k8s版本
curl -ks http://elvin.vip/ks/k8s/k8s.master.ha.sh |bash
# 參考https://www.cnblogs.com/elvi/p/8976305.html
mkdir -p /data/ansible-app2k8s
cd /data/ansible-app2k8s
#gitee
git clone https://gitee.com/alivv/ansible-app2k8s.git ./
#github
#git clone https://github.com/alivv/ansible-app2k8s.git ./
為保證執行
ansible
版本一致,我做了ansible
映象
#檢視shell
cat /data/ansible-app2k8s/files/run.ansible-app2k8s.sh
sudo docker rm -f ansible-app2k8s &>/dev/null
sudo docker run -dit --net=host \
--name ansible-app2k8s -h app2k8s \
-w /data/ansible-app2k8s \
-v /tmp:/tmp \
-v /etc/hosts:/etc/hosts \
-v ~/.ssh:/root/.ssh \
-v /data/ansible-app2k8s:/data/ansible-app2k8s \
registry.cn-shanghai.aliyuncs.com/elvin/ansible:2.7.18-focal
sudo docker ps -l
#執行容器 ansible-app2k8s
bash /data/ansible-app2k8s/files/run.ansible-app2k8s.sh
#設定別名
alias app2k8s='docker start ansible-app2k8s ; docker exec -it ansible-app2k8s bash'
#linux
echo "alias app2k8s='docker start ansible-app2k8s ; docker exec -it ansible-app2k8s bash'" >>~/.bashrc
#macOS
echo "alias app2k8s='sudo docker start ansible-app2k8s ; sudo docker exec -it ansible-app2k8s bash'" >>~/.zshrc
#進入ansible-app2k8s容器(Ctrl+d退出)
app2k8s
#檢視ansbile版本
ansible --version
本範例把多個功能部署在 docker-build 單節點
為了安全,實際可根據需求可拆分為多個節點
設定 dev 節點 env/dev/k8s.inv
#設定dev環境節點資訊 env/dev/k8s.inv
cat > env/dev/k8s.inv <<EOF
[dev:children]
k8s-node
docker-build
[docker-build]
build-node1 ansible_ssh_host=192.168.23.45
[k8s-node]
k8s-node1 ansible_ssh_host=192.168.23.30
[k8s:children]
k8s-node
[docker:children]
docker-build
registry
[registry]
build-node1
EOF
#IP地址換自己的,節點需要免密登入
#節點需要安裝python2
# apt install -y python python2 python-apt
# ln -fs /usr/bin/python2 /usr/bin/python
設定 dev 環境引數 group_vars/dev/k8s.yml
#修改設定IP地址
k8s_version: 1.22.16
kubectl_node: 192.168.23.45
deploy_yml_node: 192.168.23.45
ansible 測試
ansible -i env/dev all -m ping
#獲取節點變數
ansible -i env/dev all -m setup
docker-registry
、nfs-server
、yml-node
#安裝docker,docker-py(ansible構建映象依賴)
ansible-playbook docker.yml -D -i env/dev -l docker-build -t docker,py,job
#部署docker-registry作為映象倉庫
ansible-playbook docker.yml -i env/dev -D -l registry -t registry,registry-auth
#增加映象倉庫host解析
ansible-playbook docker.yml -i env/dev -D -t hosts-registry
#yml檔案存放節點
ansible-playbook docker.yml -i env/dev -D -l docker-build -t yml-node
#安裝nfs服務和建立nfs目錄,建立容器儲存卷PVC使用
ansible-playbook nfs.yml -i env/dev -D -l docker-build -t nfs-server
#使用nfs儲存卷,k8s節點需安裝nfs client
ansible-playbook nfs.yml -i env/dev -D -l k8s
拷貝
k8s 節點設定 /etc/kubernetes/admin.conf
替換
本範例設定 roles/k8s/files/kubeconfig-dev.yml
可手動設定kubeconfig,檔案路徑設定在group_vars/dev/k8s.yml
#安裝設定kubectl命令列
ansible-playbook k8s.yml -i env/dev -D -l build-node1 -t kubectl,kubeconfig
#kubectl測試命令 kubectl get nodes
ansible-playbook k8s.yml -i env/dev -D -t kubectl-test
#檢視幫助
ansible-playbook k8s.yml -i env/dev -D -t h
#檢視資源列表
ansible-playbook k8s.yml -i env/dev -D -t list
構建映象測試
#檢視base基礎映象dockerfile列表
ansible-playbook k8s.yml -i env/dev -D -t baselist
#構建映象nginx_1.22-alpine-www
ansible-playbook k8s.yml -i env/dev -D -t base-build -e baselist=nginx_1.22-alpine-www
#構建完成後開啟映象倉庫web檢視映象
#預設賬戶密碼 admin docker
#新增本地host解析後開啟 http://hub.elvin.vip
#檢視列表
ansible-playbook k8s.yml -i env/dev -D -t pushlist
#推播所有(有點耗時)
ansible-playbook k8s.yml -i env/dev -D -t push -e pushlist=all
#檢視yml列表
ansible-playbook k8s.yml -i env/dev -D -t initlist
#執行所有
ansible-playbook k8s.yml -i env/dev -D -t init -e initlist=all
#警報通知使用釘釘機器人,需要改為自己的機器人tonken
grep notice_dingtalk_token group_vars/dev/k8s_ui.yml
#檢視yml列表
ansible-playbook k8s.yml -i env/dev -D -t monitorlist
#執行所有yml
ansible-playbook k8s.yml -i env/dev -D -t monitor
grafana預設使用者密碼 admin
grafana
新增loki資料來源地址 http://loki:3100
新增prometheus資料庫源地址 http://prometheus:9090
grafana模板 roles/k8s/templates/monitor/grafana-template/
#檢視app列表
ansible-playbook k8s.yml -i env/dev -D -t applist
#測試,構建與部署app-v1
ansible-playbook k8s.yml -i env/dev -D -t build,deploy -e applist=app-v1
#構建與部署全部
ansible-playbook k8s.yml -i env/dev -D -t build,deploy -e applist=all
ansible-playbook k8s.yml -i env/dev -D -t ingress
檢視ingress設定,瀏覽器開啟網址檢視如下:
#新增本機hosts解析
ansible-playbook dev.yml -i env/dev -D -t hosts-local
#檢視已設定網址列表,瀏覽器開啟測試
ansible-playbook dev.yml -i env/dev -t url
測試完成後,清理 k8s 的 dev 部署
#刪除ingress
ansible-playbook k8s.yml -i env/dev -D -t ingress-rm
#刪除dev環境服務
ansible-playbook k8s.yml -i env/dev -D -t rm -e applist=all
#刪除監控
ansible-playbook k8s.yml -i env/dev -D -t monitor-rm
#刪除環境初始化
ansible-playbook k8s.yml -i env/dev -D -t init-rm
ansible-playbook k8s.yml -i env/dev -D -t rmi,build,deploy -e applist=app-v1
,
分隔多個 tag為便於管理與維護,本範例儲存卷PVC
使用靜態儲存
使用PVC
時掛載路徑新增對應服務子路徑 subPath
使用 cronJob 每天壓縮與清理 PVC 儲存的 log 檔案
儲存範例型別有 NFS、阿里雲 NAS、騰訊雲 CFS、AWS EFS、Azure Files
路徑 roles/k8s/templates/init 字首是1.4.pvc
的檔案
log4j2 設定在 configmap roles/k8s/templates/jetty/configmap/
以下部署 yaml 路徑 roles/k8s/templates/init/
8.4.1 https 證書自動續簽 cert-manager
官網 https://cert-manager.io
GitHub https://github.com/cert-manager/cert-manager
注意事項:
8.4.2 k8s 面板 KubePi
Kubernetes 視覺化面板,可管多個 k8s 叢集,國產開源
GitHub https://github.com/1Panel-dev/KubePi
8.4.3 k8s面板IDE工具推薦Lens
官網 https://k8slens.dev
8.4.4 k8s 使用者許可權管理 permission-manager
新增設定使用者許可權,生成使用者 kubeconfig 檔案
GitHub https://github.com/sighupio/permission-manager
監控方案為 prometheus, 主要包含如下模組:
其它監控相關
監控警報規則
prometheus 採集和警報規則都在 prometheus-config.yml 檔案
包含警報規則如下:
grafana 模板
JVM 監控 grafana 檢視:
docker-registry 單獨部署使用可以檢視我部落格
https://www.cnblogs.com/elvi/p/13394449.html
服務部署到公有云,推薦直接使用公有云的映象儲存服務
設定裡有 3 個映象倉庫地址(公有云分內網和外網地址)
請按需並自行解決安全問題,提示以下注意事項:
使用 Jenkins+ansible+釘釘通知,自動化部署通知:
#更改構建引數後,檢視dockerfile變化
ansible-playbook k8s.yml -i env/dev -D -t dockerfile -e applist=app-v1 -C
#更改部署引數後檢視deployment變化
ansible-playbook k8s.yml -i env/dev -D -t yml -e applist=app-v1 -C
#單獨更改configmap設定後,服務需要重啟生效
ansible-playbook k8s.yml -i env/dev -D -t config,restart -e applist=app-v1
#構建和部署服務,rmi是刪除構建節點已存在的相同tag映象
ansible-playbook k8s.yml -i env/dev -D -t rmi,build,deploy -e applist=app-v1
#部署生產環境,使用upload上傳映象到外網映象倉庫
ansible-playbook k8s.yml -i env/prod -D -t upload,deploy -e applist=app-v1
#更改prometheus監控警報規則後需要reload生效
ansible-playbook k8s.yml -i dev -D -t monitor-config,monitor-reload
Elvin [email protected]
主要部落格 http://blog.elvin.vip
本文來自部落格園,作者:blog-elvin-vip,轉載請註明原文連結:https://www.cnblogs.com/elvi/p/17502093.html