kustomize
개요
쿠스토마이즈는 쿠버네티스 양식 파일을 통합적으로 적용하고 관리하는데 쓰이는 툴이다.
헬름과 같이 버전 관리에도 활용할 수 있고, 다양한 설정을 할 수 있다.
kubectl에서는 -k
옵션을 통해 내장 지원하고 있다.
기본 사용법
기본적인 사용법은 아주아주 간단하다.
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: my-namespace
commonLabels:
app: foo
environment: test
resources:
- deployment.yaml
일단 kustomization.yaml 파일을 만들고, 여기에 쿠스토마이즈로 관리할 파일 경로를 명시한다.
그 다음에 kubectl apply -k .
를 하면 해당 파일을 읽고 명시된 양식 파일들을 배포한다!
이러한 방식을 조금 더 계층적으로 구성해서 다양한 환경에서 커스텀되도록 구성하는 게 가능하다.
여기에서 각 디렉토리를 이름에 맞춰서 사용해주면 되는데, 위 구성 방식은 운영 환경과 개발 환경에서 조금씩 변경 사항이 있는 조직에서 사용하는 방식이다.
일단 base 디렉토리는 루트 쿠스토마이즈가 담기는 경로로, 공통적으로 적용되는 파일들을 넣어둔다.
resources:
- ./../base
namePrefix: stag-
그리고 overlays에 있는 쿠스토마이즈 파일에는 이런 식으로 베이스 경로를 넣어주고, 또 자신의 디렉토리의 파일들을 담아주면 된다.
k apply -k someApp/overlays/development
k apply -k someApp/overlays/production
이제 개발 환경, 운영 환경을 배포할 때 이런 식으로 명령을 치기만 하면 각 환경에 커스텀된 설정으로 리소스를 적용할 수 있게 되는 것이다.
시크릿, 컨피그맵 동적 구성
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: my-application-properties
files:
- application.properties
이렇게 시크릿이나 컨피그맵의 경우에는 동적으로 구성되도록 하는 것이 가능하다.
이미지 변경
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: postgres
newName: my-registry/my-postgres
newTag: v1
- name: nginx
newTag: 1.8.0
- name: my-demo-app
newName: my-app
- name: alpine
digest: sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3
resources:
- deployment.yaml
이런 식으로 images
필드를 통해 워크로드의 이미지를 변경하는 게 가능하다.
name
필드를 통해 해당 이미지를 찾고, newName, newTag를 붙이는 방식이다.
파일 병합
resources:
- ../base
patchesStrategicMerge:
- |-
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy
spec:
template:
spec:
containers:
- name: nginx
image: nginx:latest
이런 식으로 구성하면 특정 파일의 설정을 병합하는 식으로 설정이 가능하다.
이 방식은 좋은 게 다른 설정들은 안 건드리고 명시된 필드에 대해서만 추가된다는 것이다.
여기에 몇 가지 활용법이 더 있다.
containers:
- name: nginx
$patch: delete
이런 식으로 적용하려는 줄 바로 아래 $patch
를 사용하면 특정 필드에 대해 더 세부적인 컨트롤이 가능하다.
위의 세팅은 컨테이너 하위 필드로 있던 nginx를 지워버리게 될 것이다.
- name: nginx
image: nginx:1.7.9
$patch: replace
이런 식으로 하면 이미지 버전을 교체하게 된다.
patchesJSON6902:
- target:
group: apps
version: v1
kind: Deployment
name: deploy
patch: |-
- op: replace
path: /spec/template/spec/containers/0/image
value: nginx:latest
patchesJSON6902은 어떤 리소스를 타겟하는지 명시하고, 그 다음 어떤 작업을 수행하지 조금 더 명시적으로 지정한다.
관련 문서
이름 | noteType | created |
---|