3aa69e5eda
k8s 1.33 에서 Deployment/ReplicaSet 에 추가된 .status.terminatingReplicas 를
ArgoCD v2.14.5(k8s 라이브러리 0.31/0.32)가 몰라, 클러스터가 1.33 이상이면
ServerSideApply=true 인 Application 이 전부 아래 오류로 죽는다.
ComparisonError: failed to calculate diff: error calculating structured
merge diff: .status.terminatingReplicas: field not declared in schema
v3.5.1 은 k8s 라이브러리 0.36.1 을 써서 해소된다. dev 클러스터(1.35.7+rke2r1)
에서 실제 발생·해소를 확인했다.
- manifests/helm/argo-cd/10.4.0/ 추가 (chart_updater 로 생성)
- custom-values.yaml 을 실제 배포 기준(dipup argo-cd-values.yaml.tpl)에 맞춤:
kong → apisix, server.extraArgs(--insecure), configs.cm/rbac 추가
- configs.params.controller.resource.health.persist=true 지정 —
ArgoCD v3.0 부터 리소스 health 를 CR 에 저장하지 않는 것이 기본값인데,
dip-console-api 가 .status.resources[].health 를 읽는다
- CUSTOM-README.md 는 현재 차트 기준 배포 가이드로 재작성.
승계된 cert-manager 예시가 10.4.0 에 없는 구버전 스키마(hosts/tls 리스트)라
Ingress 가 생성되지 않는 상태였던 것도 함께 수정
- breaking_change_check: breaking=false (제거 26건이 전부 미사용 key)
- scripts/deploy-test/deploy-test-argo-cd.sh 신규
같은 클러스터에 두 번째 argo-cd 를 띄우려면 crds.install=false 가 필수다 —
CRD 3종이 클러스터 전역이고 운영 릴리스가 소유해 Helm 이 ownership 충돌로
거부한다. Ingress 도 항상 끈다(운영과 host 충돌).
검증: 워크로드 롤아웃 / health.persist / api 버전 / admin 로그인
- argo-cd/7.8.11/BUILD-README.md 에 `helm repo add argo ...` 추가
chart_version_detector 가 이 한 줄을 정규식으로 뽑아 업스트림 레포를 정하는데,
argo-cd 에는 없어서 신규 버전 자동 감지가 조용히 실패하고 있었다
(repo: null → latest_version: null). CLAUDE.md 의 "변경 금지" 규정도
실제 파싱 계약에 맞게 정정했다.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
58 lines
2.2 KiB
YAML
58 lines
2.2 KiB
YAML
# PaaSup 배포 기준 오버라이드.
|
|
#
|
|
# 실제 배포 값 주입은 dipup 의 pkg/assets/helm/values/argo-cd-values.yaml.tpl 이 담당한다.
|
|
# 이 파일은 "PaaSup 이 실제로 어떤 key 를 쓰는가"의 기준이며(Breaking Change 판정 근거),
|
|
# 도메인·시크릿 같은 환경별 값은 placeholder 로 둔다. 비밀값을 커밋하지 않는다.
|
|
|
|
configs:
|
|
params:
|
|
# ArgoCD v3.0 부터 리소스 health 를 Application CR 에 저장하지 않는다(기본 false).
|
|
# dip-console-api 의 analyzeApplicationIssues 가 .status.resources[].health 를 읽으므로
|
|
# 켜두지 않으면 카탈로그 오류 상세에서 리소스 이슈가 비어 나온다.
|
|
controller.resource.health.persist: "true"
|
|
|
|
cm:
|
|
create: true
|
|
url: https://argocd.example.org
|
|
# Keycloak OIDC 연동.
|
|
# issuer/clientSecret/rootCA 는 환경별 값이라 배포 시 주입한다 — dipup 의
|
|
# argo-cd-values.yaml.tpl 이 리터럴로 채운다. 아래 `$oidc.keycloak.clientSecret` 은
|
|
# argocd-secret 의 동명 key 를 참조하는 ArgoCD 표기로, 값을 파일에 남기지 않으려면
|
|
# 이 형태를 쓴다.
|
|
oidc.config: |
|
|
name: Keycloak
|
|
issuer: https://keycloak.example.org/realms/paasup
|
|
clientID: argocd
|
|
clientSecret: $oidc.keycloak.clientSecret
|
|
requestedScopes: ["openid", "profile", "email", "groups"]
|
|
# 사설 CA 를 쓰는 Keycloak 이면 rootCA 를 함께 넣는다.
|
|
# rootCA: |
|
|
# -----BEGIN CERTIFICATE-----
|
|
|
|
rbac:
|
|
create: true
|
|
policy.csv: |
|
|
g, paasup, role:admin
|
|
|
|
server:
|
|
# apisix 가 TLS 를 종료하고 백엔드로 평문을 보내므로 서버는 평문으로 띄운다.
|
|
# 지정하지 않으면 리다이렉트 루프가 발생한다.
|
|
extraArgs:
|
|
- --insecure
|
|
|
|
ingress:
|
|
enabled: true
|
|
annotations:
|
|
# apisix ingress controller — https 리다이렉트 플러그인
|
|
k8s.apisix.apache.org/plugin-config-name: https-redirect
|
|
# cert-manager 설정
|
|
cert-manager.io/cluster-issuer: "selfsigned-issuer"
|
|
cert-manager.io/duration: 8760h
|
|
cert-manager.io/renew-before: 720h
|
|
hostname: argocd.example.org
|
|
ingressClassName: "apisix"
|
|
extraTls:
|
|
- hosts:
|
|
- argocd.example.org
|
|
secretName: argocd-tls
|