核心概念

简要概述

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

配置列表

文件 类型 名称 用途
argocd-cm.yaml ConfigMap argocd-cm Argo CD 主要配置
argocd-cmd-params-cm.yaml ConfigMap argocd-cmd-params-cm Argo CD 服务启动参数配置
argocd-gpg-keys-cm.yaml ConfigMap argocd-gpg-keys-cm 用于 git 仓库验证
argocd-notifications-cm.yaml ConfigMap argocd-notifications-cm x
argocd-rbac-cm.yaml ConfigMap argocd-rbac-cm -
argocd-ssh-known-hosts-cm.yaml ConfigMap argocd-ssh-known-hosts-cm ssh 主机已知公钥
argocd-tls-certs-cm.yaml ConfigMap argocd-tls-certs-cm 用于仓库服务自签 ca 的证书配置
argocd-secret.yaml Secret argocd-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 资源中可配置参数如下:

名称 示例 说明
name private-repo 仓库名称
url https://github.com/opsaid 仓库 url 地址
username user1 用户名
password pass1 用户密码
sshPrivateKey - 登录仓库的 ssh 私钥
tlsClientCertData - 登录仓库的客户端证书
tlsClientCertKey - 登录仓库的客户端证书
type git 仓库类型,可取:[“git”, “helm”]
githubAppPrivateKey - 用于 github 仓库
githubAppEnterpriseBaseUrl - 用于 github 仓库
proxy http://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 的授权信息
namespaces default,kube-system 仅关注这些空间内资源,以逗号分隔,如配置则默认忽略集群级别资源
shard - -
server https://10.5.39.39:6443 kube-apiserver 连接地址,必须使用 https 连接
name fake 集群名称,需唯一
clusterResources true 是否被允许管理集群级别资源,仅当 “namespaces” 参数不为空时有效
project default 仅该项目下应用可使用
  • config
名称 示例 说明
username - 用户名
password - 用户密码
bearerToken - 接口认证 token
tlsClientConfig - 客户端使用证书认证,证书内容均使用 base64 编码
awsAuthConfig - 连接 aws k8s
execProviderConfig - -



最后修改 2024.06.18: docs: argo-cd datatype (9afa1ea)