跳到主要内容

在 Kubernetes 集群上引导 Flux 并部署示例应用程序

本教程将向您展示如何将 Flux 引导到 Kubernetes 集群,并以 GitOps 方式部署一个示例应用程序。

开始之前

在你开始本教程前,你需要准备以下2个前置资源:

目标

  • 在 Kubernetes 集群上引导安装 Flux自身。
  • 使用 Flux 部署一个示例应用程序。
  • 通过 Kustomize patches 自定义应用程序配置。

安装 Flux CLI

Flux CLI 用于引导安装 Flux自身以及与 Flux系统交互。

要使用 Homebrew 安装 CLI,请运行:

brew install fluxcd/tap/flux

导出凭据

导出您的GitHub个人访问令牌和用户名:

export GITHUB_TOKEN=<您的令牌>
export GITHUB_USER=<您的用户名>

检查您的Kubernetes集群

通过运行以下命令检查是否具备运行Flux所需的所有条件:

flux check --pre

我们会检查你的集群是否符合要求,输出如下:

► checking prerequisites
✔ kubernetes 1.22.2 >=1.20.6
✔ prerequisites checks passed

安装Flux到您的集群

有关如何使用 GitHub 组织、GitLab 和其他 Git 提供程序进行引导的信息,请参阅安装文档

运行 bootstrap 命令:

flux bootstrap github \
--owner=$GITHUB_USER \
--repository=fleet-infra \
--branch=main \
--path=./clusters/my-cluster \
--personal

输出如下:

► connecting to github.com
✔ repository created
✔ repository cloned
✚ generating manifests
✔ components manifests pushed
► installing components in flux-system namespace
deployment "source-controller" successfully rolled out
deployment "kustomize-controller" successfully rolled out
deployment "helm-controller" successfully rolled out
deployment "notification-controller" successfully rolled out
install completed
► configuring deploy key
✔ deploy key configured
► generating sync manifests
sync manifests pushed
► applying sync manifests
◎ waiting for cluster sync
✔ bootstrap finished

上面的引导命令执行以下操作:

  • 在您的 GitHub 帐户上创建一个 git 存储库 fleet-infra。
  • 将 Flux 组件清单添加到存储库。
  • 将 Flux 组件部署到您的 Kubernetes 集群。
  • 配置 Flux 组件以跟踪存储库中的路径 /clusters/my-cluster/。

克隆git仓库

将fleet-infra仓库克隆到本地机器上:

git clone https://github.com/$GITHUB_USER/fleet-infra
cd fleet-infra

将podinfo仓库添加到Flux中

此示例使用一个公共仓库 github.com/stefanprodan/podinfo,podinfo是一个使用Go创建的小型Web应用程序。

  1. 创建一个GitRepository清单,指向podinfo仓库的主分支:
flux create source git podinfo \
--url=https://github.com/stefanprodan/podinfo \
--branch=master \
--interval=30s \
--export > ./clusters/my-cluster/podinfo-source.yaml

输出如下:

apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: podinfo
namespace: flux-system
spec:
interval: 30s
ref:
branch: master
url: https://github.com/stefanprodan/podinfo
  1. 提交并推送podinfo-source.yaml文件到fleet-infra仓库:
git add -A && git commit -m "Add podinfo GitRepository"
git push

部署podinfo应用程序

配置 Flux , build and apply 位于 podinfo 仓库中的kustomize清单。

使用flux create命令创建一个Kustomization来应用podinfo部署:

flux create kustomization podinfo \
--target-namespace=default \
--source=podinfo \
--path="./kustomize" \
--prune=true \
--interval=5m \
--export > ./clusters/my-cluster/podinfo-kustomization.yaml

输出如下:

apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: podinfo
namespace: flux-system
spec:
interval: 5m0s
path: ./kustomize
prune: true
sourceRef:
kind: GitRepository
name: podinfo
targetNamespace: default

提交并推送Kustomization清单到仓库:

git add -A && git commit -m "Add podinfo Kustomization"
git push

fleet-infra仓库的结构应类似于:

fleet-infra
└── clusters/
└── my-cluster/
├── flux-system/
│ ├── gotk-components.yaml
│ ├── gotk-sync.yaml
│ └── kustomization.yaml
├── podinfo-kustomization.yaml
└── podinfo-source.yaml

监视Flux同步应用程序

  1. 使用 flux get 命令监视 podinfo 应用程序:
flux get kustomizations --watch

输出如下:

NAME          REVISION             SUSPENDED  READY   MESSAGE
flux-system main@sha1:4e9c917f False True Applied revision: main@sha1:4e9c917f
podinfo master@sha1:44157ecd False True Applied revision: master@sha1:44157ecd
  1. 检查 podinfo 是否已部署到您的集群:
kubectl -n default get deployments,services

输出如下:

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/podinfo 2/2 2 2 108s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/podinfo ClusterIP 10.100.149.126 <none> 9898/TCP,9999/TCP 108s

暂停更新

暂停kustomization的更新允许您直接编辑从 kustomization 应用的对象,而不会受到Git中的状态回滚影响。

要暂停kustomization的更新,运行以下命令:

flux suspend kustomization <name>

要恢复更新,运行以下命令:

flux resume kustomization <name>

自定义 podinfo 部署

要自定义不受您控制的仓库中的 deployment,您可以使用Flux的内联补丁(inline patches)。下面的示例展示了如何使用内联补丁来更改podinfo部署。

在podinfo-kustomization.yaml文件的spec字段中添加以下内容:

patches:
- patch: |-
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: podinfo
spec:
minReplicas: 3
target:
name: podinfo
kind: HorizontalPodAutoscaler

提交并推送podinfo-kustomization.yaml文件的更改:

git add -A && git commit -m "Increase podinfo minimum replicas"
git push

同步完成后,运行kubectl get pods命令应显示3个Pod。

多集群设置

如果要使用Flux管理多个集群或从Staging环境推广部署到Production环境,请参考下面列出的两种方法: