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
방식으로 병렬적으로 확장하면 됩니다.
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 으로 변경되어 적용이 됩니다.
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:
잘 읽었습니다. 좋은 정보 감사드립니다.