核心概念

简要概述

Argo CD 配置均支持使用 k8s yaml 以声明方式定义,通过 kubectl apply 进行创建、更新,而无需依赖 argocd 命令行工具。

配置列表

文件类型名称用途
argocd-cm.yamlConfigMapargocd-cmArgo CD 主要配置
argocd-cmd-params-cm.yamlConfigMapargocd-cmd-params-cmArgo CD 服务启动参数配置
argocd-gpg-keys-cm.yamlConfigMapargocd-gpg-keys-cm用于 git 仓库验证
argocd-notifications-cm.yamlConfigMapargocd-notifications-cmx
argocd-rbac-cm.yamlConfigMapargocd-rbac-cm-
argocd-ssh-known-hosts-cm.yamlConfigMapargocd-ssh-known-hosts-cmssh 主机已知公钥
argocd-tls-certs-cm.yamlConfigMapargocd-tls-certs-cm用于仓库服务自签 ca 的证书配置
argocd-secret.yamlSecretargocd-secret本地用户等密码配置

应用(Application)

配置示例

使用 CRD 资源 “Application” 定义,由控制器 “argocd-application-controller” 管理:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: mingqing-apilogin-v1
  namespace: argocd
spec:
  destination:
    namespace: default
    server: 'https://kubernetes.default.svc'
  source:
    path: deploy/kubernetes/dev
    repoURL: 'https://github.com/mingqing/apilogin.git'
    targetRevision: HEAD
  project: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
      allowEmpty: true

默认仅支持在 “argocd” 命名空间下监听资源,所有可配置项参考 Application 数据结构。

用途说明

是自定义CRD 资源,对应控制器为 “argocd-application-controller”,它持续监视运行中的应用程序,并将当前的实际状态与期望的目标状态(在存储库中指定)进行比较。它会检测到不同步的应用程序状态,并可选择采取纠正措施。它负责调用任何用户定义的生命周期事件钩子(PreSync、Sync、PostSync)。

项目(AppProject)

配置示例

使用 CRD 资源 “AppProject” 定义,由控制器 “argocd-application-controller” 管理:

apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: test1
  namespace: argocd
spec:
  description: hello proj1
  destinations:
  - name: in-cluster
    namespace: '*'
    server: https://kubernetes.default.svc
  orphanedResources:
    ignore:
    - group: apps
    warn: false
  sourceNamespaces:
  - '*'
  sourceRepos:
  - '*'
  syncWindows:
  - applications:
    - '*'
    clusters:
    - '*'
    duration: 8h
    kind: allow
    manualSync: false
    namespaces:
    - '*'
    schedule: 30 9 * * *
    timeZone: Asia/Shanghai

用途说明

每个项目预先定义好可访问 k8s 集群资源的权限,各个应用需关联具体的一个项目下。

仓库(Repositories)

配置示例

---
apiVersion: v1
kind: Secret
metadata:
  name: private-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/mingqing/api-logins.git
  password: my-password
  username: my-username

---
apiVersion: v1
kind: Secret
metadata:
  name: private-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repo-creds
stringData:
  type: git
  url: https://github.com/mingqing
  password: my-password
  username: my-username

注意 “metadata.labels” 标签配置可取以下两个固定值,分别表示单个仓库与仓库模版:

argocd.argoproj.io/secret-type: repository
argocd.argoproj.io/secret-type: repo-creds

仓库模版用于对多个同组仓库使用相同的授权,这样可以避免添加过多 Secret 资源。

数据结构

util/db/repository_secrets.go secretToRepository

是通过 k8s 标准的 Secret 转换为 Repository 资源,在 Secret 资源中可配置参数如下:

名称示例说明
nameprivate-repo仓库名称
urlhttps://github.com/opsaid仓库 url 地址
usernameuser1用户名
passwordpass1用户密码
sshPrivateKey-登录仓库的 ssh 私钥
tlsClientCertData-登录仓库的客户端证书
tlsClientCertKey-登录仓库的客户端证书
typegit仓库类型,可取:[“git”, “helm”]
githubAppPrivateKey-用于 github 仓库
githubAppEnterpriseBaseUrl-用于 github 仓库
proxyhttp://10.5.39.39:1087如果仓库存在网络隔离通过指定代理跳转
project-TODO;
gcpServiceAccountKey-在 Google Cloud Source 使用

集群(Clusters)

配置示例

apiVersion: v1
kind: Secret
metadata:
  name: mycluster-secret
  labels:
    argocd.argoproj.io/secret-type: cluster
type: Opaque
stringData:

数据结构

名称示例说明
config{""}用于连接 k8s 的授权信息
namespacesdefault,kube-system仅关注这些空间内资源,以逗号分隔,如配置则默认忽略集群级别资源
shard--
serverhttps://10.5.39.39:6443kube-apiserver 连接地址,必须使用 https 连接
namefake集群名称,需唯一
clusterResourcestrue是否被允许管理集群级别资源,仅当 “namespaces” 参数不为空时有效
projectdefault仅该项目下应用可使用
  • config
名称示例说明
username-用户名
password-用户密码
bearerToken-接口认证 token
tlsClientConfig-客户端使用证书认证,证书内容均使用 base64 编码
awsAuthConfig-连接 aws k8s
execProviderConfig--