ReplicaSet 및 Label
5031 단어 kubectlkubernetes
소개
지난번은 ReplicaSet의 동작을 확인했습니다.
서버가 떨어지고 복제본 수가 줄어들면 셀프 힐링 기능으로 복제본 수를 복구했습니다.
마스터 서버가 복제본 수가 줄어들었음을 감지하고 작업자 노드에 복제본을 늘리도록 지시합니다. 합니다. 포드 수가 아닙니다.
이번에는 이 동작을 확인하고 싶습니다.
ReplicaSet과 Label의 관계
그림으로 쓰면 이런 느낌입니다. 세세하게 쓰면 더 여러가지 있습니다만, 여기에서는 대체로의 이미지가 잡으면.
매니페스트(yaml 파일)라면 "spec.selector.matchLabels"와 "spec.template.metadata.labels"의 설명을 맞춰야 합니다.
sampleReplicaSet.yamlapiVersion: 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.yamlapiVersion: 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에서 사용하는 레이블은 독립적이고 고유해야 합니다.
Reference
이 문제에 관하여(ReplicaSet 및 Label), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/dingtianhongjie/items/9021812887450fa84e65
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
그림으로 쓰면 이런 느낌입니다. 세세하게 쓰면 더 여러가지 있습니다만, 여기에서는 대체로의 이미지가 잡으면.
매니페스트(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에서 사용하는 레이블은 독립적이고 고유해야 합니다.
Reference
이 문제에 관하여(ReplicaSet 및 Label), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/dingtianhongjie/items/9021812887450fa84e65텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)