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

2023年 8月 22日 91.6k 0

概述

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使得交付过程更加可靠和可重复,提高了团队的生产效率和应用程序的可靠性。

    参考链接

    • fluxcd.io/flux/instal…

    相关文章

    KubeSphere 部署向量数据库 Milvus 实战指南
    探索 Kubernetes 持久化存储之 Longhorn 初窥门径
    征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
    那些年在 Terraform 上吃到的糖和踩过的坑
    无需 Kubernetes 测试 Kubernetes 网络实现
    Kubernetes v1.31 中的移除和主要变更

    发布评论