Kubernetes 배포 대 StatefulSet
저는 쿠 버네 티스에 대해 많은 것을 파헤쳐 왔고, 제가 많이 보는 것을 좋아합니다! 내가 명확하게 알 수 없었던 한 가지는 Deployment와 StatefulSet 리소스 간의 정확한 차이점과 각각을 사용하는 시나리오 (또는 일반적으로 선호되는 시나리오)입니다.
사람들이 공유 할 수있는 모든 경험은 굉장 할 것입니다 !!
배포 및 ReplicationController는 상태 비 저장 사용을위한 것이며 다소 가볍습니다. StatefulSet 는 상태를 유지해야 할 때 사용됩니다. 따라서 후자 volumeClaimTemplates
는 영구 볼륨에 / 클레임을 사용 하여 구성 요소가 다시 시작되는 동안 상태를 유지할 수 있도록합니다.
따라서 애플리케이션이 상태 저장이거나 Kubernetes 위에 상태 저장 스토리지를 배포하려는 경우 StatefulSet을 사용합니다.
애플리케이션이 상태 비 추적이거나 시작 중에 백엔드 시스템에서 상태를 빌드 할 수있는 경우 배포를 사용합니다.
상태 저장 애플리케이션 실행에 대한 자세한 내용은 상태 저장 애플리케이션에 대한 2016 kubernetes의 블로그 항목 에서 찾을 수 있습니다.
배포- 모든 포드 복제본에서 공유 하는 PersistentVolumeClaim 을 지정합니다 . 즉, 공유 볼륨입니다.
두 개 이상의 복제본 포드가있는 경우 백업 스토리지에는 분명히 ReadWriteMany 또는 ReadOnlyMany accessMode 가 있어야합니다 .
StatefulSet- 각 복제본 포드가 연결된 고유 한 PersistentVolumeClaim을 가져 오도록 volumeClaimTemplates를 지정 합니다. 즉, 공유 볼륨이 없습니다.
여기서 백업 저장소는 ReadWriteOnce accessMode를 가질 수 있습니다 .
StatefulSet은 클러스터에서 실행하는 데 유용합니다 (예 : Hadoop 클러스터, MySQL 클러스터). 여기서 각 노드에는 자체 스토리지가 있습니다.
각 노드가 영구 상태를 가져야하고 구성 (복제본 = 'X')을 통해 임의의 수의 노드를 구성 할 수 있어야하는 분산 응용 프로그램에서 'StatefulSet'을 사용합니다.
마스터-마스터 구성의 모든 노드와 마스터-슬레이브 구성의 슬레이브 노드는 서비스와 함께 StatefulSet를 사용할 수 있습니다. 마스터 노드 (예 : 마스터, 마스터-보조)는 각각 서비스와 함께 일부 영구 볼륨이있는 포드 일 수 있습니다. 이러한 노드는 확장 또는 축소 할 필요가 없기 때문입니다. 복제본 = 1 인 StatefulSet 일 수도 있습니다.
StatefulSet의 예는 다음과 같습니다.
-Hadoop 클러스터 (마스터-슬레이브)의
데이터 노드 ( 슬레이브)-Cassandra 클러스터의 데이터베이스 노드 (마스터-마스터)
StatefulSet의 각 Pod (복제본)에는
-고유하고 안정적인 네트워크 ID가 있습니다
. Kubernetes는 각 VolumeClaimTemplate에 대해 하나의 PersistentVolume을 생성합니다.
https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
반면 '배포'는 노드에 특별한 ID가 필요하지 않고 (로드 밸런서가 선택한 노드에 도달 할 수 있음) 노드 수가 임의의 수인 상태 비 저장 애플리케이션 / 서비스에 적합합니다.
TL; DR
배포는 상태 비 저장 애플리케이션을 배포하기위한 리소스입니다. PVC를 사용하는 경우 모든 복제본이 동일한 볼륨을 사용하고 어느 것도 자체 상태를 갖지 않습니다.
Statefulsets는 Stateful 애플리케이션에 사용되며 포드의 각 복제본은 자체 상태를 가지며 자체 볼륨을 사용합니다.
DaemonSet은 포드가 클러스터의 모든 노드에서 실행되도록하는 컨트롤러입니다. 클러스터에서 노드가 추가 / 제거되면 DaemonSet이 자동으로 포드를 추가 / 삭제합니다.
Deployments, StatefulSets & Daemonsets 간의 자세한 차이점과 이러한 리소스 K8 : Deployments vs StatefulSets vs DaemonSets를 사용하여 샘플 애플리케이션을 배포하는 방법에 대해 작성했습니다 .
StatefulSet와 배포의 차이점
StatefulSet는 특수 배포와 동일합니다. StatefulSet의 각 포드에는 클러스터의 다른 구성원을 검색하는 데 사용할 수있는 안정적이고 고유 한 네트워크 식별자가 있습니다. StatefulSet의 이름이 Kafka이면 첫 번째 pod는 Kafka-0, 두 번째 Kafka-1 등이됩니다. StatefulSet에 의해 제어되는 pod 사본의 시작 및 중지 시퀀스가 제어됩니다. n 번째 포드가 작동되면 첫 번째 N-1 포드가 이미 실행 중이고 준비 상태가 양호합니다. StatefulSet의 포드는 PV 또는 PVC로 구현 된 안정적인 영구 저장소 볼륨을 사용합니다. 포드를 삭제할 때 StatefulSet과 연결된 스토리지 볼륨은 기본적으로 삭제되지 않습니다 (데이터 보안을 위해). StatefulSet은 PV 볼륨에 바인딩되도록 바인딩됩니다. 포드 상태 데이터를 저장하는 데 사용되며 해당 헤드리스 서비스에 속하는 것으로 선언 된 헤드리스 서비스와 함께 사용됩니다.
참고 URL : https://stackoverflow.com/questions/41583672/kubernetes-deployments-vs-statefulsets
'programing tip' 카테고리의 다른 글
CSS 클래스 명명 규칙 (0) | 2020.11.18 |
---|---|
knockout.js가 소규모 프로젝트에는 더 좋고, 대규모 프로젝트에는 backbone.js라는 평판이있는 이유는 무엇입니까? (0) | 2020.11.18 |
LINQ에서 하위 쿼리를 수행하는 방법은 무엇입니까? (0) | 2020.11.18 |
접기가있는 notepad ++ 사용자 정의 영역 (0) | 2020.11.18 |
Action에서 매개 변수를 어떻게 전달할 수 있습니까? (0) | 2020.11.18 |