Kubernetes 학습(3) - 레이블, 복제 컨트롤러 만들기

11928 단어 kubernetesDocker

개요


이번에 우리는 복제 컨트롤러를 만들고 이와 관련된 라벨을 정리할 것이다.

태그


라벨이 뭐예요?


Kubernetes의 객체(Pod 등)에 첨부할 수 있는 Key/Value 쌍의 문자열은 객체에 메타정보와 같은 정보를 제공할 수 있습니다.여러 개의 Pod이 존재할 때, 각각의 Pod을 표시하여 Pod을 그룹화하거나 특정한 Pod을 추출할 수 있습니다.
예를 들어, 다음과 같은 두 Pod의 정의가 있다고 가정합니다.
pod-with-label1.yaml :
apiVersion: v1
kind: Pod
metadata:
  name: pod1
  labels:
    app: petshop       ← ラベル(Key = app, Value = petshop)
    env: production    ← ラベル(Key = env, Value = production)
spec:
  containers:
    - name: container1
      image: nginx
      ports:
        - containerPort: 80
pod-with-label2.yaml :
apiVersion: v1
kind: Pod
metadata:
  name: pod2
  labels:
    app: petshop     ← ラベル(Key = app, Value = petshop)
    env: staging     ← ラベル(Key = env, Value = staging)
spec:
  containers:
    - name: container2
      image: nginx
      ports:
        - containerPort: 80
이 Pod을 만들면 탭으로 필터링하면서 Pod을 표시합니다.
# Pod の作成
$ kubectl create -f pod-with-label1.yaml
$ kubectl create -f pod-with-label2.yaml

# app=petshop でフィルタ。
# 両方表示される。
$ kubectl get pods -l app=petshop
NAME      READY     STATUS    RESTARTS   AGE
pod1      1/1       Running   0          14s
pod2      1/1       Running   0          12s

# env=production でフィルタ。
# pod1 だけ表示される。
$ kubectl get pods -l env=production
NAME      READY     STATUS    RESTARTS   AGE
pod1      1/1       Running   0          41s

# pod2 のラベルを更新してみる。
# app : petshop → bookstore
# env : staging → production
$ kubectl label --overwrite pods pod2 app=bookstore
$ kubectl label --overwrite pods pod2 env=production

# そして再び env=production でフィルタ。
# 今度は両方表示される。
$ kubectl get pods -l env=production
NAME      READY     STATUS    RESTARTS   AGE
pod1      1/1       Running   0          2m
pod2      1/1       Running   0          1m

# こんな指定も可能。
# app が petshop、bookstore のいずれかに一致するという意味。
$ kubectl get pods -l "app in (petshop, bookstore)"
NAME      READY     STATUS    RESTARTS   AGE
pod1      1/1       Running   0          2m
pod2      1/1       Running   0          2m

# こんな指定も可能。
# app=petshop かつ env=production という意味。
$ kubectl get pods -l app=petshop,env=production
NAME      READY     STATUS    RESTARTS   AGE
pod1      1/1       Running   0          4m

# 次に進む前に、作成した Pod をすべて削除しておく。
$ kubectl delete --all pods

Replication Controller


그럼 본론으로 들어갑니다.

복제 컨트롤러란 무엇입니까?


복제 컨트롤러는 Pod 복제본(복제) 수를 유지하는 데 사용됩니다.
복제 컨트롤러가 템플릿으로 정의된 Pod을 만드는 수량은 지정한 수량과 같습니다.그리고 감시 대상의 Pod 수는 호스트의 고장 등으로 Pod의 수가 줄어들면 다시 만들고, 반대로 너무 많으면 삭제를 통해 Pod를 일정 수량으로 유지한다.따라서 Pod가 하나만 있는 응용 프로그램이라도 복제 컨트롤러를 사용하는 것을 추천합니다.
또한 복제 컨트롤러가 모니터링하는 Pod(컬렉션)은 레이블에 의해 정의됩니다.인상으로 아래 그림과 같은 느낌.이 그림에서 복제 컨트롤러 감시는 app=petshop의 Pod로 표시됩니다.

복제 컨트롤러 생성


그렇다면 실제로 복제 컨트롤러를 만들어 보자.먼저 다음과 같은 YAML을 준비합니다.
rc.yaml :
apiVersion: v1
kind: ReplicationController
metadata:
  name: rc1
spec:
  replicas: 3
  selector:
    app: petshop
  template:
    metadata:
      labels:
        app: petshop
    spec:
      containers:
      - name: container1
        image: nginx
        ports:
        - containerPort: 80
YAML에는 다음과 같은 정보가 들어 있습니다.
  • Replication Controller는 template 아래의 정의에 따라 Pod을 만듭니다. (이 부분은 Pod의 템플릿입니다.)
  • 작성된 Pod에는 태그 app=petshop
  • 이 있습니다.
  • 복제 컨트롤러는 app=petshop의 Pod을 감시 대상으로 지정합니다(selector에 의해 정의됨)
  • Pod의 복제 복제본 수는 3
  • 따라서 Pod에 할당된 탭 (template 아래 정의) 과 복제 컨트롤러가 감시 대상으로 하는 탭 (selector에서 정의) 은 일치해야 합니다.
    이 파일을 사용하면 복제 컨트롤러를 만들 수 있습니다.
    # 作成
    $ kubectl create -f rc.yaml
    
    # Replication Controller が作成されたか確認
    $ kubectl get rc
    CONTROLLER   CONTAINER(S)   IMAGE(S)   SELECTOR      REPLICAS
    rc1          container1     nginx      app=petshop   3
    
    Pod을 보면 app=petshop 탭이 있는 Pod 3개가 만들어졌습니다.또한 -o wide를 지정하면 Pod을 실행하는 호스트의 정보를 표시합니다.
    $ kubectl get pods -l app=petshop -o wide
    NAME        READY     STATUS    RESTARTS   AGE       NODE
    rc1-09r4r   1/1       Running   0          2m        ip-172-20-0-13.ap-northeast-1.compute.internal
    rc1-k2y95   1/1       Running   0          2m        ip-172-20-0-15.ap-northeast-1.compute.internal
    rc1-pldl2   1/1       Running   0          2m        ip-172-20-0-14.ap-northeast-1.compute.internal
    
    여기서 rc1-pldl2 이 Pod을 삭제해 보십시오.그래서 새로운 Pod(rc1-jmwnc에서 새로 만든 Pod)를 만들 수 있습니다.
    # 削除
    $ kubectl delete pods rc1-pldl2
    
    # Pod を表示。新しい Pod(rc1-jmwnc) が作成されていることが分かる。
    $ kubectl get pods -l app=petshop -o wide
    NAME        READY     STATUS    RESTARTS   AGE       NODE
    rc1-09r4r   1/1       Running   0          5m        ip-172-20-0-13.ap-northeast-1.compute.internal
    rc1-jmwnc   0/1       Running   0          4s        ip-172-20-0-14.ap-northeast-1.compute.internal
    rc1-k2y95   1/1       Running   0          5m        ip-172-20-0-15.ap-northeast-1.compute.internal
    
    이어서 Pod(rc1-k2y95)의 라벨을 고의로 변경합니다.그래서 Replication Controller는 app=petshop의 Pod를 하나 줄이고 Pod을 다시 제작한다고 판단했다.
    # ラベルの変更
    $ kubectl label --overwrite pods rc1-k2y95 app=bookstore
    
    # Pod を表示。新しい Pod(rc1-zv5bw) が作成されていることが分かる。
    $ kubectl get pods -l app=petshop -o wide
    NAME        READY     STATUS    RESTARTS   AGE       NODE
    rc1-09r4r   1/1       Running   0          10m       ip-172-20-0-13.ap-northeast-1.compute.internal
    rc1-jmwnc   1/1       Running   0          4m        ip-172-20-0-14.ap-northeast-1.compute.internal
    rc1-zv5bw   1/1       Running   0          23s       ip-172-20-0-14.ap-northeast-1.compute.internal
    
    또한 라벨이 변경된 Pod(rc1-k2y95)는 복제 컨트롤러의 감시 대상에서 벗어났지만 삭제된 것이 아니기 때문에 단독 동작입니다.
    $ kubectl get pods -l app=bookstore -o wide
    NAME        READY     STATUS    RESTARTS   AGE       NODE
    rc1-k2y95   1/1       Running   0          12m       ip-172-20-0-15.ap-northeast-1.compute.internal
    
    이렇게 하면 Replication Controller는 자신이 생성한 Pod의 사활을 추적하기보다는 selector와 일치하는 Pod의 수량을 감시하는 데 불과하다.
    마지막으로 복제 컨트롤러를 삭제합니다.Pod도 모두 삭제되었습니다.
    # Replication Controller を削除
    $ kubectl delete rc rc1
    
    # Pod も削除される
    $ kubectl get pods -l app=petshop -o wide
    NAME      READY     STATUS    RESTARTS   AGE       NODE
    

    웹 페이지 정보

  • Labels & Selectors
  • Replication Controller
  • Kubernetes 201 - Labels, Replication Controllers, Services and Health Checking
  • 좋은 웹페이지 즐겨찾기