核心概念
2 分钟阅读
简要概述
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)