레플리카셋(Replicaset)의 3가지 구성 요소
label selector
- 레플리카셋에 의해 관리될 파드를 선택할 레이블 정의
- .spec.template.labels의 필드와 spec.selector.matchLabels가 같아야 한다.
- 레이블을 기준으로 파드가 관리되므로 실행 중인 파드를 중단하거나 재시작하지 않고 레플리케이션 컨트롤러가 관리하는 파드 변경 가능
replicas
- 유지할 파드의 수
- 기본 값은 1
pod template
- 레플리카셋이 실행할 파드의 정의
- 레플리카셋에 의해서 실행할 파드의 컨테이너 이미지, 포트, 이름등의 구체적 명세
레플리카셋 yml 예제 (rs-nginx.yaml)
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs-nginx
spec:
selector:
matchLabels:
app: rs-nginx
template:
metadata:
name: rs-nginx
labels:
app: rs-nginx
spec:
containers:
- name: rs-nginx
image: nginx
ports:
- containerPort: 80
replicas: 3
레플리카셋(RepicaSet)의 집합적 라벨 정의
연산기호 | 설명 |
IN | lable에 지정된 값(value)중 하나에 일치해야 한다. |
NotIn | label의 value 목록 중 어느것과도 일치하면 안된다. |
Exists | key의 value와 상관없이 key가 pod에 정의되어 있기만 하면 된다. |
DoesNotExist | key의 value와 상관없이 key가 pod에 정의되어 있으면 안된다. |
app의 value가 web, nginx 인 것들에 대해서 replicaset이 관리를 한다.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs-nginx-label
spec:
selector:
matchExpressions:
- key: app
operator: In
values:
- web
- nginx
레플리카셋(Replicaset) 생성과 삭제
레플리카셋 생성
root@master:~/k8s_lab/controller/replicaset# kubectl apply -f rs-nginx.yaml
replicaset.apps/rs-nginx created
root@master:~/k8s_lab/controller/replicaset# k get rs,pods -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
replicaset.apps/rs-nginx 3 3 3 23s rs-nginx nginx app=rs-nginx
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/rs-nginx-ffbn8 1/1 Running 0 23s 192.168.189.76 worker2 <none> <none>
pod/rs-nginx-nfb24 1/1 Running 0 23s 192.168.189.77 worker2 <none> <none>
pod/rs-nginx-w5pjf 1/1 Running 0 23s 192.168.235.136 worker1 <none> <none>
기존적은 replicaset을 생성해본다. 생성한후 replicas = 3에 맞게 3개의 pod가 시작시에 생성되어 있고 1개의 replicaset이 생성된 것을 볼 수 있다.
레플리카셋 삭제
root@master:~/k8s_lab/controller/replicaset# kubectl delete pod rs-nginx-ffbn8
pod "rs-nginx-ffbn8" deleted
root@master:~/k8s_lab/controller/replicaset# k get rs,pods -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
replicaset.apps/rs-nginx 3 3 2 3m10s rs-nginx nginx app=rs-nginx
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/rs-nginx-clfcp 0/1 ContainerCreating 0 12s <none> worker1 <none> <none>
pod/rs-nginx-nfb24 1/1 Running 0 3m10s 192.168.189.77 worker2 <none> <none>
pod/rs-nginx-w5pjf 1/1 Running 0 3m10s 192.168.235.136 worker1 <none> <none>
앞서 생성한 3개의 pod중 하나를 삭제하면 replicaset이 바로 새로운 한개를 생성해서 전체 개수 3개를 유지하고 있다. (ContainerCreating이 새로 생성되는 pod)
레플리카셋 scale-up
root@master:~/k8s_lab/controller/replicaset# k get rs,pods -o wide (현재 상태 확인)
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
replicaset.apps/rs-nginx 3 3 3 7m17s rs-nginx nginx app=rs-nginx
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/rs-nginx-clfcp 1/1 Running 0 4m20s 192.168.235.137 worker1 <none> <none>
pod/rs-nginx-nfb24 1/1 Running 0 7m18s 192.168.189.77 worker2 <none> <none>
pod/rs-nginx-w5pjf 1/1 Running 0 7m18s 192.168.235.136 worker1 <none> <none>
root@master:~/k8s_lab/controller/replicaset# kubectl scale rs rs-nginx --replicas=4 (replicas를 3개에서 4개로 동적으로 변경한다.)
replicaset.apps/rs-nginx scaled
root@master:~/k8s_lab/controller/replicaset# k get rs,pods -o wide (바로 확인해보면 4개를 맞추기위해 새로운 pod 1개를 생성한다.)
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
replicaset.apps/rs-nginx 4 4 3 7m42s rs-nginx nginx app=rs-nginx
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/rs-nginx-clfcp 1/1 Running 0 4m45s 192.168.235.137 worker1 <none> <none>
pod/rs-nginx-d9hkz 0/1 ContainerCreating 0 4s <none> worker2 <none> <none>
pod/rs-nginx-nfb24 1/1 Running 0 7m43s 192.168.189.77 worker2 <none> <none>
pod/rs-nginx-w5pjf 1/1 Running 0 7m43s 192.168.235.136 worker1 <none> <none>
기존 3개의 replicas에서 4개로 변경 요청을 하면 replicaset은 추가로 1개의 pod를 새로 생성하여 전체 replicas 4를 맞춘다.
-- The End --
'Devops > Kubernetes' 카테고리의 다른 글
[Kubernetes] apt-get 시 public key is not available: NO_PUBKEY 에러 수정 (1) | 2023.12.21 |
---|---|
[Kubernetes] 쿠버네티스 Service 개념 - ClusterIP, NodePort (0) | 2022.01.23 |
[Kubernetes] 네임스페이스(Namespace) 살펴보기 (0) | 2022.01.17 |
[Kubernetes] 쿠버네티스 Architecture와 기본 동작 (0) | 2022.01.16 |
[Kubernetes] 쿠버네티스 설치(kubeadm) 및 cluster 구성하기 (5) | 2022.01.12 |