본문 바로가기

Kubernetes

[Kubernetes] ReplicaSet(ReplicationController와의 차이점은?) 쿠버네티스 pod 개수 보장

반응형

Replicaset

 - ReplicationController와 같은 역할을 하는 컨트롤러(Pod의 개수 보장)

 - ReplicationController 보다 풍부한 selector

    selector

      matchLabels:

        component: redis

      matchExpressions:

        - {key: tier, operator: In, values: [cache]}

        - {key: enviroment, operator: NotIn, values: [dev]}

 - matchExpressions 연산자

  . In : key와 values를 지정하여 key, value가 일치하는 Pod만 연결

  . NotIn : key는 일치하고 value는 일치하지 않는 Pod에 연결

  . Exists : key에 맞는 label의 pod를 연결

  . DoesNotExist : key와 다른 label의 pod를 연결

 

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

 

위의 rs-nginx.yaml 실행 후 replicaset 확인

kubectl create -f rs-nginx.yaml
replicaset.apps/rs-nginx created

kubectl get pods --show-labels
NAME             READY   STATUS    RESTARTS   AGE   LABELS
rs-nginx-f95zx   1/1     Running   0          19s   app=webui
rs-nginx-lzpkp   1/1     Running   0          19s   app=webui
rs-nginx-nrk77   1/1     Running   0          19s   app=webui

kubectl get replicasets
NAME       DESIRED   CURRENT   READY   AGE
rs-nginx   3         3         3       36s

kubectl get rs
NAME       DESIRED   CURRENT   READY   AGE
rs-nginx   3         3         3       39s

 

rs-nginx pod 삭제시 가장 최근에 생성된 pod가 생성되지만 replicaset 이 3으로 설정되어 있기 때문에 pod 다시 생성

kubectl delete pod rs-nginx-f95zx
pod "rs-nginx-f95zx" deleted

kubectl get pods -o wide
NAME             READY   STATUS    RESTARTS   AGE   IP          NODE                NOMINATED NODE   READINESS GATES
rs-nginx-lzpkp   1/1     Running   0          72s   10.44.0.1   node2.example.com   <none>           <none>
rs-nginx-mwdpr   1/1     Running   0          4s    10.36.0.2   node1.example.com   <none>           <none>
rs-nginx-nrk77   1/1     Running   0          72s   10.44.0.2   node2.example.com   <none>           <none>

 

replicas 설정을 3 → 2개로 수정

scale rs rs-nginx --replicas=2
replicaset.apps/rs-nginx scaled

kubectl get pods -o wide
NAME             READY   STATUS    RESTARTS   AGE    IP          NODE                NOMINATED NODE   READINESS GATES
rs-nginx-lzpkp   1/1     Running   0          101s   10.44.0.1   node2.example.com   <none>           <none>
rs-nginx-nrk77   1/1     Running   0          101s   10.44.0.2   node2.example.com   <none>           <none>

 

pod 는 유지하고 replicaset 만 삭제를 원할 경우 --cascade=false 옵션을 추가하여 실행

※ --cascade=false 옵션 : 연쇄 삭제 기능을 비활성화. (default=true)

# 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

kubectl get rs
No resources found in default namespace.

# kubectl get pods--show-labels
error: the server doesn't have a resource type "pods--show-labels"

# kubectl get pods --show-labels
NAME             READY   STATUS    RESTARTS   AGE     LABELS
rs-nginx-lzpkp   1/1     Running   0          3m32s   app=webui
rs-nginx-nrk77   1/1     Running   0          3m32s   app=webui

 

 

[참고]

- https://www.youtube.com/watch?v=78QmQdjovCc&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=18

반응형