레플리카셋(Replica Set)
똑같은 pod의 레플리케이션 개수를 관리 및 제어하는 리소스.
보장하는 개수의 기준은 LABELS을 보고 판단한다. NAME이 아님
minikube status
# minikube 의 상태 확인
minikube start
minikube status
# minikube 시작 후 다시 확인
kubectl get pods
# 실행중인 파드 확인
kubectl delets pods <POD_NAME>
# 실행중인 파드 삭제
# pod 삭제 방법1
kubectl delete -f <YAML_FILE_NAME>
# pod 생성
kubectl apply -f <YAML_FILE_NAME>
# pod 삭제 방법2
kubectl delete pods <POD_NAME>
레플리카셋 정의
실습을 위한 세팅 생성 vim replicaset-nginx.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replicaset-nginx
spec:
replicas: 3
selector:
matchLabels:
app: my-nginx-pods-label
template:
metadata:
name: my-nginx-pod
labels:
app: my-nginx-pods-label
spec:
containers:
- name: my-nginx-container
image: nginx:latest
ports:
- containerPort: 80
protocol: TCP
레플리카셋 생성 및 확인
kubectl apply -f replicaset-nginx.yml
kubectl get pod
kubectl get replicase
vagrant@ubuntu:~/kub01$ kubectl get pods
NAME READY STATUS RESTARTS AGE
replicaset-nginx-df4nw 1/1 Running 0 25m
replicaset-nginx-qf8cq 1/1 Running 0 25m
replicaset-nginx-spzvx 1/1 Running 0 25m
vagrant@ubuntu:~/kub01$ kubectl get replicaset
NAME DESIRED CURRENT READY AGE
replicaset-nginx 3 3 3 25m
Pod 개수를 늘려 실행
yml 파일의 spec 어트리뷰트의 replicas 수를 변경
kubectl apply -f YAML_FILE_NAME
레플리카셋을 삭제
레플리카셋을 삭제하면 Pod 도 함께 삭제된다.
kubectl delete replicaset <REPLICASET_NAME>
# 또는
kubectl delete rs <REPLICASET_NAME>
# YAML 파일을 이용한 삭제 방법
kubectl delete -f <YAML_FILE_NAME>
레플리카셋은 셀렉터로 정의한 pod 가 일정 개수가 되도록 유지
- my-nginx-pods-label 라벨을 가지는 파드를 생성
vagrant@ubuntu:~/kub01$ vi nginx-pod-without-rs.yml
`YAML
apiVersion: v1
kind: Pod
metadata:
name: my-nginx-pod
labels:
app: my-nginx-pods-label
spec:
containers:
- name: my-nginx-container
image: nginx:latest
ports:
- containerPort: 80
`
vagrant@ubuntu:~/kub01$ kubectl apply -f nginx-pod-without-rs.yml
pod/my-nginx-pod created
vagrant@ubuntu:~/kub01$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
my-nginx-pod 1/1 Running 0 19s app=my-nginx-pods-label
- my-nginx-pods-label 라벨을 가지는 파드 3개를 생성하는 레플리카셋을 생성
vagrant@ubuntu:~/kub01$ vi replicaset-nginx.yml
```YAML
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replicaset-nginx
spec:
replicas: 3
selector:
matchLabels:
app: my-nginx-pods-label
template:
metadata:
name: my-nginx-pod
labels:
app: my-nginx-pods-label
spec:
containers:
- name: my-nginx-container
image: nginx:latest
ports:
- containerPort: 80
protocol: TCP
vagrant@ubuntu:~/kub01$ kubectl apply -f replicaset-nginx.yml
replicaset.apps/replicaset-nginx created
vagrant@ubuntu:~/kub01$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
my-nginx-pod 1/1 Running 0 4m12s app=my-nginx-pods-label
replicaset-nginx-59992 1/1 Running 0 27s app=my-nginx-pods-label
replicaset-nginx-gbzrr 1/1 Running 0 27s app=my-nginx-pods-label
3. pod 수동으로 삭제해보고 조회
```bash
vagrant@ubuntu:~/kub01$ kubectl delete pods my-nginx-pod
pod "my-nginx-pod" deleted
vagrant@ubuntu:~/kub01$ kubectl get pods
NAME READY STATUS RESTARTS AGE
replicaset-nginx-59992 1/1 Running 0 4m40s
replicaset-nginx-gbzrr 1/1 Running 0 4m40s
replicaset-nginx-vfjqn 1/1 Running 0 14s
- 레플리카셋이 생성한 pod의 라벨 변경
라벨 주석처리 해본다.
vagrant@ubuntu:~/kub01$ kubectl edit pods replicaset-nginx-59992
`YAML
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2020-09-21T02:18:06Z"
generateName: replicaset-nginx-
# labels:
# app: my-nginx-pods-label
name: replicaset-nginx-59992
<이하생략>
`
vagrant@ubuntu:~/kub01$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
replicaset-nginx-59992 1/1 Running 0 9m31s <none>
replicaset-nginx-bhz8w 1/1 Running 0 56s app=my-nginx-pods-label
replicaset-nginx-gbzrr 1/1 Running 0 9m31s app=my-nginx-pods-label
replicaset-nginx-vfjqn 1/1 Running 0 5m5s app=my-nginx-pods-label
- 레플리카셋 삭제
결과 예상 : 같은 라벨 pod 삭제
vagrant@ubuntu:~/kub01$ kubectl get replicaset
NAME DESIRED CURRENT READY AGE
replicaset-nginx 3 3 3 12m
vagrant@ubuntu:~/kub01$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
replicaset-nginx-59992 1/1 Running 0 12m <none>
replicaset-nginx-bhz8w 1/1 Running 0 3m49s app=my-nginx-pods-label
replicaset-nginx-gbzrr 1/1 Running 0 12m app=my-nginx-pods-label
replicaset-nginx-vfjqn 1/1 Running 0 7m58s app=my-nginx-pods-label
vagrant@ubuntu:~/kub01$ kubectl delete replicasets replicaset-nginx
replicaset.apps "replicaset-nginx" deleted
vagrant@ubuntu:~/kub01$ kubectl get replicaset
No resources found in default namespace.
vagrant@ubuntu:~/kub01$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
replicaset-nginx-59992 1/1 Running 0 13m <none>
- 라벨이 삭제된 파드는 직접 삭제
vagrant@ubuntu:~/kub01$ kubectl delete pods replicaset-nginx-59992
pod "replicaset-nginx-59992" deleted
vagrant@ubuntu:~/kub01$ kubectl get pods --show-labels
No resources found in default namespace.
반응형