ReplicaSet (RS)
- ReplicaController와 같은 역할(=Pod의 갯수 보장)을 하는 컨트롤러
- ReplicaController보다 풍부한 Selector 지원
# Self Healing
Kubernetes는 ReplicaSets 및 Replication Controller를 통해 Self Healing 응용프로그램을 지원한다.
Replication Controller 는 POD 내의 응용프로그램이 충돌할 때 자동으로 POD가 다시 생성되도록 도와준다.
응용프로그램의 replicas가 항상 충분히 실행될 수 있도록 도와준다.
selector:
matchLabels:
component: redis
matchExpressions:
- {key:tier, operator: In, values: [cache] }
- {key: environment, operator: NotIn, values: [dev] }
- {key: version, operator: In, value: ["2.1", "2.2"]}
matchLabels:
key: value
연산자
* In : key와 value를 지정하여 key, value가 일치하는 Pod만 연결
* NotIn : key는 일치하고 value는 일치하지 않는 Pod에 연결
* Exists : key에 맞는 label의 pod를 연결 (존재하기만 하면 됨)
* DoesNotExist: : key와 다른 label의 Pod 연결
[master ~]$ cat > rs-nginx.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs-nginx
spec:
replicas: 3
selector:
matchLabels:
app: webui
template:
metadata:
name: nginx-pod
labels:
app: webui
spec:
containers:
- name: nginx-container
image: nginx:1.14
[master ~]$ kubectl create -f rs-nginx.yaml
replicaset.apps/rs-nginx created
# 3개 생성 확인
[master ~]$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rs-nginx-kq9rj 1/1 Running 0 6s 10.5.1.4 node2 <none> <none>
rs-nginx-m5c46 1/1 Running 0 6s 10.5.1.5 node2 <none> <none>
rs-nginx-mgbjb 1/1 Running 0 6s 10.5.2.3 node3 <none> <none>
[master ~]$ kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
rs-nginx-kq9rj 1/1 Running 0 11s app=webui
rs-nginx-m5c46 1/1 Running 0 11s app=webui
rs-nginx-mgbjb 1/1 Running 0 11s app=webui
[master ~]$ kubectl get replicaset
NAME DESIRED CURRENT READY AGE
rs-nginx 3 3 3 55s
[master ~]$ kubectl get rs
NAME DESIRED CURRENT READY AGE
rs-nginx 3 3 3 61s
# Pod 하나 삭제시
[master ~]$ kubectl delete pod rs-nginx-kq9rj
pod "rs-nginx-kq9rj" deleted
# 새로운 파드 생성 (= 총 갯수 유지)
[master ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
rs-nginx-m5c46 1/1 Running 0 113s
rs-nginx-mgbjb 1/1 Running 0 113s
rs-nginx-tqdgb 1/1 Running 0 6s
# Scale-out/down
[master ~]$ kubectl scale rs rs-nginx --replicas=2
replicaset.apps/rs-nginx scaled
# 컨트롤러를 지우면 연관된 Pod를 같이 지워버린다.
$ kubectl delete rs rs-nginx
# Pod는 놔두고 RS만 지우기를 원할 때
[master ~]$ kubectl delete rs rs-nginx --cascade=false
warning: --cascade=false is deprecated (boolean value) and can be replaced with --cascade=orphan.
replicaset.apps "rs-nginx" deleted
[master ~]$ kubectl get rs
No resources found in default namespace.
[master ~]$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
rs-nginx-m5c46 1/1 Running 0 6m26s app=webui
rs-nginx-mgbjb 1/1 Running 0 6m26s app=webui
# 아무도 컨트롤 하지 않는 단독 Pod로 바뀌었다.
[실습]
[master ~]$ cat > rs-lab.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs-mainui
spec:
replicas: 2
selector:
matchLabels:
app: main
matchExpressions:
- {key: ver, operator: In, values: ["2.2"]}
template:
metadata:
name: apache-pod
labels:
app: main
ver: "2.2"
spec:
containers:
- name: httpd
image: httpd:2.2
ports:
- containerPort: 80
[master ~]$ kubectl create -f rs-lab.yaml
replicaset.apps/rs-mainui created
[master ~]$ kubectl get rs
NAME DESIRED CURRENT READY AGE
rs-mainui 2 2 2 52s
[master ~]$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rs-mainui-b8wlp 1/1 Running 0 44s 10.5.2.5 node3 <none> <none>
rs-mainui-tzltd 1/1 Running 0 44s 10.5.1.6 node2 <none> <none>
[master ~]$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
rs-mainui-b8wlp 1/1 Running 0 60s app=main,ver=2.2
rs-mainui-tzltd 1/1 Running 0 60s app=main,ver=2.2
# 해당 httpd:2.2 컨테이너를 1개로 축소하려면
[master ~]$ kubectl scale rs rs-mainui --replicas=1
replicaset.apps/rs-mainui scaled
[master ~]$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
rs-mainui-tzltd 1/1 Running 0 2m32s app=main,ver=2.2
- yaml파일로 Scale 하기
# yaml 파일 수정 후
$ kubectl replace -f replicaset-definition.yml
# 또는
$ kubectl scale --replicas=6 -f replicaset-definition.yml
$ kubectl scale --replicas=6 replicaset myapp-replicaset
# --------type ---------------name
$ kubectl edit rs new-replica-set
replicaset.apps/new-replica-set edited
반응형
'Container > Kubernetes' 카테고리의 다른 글
[K8S] DaemonSet (0) | 2024.02.26 |
---|---|
[K8S] Deployment - RollingUpdate (0) | 2024.02.21 |
[K8S] ReplicationController (0) | 2024.02.19 |
[K8S] Pod 환경 변수 설정 (0) | 2024.02.19 |
[K8S] Pod Resource 할당 (0) | 2024.02.19 |