Search
Duplicate
📒

[Kubernetes Infra] 12-1. Kustomize

상태
완료
수업
Kubernetes Infra
주제
4 more properties
참고

Kustomize

NOTE
Kustomize는 선언적 효율적인 manifest관리를 위한 도구이다!
공식문서 이미지
오버레이(Overlay)를 통한 환경별 커스터마이징이 가능하다.
기본 리소스 정의를 공유하고, 필요에 따라 변경사항을 적용한다.
특정 리소스의 세부 사항을 수정하기 위한 패치 파일을 적용할 수 있다. 이는 리소스 전체를 복사하지 않고도 변경사항을 관리할 수 있게 해준다.
Secrets 및 ConfigMaps의 동적생성으로 구성 파일 및 비밀번호와 같은 민감정보를 동적으로 생성하고 관리할 수 있다.

기본 명령어(kubectl)로 manifest 수정

NOTE
기존 디플로이먼트에서 repicas와 image를 수정해서 배포한다. 하지만 단 2줄의 코드를 변경하기 위해 중복되는 코드들이 너무 많다.
# 원본 파일 적용 k apply -f deployment.yaml # 수정한 파일로 적용 k diff -f update_deployment.yaml k apply -f update_deployment.yaml k get -f update_deployment.yaml -o yaml
Bash
복사
오브젝트 업데이트(Replace)시 이전 적용된(Applied)사항은 아래에서 참조가능
kubectl.kubernets.io/last-applied-configuration
해당 데이터는 replcae, edit로 업데이트가 되어도 apply당시 데이터만 반영되어 있음
코드 차이점
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx minReadySeconds: 5 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
YAML
복사
deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.16.1 # update the image ports: - containerPort: 80
YAML
복사
update_deployment.yaml
기존 디플로이먼트에서 repicas와 image를 수정해서 배포한다. 하지만 단 2줄의 코드를 변경하기 위해 중복되는 코드들이 너무 많다.

Kustomize 사용(리소스 그룹 생성)

NOTE
kustomize를 활용해서 쿠버네티스의 여러 manifest들을 한번에 실행할 수 있다!
# kustomize의 리소스를 합쳐서 yaml출력됨 k kustomize <kustomize 디렉토리> # 실제 실행 k apply -k <kustomize 디렉토리> k delete -k <kustomize 디렉토리>
Bash
복사
resources: - deployment.yaml - service.yaml
YAML
복사
2개가 묶여서 한번에 실행됨!
apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx spec: selector: matchLabels: run: my-nginx replicas: 2 template: metadata: labels: run: my-nginx spec: containers: - name: my-nginx image: nginx ports: - containerPort: 80
YAML
복사
deployment.yaml
apiVersion: v1 kind: Service metadata: name: my-nginx labels: run: my-nginx spec: ports: - port: 80 protocol: TCP selector: run: my-nginx
YAML
복사
service.yaml

kustomize - patches

NOTE
kustomize를 활용해서 쿠버네티스의 여러 manifest들을 한번에 실행할 수 있다!
k kustomize <kustomize 디렉토리> k apply -k <kustomize 디렉토리> k delete -k <kustomize 디렉토리>
Bash
복사
resources: - deployment.yaml patches: - path: incr_replica.yaml target: group: apps version: v1 kind: Deployment name: my-nginx # 적용할 리소스 오브젝트 이름 - path: set_memory.yaml target: group: apps version: v1 kind: Deployment name: my-nginx # 적용할 리소스 오브젝트 이름
YAML
복사
deployment.yaml을 통해서 파일을 추가로 생성한다.
apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx spec: selector: matchLabels: run: my-nginx replicas: 2 template: metadata: labels: run: my-nginx spec: containers: - name: my-nginx image: nginx ports: - containerPort: 80
YAML
복사
deployment.yaml
- op: replace # add, replace, remove path: /spec/replicas value: 3
YAML
복사
incr_replica.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx spec: template: spec: containers: - name: my-nginx resources: limits: memory: 512Mi
YAML
복사
set_memory.yaml (spec만 명시하면 에러 발생)

kustomize - Overlays

NOTE
Overlay기능은 기본 베이스(base)에 대해 환경/용도에 따라 변경사항을 적용할 수 있게 해준다!
k kustomize ./base k apply -k ./base k delete -k ./base k delete -k ./dev k delete -k ./prod
Bash
복사
my-nginx/ ├── base │ ├── deployment.yaml │ ├── kustomization.yaml │ └── service.yaml └── overlays ├── development │ └── kustomization.yaml └── production └── kustomization.yaml
Bash
복사
파일구조
resources: - deployment.yaml - service.yaml
YAML
복사
kustomization.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx spec: selector: matchLabels: run: my-nginx replicas: 2 template: metadata: labels: run: my-nginx spec: containers: - name: my-nginx image: nginx
YAML
복사
deployment.yaml
apiVersion: v1 kind: Service metadata: name: my-nginx labels: run: my-nginx spec: ports: - port: 80 protocol: TCP selector: run: my-nginx
YAML
복사
ervice.yaml
resources: - ../base namePrefix: dev-
YAML
복사
name: dev-my-nginx
resources: - ../base namePrefix: prod-
YAML
복사
name: prod-my-nginx