연재 시리즈

kustomize 1편 - kustomize란?

악분 2022. 8. 2. 22:31
반응형
글이 이전되었습니다. 링크: https://malwareanalysis.tistory.com/402

안녕하세요. 이 글은 kustomize가 무엇인지 소개합니다.

 

1. Kustomize란?

kustomize는 쿠버네티스 리소스(yaml파일)를 변경하지 않고 필드를 재정의하여 새로운 쿠버네티스 리소스를 생성하는 도구입니다.

 

2. 실습하면서 살펴보기

글로 보는 것보다 직접 실습하면 바로 어떤 도구인지 알 수 있을 것 같아요! 제 github repo(https://github.com/choisungwook/kustomize-example)를 다운로드 받고 example_1폴더에 있는 파일을 살펴봅시다. 

 

pod.yaml과 kustomization.yaml파일이 실습에 필요한 파일입니다. kustomization.yaml파일은 kustomize를 실행하기 위한 설정 파일입니다. 아직 알아가는 단계이니 자세한 설명은 생략하겠습니다

 

pod.yaml파일은 nginx:latest이미지를 사용하여 nginx pod를 실행하는 간단한 예제입니다.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:latest
    resources:
      limits:
        memory: "64Mi"
        cpu: "100m"

 

이제 kustomize 도구를 사용해보겠습니다. kustomize는 kubectl에 내장되어 별도 설치가 필요 없습니다. kubectl kustomize명령어로 kustomize를 실행할 수 있는데요!. stdout으로 실행결과가 출력됩니다.

kubectl kustomize ./

 

실행결과를 보시면 pod.yaml에 정의되어 있는 image가 변경되었습니다. 그리고 놀랍게도 pod.yaml은 변경되지 않았습니다.

 

이미지가 변경된 이유는 kustomization.yaml파일 설정때문입니다. nginx image를 nginx:1.23.1로 변경하라고 설정되어 있습니다.

resources:
  - pod.yaml
images:
  - name: nginx
    newName: nginx
    newTag: 1.23.1

 

kustomize 실행결과를 쉘 파이프라인과 kubectl apply -로 쿠버네티스 리소스를 생성할 수 있습니다.

kubectl kustomize ./ | kubectl apply -f -

 

생성된 pod의 이미지를 확인하면 nginx:1.23.1입니다.

kubectl describe po nginx | grep -i image

 

3. 마치며

실습을 해봐서 아시는 것처럼, kustomize는 기존 쿠버네티스 리소스 정의(yaml파일)을 변경하지 않고 필드를 재정의하여 새로운 쿠버네티스 리소스를 생성하는 도구입니다. 필드를 재정의 하는 것 때문에 kustomize가 재사용성이 좋다고 표현하기도 합니다.

 

끝으로, kustomize는 helm과 많이 비교대상으로 언급이 되고 있는데요. helm은 템플릿에 정의된 필드의 값만 수정할 수 있습니다. 하지만 kustomize는 새로운 필드를 삽입할 수도 있고 기존 필드 값을 변경할 수 있습니다.그리고 helm은 버전(rivision)관리가 되지만 kustomize는 버전관리가 없습니다. 

결과적으로, helm과 kustomize를 같이 사용하여 서로 부족한 점을 보완할 수 있습니다. 

반응형