Memecahkan masalah metrik sistem


Halaman ini menunjukkan cara menyelesaikan masalah terkait metrik sistem di cluster Google Kubernetes Engine (GKE).

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.

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 konsol Google 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 dengan menjalankan perintah berikut:

    gcloud container clusters describe CLUSTER_NAME
    

    Output dari perintah ini harus menyertakan SYSTEM_COMPONENTS dalam daftar enableComponents di bagian monitoringConfig, mirip dengan contoh berikut:

    monitoringConfig:
      componentConfig:
        enableComponents:
        - SYSTEM_COMPONENTS
    

    Jika pemantauan tidak diaktifkan, jalankan perintah berikut untuk mengaktifkannya:

    gcloud container clusters update CLUSTER_NAME --monitoring=SYSTEM
    
  • Sudah berapa lama sejak cluster Anda dibuat atau pemantauannya diaktifkan?

    Diperlukan waktu hingga satu jam agar metrik cluster baru mulai muncul di Cloud Monitoring.

  • Apakah heapster atau gke-metrics-agent (OpenTelemetry Collector) berjalan di cluster Anda di namespace kube-system?

    Pod ini mungkin gagal menjadwalkan workload karena cluster Anda hampir kehabisan resource. Periksa apakah Heapster atau OpenTelemetry berjalan dengan menjalankan kubectl get pods --namespace=kube-system dan memeriksa Pod dengan heapster atau gke-metrics-agent dalam namanya.

  • Apakah panel kontrol cluster Anda dapat berkomunikasi dengan node?

    Cloud Monitoring mengandalkan komunikasi tersebut. Anda dapat memeriksa apakah panel kontrol berkomunikasi dengan node dengan menjalankan perintah berikut:

    kubectl logs POD_NAME
    

    Jika perintah ini menampilkan error, penyebabnya masalahnya mungkin adalah tunnel SSH. Untuk mengetahui langkah-langkah pemecahan masalah, lihat Memecahkan masalah SSH.

  • Dapatkah akun layanan untuk node menulis metrik?

    Setiap node GKE memiliki akun layanan yang digunakan untuk melakukan autentikasi ke API dan layanan Google Cloud, termasuk Cloud Monitoring. Secara default, GKE menggunakan akun layanan default Compute Engine untuk node, kecuali jika Anda menentukan akun layanan kustom. Bergantung pada kebijakan organisasi Anda, akun layanan default Compute Engine mungkin tidak memiliki izin yang memadai untuk menulis ke Cloud Monitoring.

    1. Jika Anda tidak tahu akun layanan mana yang digunakan node, temukan akun layanan tersebut. Untuk cluster Autopilot, akun layanan tercantum dalam detail keseluruhan cluster. Untuk cluster Standar, akun layanan ditentukan per node pool.

      Konsol

      1. Setelah memilih project yang relevan, buka halaman Cluster GKE di konsol Google Cloud:

        Buka Cluster

      2. Pilih cluster untuk melihat halaman detailnya.

      3. Bergantung pada mode cluster, lakukan salah satu hal berikut:

        • Untuk cluster Autopilot, periksa nilai Akun layanan di bagian Keamanan.
        • Untuk cluster Standard, buka tab Nodes, lalu klik nama kumpulan node yang relevan. Kemudian, di halaman Node pool details, periksa nilai Service account di bagian Security.

      gcloud

      Untuk cluster Autopilot, jalankan perintah berikut:

      gcloud container clusters describe CLUSTER_NAME \
          --location= LOCATION\
          --flatten=nodeConfig \
          --format='value(serviceAccount)'
      

      Untuk cluster Standard, jalankan perintah berikut. Tindakan ini akan menampilkan semua node pool dalam cluster dengan akun layanannya:

      gcloud container clusters describe CLUSTER_NAME \
          --location=LOCATION \
          --flatten=nodePools \
          --format='table(nodePools.name,nodePools.config.serviceAccount)'
      

      Ganti kode berikut:

      • CLUSTER_NAME: nama cluster Anda
      • LOCATION: lokasi cluster
      • Jika akun layanan tercantum sebagai default, node akan menggunakan akun layanan default Compute Engine. Akun ini memiliki alamat email PROJECT_NUMBER-compute@developer.gserviceaccount.com.

      • Jika Anda melihat alamat email yang berbeda, node tersebut menggunakan akun layanan kustom.

    2. Untuk memeriksa apakah akun layanan memiliki izin tulis untuk Cloud Monitoring (atau izin apa pun), lakukan hal berikut:

      Konsol

      1. Dengan memilih project yang relevan, buka halaman IAM di konsol Google Cloud:

        Buka IAM

      2. Di kolom Akun utama, cari alamat email akun layanan node. Jika email akun layanan tidak ada dalam daftar, akun layanan node tidak memiliki izin. Jika akun ada dalam daftar, periksa peran yang tercantum di kolom Roles dan apakah peran tersebut menyertakan izin tulis untuk Cloud Monitoring.

      gcloud

      Jalankan perintah berikut untuk menampilkan semua peran yang diberikan ke akun layanan yang Anda identifikasi:

      gcloud projects get-iam-policy PROJECT_ID \
          --flatten=bindings \
          --filter=bindings.members:serviceAccount:SERVICE_ACCOUNT_EMAIL\
          --format='value(bindings.role)'
      

      Ganti SERVICE_ACCOUNT_EMAIL dengan alamat email akun layanan node.

      Jika output kosong, akun layanan node tidak memiliki izin. Jika output menyertakan peran apa pun, periksa apakah salah satu peran ini menyertakan izin tulis untuk Cloud Monitoring.

    Jika tidak melihat izin yang diperlukan setelah mengikuti langkah-langkah ini, Anda dapat memberikan peran yang relevan ke akun layanan, atau memigrasikan beban kerja ke cluster atau node pool baru yang menggunakan akun layanan yang berbeda. Peran minimum yang diperlukan untuk menulis metrik sistem adalah roles/monitoring.metricWriter. Untuk mempelajari lebih lanjut peran minimum yang diperlukan untuk GKE, lihat Memperkuat cluster.

Pastikan agen metrik memiliki memori yang memadai

Jika Anda telah mencoba langkah-langkah pemecahan masalah sebelumnya dan metrik masih tidak muncul, agen metrik mungkin tidak memiliki memori yang memadai.

Dalam sebagian besar kasus, alokasi resource default ke agen metrik GKE sudah memadai. Namun, jika DaemonSet mengalami error berulang kali, Anda dapat memeriksa alasan penghentian dengan petunjuk berikut:

  1. Dapatkan nama Pod agen metrik GKE:

    kubectl get pods -n kube-system -l component=gke-metrics-agent
    
  2. Temukan Pod dengan status CrashLoopBackOff.

    Outputnya mirip dengan hal berikut ini:

    NAME                    READY STATUS           RESTARTS AGE
    gke-metrics-agent-5857x 0/1   CrashLoopBackOff 6        12m
    
  3. Deskripsikan Pod yang memiliki status CrashLoopBackOff:

    kubectl describe pod POD_NAME -n kube-system
    

    Ganti POD_NAME dengan 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"
    
  4. Tambahkan label node ke node dengan agen metrik yang gagal. Anda dapat menggunakan label node persisten atau sementara. Sebaiknya coba tambahkan 20 MB tambahan. Jika agen terus mengalami error, Anda dapat menjalankan perintah ini lagi, dengan mengganti label node dengan label yang meminta jumlah memori tambahan yang lebih tinggi.

    Untuk mengupdate 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_LOCATION
    

    Ganti 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
    • 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 --overwrite
    

    Ganti 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 selanjutnya