Kubernetes 쿠버네티스 - Kustomize로 Deployment 환경별 개별 설정하기 (patchesStrategicMerge)

salgu·2023년 8월 6일
0

kubernetes

목록 보기
14/16

Kustomize 개요

Kustomize는 쿠버네티스 구성을 사용자 정의화하는 도구이다. 이는 애플리케이션 구성 파일을 관리하기 위해 다음 기능들을 가진다.

  • 다른 소스에서 리소스 생성
  • 리소스에 대한 교차 편집 필드 설정
  • 리소스 집합을 구성하고 사용자 정의

이번 포스팅에선 Profile(dev/stage/prod) 형식으로 분리하여 Deployment를 배포하는 방식으로 진행해 보겠습니다.
이 외에도 활용할 수 있는 방법으론 각 설정별로 Manifest를 분리하여 적용해도 되고 적절하게 선택하여 적용하면 됩니다.

방식

Kustomize는 상속(Inherit)의 개념을 사용하는 방식을 사용합니다.
base yaml을 정의한 후에, 다른 변경할 부분만 overlay yaml에서 구현하는 방식입니다.

적용

폴더 구조

  • api
    • base
      • deployment.yml
      • kustomization.yml
    • overlays
      • dev
        • deployment.yml
        • kustomization.yml

위의 구조로 진행됩니다.
현재 포스팅에선 dev만 사용했지만 추가로 profile(stage, prod)이 늘어난다면

  • api
    • base
      • deployment.yml
      • kustomization.yml
    • overlays
      • dev
        • deployment.yml
        • kustomization.yml
      • stage
        • deployment.yml
        • kustomization.yml
      • prod
        • deployment.yml
        • kustomization.yml

방식으로 병렬적으로 확장하면 됩니다.

Manifest 정의

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 1
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
      - name: api
        image: api:v1
        resources:
          limits:
            memory: "256Mi"
            cpu: "250m"

위의 yaml파일을 Base Deployment라고 정의하겠습니다. 경로 : ./api/base/deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 3

상속(Inherit)을 받아 사용할 Overlay Deployment입니다.
경로 : ./api/overlays/dev/deployment.yml

위의 Base Deployment를 Overlay Deployment가 상속받아 replicas가 1 -> 3 으로 변경되어 적용이 됩니다.

Kustomization Manifest 정의

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - deployment.yml

위의 yaml파일을 Base Kustomize라고 정의하겠습니다. 경로 : ./api/base/kustomization.yml

reseources에 ./api/overlays/dev/deployment.yml 지정해줍니다.

resources 필드는 Kustomization 파일에서 사용되며, Kustomize가 구성을 빌드하거나 배포할 때 참조할 리소스 파일을 지정하는 역할을 합니다.

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ../../base
patches:
- path: deployment.yml
  target:
    kind: Deployment
    name: api

위의 yaml파일을 Overlay Kustomize라고 정의하겠습니다. 경로 : ./api/overlays/dev/kustomization.yml

patches 필드는 리소스에 대한 패치(변경 사항)를 정의합니다. 이 코드에서는 deployment.yml 파일에 대한 패치를 정의하고 있습니다. 패치는 기본 리소스 정의에 대한 변경 사항을 적용하는 데 사용됩니다. path 필드는 패치할 파일의 경로를 지정하고, target 필드는 어떤 종류의 Kubernetes 오브젝트를 대상으로 패치를 적용할지를 지정합니다. 이 예시에서는 kind가 Deployment이고 name이 api인 오브젝트에 패치를 적용하도록 지정하고 있습니다.

적용

kubectl kustomize ./
명령어로 dry run을 해줍니다.

그럼 Base Deployment의 Manifest에 상속받은 Overlay Deployment가 적용이 된 Manifest가 출력되게 됩니다.

$ kubectl kustomize ./

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
      - name: api
        image: api:v1
        resources:
          limits:
            memory: "256Mi"
            cpu: "250m"

정상적으로 spec.replicas가 3으로 출력이 되는것을 확인할 수 있습니다.

그리고 kubectl apply -f . 바로 사용하면 Kustomize가 정상적으로 적용되는것을 확인할 수 있습니다.





reference:

profile
https://github.com/leeeesanggyu, leeeesanggyu@gmail.com

1개의 댓글

comment-user-thumbnail
2023년 8월 6일

잘 읽었습니다. 좋은 정보 감사드립니다.

답글 달기