使用Flux CD持续交付Kubernetes应用程序实战
概述
Flux CD是一个基于GitOps的工具,用于实现在Kubernetes上进行持续交付的自动化过程。它允许开发团队通过版本控制系统来管理应用程序的部署,并将应用程序自动同步到Kubernetes集群。使用Flux CD,您可以通过定义应用程序的声明性配置文件来管理整个交付流程,从而实现自动化的构建、测试和部署。Flux CD通过定期轮询存储库,将源代码存储库中存储的Kubernetes清单与Kubernetes集群同步,因此团队无需担心运行kubectl命令和监视环境,以查看是否部署了正确的工作负载。相反,Flux CD确保Kubernetes集群始终与源代码存储库中定义的配置保持同步。
工作原则
Flux CD允许团队实现GitOps,它有以下原则:
- Git是唯一的真理来源。
- Git是操作所有环境的唯一地方,所有配置都是代码。
- 所有的变化都是可观察/可验证的。
为什么是Flux CD?
Kubernetes的传统CI/CD部署遵循以下模式:
- 开发人员创建代码并编写Dockerfile。他们还为应用程序创建Kubernetes清单和Helm图表。
- 他们将代码推送到源代码存储库。
- 源代码存储库使用提交后钩子触发Jenkins构建
- Jenkins CI进程构建Docker映像和Helm包,并将它们推送到工件存储库。
- Jenkins CD进程然后在Kubernetes集群上部署Helm图表。
这个过程听起来很合理,也或多或少是行业标准。然而,也有一些限制:
- 您需要在Jenkins服务器中存储Kubernetes凭据。由于服务器是共享的,因此存在折衷的可能性。
- 虽然可以使用Jenkins创建和更改配置,但不能使用它删除现有资源。例如,如果从存储库中删除清单文件,kubectl不会从服务器中删除它。这是自动化GitOps的最大障碍。
Flux CD的工作原理
Flux CD允许团队使用YAML清单声明性地指定所有必需的Kubernetes配置。
- 团队编写Kubernetes清单并将其推送到源代码存储库。
- memcached pod存储当前配置。
- Flux定期(默认为5分钟)使用Kubernetes操作符轮询存储库以查看更改。Flux容器将其与memcached中的现有配置进行比较。
- 如果它检测到更改,它将通过运行一系列kubectl apply/delete命令将配置与集群同步。然后,它将最新的元数据再次存储在memcached存储中。
此外,如果您希望自动升级工作负载,Flux CD还允许您轮询容器注册表,并使用最新的映像更新Git存储库上的Kubernetes清单。 由于Flux CD作为Kubernetes操作符运行,因此设置简单,易于启动。 让我们看一个实际演示,以便更好地理解它。
实战
先决条件
确保您有一个正在运行的Kubernetes集群和集群管理员角色来部署Flux CD。
Install fluxctl
Flux CD提供了一个fluxctl二进制文件,帮助您在Kubernetes集群中部署和管理Flux CD。下载最新版本的fluxctl并将其移动到/usr/bin目录。
$ wget https://github.com/fluxcd/flux/releases/download/1.19.0/fluxctl_linux_amd64
$ mv fluxctl_linux_amd64 /usr/bin/fluxctl
$ sudo chmod +x /usr/bin/fluxctl
对于这个示例,让我们使用GitHub作为源代码存储库。在你的GitHub帐户中Fork github.com/redhatxl/ng…
存储库包含nginx-deployment和nginx-service清单在workload目录中,web命名空间定义在namespaces目录中。
├─ namespaces
│ └─ web-ns.yaml
├─ workloads
│ ├─ nginx-deployment.yaml
│ └─ nginx-service.yaml
├─ .gitignore
├─ LICENSE
└─ README.md
在GHUSER环境变量中提供你的GitHub用户名,在GHREPO环境变量中提供GitHub repo,如下所示。创建一个名为flux的新名称空间,并在Kubernetes集群中安装flux CD操作符。 fluxctl install命令根据以下选项生成所需的Kubernetes清单:
github认证信息
导出您的GitHub个人访问令牌和用户名:
用于flux自动创建repo
export GITHUB_TOKEN=ghp_lGozxxxxxxxxx--------SI28Gmzi
export GITHUB_USER=redhatxl
检查您的Kubernetes集群
通过运行以下命令检查您是否拥有运行Flux所需的一切:
flux check --pre
在集群上安装Flux
有关如何使用GitHub org, Gitlab和其他git提供者引导的信息,请参见安装。
仅按照flux 控制器
flux install
安装并制定github信息,自动创建repo
执行bootstrap命令:
$ export GITHUB_TOKEN=ghp_lGozxxxxxxxxx--------SI28Gmzi
$ export GITHUB_USER=redhatxl
$ flux bootstrap github \
--owner=$GITHUB_USER \
--repository=nginx-kubernetes-fluxcd \
--branch=main \
--path=clusters/my-cluster \
--personal
可以看到已成功在github创建对应repo并在k8s集群内安装flux对应控制器
clone源码并查看内容,可以看到对应安装到集群内的flux原始资源清单
执行监听对应的repo并部署原始k8s资源
查看当前状态
在创建一个kustomization
flux create kustomization nginx \
--source=flux-system \
--path="./k8sresource" \
--prune=true \
--validation=client \
--interval=1m \
--health-check-timeout=2m \
--target-namespace=default
创建业务k8s部署资源目录,并创建资源清单文件
提交代码
查看已经开始部署
配置部署其他source资源
flux create source git podinfo \
--url=https://github.com/stefanprodan/podinfo \
--tag-semver=">=4.0.0" \
--interval=1m
flux create kustomization podinfo-default \
--source=podinfo \
--path="./kustomize" \
--prune=true \
--validation=client \
--interval=1m \
--health-check="Deployment/podinfo.default" \
--health-check-timeout=1m \
--target-namespace=default
配置部署helm资源
flux create source helm bitnami \
--interval=1h \
--url=https://charts.bitnami.com/bitnami
flux create helmrelease nginx \
--interval=1h \
--release-name=nginx-ingress-controller \
--target-namespace=kube-system \
--source=HelmRepository/bitnami \
--chart=nginx-ingress-controller \
--chart-version="5.x.x"
卸载
flux uninstall --namespace flux-system
总结
使用Flux CD进行持续交付可以提供许多好处,包括简化部署流程、减少人为错误、实现版本控制和可追溯性、自动化回滚等。通过引入GitOps的模式,Flux CD使得交付过程更加可靠和可重复,提高了团队的生产效率和应用程序的可靠性。
参考链接
- 点赞
- 收藏
- 关注作者
评论(0)