레플리카셋(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 가 일정 개수가 되도록 유지

  1. 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
  1. 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
  1. 레플리카셋이 생성한 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
  1. 레플리카셋 삭제

결과 예상 : 같은 라벨 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>
  1. 라벨이 삭제된 파드는 직접 삭제
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.
반응형

+ Recent posts