3.4.1 Application资源规范
-
Application CRD的spec字段主要嵌套如下几个字段:
- source :配置仓库及相关的配置访问及使用方法;支持如下几种类型:
- kubernetets的原生配置文件
- Helm chart
- kustomize:由kustomize字段进行定义
- Jsonnet:由directory字段进行定义
- destination :应用程序要部署的目标位置:
- server:目标kubernetes集群的API server访问入口
- namespace: 目标名称空间
- syncPolicy :同步策略,可选字段
- automated
- syncOptions <[]string>
- retry
- ignoreDifferences <[]object>: 在syncc中,要忽略的存在不同的资源列表
- source :配置仓库及相关的配置访问及使用方法;支持如下几种类型:
-
提示: argocd相关的资源需要创建到argocd部署的名称空间之下
-
配置示例
- Application CRD资源创建在argocd的namespace
- 而要部署的应用程序可以部署在其他namespace
- 同步策略设置为自动同步,配置仓库的变更将直接反应到活动对象上
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: spring-boot-helloworld namespace: argocd spec: project: default source: repoURL: https://gitee.com/mageedu/spring-boot-helloworld-deployment.git targetRevision: HEAD path: deploy/kubernetes destination: server: https://kubernetes.default.svc namespace: helloworld syncPolicy: automated: prune: true selfHeal: true syncOptions: - Validate=false - CreateNamespace=true - PrunePro[agationPolicy=foreground - PruneLast=true retry: limit: 5 backoff: duration: 5s factor: 2 maxDuration: 3m
3.4.2 Project配置
-
Project负责为Application提供逻辑分组,它主要实现如下功能:
- 限制可以部署的内容(指定受信任的Git Repo仓库);
- 限制Application可以部署到的目标位置(指定目标cluster和namespace);
- 限制能够及不能够部署的对象类型,例如RBAC,CRD,DeamonSet等
-
ArgoCD的默认project
-
default project由ArgoCD自动部署,需要用户按需要修改,但不能被删除
-
-
Project CRD资源规范的spec字段,可以嵌套多个字段:
-
可读取资源配置的Repo
- sourceRepos <[]string>
-
可用的资源类型
clusterResourceBlacklist <[]Object>
clusterResourceWhitelist <[]Object>
namespaceResourceBlacklist <[]Object>
namespaceResourceWhitelist <[]Object>
-
可部署Application的目标集群和名称空间
- deatinations <[]Objects>
-
其他可用配置
- description :该project的描述信息
- roles <[]Object>:该project上的可用角色
- syncWindows <[]Object>:该资源的同步窗口
-
-
管理project的命令行操作
-
创建Project:
argocd proj create PROJECT -d,--dest stringArray -s,--src stringArray
-
在project上添加使用的Repo:
argocd proj add-source <PROJECT> <REPO> argocd proj remove-source <PROJECT> <REPO>
-
在project上添加添加可以使用的目标cluster和namespace
argocd proj add-destination <PROJECT> <CLUSTER>,<NAMESPACE> argocd proj remove-destination <PROJECT> <CLUSTER>,<NAMESPACE>
-
project上可用的资源类型
argocd proj allow-cluster-resource <PROJECT> <GROUP> <KIND> argocd proj allow-namespace-resource <PROJECT> <GROUP> <KIND> argocd proj deny-cluster-resource <PROJECT> <GROUP> <KIND> argocd proj deny-namespace-resource <PROJECT> <GROUP> <KIND>
-
将Application添加到指定的project上
argocd app set <APPLICATION> --project <PROJECT>
-
3.4.3 ApplicationSet配置
3.4.3.1 ApplicationSet CRD
-
ApplicationSet CRD
- ApplicationSet CRD用于定义可自动生成的Aplication的模板,从而能够在单一repo定义多个application或多个repo,以及跨cluster的场景
- ApplicationSet CRD需要由专门的ApplicationSet控制器实现
-
ApplicationSet可提供如下功能
- 目标cluster的模板化,从而能够在单个资源配置文件中适配部署到多个kubernetes集群
- 源Git配置仓库模板化
3.4.3.2 ApplicationSet 控制器的工作模式
- ApplicationSet负责管理Application,因此,ApplicationSet控制器会生成或更新Application;
- 生成或更新的Application资源则由Application控制器确保期望状态和实际状态的一致
- 因此,ApplicationSet控制器仅负责确保ApplicationSet资源期望状态和实际状态的一致
3.4.3.3 ApplicationSet 资源配置
-
ApplicationSet CRD资源规范遵循kubernetes API规范,其spec内嵌如下三个字段:
-
generators <[]Object>
- 定义负责生成参数的生成器,这些参数会渲染template中的模板
- 生成器的关键作用在于,他们是模板参数的数据源
- ApplicationSet支持多种不同的generator
-
syncPolicy
- 资源同步策略
- 仅支持内嵌一个布尔型字段preserveResourcesOnDeletion
-
template
- Application资源模板,配置格式与Appliction规范相同,但他还有一些参数化的配置
- 通过将这些参数替换为generator生成的值,完成模板的实例化
-
-
ApplicationSet配置示例
- 使用了列表生成器(list generator)
- 有3个参数,分别为environment参数传递不同的值,该参数作为目标集群的名称及空间
- Application 模板
- 给出了模板化的source
- 定义了模板化的destination
- 定义了公用的syncPolicy
- ApplicationSet的syncPolicy
- preserveResourcesOnDeletion:是否在删除当前ApplicationSet资源时,一并删除由其创建的Application,即是否执行级联删除操作.
- 目前有7种不同的generator可用,常用的有4种
- list generator
- cluster generstor
- git generstor
- matrix generator
apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: helloworld namespace: argocd spec: generators: - list: elements: - environment: dev - environment: staging - environment: prod template: metadata: name: 'helloworld-{{environment}}' spec: project: default source: repoURL: https://gitee.com/mageedu/spring-boot-helloworld-deployment.git targetRevision: HEAD path: helloworld/{{environment}} destination: server: https://kubernetes.default.svc namespace: '{{environment}}' syncPolicy: automated: prune: true selfHeal: true syncOptions: - Validate=false - CreateNamespace=true - PrunePro[agationPolicy=foreground - PruneLast=true
- 使用了列表生成器(list generator)