일정 개수의 포드를 유지하는 컨트롤러
실제 서비스에서 여러개의 동일한 컨테이너를 생성한 뒤 외부 요청이 각 컨테이너에 적절히 분배되게 하고 싶을때, 레플리카셋을 활용할 수 있습니다.
특징
정해진 수의 동일한 포드가 항상 실행되도록 관리합니다.
노드 장애 등의 이유로 포드를 사용할 수 없다면 다른 노드에서 포드를 다시 생성합니다.
레플리카 셋을 통해 포드를 안정적으로 여러개 실행할 수도 있고, 워커 노드에 장애가 생기더라도 정해진 개수의 포드를 유지할 수 있습니다.
1.기본적으로 사용하기
사용하기
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-replicaset
spec:
template:
metadata:
name: nginx-replicaset
labels:
app: nginx-ysbae
spec:
containers:
- name: nginx-replicaset
image: nginx
ports:
- containerPort: 80
replicas: 3
selector:
matchLabels:
app: nginx-ysbae
replicas : 3으로 설정했기때문에 3개의 포드가 생성된 것을 확인할 수 있습니다.
확인
$ vi replica.yaml
$ kubectl apply -f replica.yaml
replicaset.apps/nginx-replicaset created
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-replicaset-5cbqr 0/1 ContainerCreating 0 4s
nginx-replicaset-swztm 0/1 ContainerCreating 0 4s
nginx-replicaset-wvtdr 0/1 ContainerCreating 0 4s
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-replicaset 3 3 3 111s
정상적으로 3개가 잘 생성되어 있는것을 확인 할 수 있습니다.
2.레플리카 셋을 4개로 늘려서 실행하기
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-replicaset
spec:
template:
metadata:
name: nginx-replicaset
labels:
app: nginx-ysbae
spec:
containers:
- name: nginx-replicaset
image: nginx
ports:
- containerPort: 80
replicas: 4
selector:
matchLabels:
app: nginx-ysbae
실행 및 확인
$ vi replica.yaml
$ kubectl apply -f replica.yaml
replicaset.apps/nginx-replicaset configured
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-replicaset-5cbqr 1/1 Running 0 3m49s
nginx-replicaset-bl54p 1/1 Running 0 8s
nginx-replicaset-swztm 1/1 Running 0 3m49s
nginx-replicaset-wvtdr 1/1 Running 0 3m49s
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-replicaset 4 4 4 3m57s
4개로 한개가 늘어난 모습을 확인할 수 있습니다.
레플리카셋의 동작원리
레플리카셋은 포드와 연결된 것처럼 보이지만 실제로는 연결돼 있지 않습니다. 오히려 느슨한 연결을 유지하고 있으며, 이러한 느슨한 연결은 포드와 레플리카셋의 정의 중 라벨 셀렉터(Label Selector)을 통해 이뤄집니다.
yaml 파일 중 라벨과 매치라벨의 이름이 nginx-ysbae로 동일하게 설정되있는 것을 볼 수 있습니다.
...생략
labels:
app: nginx-ysbae
...생략
replicas: 4
selector:
matchLabels:
app: nginx-ysbae
라벨은 쿠버네티스 리소스의 부가적인 정보를 표현할 수 있을 뿐 아니라, 서로 다른 오브젝트가 서로를 찾아야할 때 사용되기도 합니다. 예를 들어 레플리카셋은 spec.selector.matchLabel에 정의된 라벨을 통해 생성해야 하는 포드를 찾습니다. 즉, app: nginx-ysbae라벨을 가지는 포드의 개수가 replicas 항목에 정의된 숫자인 3개와 일치하지 않으면 포드를 정의하는 포드 템플릿항목의 내용으로 포드를 생성합니다.
출처 :시작하세요! 도커/쿠버네티스
출처 : https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/
'도커&쿠버네티스 > 쿠버네티스' 카테고리의 다른 글
#1 POD (0) | 2022.11.02 |
---|---|
[시작하세요! 도커/쿠버네티스] 개인스터디 시작 (0) | 2022.11.02 |
댓글