Halaman ini menunjukkan cara menyelesaikan masalah terkait metrik sistem di cluster Google Kubernetes Engine (GKE).
Metrik dari cluster Anda tidak muncul di Cloud Monitoring
Pastikan Anda telah mengaktifkan Monitoring API dan Logging API di project Anda. Anda juga harus mengonfirmasi bahwa Anda dapat melihat project di ringkasan Cloud Monitoring di konsolGoogle Cloud .
Jika masalah berlanjut, periksa kemungkinan penyebab berikut:
Sudahkah Anda mengaktifkan pemantauan di cluster?
Monitoring diaktifkan secara default untuk cluster yang dibuat dari konsol Google Cloud dan dari Google Cloud CLI. Namun, Anda dapat memastikannya dengan mengklik detail cluster di konsol Google Cloud atau menjalankan perintah berikut:
gcloud container clusters describe CLUSTER_NAMEOutput dari perintah ini harus menyertakan
SYSTEM_COMPONENTSdalam daftarenableComponentsdi bagianmonitoringConfig, mirip dengan contoh berikut:monitoringConfig: componentConfig: enableComponents: - SYSTEM_COMPONENTSJika pemantauan tidak diaktifkan, jalankan perintah berikut untuk mengaktifkannya:
gcloud container clusters update CLUSTER_NAME --monitoring=SYSTEMSudah berapa lama sejak cluster Anda dibuat atau pemantauannya diaktifkan?
Diperlukan waktu hingga satu jam agar metrik cluster baru mulai muncul di Cloud Monitoring.
Apakah
heapsterataugke-metrics-agent(OpenTelemetry Collector) berjalan di cluster Anda di namespacekube-system?Pod ini mungkin gagal menjadwalkan workload karena cluster Anda hampir kehabisan resource. Periksa apakah Heapster atau OpenTelemetry sedang berjalan dengan menjalankan
kubectl get pods --namespace=kube-systemdan memeriksa Pod denganheapsterataugke-metrics-agentdalam namanya.Apakah bidang kontrol cluster Anda dapat berkomunikasi dengan node?
Cloud Monitoring mengandalkan komunikasi tersebut. Anda dapat memeriksa apakah bidang kontrol berkomunikasi dengan node dengan menjalankan perintah berikut:
kubectl logs POD_NAMEJika perintah ini menampilkan error, penyebabnya masalahnya mungkin adalah tunnel SSH. Untuk mengetahui langkah-langkah pemecahan masalah, lihat Memecahkan masalah SSH.
Mengidentifikasi dan memperbaiki masalah izin untuk menulis metrik
GKE menggunakan akun layanan IAM yang terlampir ke node Anda untuk menjalankan tugas sistem seperti logging dan pemantauan. Setidaknya, akun layanan node ini harus memiliki peran
Kubernetes Engine Default Node Service Account
(roles/container.defaultNodeServiceAccount) di project Anda. Secara default,
GKE menggunakan
akun layanan default Compute Engine,
yang otomatis dibuat di project Anda, sebagai akun layanan node.
Jika organisasi Anda menerapkan
batasan kebijakan organisasi iam.automaticIamGrantsForDefaultServiceAccounts, akun layanan Compute Engine default di project Anda mungkin
tidak otomatis mendapatkan izin yang diperlukan untuk GKE.
Untuk mengidentifikasi masalah, periksa error
401di beban kerja pemantauan sistem di cluster Anda:[[ $(kubectl logs -l k8s-app=gke-metrics-agent -n kube-system -c gke-metrics-agent | grep -cw "Received 401") -gt 0 ]] && echo "true" || echo "false"Jika outputnya adalah
true, berarti beban kerja sistem mengalami error 401, yang menunjukkan kurangnya izin. Jika outputnya adalahfalse, lewati langkah-langkah lainnya dan coba prosedur pemecahan masalah yang berbeda.
Untuk memberikan peran roles/container.defaultNodeServiceAccount kepada
akun layanan default Compute Engine, selesaikan langkah-langkah berikut:
console
- Buka halaman Selamat Datang:
- Di kolom Project number, klik Copy to clipboard.
- Buka halaman IAM:
- Klik Grant access.
- Di kolom Akun utama baru, tentukan nilai berikut:
GantiPROJECT_NUMBER-compute@developer.gserviceaccount.comPROJECT_NUMBERdengan nomor project yang Anda salin. - Di menu Select a role, pilih peran Kubernetes Engine Default Node Service Account.
- Klik Simpan.
gcloud
- Temukan Google Cloud nomor project Anda:
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
Ganti
PROJECT_IDdengan project ID Anda.Outputnya mirip dengan hal berikut ini:
12345678901
- Berikan peran
roles/container.defaultNodeServiceAccountke akun layanan default Compute Engine:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/container.defaultNodeServiceAccount"
Ganti
PROJECT_NUMBERdengan nomor project dari langkah sebelumnya.
Konfirmasi bahwa agen metrik memiliki memori yang cukup
Jika Anda telah mencoba langkah-langkah pemecahan masalah sebelumnya dan metrik masih tidak muncul, agen metrik mungkin memiliki memori yang tidak mencukupi.
Dalam sebagian besar kasus, alokasi resource default untuk agen metrik GKE sudah cukup. Namun, jika DaemonSet sering mengalami error, Anda dapat memeriksa alasan penghentian dengan petunjuk berikut:
Dapatkan nama Pod agen metrik GKE:
kubectl get pods -n kube-system -l component=gke-metrics-agentTemukan Pod dengan status
CrashLoopBackOff.Outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE gke-metrics-agent-5857x 0/1 CrashLoopBackOff 6 12mDeskripsikan Pod yang memiliki status
CrashLoopBackOff:kubectl describe pod POD_NAME -n kube-systemGanti
POD_NAMEdengan nama Pod dari langkah sebelumnya.Jika alasan penghentian Pod adalah
OOMKilled, agen memerlukan memori tambahan.Outputnya mirip dengan hal berikut ini:
containerStatuses: ... lastState: terminated: ... exitCode: 1 finishedAt: "2021-11-22T23:36:32Z" reason: OOMKilled startedAt: "2021-11-22T23:35:54Z"Tambahkan label node ke node dengan agen metrik yang gagal. Anda dapat menggunakan label node persisten atau sementara. Sebaiknya coba tambahkan 20 MB lagi. Jika agen terus mengalami error, Anda dapat menjalankan perintah ini lagi, mengganti label node dengan label yang meminta jumlah memori tambahan yang lebih tinggi.
Untuk memperbarui node pool dengan label persisten, jalankan perintah berikut:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --node-labels=ADDITIONAL_MEMORY_NODE_LABEL \ --location=COMPUTE_LOCATIONGanti kode berikut:
NODEPOOL_NAME: nama node pool.CLUSTER_NAME: nama cluster yang ada.ADDITIONAL_MEMORY_NODE_LABEL: salah satu label node memori tambahan; gunakan salah satu nilai berikut:- Untuk menambahkan 10 MB:
cloud.google.com/gke-metrics-agent-scaling-level=10 - Untuk menambahkan 20 MB:
cloud.google.com/gke-metrics-agent-scaling-level=20 - Untuk menambahkan 50 MB:
cloud.google.com/gke-metrics-agent-scaling-level=50 - Untuk menambahkan 100 MB:
cloud.google.com/gke-metrics-agent-scaling-level=100 - Untuk menambahkan 200 MB:
cloud.google.com/gke-metrics-agent-scaling-level=200 - Untuk menambahkan 500 MB:
cloud.google.com/gke-metrics-agent-scaling-level=500
- Untuk menambahkan 10 MB:
COMPUTE_LOCATION: lokasi Compute Engine cluster.
Atau, Anda dapat menambahkan label node sementara yang tidak akan tetap ada setelah upgrade menggunakan perintah berikut:
kubectl label node/NODE_NAME \ ADDITIONAL_MEMORY_NODE_LABEL --overwriteGanti kode berikut:
NODE_NAME: nama node agen metrik yang terpengaruh.ADDITIONAL_MEMORY_NODE_LABEL: salah satu label node memori tambahan; gunakan salah satu nilai dari contoh sebelumnya.
Langkah berikutnya
Jika Anda mengalami masalah yang berhubungan dengan agen Cloud Logging, silakan melihat dokumentasi pemecahan masalahnya.
Jika Anda tidak dapat menemukan solusi untuk masalah Anda dalam dokumentasi, lihat Mendapatkan dukungan untuk mendapatkan bantuan lebih lanjut, termasuk saran tentang topik berikut:
- Membuka kasus dukungan dengan menghubungi Layanan Pelanggan Cloud.
- Mendapatkan dukungan dari komunitas dengan
mengajukan pertanyaan di StackOverflow
dan menggunakan tag
google-kubernetes-engineuntuk menelusuri masalah serupa. Anda juga dapat bergabung ke#kubernetes-enginechannel Slack untuk mendapatkan dukungan komunitas lainnya. - Membuka bug atau permintaan fitur menggunakan issue tracker publik.