Files
project-infra/docs/operations.md
T

4.3 KiB
Raw Blame History

운영 / 검증

bootstrap, teardown, validate.sh, 환경별 차등 계획의 설계 의도 를 정리한 문서. 단계별 실제 실행 절차는 guide.md 에 있다.

bootstrap 단계

VaultConnection / VaultAuth / VaultStaticSecret 은 VSO Helm 설치로 CRD 가 등록된 뒤에만 apply 할 수 있다. 그래서 overlays/dev/vso/ 는 dev kustomization 집계에 포함되지 않으며, bin/bootstrap.sh 마지막 단계에서 별도로 kubectl apply -k overlays/dev/vso/ 한다.

Phase 작업 의존하는 직전 상태 멱등 안전?
0 MinIO Operator Helm install (tasks/minio-operator-install.sh) helm 가능한 클러스터 helm upgrade --install
1 kubectl apply -k base/managing/namespace/ (PSS restricted 라벨 선행) kubectl apply
2 VSO-managed Secret 점검 namespace 존재 ⚠️ RESET_STALE_SECRETS=yes 옵션 시 파괴적
3 kubectl apply -k overlays/dev/ (vault + registry + 앱) namespace + PSS 라벨 kubectl apply
4 vault-0 Pod Running 대기 Phase 3 의 Vault StatefulSet wait 만
5 tasks/vault-init.sh (init / unseal / auth / policy×2 / role×2) vault-0 Running 상태 체크 후 차이만 적용
6 tasks/vso-install.sh (helm upgrade --install) Vault auth/role 준비 helm upgrade --install
7 kubectl apply -k overlays/dev/vso/ (VaultConnection / VaultAuth / VaultStaticSecret) Phase 6 의 VSO CRD 등록 kubectl apply

Phase 5 의 1 회성 셋업 흐름은 secret-pipeline-bootstrap 시퀀스, Phase 7 이후의 정상 reconcile 은 secret-pipeline-runtime 시퀀스 참고.

# dev — 비밀번호를 프롬프트에서 무음 입력 (bash history 에 안 남음)
bash k8s/scripts/bin/bootstrap.sh dev

# teardown — 대화형 y/N
bash k8s/scripts/bin/teardown.sh dev

스크립트 구조

k8s/scripts/bin / ci / lib / tasks 4 축:

디렉토리 역할
bin/ 사용자 진입점. bootstrap.sh / teardown.sh
ci/ CI / 로컬 검증. validate.sh (kustomize + kubeconform + kube-linter)
lib/ 공통 Bash 라이브러리. common.sh (strict mode / trap / log / confirm / retry / mask_secret) + vault.sh
tasks/ 재사용 작업. vault-init.sh / vault-seed-apps.sh / vso-install.sh

모든 쉘 스크립트는 set -Eeuo pipefail + IFS=$'\n\t' + trap_cleanup 으로 공통 에러 처리. root token / registry BasicAuth 같은 민감 값은 stdin 파이프 로만 전달하고 stdout 에 찍지 않는다.

검증 (validate.sh)

bash k8s/scripts/ci/validate.sh

3 단계:

  1. 각 overlay 에 대해 kustomize build (환경 중립성 / patch 유효성)
  2. 렌더 결과에 kubeconform -strict -ignore-missing-schemas (Kubernetes OpenAPI + Datree CRD catalog)
  3. 렌더 결과에 kube-linter lint --config .kube-linter.yaml (securityContext / resources / PSS / image tag 등)

.kube-linter.yaml블록 단위 분석으로 생기는 컨텍스트 오탐 4 종(dangling-service, non-existent-service-account, mismatching-selector, no-anti-affinity) 만 제외한다. 나머지는 모두 활성.

목표 상태:

k8s/overlays/dev             build=ok  schema=ok  lint=ok
k8s/overlays/dev/vso         build=ok  schema=ok  lint=ok

환경별 배포

현재 dev overlay 만 완성. staging / prod 는 의도적으로 비어 있고 추후 확장 예정. validate.sh 는 kustomization.yaml 이 없는 환경을 자동 스킵한다 — 빈 overlay 가 CI 를 빨갛게 만들지 않기 위함.

계획된 환경별 차등

리소스 dev staging prod
Vault replicas / storage 1 / 1Gi 1 / 5Gi 3 (HA Raft) / 20Gi
Registry replicas / storage 1 / 5Gi 1 / 10Gi 2 / 50Gi
PostgreSQL retention policy Delete Retain Retain
이미지 tag 정책 semver tag semver tag @sha256: digest pin
TLS 비활성화 cert-manager cert-manager + HSTS

prod 승격 시 필수 작업:

  • Vault storage fileraft + KMS auto-unseal
  • Postgres backup CronJob (Velero / pgBackRest)
  • cert-manager ClusterIssuer 로 TLS 전환
  • 이미지 tag → digest pin