k8s/
├── base/
│ └── deployment.yaml
├── overlays/
│ ├── dev/
│ │ ├── kustomization.yaml
│ │ └── patch-deployment.yaml
│ └── live/
│ └── ...
base/deployment.yaml: 기본 Deployment 정의overlays/dev/patch-deployment.yaml: 환경별 오버라이드kustomization.yaml: Kustomize entrypointbase/deployment.yaml에 기본 리소스 정의overlays/dev/patch-deployment.yaml로 image, affinity 등 overridekustomize edit set image로 이미지 태그 자동 교체kustomize build overlays/dev로 최종 Manifest 생성kubectl apply -f로 배포GitLab CI에서 kustomize edit set image 로 Deployment에 사용될 이미지 태그를 자동으로 교체
ex) ci 스크립트
script:
- kustomize edit set image <account_id>.dkr.ecr.<aws_region>.amazonaws.com/<repo>/<project_name>=<account_id>.dkr.ecr.<aws_region>.amazonaws.com/<repo>/<project_name>:${CI_COMMIT_SHORT_SHA}
kustomize edit set image <기존이름>=<새이름:태그> 로 교체patch-deployment.yaml 내 old image naem 과 정확히 일치해야하므로 주의# overlays/dev/patch-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: app # base Deployment와 이름 동일해야 patch 됨
spec:
template:
metadata:
labels:
app: <name>
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- amd64
containers:
- name: <name>
image: <account_id>.dkr.ecr.<aws_region>.amazonaws.com/<repo>/<project>:REPLACED_BY_CI
ports:
- containerPort: <port>
image: 필드의 값은 CI에서 치환되므로, 이름과 경로를 정확히 맞춰야