참고
Kustomize
기본 명령어(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