이 문서는 Google Distributed Cloud의 관측 가능성 문제를 해결하는 데 도움이 됩니다. 이러한 문제가 발생하면 제안된 해결 방법을 검토하세요.
추가 지원이 필요하면 Google 지원에 문의하세요.
Cloud 감사 로그가 수집되지 않음
클러스터 구성의cloudAuditLogging
섹션에서 Cloud 감사 로그가 사용 설정되었는지 확인합니다. 프로젝트 ID, 위치, 서비스 계정 키가 올바르게 구성되었는지 확인합니다. 프로젝트 ID는 gkeConnect
아래의 프로젝트 ID와 동일해야 합니다.
Cloud 감사 로그가 사용 설정된 경우 로그가 수집되지 않는 가장 일반적인 이유는 권한 때문입니다. 이 시나리오에서는 Cloud 감사 로그 프록시 컨테이너에 권한 거부 오류 메시지가 표시됩니다.
Cloud 감사 로그 프록시 컨테이너는 다음 중 하나로 실행됩니다.- 관리자 또는 독립형 클러스터의 정적 포드
kube-apiserver
포드의 사이드카 컨테이너
권한 오류가 표시되면 문제 해결 단계에 따라 권한 문제를 해결합니다.
kube-state-metrics
측정항목이 수집되지 않음
kube-state-metrics
(KSM)는 클러스터에서 단일 복제본 배포로 실행되며 클러스터의 거의 모든 리소스에 대한 측정항목을 생성합니다. KSM 및 gke-metrics-agent
가 동일한 노드에서 실행될 때는 모든 노드의 측정항목 에이전트 간에 중단 발생 위험이 더 큽니다.
KSM 측정항목 이름은 kube_pod_container_info
와 같은 kube_<ResourceKind>
패턴을 따릅니다. kube_onpremusercluster_
로 시작하는 측정항목은 KSM이 아닌 온프레미스 클러스터 컨트롤러에서 시작됩니다.
KSM 측정항목이 누락되었으면 다음 문제 해결 단계를 검토합니다.
- Cloud Monitoring에서
kubernetes.io/anthos/container/...
같은 요약 API 측정항목을 사용하여 KSM의 CPU, 메모리, 재시작 횟수를 확인합니다 . 이는 KSM을 사용하는 별도의 파이프라인입니다. KSM 포드가 리소스 부족으로 제한되지 않는지 확인합니다.- 이러한 요약 API 측정항목을 KSM에 사용할 수 없으면 동일 노드의
gke-metrics-agent
에 동일한 문제가 있을 수 있습니다.
- 이러한 요약 API 측정항목을 KSM에 사용할 수 없으면 동일 노드의
- 클러스터에서 KSM 포드와 KSM과 동일한 노드에 있는
gke-metrics-agent
포드의 상태 및 로그를 확인합니다.
kube-state-metrics
비정상 종료 루프
증상
Cloud Monitoring에서는 kube-state-metrics
(KSM)의 측정항목을 사용할 수 없습니다.
원인
이 시나리오는 큰 클러스터 또는 리소스 양이 많은 클러스터에서 발생할 가능성이 더 높습니다. KSM은 단일 복제본 배포로 실행되며 포드, 배포, DaemonSet, ConfigMap, 보안 비밀, PersistentVolume과 같은 클러스터의 거의 모든 리소스를 나열합니다. 측정항목은 이러한 각 리소스 객체에 생성됩니다. 포드가 10,000개 넘는 클러스터와 같이 리소스에 많은 객체가 포함된 경우 KSM에 메모리 부족이 발생할 수 있습니다.
영향을 받는 버전
이 문제는 모든 Google Distributed Cloud 버전에서 발생할 수 있습니다.
마지막 Google Distributed Cloud 버전 몇 개에서 기본 CPU 및 메모리 한도가 증가했으므로 이러한 리소스 문제 발생 빈도가 줄어들 것입니다.
해결 방법
메모리 부족 문제 때문인지 확인하려면 다음 단계를 검토하세요.
kubectl describe pod
또는kubectl get pod -o yaml
을 사용하고 오류 상태 메시지를 확인합니다.- 메모리 소비와 KSM의 사용 측정항목을 확인하고 시작하기 전 한도에 도달하는지 여부를 확인합니다.
메모리 부족 문제 때문인 경우 다음 해결 방법 중 하나를 사용합니다.
KSM의 메모리 요청 및 한도를 늘립니다.
KSM의 CPU 및 메모리를 조정하려면 다음 안내를 따르세요.
Google Distributed Cloud 버전 1.16.0 이상에서는 Google Cloud Observability가 KSM을 관리합니다. KSM을 업데이트하려면 Stackdriver 구성요소의 기본 CPU 및 메모리 요청과 한도 재정의를 참조하세요.
Google Distributed Cloud 버전 1.10.7 이상, 1.11.3 이상, 1.12.2 이상, 1.13 이상이지만 1.16.0 미만에서는
ConfigMap
을 만들어 CPU와 메모리를 조정합니다.다음 정의를 사용하여
kube-system
네임스페이스(1.13 이상인 경우gke-managed-metrics-server
)에kube-state-metrics-resizer-config
라는ConfigMap
을 만듭니다. 필요한 만큼 CPU 및 메모리 수를 조정합니다.apiVersion: v1 kind: ConfigMap metadata: name: kube-state-metrics-resizer-config namespace: kube-system data: NannyConfiguration: |- apiVersion: nannyconfig/v1alpha1 kind: NannyConfiguration baseCPU: 200m baseMemory: 1Gi cpuPerNode: 3m memoryPerNode: 20Mi ```
ConfigMap을 만든 후 다음 명령어를 사용해서 KSM 포드를 삭제하여 KSM 배포를 다시 시작합니다.
kubectl -n kube-system rollout restart deployment kube-state-metrics
Google Distributed Cloud 버전 1.9 이하, 1.10.6 이하, 1.11.2 이하, 1.12.1 이하의 경우:
- 효과적인 장기 솔루션 없음 - KSM 관련 리소스를 편집할 경우 변경 사항이
monitoring-operator
로 자동으로 되돌려집니다. monitoring-operator
를 0개 복제본으로 축소한 후 해당 리소스 한도를 조정하도록 KSM 배포를 수정할 수 있습니다. 하지만monitoring-operator
를 사용하여 새 패치 출시 버전으로 제공되는 취약점 패치가 클러스터에 수신되지 않습니다. 클러스터가 수정이 포함된 이후 버전으로 업그레이드된 후monitoring-operator
를 다시 확장해야 합니다.
- 효과적인 장기 솔루션 없음 - KSM 관련 리소스를 편집할 경우 변경 사항이
KSM에서 측정항목 수를 줄입니다.
Google Distributed Cloud 1.13의 경우 KSM은 기본적으로 핵심 측정항목이라고 하는 소수의 측정항목만 노출합니다. 이 동작은 리소스 사용량이 이전 버전보다 적지만 같은 절차를 따라 KSM 측정항목 수를 더 줄일 수 있음을 의미합니다.
Google Distributed Cloud 1.13 이전 버전의 경우 KSM에서 기본 플래그를 사용합니다. 이 구성은 많은 수의 측정항목을 노출합니다.
gke-metrics-agent
비정상 종료 루프
kube-state-metrics
가 있는 노드에서 gke-metrics-agent
에 메모리 부족 문제만 발생하는 경우 많은 수의 kube-state-metrics
측정항목이 문제의 원인입니다. 이 문제를 완화하려면 이전 섹션에서 설명한 대로 stackdriver-operator
를 축소하고 필요한 소수의 측정항목 집합을 노출하도록 KSM을 수정합니다.
KSM에서 기본적으로 소수의 핵심 측정항목을 노출하는 Google Distributed Cloud 1.13으로 클러스터를 업그레이드한 후 백업 stackdriver-operator
를 조정해야 합니다.
gke-metric-agent
의 포드 로그를 확인합니다. resourceAttrOverride
필드를 Stackdriver 커스텀 리소스에 추가하여 모든 gke-metrics-agent
포드에 맞게 CPU와 메모리를 조정할 수 있습니다.
stackdriver-metadata-agent
비정상 종료 루프
증상
Cloud Monitoring에서 측정항목을 필터링할 때 사용 가능한 시스템 메타데이터 라벨이 없습니다.
원인
stackdriver-metadata-agent
비정상 종료 루프의 가장 일반적인 원인은 메모리 부족 이벤트 때문입니다. 이 이벤트는 kube-state-metrics
와 비슷합니다. stackdriver-metadata-agent
는 모든 리소스를 나열하지는 않지만 포드, 배포, NetworkPolicy와 같은 관련 리소스 유형의 모든 객체를 나열합니다. 에이전트가 단일 복제본 배포로 실행되어 객체 수가 너무 큰 경우 메모리 부족 이벤트 위험이 증가합니다.
영향을 받는 버전
이 문제는 모든 Google Distributed Cloud 버전에서 발생할 수 있습니다.
마지막 Google Distributed Cloud 버전 몇 개에서 기본 CPU 및 메모리 한도가 증가했으므로 이러한 리소스 문제 발생 빈도가 줄어들 것입니다.
해결 방법
메모리 부족 문제 때문인지 확인하려면 다음 단계를 검토하세요.
kubectl describe pod
또는kubectl get pod -o yaml
을 사용하고 오류 상태 메시지를 확인합니다.- 메모리 소비와
stackdriver-metadata-agent
에 대한 사용 측정항목을 확인하고 시작하기 전 한도에 도달하는지 확인합니다.
resourceAttrOverride
필드에서 메모리 한도를 늘립니다.
metrics-server
비정상 종료 루프
증상
수평형 포드 자동 확장 처리 및 kubectl top
가 클러스터에서 작동하지 않습니다.
원인 및 영향을 받는 버전
이 문제는 아주 자주 발생하지는 않지만 대규모 클러스터 또는 포드 밀도가 높은 클러스터에서 메모리 부족 오류로 인해 발생합니다.
이 문제는 모든 Google Distributed Cloud 버전에서 발생할 수 있습니다.
해결 방법
측정항목 서버 리소스 한도를 늘립니다.
Google Distributed Cloud 버전 1.13 이상에서 metrics-server
네임스페이스와 해당 구성이 kube-system
에서 gke-managed-metrics-server
로 이동했습니다.
다음 단계
추가 지원이 필요하면 Google 지원에 문의하세요.