이 글은 김태민님의 대세는 쿠버네티스 강의를 참고하여 정리하였습니다!
Template, Replicas 구성
Selector 구성
도커 이미지는 김태민님께서 만들어두신 이미지를 사용합니다.
먼저, Controller를 사용하는 이유에 대하여 알아봅시다.
가장 중요한 이유는 Service를 관리하고 운영하는데 도움을 주기 때문입니다.
👍 추가로, Replication Controller 는 ReplicaSet의 노후화된 버전이라고 합니다!
Template
Replicas
이제, 실습해보도록 합시다!
pod1.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-1
labels:
type: web
spec:
containers:
- name: container
image: kubetm/app:v1
terminationGracePeriodSeconds: 0
rs1.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replica1
spec:
replicas: 1
selector:
matchLabels:
type: web
template:
metadata:
name: pod1
labels:
type: web
spec:
containers:
- name: container
image: kubetm/app:v1
terminationGracePeriodSeconds: 0
이제 ReplicaSet에 연결된 Pod를 확인해 봅시다.
pod1이 잘 연결 된것을 볼 수 있습니다.
이제, replicas의 수를 늘려보도록 하겠습니다!
kubectl scale rs/replica1 --replicas=2
새로운 Pod가 생성된 것을 확인할 수 있습니다!
이제 Pod의 Version을 업데이트 하기 위해 ReplicaSet의 Template의 Version을 바꾼 후, 기존의 Pod를 삭제해보도록 하겠습니다.
kubectl edit rs/replica1 -o yaml
kubectl delete pods --all
Pod들의 Version이 수정된 것을 확인할 수 있습니다!
ReplicaSet의 Selector에는 Key와 labels형태인 Selector 만 아닌,
matchExpressions라는 Selector로 이미 존재하는 Object를 좀 더 세세하게 정해줄 수 있다고 합니다.
하지만, ReplicaSet은 위에서 말했다 시피 Template을 따로 정해주기 때문에 Selector라는 기능 자체를 잘 사용하지는 않다고 합니다.
따라서 별도의 실습없이 yaml파일만 정의하는 법을 간단히 확인해봅시다!
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replica1
spec:
replicas: 1
selector:
matchLabels:
type: web
ver: v1
matchExpressions:
- {key: type, operator: In, values: [web]}
- {key: ver, operator: Exists}
template:
metadata:
labels:
type: web
ver: v1
location: dev
spec:
containers:
- name: container
image: kubetm/app:v1
terminationGracePeriodSeconds: 0
저런 식으로, matchExpressions를 정의해주면 된다고 합니다!