Skip to main content

Argo CD CRD


Repository

SSH

아래 명령어를 통해 SSH 키를 생성한 후, Public 키를 GitHub SSH 키에 추가합니다.

ssh-keygen -t ed25519 -N "" -C "your_email@example.com" -f argocd
apiVersion: v1
kind: Secret
metadata:
name: github-<user>-creds
namespace: workflow
labels:
argocd.argoproj.io/secret-type: repo-creds
type: Opaque
stringData:
type: git
url: git@github.com:<user>
sshPrivateKey: |
-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----

---
apiVersion: v1
kind: Secret
metadata:
name: github-<user>-<repository>-repo
namespace: workflow
labels:
argocd.argoproj.io/secret-type: repository
type: Opaque
stringData:
type: git
url: git@github.com:<user>/<repository>.git

Cluster

External

원격으로 제어하고 싶은 클러스터에 아래와 같이 ServiceAccount를 생성해주세요. 예시는 Admin 권한이 부여된 상태이기 때문에 보안을 위해 권한을 제한해서 부여해주세요.

apiVersion: v1
kind: ServiceAccount
metadata:
name: argocd-manager
namespace: kube-system
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: argocd-manager-role
rules:
- apiGroups:
- "*"
resources:
- "*"
verbs:
- "*"
- nonResourceURLs:
- "*"
verbs:
- "*"
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: argocd-manager-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: argocd-manager-role
subjects:
- kind: ServiceAccount
name: argocd-manager
namespace: kube-system

서버 URL, 토큰, 인증서를 가져옵니다.

kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}'
kubectl -n kube-system get secret $(kubectl -n kube-system get sa/argocd-manager -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
kubectl -n kube-system get secret $(kubectl -n kube-system get sa/argocd-manager -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data['ca\.crt']}"

Argo CD가 설치된 클러스터에 아래와 같이 제어하고싶은 클러스터 정보를 추가해주세요.

apiVersion: v1
kind: Secret
metadata:
name: <cluster-name>-cluster
namespace: workflow
labels:
argocd.argoproj.io/secret-type: cluster
type: Opaque
stringData:
name: <cluster-name>
server: <url>
config: |
{
"bearerToken": "<token>",
"tlsClientConfig": {
"insecure": false,
"caData": "<base64 encoded certificate>"
}
}

AppProject

apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: <project>
namespace: workflow
# Application이 이 프로젝트를 참조하고 있다면 이 프로젝트를 삭제하려고 시도할 때,
# 삭제되지 않도록 해주는 옵션입니다.
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
description: ""
sourceRepos:
- git@github.com:<user>/<repository>.git
destinations:
- name: <cluster-name>
namespace: <namespace>
# 클러스터 스코프에서 허용되는 리소스 리스트입니다.
clusterResourceWhitelist:
- group: <group>
kind: <kind>

Application

Helm

argo-cd는 차트의 apiVersion이 v2더라도 v3를 사용합니다. v2를 사용하려면 .spec.source.helm.version을 v2라고 명시해야 합니다.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: <application>-<env>
namespace: workflow
labels:
"<example.com/project-env>": <env> # 웹 UI에서 필터링을 위해 사용할 수 있습니다.
finalizers: # Application이 삭제되면 해당하는 리소스를 삭제합니다.
- resources-finalizer.argocd.argoproj.io
spec:
project: <project>
source:
repoURL: git@github.com:<user>/<repository>.git
path: <path>
targetRevision: <branch|tag>
helm:
valueFiles:
- <relative_path>/<values>.yaml
destination:
name: <cluster-name>
namespace: <namespace>
revisionHistoryLimit: <limit>
syncPolicy:
automated:
prune: true
selfHeal: true

ApplicationSet

Reference