Kustomize Basics
k8s/
├── base/
│ ├── kustomization.yaml
│ ├── nginx-depl.yaml
│ ├── service.yaml
│ └── redis-depl.yaml
└── overlays/
├── dev/
│ ├── kustomization.yaml
│ └── config-map.yaml
├── stg/
│ ├── kustomization.yaml
│ └── config-map.yaml
└── prod/
├── kustomization.yaml
└── config-map.yaml
Kustomize 는 Environment 별 다른 설정값을 주기 위해 사용되는 툴이다. 기본적으로 base 에 기본값이 포함된 yaml 파일들을 넣어두고 overlay 에서 Environment 별 값들을 추가해주는 식이다.
Helm 의 경우 go template 형식으로 설정값들을 주입하지만 Kustomize 는 순수 yaml 파일로 구성되기 때문에 훨씬 읽기 편하다는 장점이 있다. 다만 Helm 과 달리 패키지 매니저 역할을 하진 않는다.
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- nginx-deployment.yaml
- nginx-service.yaml
commonLabels:
company: KodeKloud위와 같이 적용할 파일들을 추가해준 뒤 추가할 내용을 아래 적어주면 된다.
kustomize build k8s/
Kustomize 의 경우 설정값을 주입한 후 yaml 파일의 모습을 출력하기만 할 뿐 실제로 apply 하진 않는다.
kustomize build k8s/ | kubectl apply -f -
kubectl apply -k k8s/
위와 같은 명령어를 사용하면 설정값이 적용된 Object 들을 그대로 apply 할 수 있다.
k8s/
├── kustomization.yaml
├── api/
│ └── kustomization.yaml
├── db/
│ └── kustomization.yaml
├── cache/
│ └── kustomization.yaml
└── kafka/
└── kustomization.yaml
# k8s/kustomization.yaml
resources:
- api/
- db/
- cache/
- kafka/
여러 리소스를 한 번에 관리할 경우 각 리소스 마다 kustomization.yaml 을 선언해 준 뒤 최상위 kustomization.yaml 에서 사용할 수 있도록 설정해줄 수 있다.
Transformers
Common Transformers
commonLabels:
org: OrgLabel
namespace: lab
namePrefix: Org-
nameSuffix: -dev
commonAnnotations:
branch: master위와 같은 Transformer 들을 활용해 yaml 파일을 조작할 수 있다.
- commonLabels
- Resource 에 Label 을 추가한다.
- namePrefix/Suffix
- Resource 이름 앞 또는 뒤에 단어를 추가한다.
- namespace
- Resource 가 속할 namespace 를 지정한다.
- commonAnnotations
- Resource 에 Annotation 을 추가한다.
Image Transformers
images:
- name: nginx
newName: haproxy
newTag: 2.4nginx 라는 이미지를 사용하는 Resource 를 haproxy:2.4 로 변경한다.
Patches
patches:
- target:
kind: Deployment
name: api-deployment
patch: |-
- op: replace
path: /metadata/name
value: web-deploymentPatch 를 사용하면 실제 설정값을 조작할 수 있다. 위 예시는 api-deployment 라는 이름을 가진 Deployment Object 의 metadata.name 을 web-deployment 로 변경하는 예시다.
Overlays
bases:
- ../../base
resources:
- grafana-depl.yaml
patch: |-
- op: replace
path: /spec/replicas
value: 2
Overlay 에서 base 에 있는 리소스를 변경하고 추가해야할 경우 위처럼 작성할 수 있다.
Components
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Component
resources:
- postgres-depl.yaml
secretGenerator:
- name: postgres-cred
literals:
- password=postgres123
patches:
- deployment-patch.yaml
특정 환경에만 Component 를 추가해야할 경우 위와 같이 추가할 수 있다.