1. Auto Healing
1) 개념
- Kubernetes 클러스터 내에서 실행되는 컨테이너나 노드가 실패했을 때, 시스템이 자동으로 이를 감지하고 복구하는 기능
2) 사용
- 애플리케이션이 실패하거나 예상치 못한 오류가 발생했을 때 사용
3) 작동 방식
- Kubernetes의 Health Checks를 통해 애플리케이션의 상태를 지속적으로 모니터링
- 문제가 감지되면, 시스템은 자동으로 문제가 있는 컨테이너를 재시작하거나 교체
(1) Health Checks
- Health Checks는 Kubernetes 클러스터 내에서 실행 중인 컨테이너의 상태를 모니터링하고, 문제가 발생했을 때 적절한 조치를 취하는 데 중요한 역할을 함
- 주로 두 가지 유형의 프로브(Probe)를 사용 - Liveness Probe, Readiness Probe
- "Probe"는 컨테이너의 상태를 체크하는데 사용되는 진단 도구
- 이를 통해 Kubernetes는 컨테이너가 정상적으로 작동하고 있는지, 그리고 요청을 처리할 준비가 되었는지를 확인
- Probe의 설정은 Kubernetes의 Pod 설정 파일 안에서 정의되며, HTTP 요청, TCP 소켓 체크, 또는 특정 커맨드 실행을 통해 구성될 수 있음
- Liveness Probe
- 컨테이너가 정상적으로 작동하고 있는지 확인
- 만약 컨테이너가 죽었거나 응답하지 않는 상태가 되면, Kubernetes는 이를 감지하고 컨테이너를 자동으로 재시작
- ex. 컨테이너 내부의 애플리케이션이 데드락에 빠져 응답하지 않는 경우, Liveness Probe가 이를 감지하고 컨테이너를 재시작하여 문제를 해결할 수 있음
- Readiness Probe
- 컨테이너가 요청을 처리할 준비가 되었는지 확인
- 이는 컨테이너가 시작되고 네트워크 트래픽을 수신할 준비가 되었는지를 판단하는 데 사용
- ex. 애플리케이션이 시작되어도 초기화 과정이 필요한 경우, Readiness Probe는 초기화가 완료될 때까지 트래픽을 해당 컨테이너로 보내지 않음
- Startup Probe
- 시작 시간이 긴 컨테이너가 성공적으로 시작되었는지 확인하는 데 사용
- Liveness Probe와 Readiness Probe가 너무 일찍 개입하여 컨테이너를 잘못 재시작하는 것을 방지
- Liveness Probe
- Health Checks의 구성은 YAML 파일 내에서 컨테이너 스펙에 정의되며, HTTP 요청, TCP 소켓 체크, 또는 특정 커맨드 실행을 통해 수행
4) 구현 방식
- Liveness와 Readiness 프로브를 설정하여 컨테이너의 상태를 확인
2. Auto Scaling
1) 개념
- 애플리케이션의 부하에 따라 자동으로 컨테이너의 수를 조정하는 기능
- 수요에 따라 리소스를 적절하게 할당하여 성능을 최적화
2) 사용
- 트래픽이나 작업 부하가 증가하거나 감소할 때 사용
3) 작동 방식
- Metrics Server를 사용하여 클러스터의 리소스 사용량을 모니터링
- 클러스터 내부의 리소스 사용량 데이터(예: CPU, 메모리 사용량)를 수집하는 쿠버네티스의 클러스터 수준 모니터링 툴
- 이 데이터는 Horizontal Pod Autoscaler(HPA)와 같은 자동 스케일링 시스템에서 Pod의 수를 동적으로 조절하는 데 사용
- 클러스터의 성능 모니터링과 자동 스케일링을 위해 사용
- 클러스터 관리자가 클러스터의 리소스 사용 패턴을 이해하고 최적화하는 데 도움을 줌
- 클러스터 내부의 리소스 사용량 데이터(예: CPU, 메모리 사용량)를 수집하는 쿠버네티스의 클러스터 수준 모니터링 툴
- 설정된 임계값에 따라, 필요시 컨테이너의 수를 늘리거나 줄임
4) 구현 방식
- Metrics Server는 클러스터의 모든 노드에 설치된 kubelet을 통해 메트릭을 수집
- Kubernetes 클러스터의 각 노드에서 실행되는 주요 구성 요소
- 클러스터의 각 워커 노드에서 실행되는 에이전트 역할을 수행
- 클러스터의 마스터 노드로부터 받은 지시에 따라 각 노드에서 컨테이너를 실행하고 관리하는 역할
- 주요 기능
- Pod 스펙 실행: kubelet은 API 서버로부터 Pod에 대한 스펙(명세)을 받아, 해당 스펙에 정의된 컨테이너를 실행
- 이 스펙에는 컨테이너 이미지, 포트, 볼륨 등이 포함될 수 있음
- 컨테이너 상태 모니터링: kubelet은 실행 중인 컨테이너의 상태를 주기적으로 체크하고, 문제가 발생하면 재시작하는 등의 조치를 취함
- 리소스 관리: kubelet은 노드의 사용 가능한 리소스(예: CPU, 메모리)를 관리하고, 각 Pod에 할당할 리소스 양을 조정
- 노드 상태 보고: kubelet은 정기적으로 노드의 상태를 Kubernetes API 서버에 보고함
- 이 정보에는 노드의 리소스 사용량, 네트워크 상태, 시스템 정보 등이 포함됨
- 헬스 체크 수행: kubelet은 Liveness Probe와 Readiness Probe를 통해 컨테이너의 건강 상태를 체크함
- 로그 및 메트릭 수집: kubelet은 컨테이너의 로그를 수집하고, 성능 메트릭을 모니터링하여 필요시 중앙 집중식 로깅 시스템이나 모니터링 시스템에 전달
- Pod 스펙 실행: kubelet은 API 서버로부터 Pod에 대한 스펙(명세)을 받아, 해당 스펙에 정의된 컨테이너를 실행
- 중요성
- 노드 수준의 오케스트레이션: kubelet은 각 노드에서 컨테이너의 생명 주기를 관리하는 핵심 역할
- 이는 클러스터 전체의 오케스트레이션을 가능하게 하는 기반입니다.
- 자동화된 클러스터 관리: kubelet의 자동화된 기능은 Kubernetes 클러스터의 관리를 단순화하고, 효율적인 운영을 지원함
- 고가용성 및 신뢰성 보장: kubelet은 노드와 컨테이너의 상태를 지속적으로 모니터링하고, 필요한 경우 적절한 조치를 취함으로써 클러스터의 고가용성과 신뢰성을 보장함
- 노드 수준의 오케스트레이션: kubelet은 각 노드에서 컨테이너의 생명 주기를 관리하는 핵심 역할
- kubelet은 각 노드에서 실행 중인 컨테이너의 리소스 사용량을 모니터링하고 이를 Metrics Server에 보고
- Horizontal Pod Autoscaler(HPA)를 사용하여 부하에 따라 Pod의 수를 자동으로 조절
- Horizontal Pod Autoscaler (HPA)는 Kubernetes에서 자동 스케일링을 구현하는 중요한 컴포넌트
- HPA는 클러스터 내의 Pod 수를 자동으로 조절하여, 애플리케이션의 부하에 따라 적절한 수의 Pod 인스턴스를 유지하도록 함
- 작동 원리
- 메트릭 모니터링
- HPA는 주로 CPU 사용량, 메모리 사용량과 같은 메트릭을 기반으로 동작
- 메트릭은 Kubernetes 클러스터 내부의 Metrics Server에서 수집
- 스케일링 결정
- 설정된 메트릭 임계값에 따라, HPA는 Pod의 수를 증가시키거나 감소시킴
- ex. CPU 사용량이 설정된 임계값을 초과하면, HPA는 더 많은 Pod를 생성하여 부하를 분산시킴
- 자동 조절
- 부하가 감소하고 임계값 아래로 떨어지면, HPA는 불필요한 Pod를 줄여 리소스를 효율적으로 사용하도록 함
- 메트릭 모니터링
- 구성
- Kubernetes의 YAML 파일을 통해 이루어짐
- 스케일링 대상(예: Deployment), 사용할 메트릭, 그리고 임계값 설정이 포함
- 사용자는 HPA에 대한 최소 및 최대 Pod 수를 설정할 수 있으며, 이는 HPA가 생성하거나 제거할 수 있는 Pod의 수를 제한함
- Kubernetes의 YAML 파일을 통해 이루어짐
- 장점
- 자원 효율성: 부하가 적은 시간에는 자원을 절약할 수 있으며, 부하가 높은 시간에는 자동으로 리소스를 확장하여 애플리케이션의 성능을 유지
- 사용자 개입 최소화: 애플리케이션의 부하에 따라 자동으로 스케일링이 이루어지므로, 지속적인 관리나 개입이 필요하지 않음
- 유연한 대응: 트래픽 변동이나 예상치 못한 부하 증가에 대응하여 애플리케이션의 가용성을 유지할 수 있음
3. 장단점
1) 장점
- 자원의 효율적 사용과 높은 가용성.
- 사용자 개입 없이 시스템이 자동으로 관리됨.
- 부하에 따른 유연한 리소스 관리 가능.
2) 단점
- 복잡한 설정과 관리 필요.
- 부적절한 설정은 리소스 낭비나 성능 저하를 일으킬 수 있음.
- 자동 스케일링은 예측하지 못한 트래픽 변동에 빠르게 반응하지 못할 수도 있음.
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes][CKA] Kube Proxy (0) | 2023.12.13 |
---|---|
[Kubernetes][CKA] Kubelet (0) | 2023.12.13 |
[Kubernetes][CKA] Kube Scheduler (0) | 2023.12.13 |
[Kubernetes][CKA] Kube Controller Manager (0) | 2023.12.13 |
[Kubernetes][CKA] Kube-API Server (0) | 2023.12.13 |