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에서 치환되므로, 이름과 경로를 정확히 맞춰야