Container Orchestration/Kubernetes

1. Kustomize란?

Somaz 2023. 10. 12. 21:06
728x90
반응형

Overview

오늘은 Kustomize에 대해서 공부해보려고 한다.

츨처 : https://kustomize.io/

 


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

 

GitHub - somaz94/kustomize-study: kustomize-study

kustomize-study. Contribute to somaz94/kustomize-study development by creating an account on GitHub.

github.com

 


 

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/

 

 

728x90
반응형