ArgoCD(五)----ArgoCD 各CRD资源配置文件规范

3.4.1 Application资源规范

  • Application CRD的spec字段主要嵌套如下几个字段:

    • source :配置仓库及相关的配置访问及使用方法;支持如下几种类型:
      1. kubernetets的原生配置文件
      2. Helm chart
      3. kustomize:由kustomize字段进行定义
      4. Jsonnet:由directory字段进行定义
    • destination :应用程序要部署的目标位置:
      1. server:目标kubernetes集群的API server访问入口
      2. namespace: 目标名称空间
    • syncPolicy :同步策略,可选字段
      1. automated
      2. syncOptions <[]string>
      3. retry
    • ignoreDifferences <[]object>: 在syncc中,要忽略的存在不同的资源列表
  • 提示: 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
    
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cJTj02pR-1686036830961)(images\image-20230119145852222.png)]

3.4.2 Project配置

  • Project负责为Application提供逻辑分组,它主要实现如下功能:

    • 限制可以部署的内容(指定受信任的Git Repo仓库);
    • 限制Application可以部署到的目标位置(指定目标cluster和namespace);
    • 限制能够及不能够部署的对象类型,例如RBAC,CRD,DeamonSet等
  • ArgoCD的默认project

    • default project由ArgoCD自动部署,需要用户按需要修改,但不能被删除

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iGAEJwXZ-1686036830962)(images\image-20230119150523090.png)]

  • Project CRD资源规范的spec字段,可以嵌套多个字段:

    • 可读取资源配置的Repo

      1. sourceRepos <[]string>
    • 可用的资源类型

      clusterResourceBlacklist <[]Object>

      clusterResourceWhitelist <[]Object>

      namespaceResourceBlacklist <[]Object>

      namespaceResourceWhitelist <[]Object>

    • 可部署Application的目标集群和名称空间

      1. deatinations <[]Objects>
    • 其他可用配置

      1. description :该project的描述信息
      2. roles <[]Object>:该project上的可用角色
      3. 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配置仓库模板化

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FkwdwdAW-1686036830962)(images\image-20230119152847392.png)]

3.4.3.2 ApplicationSet 控制器的工作模式
  • ApplicationSet负责管理Application,因此,ApplicationSet控制器会生成或更新Application;
  • 生成或更新的Application资源则由Application控制器确保期望状态和实际状态的一致
  • 因此,ApplicationSet控制器仅负责确保ApplicationSet资源期望状态和实际状态的一致

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XlwVx13P-1686036830962)(images\image-20230119153357339.png)]

3.4.3.3 ApplicationSet 资源配置
  • ApplicationSet CRD资源规范遵循kubernetes API规范,其spec内嵌如下三个字段:

    • generators <[]Object>

      1. 定义负责生成参数的生成器,这些参数会渲染template中的模板
      2. 生成器的关键作用在于,他们是模板参数的数据源
      3. ApplicationSet支持多种不同的generator
    • syncPolicy

      1. 资源同步策略
      2. 仅支持内嵌一个布尔型字段preserveResourcesOnDeletion
    • template

      1. Application资源模板,配置格式与Appliction规范相同,但他还有一些参数化的配置
      2. 通过将这些参数替换为generator生成的值,完成模板的实例化

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U6vgIvTa-1686036830963)(images\image-20230119154250188.png)]

  • ApplicationSet配置示例

    • 使用了列表生成器(list generator)
      1. 有3个参数,分别为environment参数传递不同的值,该参数作为目标集群的名称及空间
    • Application 模板
      1. 给出了模板化的source
      2. 定义了模板化的destination
      3. 定义了公用的syncPolicy
    • ApplicationSet的syncPolicy
      1. preserveResourcesOnDeletion:是否在删除当前ApplicationSet资源时,一并删除由其创建的Application,即是否执行级联删除操作.
    • 目前有7种不同的generator可用,常用的有4种
      1. list generator
      2. cluster generstor
      3. git generstor
      4. 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
    
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1WCB3eAG-1686036830963)(images\image-20230119160502250.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值