第1章 概述
FluxCD是一个开源的容器服务编排和持续交付工具。它使用GitOps模型,通过Git服务器和一种特定的工作流模型,为Kubernetes应用提供灵活的自动化部署管理,以实现容器应用的持续交付。FluxCD可以帮助实现容器应用的高可用性、可扩展性和快速响应变更的能力。
第2章 流水线改造需求
原有 EKS IAC流水线会依次调用 IAC 代码仓库 eks-config -> eks-environment -> aws_eks_module完成新建或者变更EKS集群,在配置EKS addon过程会执行 eks-environment/kubernetes/addon.sh 脚本,完成
1. cloudwatch agent
2. ebs csi
3. efs csi
4. elb
5. fluentbit agent
原有的方式弊端,创建好的EKS集群升级或者addon配置微调,都需要调整eks-environment代码,重新运行流水线,耗时周期长,并且非常不够灵活
使用FluxCD工具改造后,会将原有addon.sh 脚本的维护工作托管到一个分离的Git仓库,使用预配置到EKS集群的FluxCD工具完成软件安装或配置变更的同步,运维工作更加简化与便捷
第3章 EKS IAC 流水线设计与开发
新增 fluxcd-k8s-addon Git仓库,存放用于部署 cloudwatch agent,ebs csi,efs csi,elb,fluentbit agent 应用的kustomization 配置文件
修改 eks-config-test Git仓库中 terraform.tfvars.json 文件 新增变量: cluster_name,fluxcd_chart_registry, fluxcd_chart_version
修改 eks-environment Git仓库 kubernetes/addon.sh 修改为仅安装FluxCD 和关联 fluxcd-k8s-addon 的初始化配置
FluxCD sync的仓库管理实践,建议建立base配置基线 和差异配置,
base配置基线保存适用于所有集群的默认配置
差异配置的定义在具体每个集群中,每个集群的自定义变更影响范围仅限所属集群
具体代码变更见如下相关仓库
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 测试与部署
整个开发阶段,不包括代码审核等待时间,耗时记录如下:
EKS集群 | 所属环境 | 所属阶段 | 工作量 |
---|---|---|---|
sandbox3 | sandbox环境 | 开发测试 | 约 1-2周 |
sandbox3 | sandbox环境 | 开发测试 | 约 1-2周 |
dev | 测试环境 | 测试验证 | 实际耗时 1-2 小时 |
prod | 生产环境 | 生产发布 | 实际耗时 1-2 小时 |
首先sandbox环境进行代码编写与调试,测试验证,完成评审后,依此 dev,prod 两个客户业务集群完成上线验证
第5章 FluxCD 日常运维
- fluxCD 控制器自身选择稳定版本即可,无需频繁升级,关联的 gitops 仓库需要随着EKS 版本升级需要定期同步更新,严格按照sandbox -> 测试->生产流水发布即可,示例如下
EKS 1.22 | EKS 1.23 | EKS 1.24 | |
---|---|---|---|
gitops/base | --- | --- | 版本升级 |
gitops/plugin | --- | 版本升级 | 版本升级 |
gitops/cluster | 测试环境 | 测试验证 | 测试环境 |
- 日常运维主要涉及如下两个代码仓库,详见仓库中 README.md文档
https://xxx/xxx/eks_config/eks-config-test
https://xxx/xxx/gitops/fluxcd-k8s-addon.git
- 日常运维注意事项:
FluxCD 本身过于自动化,新接手维护人员需要分配严格的gitlab角色权限,和环境操作权限,避免操作失误导致错误放大
日常运维能力要求:
对Git分支管理操作要求熟练
具备基本的k8s运维能力
具备helm/chart使用经验
第6章 FluxCD 总结
FluxCD 是一个面向容器应用的高效运维工具,Gitops工作模式除了能够高效自动完成工作,也自动将配置发布变更的风险,因此需要严格控制遵循Gitops工作流,确保主分支一定是合并严格测试的代码和配置
FluxCD的局限性,仅适合容器应用场景,无法管理非容器应用,也不适合IAC自动化管理(因为对于 IaaS来说不存在真正意义的回滚,只有创建和删除)
第7章 FluxCD 扩展思考
结合 FluxCD 可以扩展为面向容器应用的GitOPS通用解决方案(包括普通容器应用,分布式容器应用)
- 结合Flagger与支持灰度的ingress 可以实现普通应用的流水线发布的设计,可以实现A/B,蓝绿,金丝雀发布,2022 MSP renew 中的App流水线demo 就是采用如下实现方式
- 如果遇到客户有微服务架构应用的发布管理需求,可以结合service mesh 实现微服务模块发布的流水线设计方案