문제가 발생한 후에 대응하면 다운타임이 발생할 수 있습니다. Google Kubernetes Engine (GKE)에서 복원력이 있는 시스템을 유지하려면 잠재적인 문제가 사용자에게 영향을 미치기 전에 이를 식별해야 합니다.
이 페이지를 사용하여 핵심성과지표를 추적하고, 추세를 시각화하고, 오류율 상승 또는 리소스 제약과 같은 문제를 감지하도록 알림을 설정하여 Cloud Monitoring으로 GKE 환경을 사전 예방적으로 모니터링합니다.
이 정보는 GKE 환경의 상태, 안정성, 효율성을 보장하는 플랫폼 관리자 및 운영자에게 중요합니다. 또한 애플리케이션 개발자가 실제 조건에서 앱의 성능을 파악하고, 배포 전반에서 회귀를 감지하고, 최적화를 위한 통계를 얻는 데 도움이 됩니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할과 예시 태스크에 대한 자세한 내용은 일반 GKE 사용자 역할 및 태스크를 참고하세요.
유용한 측정항목 검토
GKE는 측정항목 집합을 Cloud Monitoring으로 자동 전송합니다. 다음 섹션에는 문제 해결에 가장 중요한 측정항목이 나열되어 있습니다.
GKE 측정항목의 전체 목록은 GKE 시스템 측정항목을 참고하세요.
컨테이너 성능 및 상태 측정항목
특정 앱에 문제가 있다고 의심되는 경우 이러한 측정항목부터 시작하세요. 이러한 측정항목은 컨테이너가 자주 다시 시작되는지, 메모리가 부족한지, CPU 제한으로 인해 제한되는지 등을 파악하여 앱의 상태를 모니터링하는 데 도움이 됩니다.
측정항목 | 설명 | 문제 해결의 중요성 |
---|---|---|
kubernetes.io/container/cpu/limit_utilization |
현재 인스턴스에서 사용 중인 CPU 한도의 비율입니다. 컨테이너가 CPU 한도를 초과할 수 있으므로 이 값은 1을 초과할 수 있습니다. | CPU 제한을 식별합니다. 값이 높으면 성능이 저하될 수 있습니다. |
kubernetes.io/container/memory/limit_utilization |
현재 인스턴스에서 사용 중인 메모리 한도의 비율입니다. 이 값은 1을 초과할 수 없습니다. | OutOfMemory (OOM) 오류 위험을 모니터링합니다. |
kubernetes.io/container/memory/used_bytes |
컨테이너에서 사용한 실제 메모리(바이트)입니다. | 메모리 소비를 추적하여 잠재적인 메모리 누수 또는 OOM 오류 위험을 식별합니다. |
kubernetes.io/container/memory/page_fault_count |
유형(주 오류 및 부 오류)별로 분류된 페이지 오류 수입니다. | 상당한 메모리 압력을 나타냅니다. 심각한 페이지 오류는 메모리 한도에 도달하지 않았더라도 메모리가 디스크에서 읽히고 있음을 의미합니다 (스왑). |
kubernetes.io/container/restart_count |
컨테이너에서 재시작한 횟수입니다. | 앱 비정상 종료, 잘못된 구성, 다시 시작 횟수가 많거나 증가하여 리소스 소진과 같은 잠재적인 문제를 강조합니다. |
kubernetes.io/container/ephemeral_storage/used_bytes |
로컬 임시 스토리지 사용량(단위: 바이트)입니다. | 임시 스토리지가 가득 차서 포드가 제거되는 것을 방지하기 위해 임시 디스크 사용량을 모니터링합니다. |
kubernetes.io/container/cpu/request_utilization |
현재 인스턴스에서 사용 중인 요청 CPU의 비율입니다. 사용량이 요청을 초과할 수 있으므로 이 값은 1을 초과할 수 있습니다. | 리소스 할당을 최적화할 수 있도록 과도하게 프로비저닝되거나 과소 프로비저닝된 CPU 요청을 식별합니다. |
kubernetes.io/container/memory/request_utilization |
현재 인스턴스에서 사용 중인 요청 메모리의 비율입니다. 사용량이 요청을 초과할 수 있으므로 이 값은 1을 초과할 수 있습니다. | 과도하게 프로비저닝되거나 부족하게 프로비저닝된 메모리 요청을 식별하여 일정을 개선하고 OOM 오류를 방지합니다. |
노드 성능 및 상태 측정항목
기본 GKE 인프라 문제를 진단해야 하는 경우 이러한 측정항목을 검사하세요. 이러한 측정항목은 노드의 전반적인 상태와 용량을 파악하는 데 중요하며, 노드가 비정상적이거나 압박을 받고 있는지 또는 노드에 새 포드를 예약할 충분한 메모리가 있는지 조사하는 데 도움이 됩니다.
측정항목 | 설명 | 문제 해결의 중요성 |
---|---|---|
kubernetes.io/node/cpu/allocatable_utilization |
현재 인스턴스에서 사용 중인 할당 가능한 CPU의 비율입니다. | 포드 사용량의 합계가 노드의 사용 가능한 CPU 리소스에 부담을 주고 있는지 나타냅니다. |
kubernetes.io/node/memory/allocatable_utilization |
현재 인스턴스에서 사용 중인 할당 가능한 메모리의 비율입니다. 사용량이 할당 가능한 메모리 바이트를 초과할 수 없으므로 이 값은 1을 초과할 수 없습니다. | 특히 값이 높은 경우 새 포드를 예약하거나 기존 포드가 작동하는 데 노드에 메모리가 부족함을 나타냅니다. |
kubernetes.io/node/status_condition (베타) |
노드 상태 조건 필드의 노드 조건입니다. | Ready , MemoryPressure , DiskPressure 와 같은 노드 상태 조건을 보고합니다. |
kubernetes.io/node/ephemeral_storage/used_bytes |
노드에서 사용한 로컬 임시 스토리지 바이트입니다. | 높은 임시 저장소 사용량에 관한 경고를 제공하여 포드 시작 실패 또는 제거를 방지합니다. |
kubernetes.io/node/ephemeral_storage/inodes_free |
로컬 임시 스토리지의 여유 색인 노드 (아이노드) 수입니다. | 여유 아이노드 수를 모니터링합니다. 아이노드가 부족하면 디스크 공간이 있어도 작업이 중단될 수 있습니다. |
kubernetes.io/node/interruption_count (베타) |
중단은 고객이 인프라를 제어하는 동안 발생하는 시스템의 인프라 퇴출입니다. 이 측정항목은 유형과 원인별 현재 중단 횟수를 나타냅니다. | 시스템 퇴출로 인해 노드가 예기치 않게 사라질 수 있는 이유를 설명합니다. |
Pod 성능 및 상태 측정항목
이러한 측정항목은 네트워킹 및 스토리지와 같은 포드의 환경과의 상호작용과 관련된 문제를 해결하는 데 도움이 됩니다. 시작이 느린 포드를 진단하거나, 잠재적인 네트워크 연결 문제를 조사하거나, 쓰기 실패를 방지하기 위해 스토리지 볼륨을 사전에 관리해야 하는 경우 이러한 측정항목을 사용하세요.
측정항목 | 설명 | 문제 해결의 중요성 |
---|---|---|
kubernetes.io/pod/network/received_bytes_count |
네트워크를 통해 Pod에서 수신한 누적 바이트 수입니다. | 앱 또는 네트워크 문제를 나타낼 수 있는 비정상적인 네트워크 활동 (높음 또는 낮음)을 식별합니다. |
kubernetes.io/pod/network/policy_event_count (베타) |
데이터 플레인에 표시되는 네트워크 정책 이벤트 수의 변화 | 네트워크 정책으로 인해 발생하는 연결 문제를 식별합니다. |
kubernetes.io/pod/volume/utilization |
현재 인스턴스에서 사용 중인 볼륨의 비율입니다. 사용량이 제공되는 총 볼륨 공간을 초과할 수 없으므로 이 값은 1을 초과할 수 없습니다. | 높은 사용률 (1에 가까움)로 인해 쓰기 실패가 발생할 수 있는 경우 경고를 표시하여 볼륨 공간을 사전 관리할 수 있습니다. |
kubernetes.io/pod/latencies/pod_first_ready (베타) |
이미지 가져오기를 포함한 포드의 엔드 투 엔드 시작 지연 시간입니다 (포드 `Created` ~ `Ready`). | 시작이 느린 포드를 진단합니다. |
측정항목 탐색기로 측정항목 시각화
GKE 환경의 상태를 시각화하려면 측정항목 탐색기로 측정항목을 기반으로 차트를 만드세요.
측정항목 탐색기를 사용하려면 다음 단계를 완료하세요.
Google Cloud 콘솔에서 측정항목 탐색기 페이지로 이동합니다.
측정항목 필드에서 검사할 측정항목을 선택하거나 입력합니다.
결과를 확인하고 시간 경과에 따른 추세를 관찰합니다.
예를 들어 특정 네임스페이스의 포드 메모리 소비를 조사하려면 다음을 실행하면 됩니다.
- 측정항목 선택 목록에서 측정항목
kubernetes.io/container/memory/used_bytes
를 선택하고 적용을 클릭합니다. - 필터 추가를 클릭하고 namespace_name을 선택합니다.
- 값 목록에서 조사할 네임스페이스를 선택합니다.
- 집계 필드에서 합계 > pod_name을 선택하고 확인을 클릭합니다. 이 설정은 각 포드에 별도의 시계열 선을 표시합니다.
- 차트 저장을 클릭합니다.
결과 차트에는 시간 경과에 따른 각 포드의 메모리 사용량이 표시되므로 메모리 소비가 비정상적으로 높거나 급증하는 포드를 시각적으로 식별할 수 있습니다.
측정항목 탐색기는 보려는 측정항목을 구성하는 데 매우 유연합니다. 고급 측정항목 탐색기 옵션에 대한 자세한 내용은 Cloud 모니터링 문서의 측정항목 탐색기로 차트 만들기를 참고하세요.
사전 문제 감지를 위한 알림 만들기
문제가 발생하거나 측정항목이 특정 기준을 위반할 때 알림을 받으려면 Cloud Monitoring에서 알림 정책을 설정하세요.
예를 들어 컨테이너 CPU 한도가 5분 동안 80% 를 초과할 때 알림을 보내는 알림 정책을 설정하려면 다음을 수행하세요.
Google Cloud 콘솔에서 알림 페이지로 이동합니다.
정책 만들기를 클릭합니다.
측정항목 선택 상자에서
CPU limit utilization
를 필터링한 다음 kubernetes.io/container/cpu/limit_utilization 측정항목을 선택합니다.적용을 클릭합니다.
필터 추가 필드는 비워둡니다. 이 설정은 클러스터가 기준을 위반할 때 알림을 트리거합니다.
변환 데이터 섹션에서 다음을 선택합니다.
- 순환 기간 목록에서 1분을 선택합니다. 이 설정은 Google Cloud 가 매분 평균값을 계산한다는 의미입니다.
순환 기간 함수 목록에서 평균을 선택합니다.
두 설정 모두 매분 각 컨테이너의 CPU 한도 사용률을 평균합니다.
다음을 클릭합니다.
알림 구성 섹션에서 다음을 수행합니다.
- 조건 유형에서 기준점을 선택합니다.
- 알림 트리거에서 모든 시계열 위반을 선택합니다.
- 기준 위치에서 기준 초과를 선택합니다.
- 기준 값에
0.8
을 입력합니다. 이 값은 모니터링하려는 80% 기준점을 나타냅니다. - 고급 옵션을 클릭합니다.
- 재검사 기간 목록에서 5분을 선택합니다. 이 설정은 CPU 사용률이 5분 동안 연속으로 80%를 초과하는 경우에만 알림이 트리거되므로 일시적인 급증으로 인한 잘못된 알림이 줄어듭니다.
- 조건 이름 필드에 조건의 이름을 입력합니다.
- 다음을 클릭합니다.
알림 구성 및 알림 완료 섹션에서 다음을 수행합니다.
- 알림 채널 목록에서 알림을 받을 채널을 선택합니다. 채널이 없으면 알림 채널 관리를 클릭하여 만듭니다.
- 알림 정책 이름 지정 필드에 정책을 명확하게 설명하는 이름을 지정합니다.
- 다른 필드는 모두 기본값 그대로 둡니다.
- 다음을 클릭합니다.
정책을 검토하고 모든 것이 올바른 것으로 확인되면 정책 만들기를 클릭합니다.
알림을 만드는 다른 방법을 알아보려면 Cloud Monitoring 문서의 알림 개요를 참고하세요.
다음 단계
Gemini Cloud Assist로 진단 속도 높이기(이 시리즈의 다음 페이지)를 읽어보세요.
문제 해결 시나리오 예에서 이러한 개념이 적용된 것을 확인하세요.
특정 문제 해결에 관한 조언은 GKE 문제 해결 가이드를 참고하세요.
문서에서 문제 해결 방법을 찾을 수 없으면 지원 받기를 참조하여 다음 주제에 대한 조언을 포함한 추가 도움을 요청하세요.
- Cloud Customer Care에 문의하여 지원 케이스를 엽니다.
- StackOverflow에서 질문하고
google-kubernetes-engine
태그를 사용하여 유사한 문제를 검색해 커뮤니티의 지원을 받습니다.#kubernetes-engine
Slack 채널에 가입하여 더 많은 커뮤니티 지원을 받을 수도 있습니다. - 공개 Issue Tracker를 사용하여 버그나 기능 요청을 엽니다.