[k8s] Kustomize + GitLab CI로 이미지 태그 자동 교체

Woong·6일 전
0

Docker, k8s

목록 보기
20/21

프로젝트 구조

k8s/
├── base/
│   └── deployment.yaml
├── overlays/
│   ├── dev/
│   │   ├── kustomization.yaml
│   │   └── patch-deployment.yaml
│   └── live/
│       └── ...
  • base/deployment.yaml: 기본 Deployment 정의
  • overlays/dev/patch-deployment.yaml: 환경별 오버라이드
    • (image, affinity 등)
  • kustomization.yaml: Kustomize entrypoint

Kustomize 적용

  1. base/deployment.yaml에 기본 리소스 정의
  2. overlays/dev/patch-deployment.yaml로 image, affinity 등 override
  3. GitLab CI에서 kustomize edit set image로 이미지 태그 자동 교체
  4. kustomize build overlays/dev로 최종 Manifest 생성
  5. kubectl apply -f로 배포

GitLab CI에서의 이미지 태그 자동 교체

  • 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 과 정확히 일치해야하므로 주의

patch-deployment.yaml 예시

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

0개의 댓글