ArgoCD μν€ν μ² κ΅¬μ±μ λ¨Όμ 보μ¬λ리면β¦
[μΆμ²] https://inf.run/ZuQ8b
μλμ λ΄μ©μ λκ·λͺ¨ νκ²½μμλ λΉ λ₯΄κ² μμ μ μΌλ‘ μλνλ ArgoCD μ λν κ²½ν κΈ°κ³ κΈμ λν μ 보λ₯Ό μ 리ν κ²μ λλ€. [μΆμ²] https://saikiranpikili.medium.com/make-your-argocd-super-fast-9c75fa94b840
μ€μΌμΌ λ¬Έμ μ΄ν΄νκΈ°
ArgoCDλ μμ νκ²½μμλ λ°μ΄λ μ±λ₯μ λ°ννμ§λ§, μμ² κ°μ μ ν리μΌμ΄μ μ λ€λ£¨λ €λ©΄ μΈμ¬ν νλμ΄ νμν©λλ€. μΌλ°μ μΌλ‘λ μ€μν νκ²½κ³Ό κ·Έλ μ§ μμ νκ²½μ λλμ΄ μ¬λ¬ ArgoCD μΈμ€ν΄μ€λ‘ λΆμ°νλ κ²μ΄ μ΅μ μ λ°©λ²μ΄μ§λ§, μκ° μ μ½μΌλ‘ μΈν΄ μ°λ¦¬λ λͺ¨λ κ²μ νλμ μΈμ€ν΄μ€λ‘ ν΅ν©ν΄μΌ νμ΅λλ€.
μ΄ λλ¬Έμ μ μ₯μ μλ² μ±λ₯λΆν° 컨νΈλ‘€λ¬ λμμ±κΉμ§ ArgoCDμ λͺ¨λ κ³μΈ΅μ μ΅μ νν΄μΌ νμ΅λλ€.
ArgoCD κ΅¬μ± μ΅μ ν
κ° μ΅μ νλ₯Ό λλμ΄ κ·Έ μν , κΈ°λ³Έκ°, κ·Έλ¦¬κ³ λΆμμ©κΉμ§ μ΄ν΄λ³΄κ² μ΅λλ€.
Reposerver:
- name: ARGOCD_EXEC_TIMEOUT
value: "180"
- name: ARGOCD_GIT_ATTEMPTS_COUNT
value: "3"
- name: ARGOCD_HELM_ALLOW_CONCURRENCY
value: "true"
Controller:
- name: ARGOCD_CONTROLLER_REPLICAS
value: "3"
- name: ARGOCD_K8S_CLIENT_QPS
value: "150"
- name: ARGOCD_K8S_CLIENT_BURST
value: "300"
Argocd-cm:
timeout.reconciliation: 6m
timeout.hard.reconciliation: 0s
params-cm:
server.repo.server.timeout.seconds: "180"
controller.status.processors: "600"
controller.operation.processors: "300"
controller.repo.server.timeout.seconds: "180"
controller.kubectl.parallelism.limit: "100"
controller.sharding.algorithm: "round-robin"
reposerver.parallelism.limit: "100"
1. μ μ₯μ μλ²(Repository Server) μ€μ
λ§€λνμ€νΈ μμ± νμμμκ³Ό Git μ¬μλ νμ μ΅μ ν
-
ARGOCD_EXEC_TIMEOUT
Repo μλ²λ helm, kustomize λ±μ μ€ννκΈ° μν΄ βexecβλ₯Ό μ¬μ©ν©λλ€. ν° κ·λͺ¨μ helm μ°¨νΈ λ§€λνμ€νΈλ₯Ό μμ±ν λ μκ°μ΄ μ€λ 걸릴 μ μμ΅λλ€. μ΄ λλ¬Έμ κΈ°λ³Έκ°μ λλ €μ£Όμμ΅λλ€.- μ€λͺ : λͺ λ Ήμ΄κ° νμμμλκΈ° μ κΉμ§ μ€νν μ μλ μ΅λ μκ°(μ΄ λ¨μ)
- κΈ°λ³Έκ°: 90μ΄
- μ€μ κ°: 180μ΄
-
ARGOCD_GIT_ATTEMPTS_COUNT
Repo μλ²λ commit SHA ν΄μλ₯Ό νμΈνκΈ° μν΄ βgit ls-remoteβλ₯Ό μ¬μ©ν©λλ€. κΈ°λ³Έκ°μ 1μ΄λ©°, 첫 μλκ° μ€ν¨νλ©΄ μ¬μλλ₯Ό νμ§ μμ΅λλ€. κ·Έλμ μλ νμλ₯Ό 3μΌλ‘ λλ Έμ΅λλ€.- μ€λͺ : Git μμ μ λν μ¬μλ νμλ₯Ό μ§μ
- κΈ°λ³Έκ°: 1
- μ€μ κ°: 3
-
ARGOCD_HELM_ALLOW_CONCURRENCY
μ°¨νΈκ° λ§κ³ λ§€λνμ€νΈ μμ±μ΄ λ릴 κ²½μ°, μ°¨νΈ ν΄λμ.argocd-allow-concurrencyνμΌμ μΆκ°ν μ μμ΅λλ€.
λ¨, ν νλ¦Ώ κ° μ’ μμ±μ΄ μλμ§ λ°λμ νμΈν΄μΌ ν©λλ€.- μ€λͺ : Helm μμ μ λμ μ€νμ νμ©
- κΈ°λ³Έκ°: false
- μ€μ κ°: true
μ΄λ₯Ό νμ±ννλ©΄ μ¬λ¬ Helm κΈ°λ° μ ν리μΌμ΄μ μ λμμ λκΈ°νν λ μ±λ₯μ΄ κ°μ λ©λλ€. λ€λ§, κ³Όλν λμ μ€νμ ν΄λ¬μ€ν° λ΄ μμ κ²½μ, Helm μ°¨νΈ μ κΈ(lock) λ¬Έμ , Git νλ‘μΈμ€ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€.
2. 컨νΈλ‘€λ¬(Controller) μ€μ
-
ARGOCD_CONTROLLER_REPLICAS
μ΄ κ°μ λ³κ²½νκΈ° μ μ Controller StatefulSetμ replicas μλ ν¨κ» λ³κ²½ν΄μΌ ν©λλ€.- μ€λͺ : 컨νΈλ‘€λ¬ μ»΄ν¬λνΈμ replica μλ₯Ό μ€μ ν©λλ€.
- κΈ°λ³Έκ°: 1
- μ€μ κ°: 3
Replica μλ₯Ό λ리면 λΆν λΆμ°κ³Ό μ€λ³΅μ±μ΄ ν₯μλ©λλ€. λ¨, μΆκ° Podμ μ§μν μ μλ μΆ©λΆν ν΄λ¬μ€ν° μμμ΄ νμν©λλ€.
-
ARGOCD_K8S_CLIENT_QPS
μ΄λΉ Kubernetes API μμ² μλ₯Ό μ νν©λλ€.- κΈ°λ³Έκ°: 50
- μ€μ κ°: 150
κ°μ λμ΄λ©΄ λκ·λͺ¨ μ ν리μΌμ΄μ λκΈ°ν μ λ³λͺ© νμμ μ€μΌ μ μμ§λ§, Kubernetes API μλ²μ λΆλ΄μ μ€ μ μμ΅λλ€. μλ²κ° μ¦κ°ν λΆνλ₯Ό μ²λ¦¬ν μ μλμ§ λͺ¨λν°λ§μ΄ νμν©λλ€.
-
ARGOCD_K8S_CLIENT_BURST
Kubernetes APIμ λ³΄λΌ μ μλ μ΅λ λ²μ€νΈ μμ² μλ₯Ό μ μν©λλ€.- κΈ°λ³Έκ°: 100
- μ€μ κ°: 300
λ²μ€νΈ νλλ₯Ό λ리면 μ€νμ΄ν¬ μν©μμ λκΈ°ν μλκ° λΉ¨λΌμ§λλ€. νμ§λ§ μλ² μ©λμ μ΄κ³Όνλ©΄ API μλ²μμ throttlingμ΄ λ°μν μ μμ΅λλ€.
3. μ€μ λ§΅(argocd-cm) μ λ°μ΄νΈ
-
timeout.reconciliation
μλ λκΈ°ν μλ κ°κ²©μ μ€μ ν©λλ€.- κΈ°λ³Έκ°: 3λΆ
- μ€μ κ°: 6λΆ
κ°μ μ½κ° λ리면 λκΈ°ν λΉλκ° μ€μ΄λ€μ΄ μ ν리μΌμ΄μ λ³κ²½μ΄ μ¦μ μκΈ°μ 컨νΈλ‘€λ¬ λΆνλ₯Ό μνν μ μμ΅λλ€.
μλ λκΈ°νκ° νμ±νλ μ ν리μΌμ΄μ μ κ²½μ°, μ¬μ‘°μ (reconciliation) λκΈ°μ΄μ΄ μ΄ μκ° κ°κ²©λ§λ€ μ΄κΈ°νλ©λλ€. μ ν리μΌμ΄μ μκ° λ§μ νμμμ λ΄μ λκΈ°νλ₯Ό μλ£νμ§ λͺ»νλ©΄ μ¬μ‘°μ μ΄ λ°λ³΅μ μΌλ‘ 리μ λλ©° μ§νλμ§ μλ λ¬Έμ κ° λ°μν μ μμ΅λλ€. μ΄λ₯Ό νΌνκΈ° μν΄ timeout.reconciliation κ°μ λλ Έμ΅λλ€. μ΄ κ°μ λ³κ²½ν λλ μλ λκΈ°ν μ£ΌκΈ° μμ²΄κ° λμ΄λλ€λ μ μ κ°μν΄μΌ ν©λλ€.
-
timeout.hard.reconciliation
μ¬μ‘°μ μμ μ λν΄ κ°μ νμμμμ μ€μ ν©λλ€.- κΈ°λ³Έκ°: 0μ΄ (λΉνμ±ν)
- μ€μ κ°: 0μ΄ (λ³κ²½ μμ)
λΉνμ± μνλ₯Ό μ μ§νλ©΄ μ¬μ‘°μ μμ μ΄ μ€κ°μ κ°μ λ‘ μ’ λ£λμ§ μμ΅λλ€.
4. νλΌλ―Έν° μ€μ λ§΅(params-cm) μ λ°μ΄νΈ
λ§€λνμ€νΈ μμ± μκ°μ μ΅μ ννκΈ° μν΄ νμμμμ λλ €μΌ ν©λλ€.
-
controller.repo.server.timeout.seconds
Application Controllerμμ βContext deadline exceededβ μλ¬κ° λ°μνλ κ²½μ°(λκ·λͺ¨ λ§€λνμ€νΈμμ νν λ°μ), μ§μ λ μκ° μμ repo μλ²λ‘λΆν° λ§€λνμ€νΈλ₯Ό κ°μ Έμ€μ§ λͺ»νμμ μλ―Έν©λλ€.- κΈ°λ³Έκ°: 60μ΄
- μ€μ κ°: 180μ΄
νμμμμ λ리면 컨νΈλ‘€λ¬μ refresh λκΈ°μ΄μ΄ λμΉ μ μμ΅λλ€.
-
server.repo.server.timeout.seconds
- μ€λͺ : μ μ₯μ μλ² μμ μ νμμμμ μ§μ ν©λλ€.
- κΈ°λ³Έκ°: 60μ΄
- μ€μ κ°: 180μ΄
νμμμμ λ리면 λκ·λͺ¨ μ μ₯μ λκΈ°νμλ λμμ΄ λμ§λ§, μ€μ μ₯μ λ₯Ό κ°μ§νλ λ°λ μ§μ°μ΄ λ°μν μ μμ΅λλ€.
μ ν리μΌμ΄μ μ¬μ‘°μ μ΄λ λκΈ°ν μλκ° λ릴 κ²½μ°, μν(status)μ μμ (operation) ν νλ‘μΈμλ₯Ό λλ €μΌ ν©λλ€. μ΄λ¦μμ μ μ μλ―, μν νλ‘μΈμλ μ ν리μΌμ΄μ μ μν(Synced, Health, OutOfSync, Degraded, Unknown, Suspended, Missing, Error λ±)λ₯Ό κ°μ Έμ€λ μν μ λ΄λΉν©λλ€.
-
controller.status.processors
μν μ¬μ‘°μ μμ μ μ¬μ©ν νλ‘μΈμ μλ₯Ό μ€μ ν©λλ€.- κΈ°λ³Έκ°: 20
- μ€μ κ°: 600
νλ‘μΈμ μλ₯Ό λ리면 λ³λ ¬ μ²λ¦¬κ° ν₯μλμ§λ§ CPUμ λ©λͺ¨λ¦¬ μμμ λ λ§μ΄ μλͺ¨νκ² λ©λλ€.
-
controller.operation.processors
λκΈ°ν μμ μ κ΄λ¦¬νλ νλ‘μΈμ μλ₯Ό μ€μ ν©λλ€.- κΈ°λ³Έκ°: 10
- μ€μ κ°: 300
μν νλ‘μΈμμ λ§μ°¬κ°μ§λ‘ λ³λ ¬μ±μ λμ΄μ§λ§, μΆκ°μ μΈ λ¦¬μμ€ μ¬μ©μ΄ λ°μν©λλ€.
-
controller.kubectl.parallelism.limit
ArgoCD μν€ν μ² λΈλ‘κ·Έμμ μΈκΈνλ―μ΄, ArgoCDλ μμ±λ λ§€λνμ€νΈλ₯Ό λκΈ°ννκΈ° μν΄ βkubectl applyβλ₯Ό μ€νν©λλ€. λλ‘λ μ ν리μΌμ΄μ μ λκΈ°νν νμλ μλκ° λλ¦¬κ² λκ»΄μ§κ±°λ λ‘λ©λ§ κ³μλκ³ ν΄λ¬μ€ν°μ λ³κ²½ μ¬νμ΄ λ°μλμ§ μλ κ²½μ°κ° μμ΅λλ€. μ΄λ° μν©μμλ 컨νΈλ‘€λ¬ 리μμ€μ kubectl λ³λ ¬ μ²λ¦¬ νλλ₯Ό λλ €μΌ ν©λλ€.
λμμ μ€νν μ μλ kubectl μμ μλ₯Ό μ νν©λλ€.- κΈ°λ³Έκ°: 20
- μ€μ κ°: 100
μ΄ κ°μ λ리면 λκ·λͺ¨ λ°°ν¬ κ΄λ¦¬μ μ 리νμ§λ§ ν΄λ¬μ€ν° 리μμ€λ₯Ό κ³ΌλΆνμν¬ μ μμ΅λλ€.
-
controller.sharding.algorithm
컨νΈλ‘€λ¬ replica κ°μ μμ μ λΆλ°°ν λ μ¬μ©νλ μ€λ© μκ³ λ¦¬μ¦μ μ§μ ν©λλ€.- κΈ°λ³Έκ°: legacy
- μ€μ κ°: round-robin
λΌμ΄λλ‘λΉ μκ³ λ¦¬μ¦μ replica κ° μμ λΆλ°°λ₯Ό λ κ· ν μκ² ν΄μ€λλ€. μ΄λ₯Ό ν΅ν΄ νλμ 컨νΈλ‘€λ¬κ° λͺ¨λ ν΄λ¬μ€ν°λ₯Ό μ²λ¦¬νλ λμ , μ¬λ¬ 컨νΈλ‘€λ¬μ ν΄λ¬μ€ν°κ° λΆμ°λ©λλ€.
-
reposerver.parallelism.limit
κΈ°λ³Έμ μΌλ‘ λ§€λνμ€νΈ μμ±μλ μ νμ΄ μμ΅λλ€. Repo μλ²λ λͺ¨λ λ§€λνμ€νΈλ₯Ό ν λ²μ μμ±νλ €κ³ νλ©°, μ΄λ‘ μΈν΄ OOMKilled λ¬Έμ κ° λ°μνκ±°λ λ§€λνμ€νΈ μμ± μλκ° λ§€μ° λλ €μ§ μ μμ΅λλ€.
μ μ₯μ μλ² μμ μ λμ μ€ν μλ₯Ό μ νν©λλ€.- κΈ°λ³Έκ°: 0 (무μ ν)
- μ€μ κ°: 100
λ§μ§λ§ νμΌλ‘, μ μ₯μ λ΄ λ¨μΌ μ°¨νΈλ§ λ³κ²½λμμ λ μ 체 μ°¨νΈμ λν λ§€λνμ€νΈκ° λ€μ μμ±λλ κ²μ νΌν μ μμ΅λλ€.
ArgoCDλ κΈ°λ³Έμ μΌλ‘ λ§€λνμ€νΈ μΊμλ₯Ό commit SHAμ ν¨κ» Redisμ μ μ₯ν©λλ€. λμΌν commit SHAκ° μ μ₯μμ λͺ¨λ λ§€λνμ€νΈμ μ°κ²°λκΈ° λλ¬Έμ, νμΌ νλλ§ μμ ν΄ μ»€λ°ν΄λ SHAκ° μ 체μ μ
λ°μ΄νΈλλ©° ArgoCDλ λͺ¨λ λ§€λνμ€νΈλ₯Ό λ€μ μμ±νλ € μλν©λλ€. μ΄λ₯Ό νΌνλ €λ©΄ Application kindμ annotationμ μΆκ°ν μ μμ΅λλ€.
argocd.argoproj.io/manifest-generation-paths: <path-of-the-chart-folder>
μ΄λ κ² νλ©΄ ArgoCDλ μ 곡λ κ²½λ‘ λ΄ νμΌμ΄ λ³κ²½λμμ λλ§ ν΄λΉ λ§€λνμ€νΈλ₯Ό μμ±νλλ‘ μΈμν©λλ€.
μ΄μ μ ArgoCDλ μμ²λκ² λΉ¨λΌμ§λλ€.
