使用 FluxCD 做 GitOps

    GitOps 模式会自动同步仓库的配置到集群中,首先,我们需要一个仓库,里面存放着所有你需要的配置文件:如一些 Kubernetes 原生资源 Deployment,Secret,ConfigMap 等。当然,你可以在直接在仓库中存放 KubeVela 的 Application。

    假设在我们的仓库中,有一个叫做 的文件夹,里面有一个叫做 server 的 KubeVela Application 以及一个叫做 server-config 的 ConfigMap。

    配置仓库的目录结构如下:

    部署如下 KubeVela GitOps 应用:

    1. apiVersion: core.oam.dev/v1beta1
    2. kind: Application
    3. metadata:
    4. name: infra-gitops
    5. spec:
    6. components:
    7. - name: database-config
    8. type: kustomize
    9. properties:
    10. repoType: git
    11. # 将此处替换成你需要监听的 git 配置仓库地址
    12. url: https://github.com/FogDong/KubeVela-GitOps-Infra-Demo
    13. # 如果是私有仓库,还需要关联 git secret
    14. # secretRef: git-secret
    15. # 自动拉取配置的时间间隔,由于基础设施的变动性较小,此处设置为十分钟
    16. pullInterval: 10m
    17. git:
    18. # 监听变动的分支
    19. branch: infra
    20. # 监听变动的路径,指向仓库中 infrastructure 目录下的文件

    查看该 GitOps 应用状态:

    1. $ vela status infra-gitops
    2. About:
    3. Name: infra-gitops
    4. Namespace: default
    5. Status: running
    6. Workflow:
    7. mode: DAG
    8. finished: true
    9. Suspend: false
    10. Terminated: false
    11. Steps
    12. - id:dgatat8jag
    13. name:database-config
    14. type:apply-component
    15. phase:succeeded
    16. message:
    17. Services:
    18. - Name: database-config
    19. Type: kustomize
    20. Healthy
    21. No trait applied

    查看集群中的资源,可以发现 server Application 以及 server-config ConfigMap 都已经被自动部署了。

    GitOps 也可以通过监听你的镜像仓库,获得最新镜像版本,并用最新版本来更新你代码仓库中的配置,从而达到自动更新镜像的目的。

    假设我们代码仓库的目录结构如下:

    1. ├── application
    2. └── my-app.yaml

    application 中 my-app.yaml 如下:

    1. apiVersion: core.oam.dev/v1beta1
    2. kind: Application
    3. name: my-app
    4. namespace: default
    5. spec:
    6. components:
    7. - name: my-app
    8. type: webservice
    9. properties:
    10. image: nginx # {"$imagepolicy": "default:image-gitops"}

    部署如下 KubeVela GitOps 应用:

    1. $ vela ls
    2. APP COMPONENT TYPE TRAITS PHASE HEALTHY STATUS CREATED-TIME
    3. image-gitops image-gitops kustomize running healthy 2022-06-30 15:16:30 +0800 CST
    4. my-app my-app webservice running healthy Ready:1/1 2022-06-30 15:16:31 +0800 CST

    隔了一段时间之后,我们配置的 imageRepository 会自动拉取到我们希望的最新镜像,并更新仓库中的应用镜像。

    此时,可以看到配置仓库中有一条来自 kubevelabot 的提交,该提交将 nginx 镜像替换成了我们自己仓库的最新镜像。提交信息均带有 Update image automatically. 前缀。你也可以通过 {{range .Updated.Images}}{{println .}}{{end}}commitMessage 字段中追加你所需要的信息。

    重新查看集群中的应用,可以看到经过一段时间后,应用 my-app 的镜像已经被更新。