FluxCD

该插件基于 Fluxcd

安装

你可以通过 vela 的命令行工具,执行以下命令安装该插件。

  1. vela addon enable fluxcd

如果你只想利用 fluxcd addon 部署 helm 应用,你可以执行下面的命令启只启用 helm 相关的组件:

  1. $ vela addon enable fluxcd onlyHelmComponents=true

Definitions

安装插件之后,这些 definition 将会被启用。

名称类型描述
helmComponentDefinition交付一个存储在 helm 仓库、OSS bucket 或者 git 当中 helm chart
kustomizeComponentDefinition交付一个存储在 helm 仓库、OSS bucket 或者 git 当中 的 kustomize 格式的制品包
kustomize-json-patchTraitDefinition为工作负载配置多个 JSON6902 patch
kustomize-patchTraitDefinition为工作负载配置多个 StrategicMerge or JSON6902 patch
kustomize-strategy-mergeTraitDefinition为工作负载配置多个 patchesStrategicMerge patch

helm

参数

参数描述示例
repoType必填,仓库类型:”helm”,”git” 或者 “oss”Helm
pullInterval选填,仓库同步时间周期, 默认为 5m5m
url必填,仓库的访问地址,git 或者 helm 仓库的 URL 或者 OSS 的 endpointhttps://charts.bitnami.com/bitnami
secretRef选填,访问仓库的 Secret 名称sec-name
timeout选填,从仓库下载制品包的超时时间60s
chart必填,对于 git/oss 的仓库这个参数用来指定 chart 的相对路径。对于 helm 仓库用来指定 chart 名称redis-cluster
version选填,chart 的版本6.2.7
targetNamespace选填,chart 的安装的命名空间your-ns
releaseName选填,chart 的安装名称your-rn
values选填,覆盖定义在 chart 包中 Values.yaml 的参数
installTimeout选填,执行安装操作的超时时间,默认配置是 10 分钟20m
interval选填,同步的时间间隔,默认是 30s1m
oss选填, The oss 的仓库配置
git选填, The git 的仓库配置
OSS
参数描述示例
bucketName必填, bucket 名称your-bucket
provider选填, generic 或 aws, 如果你的 OSS 验证信息需要从 EC2 中获取,请填 AWS 默认是 generic.generic
region选填, bucket region
Git
参数描述示例
branch选填, Git 分支, 默认是 masteryour-branch

例子

如果你的 chart 存贮在 helm repository 中,你可以通过创建以下的应用去交付这个 chart

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: helm-redis
  5. spec:
  6. components:
  7. - name: redis
  8. type: helm
  9. properties:
  10. repoType: "helm"
  11. url: "https://charts.bitnami.com/bitnami"
  12. chart: "redis"
  13. version: "16.8.5"
  14. values:
  15. master:
  16. persistence:
  17. size: 16Gi
  18. replica:
  19. persistence:
  20. size: 16Gi

如果你的 chart 存贮在 OSS 中,你可以通过创建以下的应用去交付这个 chart

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: bucket-app
  5. spec:
  6. components:
  7. - name: bucket-comp
  8. type: helm
  9. properties:
  10. repoType: oss
  11. # required if bucket is private
  12. secretRef: bucket-secret
  13. chart: ./chart/podinfo-5.1.3.tgz
  14. url: oss-cn-beijing.aliyuncs.com
  15. oss:
  16. bucketName: definition-registry

如果你的 chart 存贮在 git 中,你可以通过创建以下的应用去交付这个 chart

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: app-delivering-chart
  5. spec:
  6. components:
  7. - name: terraform-controller
  8. type: helm
  9. properties:
  10. repoType: git
  11. url: https://github.com/oam-dev/terraform-controller
  12. chart: ./chart
  13. git:
  14. branch: master

kustomize

参数

参数描述示例
repoType必填,仓库类型:”helm”,”git” 或者 “oss”oss
pullInterval选填,仓库同步时间周期, 默认为 5m10m
url必填,仓库的访问地址,git 或者 helm 仓库的 URL 或者 OSS 的 endpointoss-cn-beijing.aliyuncs.com
secretRef选填,访问仓库的 Secret 名称sec-name
timeout选填,从仓库下载制品包的超时时间60s
path必填,包含 kustomization.yaml 目录路径./prod
oss选填,oss 源的配置
git选填,git 源的配置
imageRepository选填,repository 镜像自动更新相关配置
Image Repository
参数是否必填描述示例
image必填镜像地址oamdev/vela-core
secretRef选填镜像的拉取密钥my-secret
policy选填Policy 镜像更新策略
filterTags选填FilterTags 镜像标签的过滤策略$timestamp
commitMessage选填提交信息
Image policy
参数是否必填描述示例
alphabetical.order选填字母表顺序排序asc
numerical.order选填依据数字顺序排序asc
semver.range选填根据 semver 排序,选择符合规则的最新版本‘>=1.0.0 <2.0.0’
FilterTags
参数是否必填描述示例
extract选填镜像 tag 提取策略$timestamp
pattern选填镜像过滤策略模版‘^master-[a-f0-9]’

示例

  1. 如果你的 kustomize 制品包存储在 OSS 中,你可以通过一下步骤部署它:

(非必须) 如果你的 OSS bucket 需要权限验证,你需要先通过下面的命令创建访问密钥:

  1. $ kubectl create secret generic bucket-secret --from-literal=accesskey=<your-ak> --from-literal=secretkey=<your-sk>
  2. secret/bucket-secret created

创建应用:

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: bucket-app
  5. spec:
  6. components:
  7. - name: bucket-comp
  8. type: kustomize
  9. properties:
  10. repoType: oss
  11. # If the bucket is private, you will need to provide
  12. secretRef: bucket-secret
  13. url: oss-cn-beijing.aliyuncs.com
  14. oss:
  15. bucketName: definition-registry
  16. path: ./app/prod/
  1. 如果你的制品包存储在 git 中,你可以创建以下应用来部署它:
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: git-app
  5. spec:
  6. components:
  7. - name: git-comp
  8. type: kustomize
  9. properties:
  10. repoType: git
  11. url: https://github.com/<path>/<to>/<repo>
  12. git:
  13. branch: master
  14. provider: GitHub
  15. path: ./app/dev/
  1. 如果你希望你的应用能够跟随镜像变更自动更新,你可以通过创建下面的应用:
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: image-app
  5. spec:
  6. components:
  7. - name: image
  8. type: kustomize
  9. properties:
  10. imageRepository:
  11. image: <your image>
  12. secretRef: imagesecret
  13. filterTags:
  14. pattern: '^master-[a-f0-9]+-(?P<ts>[0-9]+)'
  15. extract: '$ts'
  16. policy:
  17. numerical:
  18. order: asc
  19. commitMessage: "Image: {{range .Updated.Images}}{{println .}}{{end}}"