Overview
오늘은 Kustomize에 대해서 공부해보려고 한다.
Kustomize란?
Kustomize는 쿠버네티스 매니페스트를 커스터마이징하는 도구이다. 기본 매니페스트에 수정 및 변형을 적용하는데 초점을 맞춘다.
Kustomize 설치
다른 설치 방법은 해당 링크에서 확인하면 된다.
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
sudo mv kustomize /usr/local/bin/
Kustomize 기본요소
1. 베이스(base) 및 오버레이(overlay)
Kustomize는 기본적으로 베이스와 오버레이라는 아이디어를 기반으로 작동한다. 베이스에는 기본 리소스에 대해서 정의하고 오버레이는 해당 리소스를 바탕으로 환경별로 적용할 패치 내용을 적용한다.
├── base
│ ├── kustomization.yaml
│ ├── nginx-deployment.yaml
│ ├── nginx-ingress.yaml
│ └── nginx-service.yaml
└── overlays
├── dev
│ ├── ingress.yaml
│ ├── kustomization.yaml
│ └── replica-count.yaml
├── prod
│ ├── ingress.yaml
│ ├── kustomization.yaml
│ └── replica-count.yaml
└── qa
├── ingress.yaml
├── kustomization.yaml
└── replica-count.yaml
2. kustomization.yaml
Kustomize가 어떤 수정 사항을 적용할지에 대해서 정의하는 파일이다. 해당 파일에는 리소스, 적용할 패치 및 기타 구성에 대한 정보가 포함 될 수 있다.
`base/kustomization.yaml`
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- nginx-deployment.yaml
- nginx-service.yaml
- nginx-ingress.yaml
`overlays/dev/kustomization.yaml`
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
- path: replica-count.yaml
target:
kind: Deployment
name: nginx-deployment
- path: ingress.yaml
target:
kind: Ingress
name: nginx-ingress
namePrefix: dev-
namespace: dev-nginx
Kustomize 실습
자세한 내용은 아래의 Github를 참조하면 된다. `basic-nginx-deployment`를 실습해볼 예정이다.
https://github.com/somaz94/kustomize-study
basic-nignx-deployment
간단하게 kustomize를 사용해 nginx를 배포할 것이다. 환경은 `dev, qa, prod`이다.
디렉토리 구조
- `base` : 기본 리소스가 정의된 디렉터리이다.
- `overlays` : 특정 환경에 맞게 조정된 리소스 구성이 포함된 디렉터리이다. 각 환경`(dev, qa, prod)` 에 대한 리소스 변형을 정의한다.
- `mainfests` : `overlays`에 `kustomize build` 명령을 적용한 결과인 쿠버네티스 매니페스트 파일이다. 해당 파일은 Kustomize 처리없이 바로 쿠버네티스 클러스터에 직접 적용될 수 있다.
.
├── README.md
├── base
│ ├── kustomization.yaml
│ ├── nginx-deployment.yaml
│ ├── nginx-ingress.yaml
│ └── nginx-service.yaml
├── manifests
│ ├── dev-nginx.yaml
│ ├── prod-nginx.yaml
│ └── qa-nginx.yaml
└── overlays
├── dev
│ ├── ingress.yaml
│ ├── kustomization.yaml
│ └── replica-count.yaml
├── prod
│ ├── ingress.yaml
│ ├── kustomization.yaml
│ └── replica-count.yaml
└── qa
├── ingress.yaml
├── kustomization.yaml
└── replica-count.yaml
6 directories, 17 files
Kustomize 리소스 빌드
# Generate manifests for the dev environment
kustomize build overlays/dev
# Generate manifests for the qa environment
kustomize build overlays/qa
# Generate manifests for the prod environment
kustomize build overlays/prod
Kustomize 매니페스트 저장 방법
kustomize build overlays/dev > manifests/dev-nginx.yaml
kustomize build overlays/qa > manifests/qa-nginx.yaml
kustomize build overlays/prod > manifests/prod-nginx.yaml
Kustomize 빌드 후 배포
kustomize build overlays/dev | kubectl apply -f - --namespace=dev-nginx
kustomize build overlays/qa | kubectl apply -f - --namespace=qa-nginx
kustomize build overlays/prod | kubectl apply -f - --namespace=prod-nginx
or
kubectl apply -k overlays/dev/
kubectl apply -k overlays/qa/
kubectl apply -k overlays/prod/
배포 후 리소스 확인 및 테스트
간단하게 `dev` 환경에 대해서만 배포 후 확인해본다.
kubectl get po,svc,ingress -n dev-nginx
NAME READY STATUS RESTARTS AGE
pod/dev-nginx-deployment-8d545c96d-48rqx 1/1 Running 0 2m37s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/dev-nginx-service ClusterIP 10.233.6.66 <none> 80/TCP 2m37s
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/dev-nginx-ingress <none> dev-nginx.somaz.link 10.10.100.22 80 2m37s
`Curl` 명령어를 사용해서 요청을 보낼 수 있다.
curl 10.233.6.66
or
curl dev-nginx.somaz.link
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
...
테스트 후 리소스를 정리한다.
kubectl delete -k overlays/dev
Reference
https://kubectl.docs.kubernetes.io/
'Container Orchestration > Kubernetes' 카테고리의 다른 글
Flux란? / Flux + Kustomize (2) | 2023.10.16 |
---|---|
2. Kustomize + ArgoCD ApplicationSet (2) | 2023.10.14 |
CertManager로 Let's Encrypt 인증서 발급 (2) | 2023.10.03 |
Kubernetes Autoscaling & Karpenter (0) | 2023.05.24 |
Helm Chart 작성방법 (0) | 2023.05.18 |