第1章 概述
FluxCD是一個(gè)開源的容器服務(wù)編排和持續(xù)交付工具。它使用GitOps模型,通過Git服務(wù)器和一種特定的工作流模型,為Kubernetes應(yīng)用提供靈活的自動(dòng)化部署管理,以實(shí)現(xiàn)容器應(yīng)用的持續(xù)交付。FluxCD可以幫助實(shí)現(xiàn)容器應(yīng)用的高可用性、可擴(kuò)展性和快速響應(yīng)變更的能力。

第2章 流水線改造需求
原有 EKS IAC流水線會(huì)依次調(diào)用 IAC 代碼倉庫 eks-config -> eks-environment -> aws_eks_module完成新建或者變更EKS集群,在配置EKS addon過程會(huì)執(zhí)行 eks-environment/kubernetes/addon.sh 腳本,完成
1. cloudwatch agent
2. ebs csi
3. efs csi
4. elb
5. fluentbit agent
原有的方式弊端,創(chuàng)建好的EKS集群升級(jí)或者addon配置微調(diào),都需要調(diào)整eks-environment代碼,重新運(yùn)行流水線,耗時(shí)周期長,并且非常不夠靈活
使用FluxCD工具改造后,會(huì)將原有addon.sh 腳本的維護(hù)工作托管到一個(gè)分離的Git倉庫,使用預(yù)配置到EKS集群的FluxCD工具完成軟件安裝或配置變更的同步,運(yùn)維工作更加簡化與便捷
第3章 EKS IAC 流水線設(shè)計(jì)與開發(fā)
新增 fluxcd-k8s-addon Git倉庫,存放用于部署 cloudwatch agent,ebs csi,efs csi,elb,fluentbit agent 應(yīng)用的kustomization 配置文件
修改 eks-config-test Git倉庫中 terraform.tfvars.json 文件 新增變量: cluster_name,fluxcd_chart_registry, fluxcd_chart_version
修改 eks-environment Git倉庫 kubernetes/addon.sh 修改為僅安裝FluxCD 和關(guān)聯(lián) fluxcd-k8s-addon 的初始化配置
FluxCD sync的倉庫管理實(shí)踐,建議建立base配置基線 和差異配置,
base配置基線保存適用于所有集群的默認(rèn)配置
差異配置的定義在具體每個(gè)集群中,每個(gè)集群的自定義變更影響范圍僅限所屬集群
具體代碼變更見如下相關(guān)倉庫
https://xxxx/xxx/eks_config/eks-config-test
https://xxx/xxx/eks_config/eks-environment
https://xxx/xxx/gitops/fluxcd-k8s-addon.git
第4章 FluxCD 測(cè)試與部署
整個(gè)開發(fā)階段,不包括代碼審核等待時(shí)間,耗時(shí)記錄如下:
| EKS集群 | 所屬環(huán)境 | 所屬階段 | 工作量 |
|---|---|---|---|
| sandbox3 | sandbox環(huán)境 | 開發(fā)測(cè)試 | 約 1-2周 |
| sandbox3 | sandbox環(huán)境 | 開發(fā)測(cè)試 | 約 1-2周 |
| dev | 測(cè)試環(huán)境 | 測(cè)試驗(yàn)證 | 實(shí)際耗時(shí) 1-2 小時(shí) |
| prod | 生產(chǎn)環(huán)境 | 生產(chǎn)發(fā)布 | 實(shí)際耗時(shí) 1-2 小時(shí) |
首先sandbox環(huán)境進(jìn)行代碼編寫與調(diào)試,測(cè)試驗(yàn)證,完成評(píng)審后,依此 dev,prod 兩個(gè)客戶業(yè)務(wù)集群完成上線驗(yàn)證
第5章 FluxCD 日常運(yùn)維
- fluxCD 控制器自身選擇穩(wěn)定版本即可,無需頻繁升級(jí),關(guān)聯(lián)的 gitops 倉庫需要隨著EKS 版本升級(jí)需要定期同步更新,嚴(yán)格按照sandbox -> 測(cè)試->生產(chǎn)流水發(fā)布即可,示例如下
| EKS 1.22 | EKS 1.23 | EKS 1.24 | |
|---|---|---|---|
| gitops/base | --- | --- | 版本升級(jí) |
| gitops/plugin | --- | 版本升級(jí) | 版本升級(jí) |
| gitops/cluster | 測(cè)試環(huán)境 | 測(cè)試驗(yàn)證 | 測(cè)試環(huán)境 |
- 日常運(yùn)維主要涉及如下兩個(gè)代碼倉庫,詳見倉庫中 README.md文檔
https://xxx/xxx/eks_config/eks-config-test
https://xxx/xxx/gitops/fluxcd-k8s-addon.git
- 日常運(yùn)維注意事項(xiàng):
FluxCD 本身過于自動(dòng)化,新接手維護(hù)人員需要分配嚴(yán)格的gitlab角色權(quán)限,和環(huán)境操作權(quán)限,避免操作失誤導(dǎo)致錯(cuò)誤放大
日常運(yùn)維能力要求:
對(duì)Git分支管理操作要求熟練
具備基本的k8s運(yùn)維能力
具備helm/chart使用經(jīng)驗(yàn)
第6章 FluxCD 總結(jié)
FluxCD 是一個(gè)面向容器應(yīng)用的高效運(yùn)維工具,Gitops工作模式除了能夠高效自動(dòng)完成工作,也自動(dòng)將配置發(fā)布變更的風(fēng)險(xiǎn),因此需要嚴(yán)格控制遵循Gitops工作流,確保主分支一定是合并嚴(yán)格測(cè)試的代碼和配置
FluxCD的局限性,僅適合容器應(yīng)用場(chǎng)景,無法管理非容器應(yīng)用,也不適合IAC自動(dòng)化管理(因?yàn)閷?duì)于 IaaS來說不存在真正意義的回滾,只有創(chuàng)建和刪除)
第7章 FluxCD 擴(kuò)展思考
結(jié)合 FluxCD 可以擴(kuò)展為面向容器應(yīng)用的GitOPS通用解決方案(包括普通容器應(yīng)用,分布式容器應(yīng)用)
- 結(jié)合Flagger與支持灰度的ingress 可以實(shí)現(xiàn)普通應(yīng)用的流水線發(fā)布的設(shè)計(jì),可以實(shí)現(xiàn)A/B,藍(lán)綠,金絲雀發(fā)布,2022 MSP renew 中的App流水線demo 就是采用如下實(shí)現(xiàn)方式

- 如果遇到客戶有微服務(wù)架構(gòu)應(yīng)用的發(fā)布管理需求,可以結(jié)合service mesh 實(shí)現(xiàn)微服務(wù)模塊發(fā)布的流水線設(shè)計(jì)方案
