![](https://img-blog.csdnimg.cn/img_convert/cb7d266d24a21ad3b919883348f8c69f.png)
对于此示例,我们假设有两个集群的场景:暂存(staging
)和生产(production
)。
最终目标是利用 Flux
和 Kustomize
来管理两个集群,同时最大限度地减少重复声明。
我们将配置 Flux
以使用 HelmRepository
和 HelmRelease
自定义资源安装、测试和升级演示应用程序。Flux
将监控 Helm
存储库,并根据 semver
范围自动将 Helm
版本升级到最新的 chart
版本。
准备工作
flux2-kustomize-helm-example
您将需要 Kubernetes
集群版本 1.16 或更新版本以及 kubectl
版本 1.18 或更新。
对于快速的本地测试,您可以使用Kubernetes kind。不过,任何其他 Kubernetes 设置也可以正常工作。
为了遵循本指南,您需要一个 GitHub
帐户和一个可以创建存储库的personal access token(检查 repo
下的所有权限)。
使用 Homebrew
在 MacOS
和 Linux
上安装 Flux CLI
:
brew install fluxcd/tap/flux
或者通过使用 Bash
脚本下载预编译的二进制文件来安装 CLI:
curl -s https://fluxcd.io/install.sh | sudo bash
项目结构
Git 存储库包含以下顶级目录:
- apps 目录包含每个集群具有自定义配置的 Helm 版本
- infrastructure 目录包含常见的基础设施工具,例如 NGINX ingress controller 和 Helm 存储库定义
- clusters 目录包含每个集群的 Flux 配置
├── apps
│ ├── base
│ ├── production
│ └── staging
├── infrastructure
│ ├── nginx
│ ├── redis
│ └── sources
└── clusters
├── production
└── staging
apps 配置结构为:
- apps/base/ 目录包含命名空间和 Helm 发布定义(release definitions)
- apps/production/ 目录包含生产 Helm 发布值(release values)
- apps/staging/ 目录包含 staging values
./apps/
├── base
│ └── podinfo
│ ├── kustomization.yaml
│ ├── namespace.yaml
│ └── release.yaml
├── production
│ ├── kustomization.yaml
│ └── podinfo-patch.yaml
└── staging
├── kustomization.yaml
└── podinfo-patch.yaml
在 apps/base/podinfo/ 目录中,我们有一个 HelmRelease
,两个集群都有共同的值:
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: podinfo
name