使用Flux CD持续交付Kubernetes应用程序实战

举报
kaliarch 发表于 2023/10/21 10:05:27 2023/10/21
【摘要】 概述Flux CD是一个基于GitOps的工具,用于实现在Kubernetes上进行持续交付的自动化过程。它允许开发团队通过版本控制系统来管理应用程序的部署,并将应用程序自动同步到Kubernetes集群。使用Flux CD,您可以通过定义应用程序的声明性配置文件来管理整个交付流程,从而实现自动化的构建、测试和部署。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部署遵循以下模式:

  1. 开发人员创建代码并编写Dockerfile。他们还为应用程序创建Kubernetes清单和Helm图表。
  2. 他们将代码推送到源代码存储库。
  3. 源代码存储库使用提交后钩子触发Jenkins构建
  4. Jenkins CI进程构建Docker映像和Helm包,并将它们推送到工件存储库。
  5. 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目录。


shell
复制代码
$ 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目录中。


shell
复制代码
├─ 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


sh
复制代码
export GITHUB_TOKEN=ghp_lGozxxxxxxxxx--------SI28Gmzi
export GITHUB_USER=redhatxl

检查您的Kubernetes集群

通过运行以下命令检查您是否拥有运行Flux所需的一切:


bash
复制代码
flux check --pre

在集群上安装Flux

有关如何使用GitHub org, Gitlab和其他git提供者引导的信息,请参见安装。

仅按照flux 控制器


shell
复制代码
flux install

安装并制定github信息,自动创建repo

执行bootstrap命令:


shell
复制代码
$ 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


shell
复制代码
flux create kustomization nginx \
  --source=flux-system \
  --path="./k8sresource" \
  --prune=true \
  --validation=client \
  --interval=1m \
  --health-check-timeout=2m \
  --target-namespace=default

创建业务k8s部署资源目录,并创建资源清单文件

提交代码

查看已经开始部署

配置部署其他source资源


shell
复制代码
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资源


shell
复制代码
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"

卸载


shell
复制代码
flux uninstall --namespace flux-system

总结

使用Flux CD进行持续交付可以提供许多好处,包括简化部署流程、减少人为错误、实现版本控制和可追溯性、自动化回滚等。通过引入GitOps的模式,Flux CD使得交付过程更加可靠和可重复,提高了团队的生产效率和应用程序的可靠性。

参考链接



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。