ReplicaSet 및 Label

5031 단어 kubectlkubernetes

소개



지난번은 ReplicaSet의 동작을 확인했습니다.
서버가 떨어지고 복제본 수가 줄어들면 셀프 힐링 기능으로 복제본 수를 복구했습니다.
마스터 서버가 복제본 수가 줄어들었음을 감지하고 작업자 노드에 복제본을 늘리도록 지시합니다. 합니다. 포드 수가 아닙니다.
이번에는 이 동작을 확인하고 싶습니다.

ReplicaSet과 Label의 관계



그림으로 쓰면 이런 느낌입니다. 세세하게 쓰면 더 여러가지 있습니다만, 여기에서는 대체로의 이미지가 잡으면.


매니페스트(yaml 파일)라면 "spec.selector.matchLabels"와 "spec.template.metadata.labels"의 설명을 맞춰야 합니다.

sampleReplicaSet.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: sample-pod3
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-redis <----------+
  template:                       |
    metadata:                     | 合わせる必要がある
      labels:                     |
        app: nginx-redis <--------+
    spec:
      containers:
        - name: nginx
          image: nginx:latest
        - name: redis
          image: redis:latest

따라서 라벨 설정이 맞지 않으면 배포할 때 오류가 발생합니다. 이런 식으로.
$ kubectl apply -f sampleReplicaSet-E.yaml
The ReplicaSet "sample-pod3" is invalid: spec.template.metadata.labels: Invalid value: map[string]string{"app":"nginx-redis-e"}: `selector` does not match template `labels`

ReplicaSet과 같은 Label을 Pod로 지정하면 어떻게 될까.



다음은 ReplicaSet에서 지정한 Label과 동일한 Label을 다른 Pod로 지정하여 배포해 봅니다.
먼저 지금의 상태를 확인합니다.
$ kubectl get rs -o wide
NAME          DESIRED   CURRENT   READY   AGE   CONTAINERS    IMAGES                      SELECTOR
sample-pod3   3         3         3       24h   nginx,redis   nginx:latest,redis:latest   app=nginx-redis
$ kubectl get pod -L app
NAME                READY   STATUS    RESTARTS   AGE   APP
sample-pod3-7nxxr   2/2     Running   2          24h   nginx-redis
sample-pod3-ngw8x   2/2     Running   2          23h   nginx-redis
sample-pod3-thbbx   2/2     Running   2          24h   nginx-redis

그런 다음 동일한 레이블을 가진 다음 yaml 파일의 포드를 배포합니다.

nginx_redis.yaml
apiVersion: v1
kind: Pod
metadata:
  name: sample-pod1
  labels:
    app: nginx-redis
spec:
  containers:
    - name: nginx
      image: nginx:latest
    - name: redis
      image: redis:latest
$ kubectl apply -f nginx_redis.yaml
pod/sample-pod1 created
$ kubectl get pod
NAME                READY   STATUS        RESTARTS   AGE
sample-pod1         0/2     Terminating   0          2s
sample-pod3-7nxxr   2/2     Running       2          24h
sample-pod3-ngw8x   2/2     Running       2          23h
sample-pod3-thbbx   2/2     Running       2          24h
$ kubectl get pod
NAME                READY   STATUS    RESTARTS   AGE
sample-pod3-7nxxr   2/2     Running   2          24h
sample-pod3-ngw8x   2/2     Running   2          23h
sample-pod3-thbbx   2/2     Running   2          24h

포드는 배포되지만 Termination 상태에서 즉시 삭제됩니다.
여러 번 시도했지만 항상 새로 배포 한 포드가 삭제되었습니다.

매뉴얼의 기재는 발견되지 않았기 때문에, 항상 이런 일이 Kubernetes의 동작으로서 올바른지까지는 확인할 수 없었습니다만, Label의 설정에 주의할 필요가 있는 것을 알았습니다.
최소한 ReplicaSet에서 사용하는 레이블은 독립적이고 고유해야 합니다.

좋은 웹페이지 즐겨찾기