본문 바로가기

Kubenetes/Kubernetes Controller

레플리카셋(Replicaset)

[레플리케이션컨트롤러 & 레플리카셋 차이]

 

- 레플리카셋은 레플리케이션컨트롤러와 똑같이 동작하지만 더 풍부한 표현식 포드 셀렉터를 갖음

 

- 단일 레플리케이션컨트롤러는

 

   ㅁ 레플리케이션컨트롤러의 라벨. 셀렉터는 특정 라벨을 포함하는 포드가 일치하는지만 본다

   ㅁ 포드를 라벨 env=production 및 라벨 env=devel과 동시에 일치 불가

    ㅁ 라벨키가 있는 경우에만 포드와 일치

 

- 레플리카셋

 

   ㅁ 레플리카셋의 셀렉터는 특정 라벨이 없거나 해당 값과 관계없이 특정 라벨 키를 포함하는 포드를 매치하는지 본다.

   ㅁ 단일 레플리카셋은 두 포드의 세트와 일치 가능하며 단일 포드로 취급 가능

   ㅁ 레플리카셋은 라벨키가 없어도 일치 가능 (라벨을 포함하는 모든 포드를 env=*로 생각할 수 있는)

 

[레플리카셋 정의]

 

kubi-replicaset.yaml

apiVersion: app/v1beta2
kind: replicaset
metadata:
    name: kubia
spec:
    replicas: 3
    selector:
        metachLabels: 
            app: kubia
    template:
        metadata:
            labels:
               app: kubia
            spec:
               containers:
               - name: kubia
                 image: luksa/kubia

 

유일한 차이점은 셀렉터이다. selector 속성 바로 아래에 있어야 하는 라벨을 나열하는 대시 selector.matchLabels 아래에 지정

 

[레플리카셋 생성 및 검사]

 

레플리카셋을 나타내는 rs 줄임 명령을 사용

 

$ kubectl get rs

 

$ kubectl describe rs

Name:              kubia
Namespace:         default
Selector:          app=kubia
Labels:            app=kubia
Annotations:       <none>
Replicas:          3 current / 3 desired
Pods Status:       3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
    Labels:        app=kubia
    Containers:    ...
    Volumes:       <none>
Evnets:            <none>

 

[풍부한 라벨 셀렉터 사용하기]

 

matchExpresson 속성을 사용하도록 selector를 다시 작성한다.

kubia-replicaset-matchexpressions.yaml

selector:
    matchExpressions:
       - key: app         # 이 셀렉터는 포드에 "app" 키가 있는 라벨을 포함해야 한다.
         operator: In
         values:
           - kubia        # 라벨의 값은 "kubia" 여야 한다.

 

ㅁ In: 라벨의 값이 지정된 값 중 하나와 일치해야 한다.

 ㅁ NotIn: 라벨의 값이 지정된 값과 일치해서는 안된다.

 ㅁ Exists: 포드에는 지정된 키가 있는 라벨이 포함되어야 한다.(값은 중요하지 않음). 이 연산자를 사용할 때 값 필드를 지정하면 안됨

 ㅁ DoesNotExist: 포드에는 지정된 키가 있는 라벨을 포함하면 안된다. values 속성을 지정하면 안된다. 여러 표현식을 지정하면 셀렉터가 포드와 일치하도록 모든 표현식이 true로 평가돼야 한다.

 

[레플라카셋 정리]

 

$ kubectl delete rs kubia

replicaset "kubia" deleted

 

레플리카셋을 삭제하면 모든 포드를 삭제해야 함.