Kubernetes 클러스터의 규모와 복잡성이 증가함에 따라, 개별 노드의 상태와 성능을 이해하는 것이 점점 더 중요해지고 있습니다. Kubernetes v1.34부터 압력 정체 정보(Pressure Stall Information, PSI) 지표가 베타 단계로 전환되었음을 발표하게 되어 기쁩니다.
압력 정체 정보(PSI)란 무엇인가요?
[압력 정체 정보(Pressure Stall Information, PSI)](https://docs.kernel.org/accounting/psi.html)는 리눅스 커널(버전 4.20 이상)의 기능으로, 리소스에 대한 수요가 현재 공급을 초과하는지 여부를 정량화하여 인프라 리소스의 압력을 측정하는 표준적인 방법을 제공합니다. 이는 단순한 리소스 활용률 지표를 넘어, 리소스 경합으로 인해 태스크가 정체된 시간을 측정합니다. 이는 애플리케이션 성능에 영향을 미칠 수 있는 리소스 병목 현상을 식별하고 진단하는 강력한 방법입니다.PSI는 CPU, 메모리, I/O에 대한 지표를 노출하며, some 또는 full 압력으로 분류됩니다:
some- **하나 이상의** 태스크가 리소스에서 정체된 시간의 비율입니다. 이는 특정 수준의 리소스 경합을 나타냅니다.
full- 모든 비활성 태스크가 리소스에서 동시에 정체된 시간의 비율입니다. 이는 더 심각한 리소스 병목 현상을 나타냅니다.
PSI: 'Some' 대 'Full' 압력
Kubernetes의 PSI 지표
`KubeletPSI` 기능 게이트를 활성화하면, kubelet은 이제 리눅스 커널에서 PSI 지표를 수집하고 두 가지 채널을 통해 이를 노출할 수 있습니다: [Summary API](https://kubernetes.io/docs/reference/instrumentation/node-metrics/#summary-api-source) 및 `/metrics/cadvisor` Prometheus 엔드포인트입니다. 이를 통해 노드, 파드, 컨테이너 수준에서 리소스 압력을 모니터링하고 알림을 설정할 수 있습니다.다음 새로운 지표들은 /metrics/cadvisor를 통해 Prometheus 노출 형식으로 제공됩니다:
container_pressure_cpu_stalled_seconds_totalcontainer_pressure_cpu_waiting_seconds_totalcontainer_pressure_memory_stalled_seconds_totalcontainer_pressure_memory_waiting_seconds_totalcontainer_pressure_io_stalled_seconds_totalcontainer_pressure_io_waiting_seconds_total
이러한 지표들은 Summary API의 데이터와 함께 리소스 압력에 대한 세분화된 시야를 제공하여, 성능 문제의 원인을 정확히 찾아내고 시정 조치를 취할 수 있도록 합니다. 예를 들어, 다음 용도로 이 지표들을 사용할 수 있습니다:
- 메모리 누수 식별: 메모리에 대한
some압력이 꾸준히 증가하는 것은 애플리케이션의 메모리 누수를 나타낼 수 있습니다. - 리소스 요청 및 제한 최적화: 워크로드의 리소스 압력을 이해함으로써, 리소스 요청과 제한을 더욱 정확하게 조정할 수 있습니다.
- 워크로드 자동 스케일링: PSI 지표를 사용하여 자동 스케일링 이벤트를 트리거하고, 워크로드가 최적으로 작동하는 데 필요한 리소스를 확보할 수 있습니다.
PSI 지표 활성화 방법
Kubernetes 클러스터에서 PSI 지표를 활성화하려면 다음 단계를 따라야 합니다:- **노드가 리눅스 커널 버전 4.20 이상을 실행하고 cgroup v2를 사용하고 있는지 확인하십시오.**
- **kubelet에서 `KubeletPSI` 기능 게이트를 활성화하십시오.**
다음 단계는 무엇인가요?
PSI 지표를 Kubernetes 커뮤니티에 소개하게 되어 기쁘며, 여러분의 피드백을 기대합니다. 베타 기능으로서, 저희는 이 기능을 안정적인 GA 릴리스를 향해 개선하고 확장하기 위해 적극적으로 노력하고 있습니다. 여러분께서 이 기능을 시험해 보시고 경험을 공유해 주시기를 권장합니다.PSI 지표에 대해 더 자세히 알아보려면, 공식 Kubernetes 문서를 참조하십시오. 또한, #sig-node Slack 채널에서 대화에 참여하실 수도 있습니다.