ReplicaSet의 동작 확인
6365 단어 kubectlkubernetes
소개
Pod의 성능과 가용성을 높이기 위해 Kubernetes는 기본적으로 "스케일 아웃"합니다. 스케일 아웃은 노드(여기에서는 Pod/컨테이너)의 CPU/메모리를 늘리는 것이 아니라, 노드(Pod/컨테이너)를 늘립니다.
덧붙여서, CPU나 메모리를 늘리는 것은 「스케일 업」.
이 스케일 아웃의 구조로서 ReplicaSet가 있으므로, 이번에는이 동작을 확인해 보겠습니다.
ReplicaSet 만들기
다음 yaml 파일을 만들었습니다.
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.yaml
replicaset.apps/sample-pod3 created
여기에서는 한 번에 배포할 수 있게 되어 있지만 실제로는 yaml 파일의 실수로 여러 번 오류가 발생합니다.
· 맞춤법 오류
· 들여 쓰기가 잘못되었습니다.
yaml의 서식에도 익숙해지지 않으면.
확인
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
sample-pod3 3 3 3 16m
$ kubectl get replicasets.apps -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
sample-pod3 3 3 3 16m nginx,redis nginx:latest,redis:latest app=nginx-redis
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sample-pod3-7nxxr 2/2 Running 0 18m 192.168.69.216 k8s-worker02 <none> <none>
sample-pod3-86kqh 2/2 Running 0 18m 192.168.79.74 k8s-worker01 <none> <none>
sample-pod3-thbbx 2/2 Running 0 18m 192.168.69.202 k8s-worker02 <none> <none>
sample-pod3의 복제본이 3개 만들어졌는지 확인할 수 있습니다.
Pod 이름은 "[metadata.name]-[랜덤 영숫자]"입니다.
그건 그렇고, 복제 세트를 확인하는 부속 명령의 'rs'와 'replicasets.apps'는 같은 의미입니다.
포드가 배포되는 worker 노드도 분산되어 있습니다.
그림으로 쓰면 이런 느낌입니다.
셀프 힐링 기능 확인
Kubernetes의 특징으로 셀프 힐링 기능이 있습니다. 이것은 뭔가 장애가 발생했을 경우에도 미리 설정되어 있는 「어야 할 모습」으로 되돌리는 기능입니다.
이 경우의 "해야 할 모습"은 sample-pod3의 복제본이 세 가지라는 것입니다.
작업자 노드 중지
여기서 worker01을 중지합니다. shutdown 할 뿐이므로 할애.
상태를 확인합니다. worker01이 NotReady입니다.
$ kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 11d v1.17.3
k8s-worker01 NotReady <none> 11d v1.17.3
k8s-worker02 Ready <none> 11d v1.17.3
ReplicaSet 확인
중지하고 조금 기다린 다음 상태를 확인합니다.
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sample-pod3-7nxxr 2/2 Running 0 66m 192.168.69.216 k8s-worker02 <none> <none>
sample-pod3-86kqh 2/2 Terminating 0 66m 192.168.79.74 k8s-worker01 <none> <none>
sample-pod3-ngw8x 2/2 Running 0 20m 192.168.69.217 k8s-worker02 <none> <none>
sample-pod3-thbbx 2/2 Running 0 66m 192.168.69.202 k8s-worker02 <none> <none>
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
sample-pod3 3 3 3 70m
worker01에 있던 「sample-pod3-86kqh」가 「Terminating」상태가 되어, 새롭게 「sample-pod3-ngw8x」가 worker02에 배치되고 있습니다.
새로 만들어진 곳이 포인트로 Active-Standby와 같은 데이터를 이어받은 페일오버가 아닌 새로운 Pod가 배포되고 있습니다. 즉, 지금까지 worker01에서 처리된 데이터는 인계되지 않았습니다.
Kubernetes에서 제공하는 마이크로서비스는 이러한 방식으로 데이터를 유지하지 않는 '상태가 없는' 앱을 기반으로 합니다.
이를 위해 유지해야 하는 데이터나 로그 등은 다른 볼륨에 저장하기 때문에 이 근처는 또 조사하고 싶습니다.
또한 Pod 배포의 이력은 아래에서 확인할 수 있습니다.
$ kubectl describe rs sample-pod3
Name: sample-pod3
・・・
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 49m replicaset-controller Created pod: sample-pod3-thbbx
Normal SuccessfulCreate 49m replicaset-controller Created pod: sample-pod3-86kqh
Normal SuccessfulCreate 49m replicaset-controller Created pod: sample-pod3-7nxxr
Normal SuccessfulCreate 3m30s replicaset-controller Created pod: sample-pod3-ngw8x
이 Terminating이 되어 있는 Pod는 delete로 지우면 좋다.
쿠베르 자고 s. 이오
$ kubectl delete pod sample-pod3-86kqh
pod "sample-pod3-86kqh" deleted
어쨌든, 사용할 수 없게 된 Pod의 delete까지 해 주면 좋은 생각이 듭니다만, 뭔가 이유라도 있는 것일까?
이제 일단 ReplicaSet의 동작을 확인할 수 있었습니다. ReplicaSet은 Kubernetes를 사용하는 데 중요한 요소라고 생각하기 때문에 좀 더 알아보고 싶습니다.
Reference
이 문제에 관하여(ReplicaSet의 동작 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/dingtianhongjie/items/1e90b48c0cdd79e3311e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
다음 yaml 파일을 만들었습니다.
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.yaml
replicaset.apps/sample-pod3 created
여기에서는 한 번에 배포할 수 있게 되어 있지만 실제로는 yaml 파일의 실수로 여러 번 오류가 발생합니다.
· 맞춤법 오류
· 들여 쓰기가 잘못되었습니다.
yaml의 서식에도 익숙해지지 않으면.
확인
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
sample-pod3 3 3 3 16m
$ kubectl get replicasets.apps -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
sample-pod3 3 3 3 16m nginx,redis nginx:latest,redis:latest app=nginx-redis
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sample-pod3-7nxxr 2/2 Running 0 18m 192.168.69.216 k8s-worker02 <none> <none>
sample-pod3-86kqh 2/2 Running 0 18m 192.168.79.74 k8s-worker01 <none> <none>
sample-pod3-thbbx 2/2 Running 0 18m 192.168.69.202 k8s-worker02 <none> <none>
sample-pod3의 복제본이 3개 만들어졌는지 확인할 수 있습니다.
Pod 이름은 "[metadata.name]-[랜덤 영숫자]"입니다.
그건 그렇고, 복제 세트를 확인하는 부속 명령의 'rs'와 'replicasets.apps'는 같은 의미입니다.
포드가 배포되는 worker 노드도 분산되어 있습니다.
그림으로 쓰면 이런 느낌입니다.
셀프 힐링 기능 확인
Kubernetes의 특징으로 셀프 힐링 기능이 있습니다. 이것은 뭔가 장애가 발생했을 경우에도 미리 설정되어 있는 「어야 할 모습」으로 되돌리는 기능입니다.
이 경우의 "해야 할 모습"은 sample-pod3의 복제본이 세 가지라는 것입니다.
작업자 노드 중지
여기서 worker01을 중지합니다. shutdown 할 뿐이므로 할애.
상태를 확인합니다. worker01이 NotReady입니다.
$ kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 11d v1.17.3
k8s-worker01 NotReady <none> 11d v1.17.3
k8s-worker02 Ready <none> 11d v1.17.3
ReplicaSet 확인
중지하고 조금 기다린 다음 상태를 확인합니다.
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sample-pod3-7nxxr 2/2 Running 0 66m 192.168.69.216 k8s-worker02 <none> <none>
sample-pod3-86kqh 2/2 Terminating 0 66m 192.168.79.74 k8s-worker01 <none> <none>
sample-pod3-ngw8x 2/2 Running 0 20m 192.168.69.217 k8s-worker02 <none> <none>
sample-pod3-thbbx 2/2 Running 0 66m 192.168.69.202 k8s-worker02 <none> <none>
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
sample-pod3 3 3 3 70m
worker01에 있던 「sample-pod3-86kqh」가 「Terminating」상태가 되어, 새롭게 「sample-pod3-ngw8x」가 worker02에 배치되고 있습니다.
새로 만들어진 곳이 포인트로 Active-Standby와 같은 데이터를 이어받은 페일오버가 아닌 새로운 Pod가 배포되고 있습니다. 즉, 지금까지 worker01에서 처리된 데이터는 인계되지 않았습니다.
Kubernetes에서 제공하는 마이크로서비스는 이러한 방식으로 데이터를 유지하지 않는 '상태가 없는' 앱을 기반으로 합니다.
이를 위해 유지해야 하는 데이터나 로그 등은 다른 볼륨에 저장하기 때문에 이 근처는 또 조사하고 싶습니다.
또한 Pod 배포의 이력은 아래에서 확인할 수 있습니다.
$ kubectl describe rs sample-pod3
Name: sample-pod3
・・・
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 49m replicaset-controller Created pod: sample-pod3-thbbx
Normal SuccessfulCreate 49m replicaset-controller Created pod: sample-pod3-86kqh
Normal SuccessfulCreate 49m replicaset-controller Created pod: sample-pod3-7nxxr
Normal SuccessfulCreate 3m30s replicaset-controller Created pod: sample-pod3-ngw8x
이 Terminating이 되어 있는 Pod는 delete로 지우면 좋다.
쿠베르 자고 s. 이오
$ kubectl delete pod sample-pod3-86kqh
pod "sample-pod3-86kqh" deleted
어쨌든, 사용할 수 없게 된 Pod의 delete까지 해 주면 좋은 생각이 듭니다만, 뭔가 이유라도 있는 것일까?
이제 일단 ReplicaSet의 동작을 확인할 수 있었습니다. ReplicaSet은 Kubernetes를 사용하는 데 중요한 요소라고 생각하기 때문에 좀 더 알아보고 싶습니다.
Reference
이 문제에 관하여(ReplicaSet의 동작 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/dingtianhongjie/items/1e90b48c0cdd79e3311e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 11d v1.17.3
k8s-worker01 NotReady <none> 11d v1.17.3
k8s-worker02 Ready <none> 11d v1.17.3
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sample-pod3-7nxxr 2/2 Running 0 66m 192.168.69.216 k8s-worker02 <none> <none>
sample-pod3-86kqh 2/2 Terminating 0 66m 192.168.79.74 k8s-worker01 <none> <none>
sample-pod3-ngw8x 2/2 Running 0 20m 192.168.69.217 k8s-worker02 <none> <none>
sample-pod3-thbbx 2/2 Running 0 66m 192.168.69.202 k8s-worker02 <none> <none>
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
sample-pod3 3 3 3 70m
$ kubectl describe rs sample-pod3
Name: sample-pod3
・・・
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 49m replicaset-controller Created pod: sample-pod3-thbbx
Normal SuccessfulCreate 49m replicaset-controller Created pod: sample-pod3-86kqh
Normal SuccessfulCreate 49m replicaset-controller Created pod: sample-pod3-7nxxr
Normal SuccessfulCreate 3m30s replicaset-controller Created pod: sample-pod3-ngw8x
$ kubectl delete pod sample-pod3-86kqh
pod "sample-pod3-86kqh" deleted
Reference
이 문제에 관하여(ReplicaSet의 동작 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/dingtianhongjie/items/1e90b48c0cdd79e3311e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)