[Kubernetes Study] Rolling Update and Rollbacks

Rollout 사용자는 Application의 revision 업데이트를 rollout을 통해 수행할 수 있다. Deployment로 배치된 Application의 rollout예시는 다음과 같다. apiVersion:apps/v1kind:Deploymentmetadata:name:myapp-deploymentlabels:app:myapptype:front-endspec:template:metadata:name:myapp-podlabels:app:myapptype:front-endspec:containers:- name:nginx-containerimage:nginxreplicas:3selector:matchLabels:type:front-endRollout Strategy 새로운 Revision 배포방법들은 다양하다 Recrease 현재 버전의 Pod instance를 모두 삭제하고 새로운 Revision application으로 구성한다. 이 경우 이전 버전의 Pod instance들이 모두 삭제되고 새로운 Revision application이 배치될 때 까지 서비스 장애가 발생한다. Rolling Update 구 버전 Pod를 하나 삭제하고 Revision Pod를 새롭게 생성한다. 이 과정을 Pod의 개수만큼 수행하면 Pod가 없어 서비스를 제공하지 못하는 장애는 발생하지 않는다....

February 29, 2024 · 3 min · 551 words · Me

[Kubernetes Study] Monitor Cluster Components and Application Logs

Monitor k8s의 Monitoring 지표들은 다양하다. 다음의 k8s는 다음과 같은 지표들을 확인할 수 있다. 노드 레벨의 통계: 클러스터를 구성하는 노드의 개수 및 상태 성능지표: CPU, 메모리 사용량, 디스크, 네트워크 I/O Pod 레벨지표: Pod의 개수, Pod의 자원 사용량 등 이처럼 다양한 성능지표들을 모니터링 할 수 있으나 중앙화된 관리와 해당 정보를 가공할 수 있는 솔루션이 필요하다. k8s에는 default로 탑재되는 모니터링 솔루션이 없지만 오픈소스로 공개된 다양한 솔루션들으 있으며 사용할 수 있다. 예를들면 Prometheus, Elastic Stack, Datadog, dynatrace등이 있다....

February 27, 2024 · 3 min · 455 words · Me

[Kubernetes Study] Scheduler configuration

스케쥴러는 사용자가 정의한 리소스와 설정에 따라 Pod들을 배치한다. 스케쥴러는 Scheduling, Filtering, Scoring 과정을 거치며 Pod들을 배치한다. Scheduling(PrioritySort) Pod 생성 요청들을 queue삽입하며, PriorityClass에 기반한 정렬이 이루어짐 Filtering(NodeResourceFit) Pod가 배치되는 노드들을 filtering한다. Requests/Limits 설정에 따라 부족한 리소스를 갖는 노드들은 filter out된다. Scoring(NodeResourceFit) 배치 가능한 노드들에 대해 점수를 매긴다. 일반적으로 현재 요청된 Pod를 배치한 후 남은 리소스가 높을 수록 높은 점수를 받는다. Binding 선택된 노드에 Pod를 배치하는 단계....

February 25, 2024 · 2 min · 240 words · Me

[Kubernetes Study] Multiple Schedulers

Scheduler Kubernetes cluster의 default scheduler는 nodes들 전반에 걸쳐서 어떻게 Pod를 배치할지 결정하는 역할을 한다. 각 node들의 상태와 affinity, tolerations, taints, selector등의 조건들을 기준으로 Pod의 배치를 결정한다. 하지만 kubernetes가 제공하는 조건들 외에 추가적인 조건을 확인해야 한다면? 사용자가 원하는 스케쥴러를 사용할 수 있다. Multiple scheduler 사용자는 기본 스케쥴러 대신에 새로운 스케쥴러를 만들어 기본 스케쥴러를 대체하거나 사용자가 만든 스케쥴러를 추가로 배치할 수 있다. 사용자는 Pod가 배치될 때 스케쥴러를 지정할 수 있다. kubernetes의 기본 스케쥴러는 kube-scheduler이며, 사용자가 생성한 스케쥴러는 이름이 고유해야한다....

February 25, 2024 · 2 min · 354 words · Me

[Kubernetes Study] DaemonSets

DaemonSet DaemonSet는 Deployment와 유사한 object로 여러 여러 pod들의 집합이다. 하지만 가장 큰 차이는 Pod instance는 노드 별 하나만 설치된다는 점이다. 이는 새로운 노드가 클러스터에 추가되는 것도 포함하며, 신규 노드가 join 시 Daemon Sets는 해당 Pod를 노드에 추가한다. 위와 같은 특징으로 Daemon Sets는 각 노드별로 배치되어야 하는 기능에 사용 가능하다. 예를 들면 노드 별 네트워크 I/O를 모니터링 하는 agent들을 배치할 수 있다. 이처럼 노드 별 agent가 필요로 하는 서비스를 배치한다면 centralized service에서는 노드의 추가, 삭제등의 동작을 DaemonSet에 일임할 수 있다....

January 30, 2024 · 1 min · 88 words · Me