All Products
Search
Document Center

Container Service for Kubernetes:Pemecahan masalah pod

Last Updated:Jun 16, 2026

Atasi kegagalan penjadwalan pod, error saat menarik gambar, crash saat startup, pembunuhan akibat OOM, dan masalah runtime.

Catatan

Untuk pemecahan masalah berbasis konsol—melihat status pod, event, log, mengakses terminal, dan menjalankan diagnostik—lihat Prosedur Pemecahan Masalah Umum.

Prosedur diagnostik cepat

Untuk mendiagnosis pod yang tidak normal, buka halaman detail Pods yang dituju. Klik tab Events untuk meninjau deskripsi event yang tidak normal. Kemudian, klik tab Logs untuk memeriksa log tidak normal terbaru.

Pod dalam status Pending

Jika sebuah Pod memiliki status Unschedulable pada Status Details-nya atau muncul event FailedScheduling di Events, buka Nodes > Nodes untuk memeriksa kesehatan node dan tingkat sumber daya (CPU dan memori). Periksa juga apakah aturan afinitas pod—nodeSelector, nodeAffinity, dan toleransi—terlalu ketat. Lihat Masalah penjadwalan.

Gagal menarik gambar (ImagePullBackOff/ErrImagePull)

Pada halaman detail Pods, buka tab Container dan periksa alamat Image. Masuk ke node pod tersebut dan jalankan crictl pull <image-address> atau curl -v https://<image-address> untuk memverifikasi konektivitas jaringan ke repositori gambar. Di pojok kanan atas, klik Edit YAML dan pastikan Secret yang ditentukan dalam field spec.imagePullSecrets workload ada dan valid. Untuk pemecahan masalah lebih lanjut, lihat masalah penarikan gambar.

Pod gagal dimulai (CrashLoopBackOff)

Aplikasi berulang kali crash dan restart. Pada halaman detail Pods, klik tab Logs dan pilih Show the log of the last container exit untuk melihat penyebab kegagalan. Untuk pemecahan masalah lebih lanjut, lihat Pemecahan masalah kegagalan startup pod.

Pod Running tetapi tidak ready

Pemeriksaan kesiapan (readiness probe) pod gagal. Pada halaman Edit Workloads yang dituju, verifikasi bahwa path permintaan pemeriksaan kesehatan (misalnya, /healthz) dan port sesuai dengan yang disediakan oleh aplikasi. Untuk pemecahan masalah lebih lanjut, lihat Pod dalam status Running tetapi tidak ready (Ready: False).

Nonaktifkan sementara pemeriksaan kesehatan, lalu gunakan curl dari terminal pod atau node host untuk memverifikasi titik akhir merespons dengan benar.

Pod mengalami OOMKilled

Pada halaman detail Pods, klik tab Logs dan pilih Show the log of the last container exit untuk melihat log OOM. Periksa apakah aplikasi mengalami kebocoran memori atau error kehabisan memori (OOM). Untuk aplikasi Java, Anda dapat mengoptimalkan parameter -Xmx. Sesuaikan batas sumber daya memori aplikasi (resources.limits.memory) sesuai kebutuhan. Untuk pemecahan masalah lebih lanjut, lihat OOMKilled.

Jika pemeriksaan kelangsungan hidup (liveness probe) dikonfigurasi, pod hanya akan berada dalam status OOMKilled sebentar sebelum secara otomatis restart.

Alur kerja diagnostik

Untuk mendiagnosis pod yang tidak normal, periksa event, log, dan konfigurasinya.

Alur kerja pemecahan masalah

Fase 1: Masalah penjadwalan

Pod tidak dijadwalkan ke node

Jika pod tetap dalam status Pending dalam waktu lama, berarti pod tersebut belum dijadwalkan ke node mana pun.

Pesan error

Deskripsi

Solusi

no nodes available to schedule pods.

Kluster tidak memiliki node yang tersedia untuk penjadwalan pod.

  1. Periksa apakah ada node dalam kluster yang berstatus NotReady. Jika ada node NotReady, perbaiki node tersebut.

  2. Periksa apakah pod mendefinisikan nodeSelector, nodeAffinity, atau toleransi taint. Jika tidak ada kendala penjadwalan semacam itu, pertimbangkan untuk menambahkan lebih banyak node ke kelompok node.

  • 0/x nodes are available: x Insufficient cpu.

  • 0/x nodes are available: x Insufficient memory.

Tidak ada node yang tersedia dalam kluster yang dapat memenuhi permintaan sumber daya CPU atau memori pod.

Node tidak dapat dijadwalkan ketika total alokasi requests mencapai kapasitas maksimum, meskipun penggunaan aktual rendah.

Pada halaman detail kluster target, buka Nodes > Nodes dan periksa tingkat alokasi requests CPU atau memori untuk node target. Anda dapat mengarahkan kursor ke tingkat alokasi untuk melihat nilai alokasi sumber daya spesifik.

Request allocation

Untuk melihat penggunaan sumber daya node secara rinci, lihat Gunakan kubectl untuk melihat penggunaan sumber daya node.

  • Optimalkan konfigurasi sumber daya:

  • Bersihkan workload yang tidak diperlukan: Nonaktifkan atau kurangi jumlah pod yang tidak esensial.

  • Tingkatkan skala kelompok node: Jika penggunaan sumber daya pada node target secara konsisten tinggi, berarti node sudah jenuh. Anda dapat meningkatkan skala kelompok node.

x node(s) didn't match pod's node affinity/selector.

Node yang ada tidak sesuai dengan kebijakan afinitas node pod (nodeAffinity/nodeSelector). Lihat Menetapkan Pod ke Node.

  1. Lihat semua label pada node.

    Konsol

    1. Pada halaman detail kluster target, buka Nodes > Nodes.

    2. Pada halaman Nodes, temukan node target, lalu di kolom Actions, klik More > Manage Labels and Taints untuk melihat label-nya.

    Kubectl

    Ganti <YOUR_NODE_NAME> dengan nama node aktual Anda.

    kubectl get node <YOUR_NODE_NAME> --show-labels
  2. Periksa dan sesuaikan aturan afinitas node untuk workload (deployment).

    Konsol

    Saat membuat workload baru:

    1. Pada halaman Advanced untuk membuat Create Deployment, temukan Node Affinity di bagian Scheduling, lalu klik Add.

    2. Konfigurasikan Required (afinitas keras) atau Optional (afinitas lunak) sesuai kebutuhan bisnis Anda. Beberapa Selector memiliki hubungan logika AND, sedangkan beberapa Rule memiliki hubungan logika OR.

    Untuk workload yang sudah ada:

    1. Pada halaman Nodes > Nodes, klik image > Node Affinity di kolom Actions Deployment target.

    2. Metode konfigurasinya sama seperti yang dijelaskan di atas.

    Contoh YAML

    NodeAffinity

    Kebijakan afinitas mencakup afinitas keras (requiredDuringSchedulingIgnoredDuringExecution), yang harus dipenuhi, dan afinitas lunak (preferredDuringSchedulingIgnoredDuringExecution), yang menyatakan preferensi. Contoh berikut menggunakan afinitas keras.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: app-demo-node-affinity-deploy
      labels:
        app: demo-node-affinity
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: demo-node-affinity
      template:
        metadata:
          labels:
            app: demo-node-affinity
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
          affinity:
            nodeAffinity:
              # Afinitas keras: Aturan ini harus dipenuhi.
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                - matchExpressions:
                  - key: disktype
                    operator: In
                    values:
                    - ssd
                    - nvme  # Logika: Label 'disktype' node harus bernilai 'ssd' atau 'nvme'.

    NodeSelector

    Ini menyediakan pencocokan eksak sederhana. Pod hanya dijadwalkan jika label node memenuhi kondisi tersebut.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: app-demo-node-selector-deploy
      labels:
        app: demo-node-selector
    spec:
      replicas: 2  
      selector:
        matchLabels:
          app: demo-node-selector  
      template:
        metadata:
          labels:
            app: demo-node-selector
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
          # Pod hanya dijadwalkan jika node memiliki label disktype=ssd.
          nodeSelector:
            disktype: ssd
  • x node(s) didn't match pod affinity rules.

  • x node(s) didn't match pod anti-affinity rules.

  • Ketidakcocokan aturan afinitas. Pod memiliki aturan pod affinity (misalnya, memerlukan label tertentu), tetapi tidak ada node yang menjalankan pod dengan label yang cocok, sehingga penjadwalan gagal.

  • Konflik anti-afinitas. Pod memiliki aturan pod anti-affinity (misalnya, tidak boleh berada bersama aplikasi lain), tetapi semua node yang tersedia sudah menjalankan pod yang bertentangan, sehingga penjadwalan gagal.

  1. Lihat label pod pada node.

    Konsol

    1. Pada halaman detail kluster target, buka Nodes > Nodes.

    2. Pada halaman Nodes, klik nama node target untuk membuka halaman detailnya. Gulir ke bawah ke bagian Pods untuk melihat nilai label berbagai pod di kolom Label.

    Kubectl

    • Lihat pod dan label-nya pada node tertentu: Ganti <YOUR_NAMESPACE> dengan nama namespace Anda dan <YOUR_NODE_NAME> dengan nama node aktual Anda.

      kubectl get pods -n <YOUR_NAMESPACE> --field-selector spec.nodeName=<YOUR_NODE_NAME> -o custom-columns=NAME:.metadata.name,LABELS:.metadata.labels
    • Kueri pod berdasarkan label: Ganti <LABEL> dengan pasangan kunci-nilai label aktual, misalnya app=nginx.

      kubectl get pods -A -l <LABEL> -o wide
  2. Periksa dan sesuaikan aturan afinitas pod untuk workload (deployment).

    Konsol

    1. Saat membuat workload baru, pada halaman Create Deployment Advanced, temukan Pod Affinity/Pod Anti-affinity di bagian Scheduling, lalu klik Add.

    2. Konfigurasikan Required (afinitas keras) atau Optional (afinitas lunak) sesuai kebutuhan bisnis Anda. Beberapa Selector memiliki hubungan logika AND, sedangkan beberapa Add Rule memiliki hubungan logika OR.

    Contoh YAML

    Kebijakan afinitas diklasifikasikan menjadi afinitas keras (requiredDuringSchedulingIgnoredDuringExecution) dan afinitas lunak (preferredDuringSchedulingIgnoredDuringExecution). Aturan afinitas keras harus dipenuhi, sedangkan aturan afinitas lunak bersifat preferensi. Contoh berikut menunjukkan konfigurasi untuk pod affinity wajib.

    Untuk mengonfigurasi pod anti-affinity, cukup ganti podAffinity dengan podAntiAffinity.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: app-demo-podaffinity-deploy
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: demo-podaffinity
      template:
        metadata:
          labels:
            app: demo-podaffinity
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
          affinity:
            podAffinity:
              # Afinitas keras: Pod harus berada pada node yang sama dengan pod yang memiliki label 'app: nginx'.
              requiredDuringSchedulingIgnoredDuringExecution:
              - labelSelector:
                  matchExpressions:
                  - key: app
                    operator: In
                    values:
                    - nginx
                # Cakupan domain topologi: isolasi tingkat host.
                topologyKey: kubernetes.io/hostname

0/x nodes are available: x node(s) had volume node affinity conflict.

Penjadwalan gagal karena konflik afinitas node volume. Hal ini biasanya terjadi karena disk cloud tidak dapat dipasang lintas zona berbeda.

  • Untuk PV yang disediakan secara statis, konfigurasikan afinitas node pod agar dijadwalkan ke node dalam zona yang sama dengan PV.

  • Untuk PV yang disediakan secara dinamis, atur volumeBindingMode StorageClass ke WaitForFirstConsumer. Ini memastikan PV dibuat hanya setelah pod dijadwalkan ke node, sehingga disk cloud dibuat dalam zona yang sama dengan node pod.

InvalidInstanceType.NotSupportDiskCategory

Instans ECS tidak mendukung tipe disk cloud yang ditentukan.

Lihat Jenis instans untuk mengonfirmasi tipe disk cloud yang didukung oleh instans ECS Anda. Saat memasang, perbarui tipe disk cloud ke tipe yang didukung oleh instans ECS.

0/x nodes are available: x node(s) had taints that the pod didn't tolerate.

Pod tidak dapat dijadwalkan ke node karena tidak memiliki toleransi terhadap salah satu taint node tersebut.

  • Jika taint ditambahkan secara manual, hapus taint tersebut atau konfigurasikan toleransi untuk pod. Lihat Taints and Tolerations dan Kelola label dan taint node.

  • Jika taint ditambahkan oleh sistem, selesaikan masalah dasar di bawah ini dan tunggu penjadwalan ulang.

    Lihat taint yang ditambahkan oleh sistem

    • node.kubernetes.io/not-ready: Node berada dalam status NotReady.

    • node.kubernetes.io/unreachable: Node tidak dapat dijangkau dari pengontrol node. Ini setara dengan status Ready node menjadi Unknown.

    • node.kubernetes.io/memory-pressure: Node mengalami tekanan memori.

    • node.kubernetes.io/disk-pressure: Node mengalami tekanan disk.

    • node.kubernetes.io/pid-pressure: Node mengalami tekanan PID.

    • node.kubernetes.io/network-unavailable: Jaringan node tidak tersedia.

    • node.kubernetes.io/unschedulable: Node ditandai sebagai tidak dapat dijadwalkan.

0/x nodes are available: x Insufficient ephemeral-storage.

Node memiliki ruang penyimpanan sementara yang tidak mencukupi.

  1. Periksa permintaan penyimpanan sementara Pod, yaitu nilai spec.containers.resources.requests.ephemeral-storage dalam YAML Pod. Jika nilainya terlalu tinggi dan melebihi kapasitas aktual node, Pod akan gagal dijadwalkan.

  2. Periksa total kapasitas penyimpanan sementara pada setiap node dengan kubectl describe node | grep -A10 Capacity. Jika tidak mencukupi, perluas disk node atau tambahkan lebih banyak node.

0/x nodes are available: pod has unbound immediate persistent volume claims.

Pod gagal mengikat klaim volume persisten (PVC).

Periksa apakah PVC atau PV yang ditentukan oleh pod telah dibuat. Jalankan kubectl describe pvc <pvc-name> atau kubectl describe pv <pv-name> untuk melihat event PVC dan PV guna diagnosis lebih lanjut. Lihat FAQ Penyimpanan - CSI.

Pod dijadwalkan tetapi tetap Pending

Jika pod telah dijadwalkan tetapi tetap berstatus Pending, ikuti langkah-langkah berikut.

  1. Jika pod menggunakan hostPort, hanya satu pod dengan hostPort tersebut yang dapat berjalan per node, sehingga hostPort membatasi jumlah Replicas hingga jumlah node. Jika port tersebut sudah digunakan, penjadwalan gagal.

    hostPort menambah kompleksitas penjadwalan. Gunakan Service untuk mengekspos pod sebagai gantinya.

  2. Jika Pod tidak dikonfigurasi dengan hostPort, ikuti langkah-langkah berikut untuk pemecahan masalah.

    1. Lihat event pod dengan kubectl describe pod <pod-name>. Penyebab umum meliputi kegagalan penarikan gambar, sumber daya tidak mencukupi, pembatasan kebijakan keamanan, dan kesalahan konfigurasi.

    2. Jika tidak ditemukan event yang berguna, periksa log kubelet pada node dengan grep -i <pod name> /var/log/messages* | less.

Fase 2: Masalah penarikan gambar

ImagePullBackOff atau ErrImagePull

Status pod ImagePullBackOff atau ErrImagePull menunjukkan bahwa penarikan gambar gagal. Periksa event pod untuk mengidentifikasi penyebabnya.

Pesan error

Deskripsi

Solusi yang disarankan

Failed to pull image "xxx": rpc error: code = Unknown desc = Error response from daemon: Get xxx: denied:

Akses ke repositori gambar ditolak karena imagePullSecret tidak ditentukan saat pod dibuat.

Verifikasi bahwa Secret yang ditentukan dalam field spec.imagePullSecrets file YAML workload ada.

Saat menggunakan ACR, gunakan credential helper untuk menarik gambar tanpa kata sandi. Lihat Tarik gambar dari akun yang sama.

Failed to pull image "xxxx:xxx": rpc error: code = Unknown desc = Error response from daemon: Get https://xxxxxx/xxxxx/: dial tcp: lookup xxxxxxx.xxxxx: no such host

Alamat repositori gambar tidak dapat diselesaikan saat menarik gambar melalui HTTPS.

  1. Verifikasi bahwa alamat repositori gambar dalam spec.containers.image file YAML pod benar. Jika salah, perbarui.

  2. Jika alamatnya benar, verifikasi konektivitas jaringan dari node tempat pod berjalan ke repositori gambar. Masuk ke node tersebut (untuk informasi lebih lanjut, lihat Pilih metode koneksi jarak jauh ECS) dan jalankan perintah curl -kv https://xxxxxx/xxxxx/ untuk memeriksa apakah alamat tersebut dapat diakses. Jika terjadi error, selidiki kemungkinan masalah jaringan, seperti konfigurasi jaringan salah, aturan firewall, atau masalah resolusi DNS.

Failed create pod sandbox: rpc error: code = Unknown desc = failed to create a sandbox for pod "xxxxxxxxx": Error response from daemon: mkdir xxxxx: no space left on device

Node memiliki ruang disk yang tidak mencukupi.

Masuk ke node tersebut (lihat Pilih metode koneksi jarak jauh ECS) dan jalankan df -h untuk memeriksa ruang disk. Jika disk penuh, ubah ukurannya. Lihat Langkah 1: Ubah ukuran disk cloud.

Failed to pull image "xxx": rpc error: code = Unknown desc = error pulling image configuration: xxx x509: certificate signed by unknown authority

Repositori gambar pihak ketiga menggunakan sertifikat yang ditandatangani oleh Certificate Authority (CA) yang tidak dikenal atau tidak aman.

  1. Repositori pihak ketiga sebaiknya menggunakan sertifikat yang dikeluarkan oleh CA tepercaya.

  2. Jika Anda menggunakan repositori gambar pribadi, lihat Buat aplikasi dari repositori gambar pribadi.

  3. Jika Anda tidak dapat mengubah sertifikat, Anda dapat mengonfigurasi node untuk mengizinkan penarikan dan pendorongan gambar dari repositori yang menggunakan sertifikat tidak aman. Kami merekomendasikan metode ini hanya untuk lingkungan pengujian, karena dapat memengaruhi pod lain pada node tersebut.

Lihat langkah-langkah detail

Konsol

Prosedur

Memodifikasi konfigurasi containerd tidak memengaruhi kontainer yang sudah ada. Untuk memastikan stabilitas kluster, lakukan operasi ini selama jam sepi.

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Nodes > Node Pools.

  3. Pada halaman Node Pools, temukan kelompok node yang diinginkan, lalu di kolom Actions-nya, pilih image > Containerd Configuration.

  4. Baca tindakan pencegahan, ikuti petunjuk di layar untuk menambahkan parameter, tentukan node target, dan atur kebijakan batch, lalu klik Submit.

    Lihat Contoh konfigurasi di bawah ini.
    • Jika Anda menghapus konfigurasi runtime kontainer kustom, nilai tersebut secara otomatis kembali ke nilai default.

    • Setelah Anda mengirimkan, pengaturan diterapkan ke node secara bertahap, yang memerlukan waktu. Anda dapat memantau kemajuan dan mengelola pembaruan di area Event Records, seperti menjeda, melanjutkan, atau membatalkannya. Jika pembaruan node gagal, pecahkan masalah tersebut dan klik Continue untuk mencoba lagi.

      Menjeda pembaruan memungkinkan Anda memvalidasi perubahan pada node yang sudah diperbarui. Saat dijeda, node yang sedang diperbarui akan menyelesaikan prosesnya, tetapi pembaruan baru ditunda hingga Anda melanjutkan tugas. Kami merekomendasikan agar Anda menyelesaikan tugas konfigurasi sesegera mungkin. Tugas yang dijeda akan secara otomatis dibatalkan setelah tujuh hari, menghapus semua catatan dan log terkait.

Contoh konfigurasi

Cermin untuk docker.io

Registri pribadi tidak aman

Registri pribadi HTTP

Di bagian Registry mirrors, masukkan docker.io untuk Image registry, masukkan alamat cermin (misalnya, https://example.com) untuk Registry mirror, dan pilih false untuk override_path.

Di bagian Insecure registries, masukkan alamat registri pribadi di field Image registry, dalam format IP address:Port (misalnya, 192.xxx.xxx.xxx:443), dan atur skip_verify ke true untuk melewati validasi sertifikat.

Di bagian Registry mirrors, masukkan alamat registri pribadi (misalnya, 192.xxx.1) untuk Image registry, masukkan alamat HTTP yang sesuai (misalnya, http://192.xxx.1) untuk Registry mirror, dan pilih false untuk override_path. Anda dapat mengklik + Add untuk menambahkan lebih banyak pemetaan cermin registri.

CLI

  1. Buat direktori sertifikat untuk containerd guna menyimpan file konfigurasi sertifikat untuk repositori gambar tertentu.

    mkdir -p /etc/containerd/cert.d/xxxxx
  2. Konfigurasikan containerd untuk memercayai repositori gambar tidak aman tertentu.

    cat << EOF > /etc/containerd/cert.d/xxxxx/hosts.toml
       server = "https://harbor.test-cri.com"
       [host."https://harbor.test-cri.com"]
         capabilities = ["pull", "resolve", "push"]
         skip_verify = true
         # ca = "/opt/ssl/ca.crt"  # Atau unggah sertifikat CA
       EOF
  3. Modifikasi konfigurasi daemon Docker untuk menambahkan repositori tidak aman.

    vi /etc/docker/daemon.json

    Tambahkan konten berikut. Ganti your-insecure-registry dengan alamat repositori pribadi Anda.

       {
         "insecure-registries": ["your-insecure-registry"]
       }
  4. Restart layanan containerd agar perubahan diterapkan.

    systemctl restart containerd

Failed to pull image "XXX": rpc error: code = Unknown desc = context canceled

Operasi dibatalkan, kemungkinan karena file gambar terlalu besar. Kubernetes memiliki batas waktu default untuk menarik gambar. Jika penarikan tidak menunjukkan kemajuan dalam periode tertentu, Kubernetes menganggap operasi gagal atau tidak responsif dan membatalkan tugas.

  1. Verifikasi bahwa imagePullPolicy diatur ke IfNotPresent dalam file YAML pod.

  2. Masuk ke node tempat pod berjalan (untuk informasi lebih lanjut, lihat Pilih metode koneksi jarak jauh ECS) dan jalankan docker pull atau crictl pull untuk memeriksa apakah gambar dapat ditarik.

Failed to pull image "xxxxx": rpc error: code = Unknown desc = Error response from daemon: Get https://xxxxxxx: xxxxx/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

Tidak dapat terhubung ke repositori gambar karena masalah jaringan.

  1. Masuk ke node tempat pod berjalan (untuk informasi lebih lanjut, lihat Pilih metode koneksi jarak jauh ECS) dan jalankan perintah curl https://xxxxxx/xxxxx/ untuk memeriksa apakah alamat tersebut dapat diakses. Jika terjadi error, selidiki kemungkinan masalah jaringan, seperti konfigurasi jaringan salah, aturan firewall, atau masalah resolusi DNS.

  2. Verifikasi kebijakan jaringan publik node, termasuk konfigurasi untuk entri SNAT dan Alamat IP Elastis (EIP) yang terikat.

Failed to pull image "xxxx:xxx": failed to pull and unpack image "xxxx:xxx": failed to resolve reference "xxxx:xxx": failed to do request: Head "xxxx:xxx": dial tcp xxx.xxx.xx.x:xxx: i/o timeout

Koneksi habis waktu karena masalah jaringan saat menarik gambar dari repositori luar negeri.

Menarik gambar dari repositori luar negeri, seperti Docker Hub, dapat gagal di kluster ACK karena jaringan penyedia layanan yang tidak stabil. Untuk mengatasi hal ini, pertimbangkan solusi berikut:

Too Many Requests.

Docker Hub memberlakukan pembatasan laju pada permintaan penarikan gambar.

Unggah gambar ke Container Registry (ACR) dan tarik dari repositori gambar ACR.

Status Pulling image terus-menerus ditampilkan

Mekanisme pembatasan laju penarikan gambar kubelet mungkin telah dipicu.

Sesuaikan registryPullQPS (QPS maksimum untuk repositori gambar) dan registryBurst (jumlah maksimum penarikan gambar burst) menggunakan fitur Sesuaikan konfigurasi kubelet kelompok node.

Fase 3: Masalah startup

Pod dalam status Init

Pesan error

Deskripsi

Solusi

Terkunci dalam status Init:N/M

Pod memiliki M init container; N selesai, tetapi M-N sisanya gagal dimulai.

  1. Periksa event pod dan masalah init container dengan kubectl describe pod -n <ns> <pod name>.

  2. Periksa log init container yang belum dimulai dengan kubectl logs -n <ns> <pod name> -c <container name>.

  3. Tinjau konfigurasi pod, seperti pengaturan pemeriksaan kesehatan, untuk memastikan init container dikonfigurasi dengan benar.

Lihat Debug Init Containers.

Terkunci dalam status Init:Error

Salah satu init container dalam pod gagal dimulai.

Terkunci dalam status Init:CrashLoopBackOff

Salah satu init container dalam pod gagal dimulai dan berada dalam loop restart.

Pod dalam status Creating

Pesan error

Deskripsi

Solusi

failed to allocate for range 0: no IP addresses available in range set: xx.xxx.xx.xx-xx.xx.xx.xx

Ini adalah perilaku yang diharapkan karena desain plugin jaringan Flannel.

Tingkatkan komponen Flannel ke v0.15.1.11-7e95fe23-aliyun atau versi yang lebih baru. Lihat Flannel.

Pada kluster yang menjalankan versi Kubernetes sebelum 1.20, kebocoran alamat IP dapat terjadi jika pod restart berulang kali atau jika pod dari CronJob menyelesaikan tugasnya dan keluar dengan cepat.

Tingkatkan kluster ke Kubernetes 1.20 atau versi yang lebih baru (disarankan versi terbaru). Lihat Tingkatkan kluster secara manual.

Cacat pada containerd dan runC menyebabkan masalah ini.

Untuk perbaikan darurat, lihat Mengapa pod saya gagal dimulai dengan error "no IP addresses available in range"?

error parse config, can't found dev by mac 00:16:3e:01:c2:e8: not found

Plugin jaringan Terway memelihara basis data internal pada node untuk melacak dan mengelola elastic network interfaces (ENIs). Error ini terjadi ketika status basis data tidak konsisten dengan konfigurasi perangkat jaringan aktual, menyebabkan alokasi ENI gagal.

  1. Antarmuka jaringan dimuat secara asinkron. Antarmuka mungkin masih dimuat selama konfigurasi CNI, yang memicu percobaan ulang CNI otomatis. Proses ini tidak memengaruhi alokasi ENI akhir. Periksa status akhir pod untuk mengonfirmasi keberhasilan.

  2. Jika pembuatan pod tetap gagal dan error ini berlanjut, driver kemungkinan gagal memuat ENI karena memori orde tinggi tidak mencukupi. Restart instans ECS untuk mengatasi hal ini.

  • cmdAdd: error alloc ip rpc error: code = DeadlineExceeded desc = context deadline exceeded

  • cmdAdd: error alloc ip rpc error: code = Unknown desc = error wait pod eni info, timed out waiting for the condition

Plugin jaringan Terway mungkin gagal meminta alamat IP dari vSwitch.

  1. Lihat log kontainer Terway dalam pod komponen Terway pada node untuk memeriksa proses alokasi ENI.

  2. Lihat informasi ENI untuk pod Terway dengan kubectl logs -n kube-system  <terwayPodName > -c terway | grep <podName>. Dapatkan Request ID dan pesan error OpenAPI.

  3. Gunakan Request ID dan pesan error untuk menyelidiki kegagalan tersebut.

Pod gagal dimulai (CrashLoopBackOff)

Pesan error

Deskripsi

Solusi

Log berisi exit(0).

  1. Masuk ke node tempat workload tidak normal ditempatkan.

  2. Gunakan docker ps -a | grep $podName untuk memeriksa. Jika kontainer tidak memiliki proses persisten, kontainer tersebut keluar dengan kode status 0.

Event pod menunjukkan Liveness probe failed: ....

Pemeriksaan kelangsungan hidup (liveness probe) gagal, menyebabkan aplikasi restart.

  • Konfigurasi liveness probe: Pada halaman Edit Workloads target, verifikasi bahwa path permintaan pemeriksaan kesehatan (misalnya, /healthz) dan port sesuai dengan yang disediakan oleh aplikasi. Tingkatkan Initial Delay (s) untuk memastikan liveness probe dimulai hanya setelah aplikasi sepenuhnya diluncurkan.

    Anda dapat sementara menonaktifkan Liveness. Kemudian, akses terminal pod atau node hostnya dan gunakan perintah seperti curl untuk memverifikasi bahwa metode pemeriksaan kesehatan berfungsi dengan benar.
  • Pecahkan masalah aplikasi: Selidiki masalah dengan memeriksa Events dan Log pod. Pilih Show the log of the last container exit.

Event pod menunjukkan Startup probe failed: ....

Pemeriksaan startup (startup probe) gagal, menyebabkan aplikasi restart.

  • Konfigurasi startup probe: Pada halaman Edit Workloads target, verifikasi bahwa path permintaan pemeriksaan kesehatan (misalnya, /healthz) dan port sesuai dengan yang disediakan oleh aplikasi. Jika aplikasi memerlukan waktu lama untuk memulai, tingkatkan Unhealthy Threshold untuk mencegah restart prematur.

    Anda dapat sementara menonaktifkan Startup. Kemudian, akses terminal pod atau node hostnya dan gunakan perintah seperti curl untuk memverifikasi bahwa metode pemeriksaan kesehatan berfungsi dengan benar.
  • Pecahkan masalah aplikasi: Selidiki masalah dengan memeriksa Events dan Logs pod. Pilih Show the log of the last container exit.

Log pod berisi no space left on device.

Ruang disk cloud tidak mencukupi.

  • Ubah ukuran disk cloud.

  • Bersihkan gambar yang tidak diperlukan untuk membebaskan ruang disk, dan konfigurasikan imageGCHighThresholdPercent untuk mengatur ambang batas pengumpulan sampah gambar pada node.

Startup gagal tanpa informasi event.

Masalah ini terjadi ketika kontainer memerlukan lebih banyak sumber daya daripada batas yang dideklarasikan, menyebabkan kegagalan.

Periksa apakah konfigurasi sumber daya pod benar. Anda dapat mengaktifkan profil sumber daya untuk mendapatkan rekomendasi konfigurasi Request dan Limit untuk kontainer.

Log pod menunjukkan Address already in use.

Terjadi konflik port antar kontainer dalam pod yang sama.

  1. Periksa apakah pod dikonfigurasi dengan hostNetwork: true. Pengaturan ini menyebabkan kontainer dalam pod berbagi namespace jaringan dan ruang port host. Jika tidak diperlukan, ubah menjadi hostNetwork: false.

  2. Jika pod memerlukan hostNetwork: true, konfigurasikan pod anti-affinity untuk memastikan pod dari set replika yang sama dijadwalkan ke node berbeda.

  3. Verifikasi bahwa tidak ada pod lain pada node yang sama yang menggunakan port tersebut.

Log pod menunjukkan container init caused "setenv: invalid argument": unknown.

Workload memasang Secret, tetapi nilai dalam Secret tidak di-encode Base64.

  • Buat Secret di konsol (nilainya secara otomatis di-encode Base64). Lihat Kelola Secret.

  • Buat Secret dari file YAML dan encode Base64 nilai secara manual dengan menjalankan perintah echo -n "xxxxx" | base64.

Masalah spesifik aplikasi.

Periksa log pod untuk memecahkan masalah tersebut.

Pod Running tetapi tidak ready (Ready: False)

Pesan error

Deskripsi

Solusi

image Event pod menunjukkan Readiness probe failed: ....

Pemeriksaan kesiapan (readiness probe) gagal, sehingga pod target tidak menerima trafik.

  • Konfigurasi readiness probe: Pada halaman Edit Workloads target, verifikasi bahwa path pemeriksaan kesehatan (misalnya, /healthz) dan port sesuai dengan aplikasi. Jika aplikasi memulai dengan lambat, tingkatkan Unhealthy Threshold untuk menghindari kegagalan prematur.

    Nonaktifkan sementara Readiness, lalu gunakan curl dari terminal pod atau host untuk memverifikasi titik akhir pemeriksaan kesehatan.
  • Pecahkan masalah aplikasi: Selidiki masalah dengan memeriksa Events dan Logs pod. Pilih Show the log of the last container exit.

Status pod sama seperti di atas. Event pod menunjukkan Startup probe failed: ....

Pemeriksaan startup (startup probe) yang gagal menyebabkan kontainer restart. Error ini seharusnya tidak menghasilkan status Running/NotReady yang persisten, melainkan status 'CrashLoopBackOff'.

Pecahkan masalah ini seperti yang dijelaskan dalam bagian "Pod gagal dimulai (CrashLoopBackOff)" untuk Startup.

Fase 4: Masalah runtime Pod

OOMKilled

Ketika kontainer melebihi batas memorinya, kontainer tersebut dihentikan oleh OOM kill. Lihat Tetapkan Sumber Daya Memori untuk Kontainer dan Pod.

  • Jika proses yang dihentikan adalah proses utama kontainer, kontainer tersebut mungkin restart secara tak terduga.

  • Saat event OOM terjadi, event tersebut muncul di tab Events halaman detail pod di konsol, seperti pod was OOM killed. node:XXX pod:XXX namespace:XXX.

  • Konfigurasikan peringatan pengecualian replika kontainer untuk menerima notifikasi OOM.

Tingkat OOM

Deskripsi

Solusi yang direkomendasikan

Tingkat OS

Periksa log kernel di /var/log/messages pada node pod. Jika log menunjukkan proses yang dihentikan tetapi tidak berisi log cgroup, event OOM terjadi pada tingkat OS.

Tingkat cgroup

Periksa log kernel di /var/log/messages pada node pod. Jika log berisi pesan error serupa Task in /kubepods.slice/xxxxx killed as a result of limit of /kubepods.slice/xxxx, event OOM terjadi pada tingkat cgroup.

Lihat Penyebab dan solusi untuk OOM Killer.

Terminating

Kemungkinan penyebab

Deskripsi

Solusi yang direkomendasikan

Node berada dalam status NotReady.

Pod secara otomatis dihapus setelah node pulih dari status NotReady.

Pod dikonfigurasi dengan finalizer.

Jika pod dikonfigurasi dengan finalizer, Kubernetes melakukan operasi pembersihan yang ditentukan oleh finalizer sebelum menghapus pod. Jika operasi pembersihan gagal merespons, pod tetap dalam status Terminating.

Periksa konfigurasi finalizer pod dengan kubectl get pod -n <ns> <pod name> -o yaml dan selidiki penyebabnya.

Hook preStop pod tidak valid atau macet.

Jika hook preStop dikonfigurasi untuk pod, Kubernetes mengeksekusi hook tersebut sebelum menghentikan kontainer. Pod tetap dalam status Terminating selama hook berjalan.

Periksa konfigurasi hook preStop pod dengan kubectl get pod -n <ns> <pod name> -o yaml dan selidiki penyebabnya.

Periode shutdown yang mulus dikonfigurasi untuk pod.

Jika Pod dikonfigurasi dengan periode shutdown yang mulus (terminationGracePeriodSeconds), Pod memasuki status Terminating setelah menerima perintah penghentian, seperti kubectl delete pod <pod_name>. Kubernetes menganggap Pod berhasil dimatikan hanya setelah waktu yang ditentukan dalam terminationGracePeriodSeconds berlalu atau kontainer keluar.

Kubernetes secara otomatis menghapus pod setelah kontainer menyelesaikan shutdown yang mulus.

Kontainer tidak responsif.

Saat Anda meminta menghentikan atau menghapus pod, Kubernetes mengirim sinyal SIGTERM ke kontainer dalam pod. Jika kontainer tidak menangani sinyal SIGTERM dengan benar selama penghentian, pod mungkin tetap dalam status Terminating.

  1. Hapus pod secara paksa dengan kubectl delete pod <pod-name> --grace-period=0 --force.

  2. Periksa log containerd atau Docker pada node pod untuk investigasi lebih lanjut.

Evicted

Kemungkinan penyebab

Deskripsi

Solusi yang direkomendasikan

Node mengalami tekanan sumber daya akibat faktor seperti penggunaan memori atau disk.

Node mungkin mengalami tekanan memori, tekanan disk, atau tekanan PID.

  • Periksa taint node dengan kubectl describe node <node name> | grep Taints. Output mungkin mencakup:

    • Tekanan memori: Node memiliki taint node.kubernetes.io/memory-pressure.

    • Tekanan disk: Node memiliki taint node.kubernetes.io/disk-pressure.

    • Tekanan PID: Node memiliki taint node.kubernetes.io/pid-pressure.

  • Status pod adalah salah satu dari berikut:

    • Evicted

    • ContainerStatusUnknown, dan field reason dalam file YAML pod menunjukkan Evicted.

Eviksi tidak terduga terjadi.

Taint NoExecute yang ditambahkan secara manual pada node pod menyebabkan eviksi tidak terduga.

Periksa adanya taint NoExecute dengan kubectl describe node <node name> | grep Taints. Jika ada, hapus taint tersebut.

Eviksi tidak berjalan sesuai harapan.

  • --pod-eviction-timeout: Pod pada node yang gagal dievksi setelah periode waktu habis ini. Defaultnya adalah 5 menit.

  • --node-eviction-rate: Jumlah pod yang dievksi dari node per detik. Defaultnya adalah 0,1, artinya paling banyak satu pod dievksi dari node setiap 10 detik.

  • --secondary-node-eviction-rate: Laju eviksi node sekunder. Jika terlalu banyak node dalam kluster gagal, laju eviksi dikurangi menjadi nilai ini. Defaultnya adalah 0,01.

  • --unhealthy-zone-threshold: Ambang batas zona ketersediaan tidak sehat. Defaultnya adalah 0,55. Ketika fraksi node yang gagal dalam zona ketersediaan melebihi ambang batas ini, zona tersebut dianggap tidak sehat.

  • --large-cluster-size-threshold: Ambang batas ukuran kluster besar. Defaultnya adalah 50. Kluster dianggap besar ketika memiliki lebih dari 50 node.

Dalam kluster kecil (50 node atau kurang), jika lebih dari 55% node gagal, eviksi pod berhenti. Lihat Batas laju pada eviksi.

Dalam kluster besar (lebih dari 50 node), jika fraksi node tidak sehat melebihi --unhealthy-zone-threshold (default 0,55), laju eviksi turun menjadi --secondary-node-eviction-rate (default 0,01 pod per detik). Lihat Batas laju pada eviksi.

Pod sering dijadwalkan ulang ke node asalnya setelah dievksi.

Kubelet mengevksi pod berdasarkan penggunaan sumber daya aktual, sedangkan penjadwal menempatkan pod berdasarkan permintaan sumber daya. Karena eviksi membebaskan sumber daya, penjadwal mungkin menjadwalkan ulang pod ke node yang sama jika permintaannya masih muat.

Sesuaikan permintaan sumber daya pod agar sesuai dengan sumber daya yang dapat dialokasikan node. Lihat Tetapkan sumber daya CPU dan memori untuk kontainer. Aktifkan profil sumber daya untuk mendapatkan nilai request dan limit yang direkomendasikan.

Completed

Semua kontainer keluar dengan sukses. Umum terjadi pada job dan init container.

FAQ

Pod berjalan tetapi tidak berfungsi

Error YAML dapat menyebabkan pod masuk status Running tetapi gagal berfungsi.

  1. Verifikasi pengaturan kontainer dalam konfigurasi pod.

  2. Gunakan metode berikut untuk memeriksa konfigurasi YAML Anda terhadap kesalahan ejaan.

    Jika kunci YAML salah eja (misalnya, command sebagai commnd), kluster membuat resource tanpa error tetapi tidak dapat mengeksekusi kunci yang salah eja tersebut saat runtime.

    Contoh berikut, di mana command salah eja sebagai commnd, menjelaskan cara memecahkan masalah ejaan.

    1. Tambahkan --validate ke kubectl apply -f dan jalankan kubectl apply --validate -f XXX.yaml .

      Jika Anda salah mengeja kata, error dilaporkan: XXX] unknown field: commnd XXX] this may be a false alarm, see https://gXXXb.XXX/6842pods/test.

    2. Bandingkan file output pod.yaml dengan file YAML asli yang digunakan untuk membuat pod.

      Catatan

      [$Pod] adalah nama Pod yang tidak normal, yang dapat Anda peroleh dengan menjalankan perintah kubectl get pods.

        kubectl get pods [$Pod] -o yaml > pod.yaml
      • Jika file pod.yaml memiliki lebih banyak baris daripada file aslinya, berarti pod dibuat seperti yang diharapkan, dan kluster menambahkan nilai default.

      • Jika baris dari file YAML asli Anda hilang dari pod.yaml, ini menunjukkan adanya kesalahan ejaan dalam file asli Anda.

  3. Periksa log pod untuk memecahkan masalah tersebut.

  4. Akses kontainer melalui terminal dan verifikasi bahwa file lokal dalam kontainer sesuai harapan.

Periksa penggunaan sumber daya node dengan kubectl

  1. Periksa penggunaan CPU dan memori semua node dalam kluster.

    kubectl describe nodes | awk '/^Name:/{print "\n"$2} /Resource +Requests +Limits/{print $0} /^[ \t]+cpu.*%/{print $0} /^[ \t]+memory.*%/{print $0}'

    Output yang diharapkan:

    cn-hangzhou.192.168.0.xxx
      Resource           Requests      Limits
      cpu                1725m (44%)   10320m (263%)
      memory             1750Mi (11%)  16044Mi (109%)
    
    cn-hangzhou.192.168.16.xxx
      Resource           Requests      Limits
      cpu                1885m (48%)   16820m (429%)
      memory             2536Mi (17%)  25760Mi (179%)

    Node dengan pemanfaatan request tinggi mungkin tidak dapat memenuhi requests Pod baru, sehingga mencegah Pod dijadwalkan.

  2. Ganti YOUR_NODE_NAME dengan nama node aktual untuk melihat penggunaan sumber daya semua Pod pada node tersebut.

    kubectl describe node YOUR_NODE_NAME | awk '/Non-terminated Pods/,/Allocated resources/{ if ($0 !~ /Allocated resources/) print }'

    Output yang diharapkan:

    Non-terminated Pods:          (11 in total)
      Namespace                   Name                                                        CPU Requests  CPU Limits   Memory Requests  Memory Limits  Age
      ---------                   ----                                                        ------------  ----------   ---------------  -------------  ---
      arms-prom                   node-exporter-gp95p                                         20m (0%)      1020m (26%)  160Mi (1%)       1152Mi (7%)    6d21h
      csdr                        csdr-velero-77c8bbc9c7-w46lq                                500m (12%)    1 (25%)      128Mi (0%)       2Gi (13%)      6d19h
      kube-system                 ack-cost-exporter-5b647ffc65-zdrsl                          100m (2%)     1 (25%)      200Mi (1%)       1Gi (6%)       6d21h
      kube-system                 ack-node-local-dns-admission-controller-5dfd74f5f4-9rl6n    100m (2%)     1 (25%)      100Mi (0%)       1Gi (6%)       6d21h
      kube-system                 ack-node-problem-detector-daemonset-6wql2                   200m (5%)     1200m (30%)  300Mi (2%)       1324Mi (9%)    6d21h
      kube-system                 coredns-7784559f6-dr9sn                                     100m (2%)     0 (0%)       100Mi (0%)       2Gi (13%)      6d21h
      kube-system                 csi-plugin-knz7j                                            130m (3%)     2 (51%)      176Mi (1%)       4Gi (27%)      6d21h
      kube-system                 kube-proxy-worker-rkbzv                                     100m (2%)     0 (0%)       100Mi (0%)       0 (0%)         6d21h
      kube-system                 loongcollector-ds-kw7cj                                     100m (2%)     2 (51%)      256Mi (1%)       2Gi (13%)      6d21h
      kube-system                 node-local-dns-pgzcn                                        25m (0%)      0 (0%)       30Mi (0%)        1Gi (6%)       6d21h
      kube-system                 terway-eniip-lnn8n                                          350m (8%)     1100m (28%)  200Mi (1%)       256Mi (1%)     6d21h

    Anda dapat menyesuaikan konfigurasi requests berdasarkan konsumsi sumber daya aktual.

Putus jaringan intermiten dari pod ke database

Jika pod terputus secara intermiten dari database, ikuti langkah-langkah berikut.

1. Periksa pod
  • Periksa event pod untuk tanda-tanda ketidakstabilan koneksi, seperti masalah jaringan, restart, atau sumber daya tidak mencukupi.

  • Periksa log pod untuk pesan error apa pun yang terkait dengan koneksi database, seperti timeout, kegagalan autentikasi, atau pemicu koneksi ulang.

  • Monitor penggunaan CPU dan memori pod untuk memastikan kehabisan sumber daya tidak menyebabkan aplikasi atau driver database crash.

  • Tinjau requests dan limits sumber daya pod untuk memastikan memiliki CPU dan memori yang cukup.

2. Periksa node
  • Periksa node untuk kekurangan sumber daya (memori, disk). Lihat Monitor node.

  • Uji gangguan jaringan intermiten antara node dan database target.

3. Periksa database
  • Periksa status dan metrik kinerja database untuk restart atau bottleneck kinerja apa pun.

  • Tinjau jumlah koneksi abnormal dan pengaturan timeout koneksi, lalu sesuaikan berdasarkan kebutuhan aplikasi Anda.

  • Periksa log database untuk catatan apa pun yang terkait dengan pemutusan koneksi.

4. Periksa status komponen kluster

Komponen kluster yang rusak dapat mengganggu komunikasi jaringan pod.

kubectl get pod -n kube-system  # Periksa status pod komponen.

Juga, periksa komponen jaringan berikut:

  • CoreDNS: Periksa status dan log komponen untuk memastikan pod dapat menyelesaikan alamat layanan database dengan benar.

  • Flannel: Periksa status dan log komponen kube-flannel.

  • Terway: Periksa status dan log komponen terway-eniip.

5. Analisis trafik jaringan

Anda dapat menggunakan tcpdump untuk menangkap paket dan menganalisis trafik jaringan guna membantu mengidentifikasi penyebab masalah.

  1. Dapatkan informasi Pod dan node:

    Daftar pod dan node-nya dalam namespace tertentu:

    kubectl  get pod -n [namespace] -o wide 
  2. Masuk ke node target dan jalankan perintah berikut untuk menemukan PID kontainer.

    Containerd

    1. Lihat CONTAINER kontainer.

      crictl ps |grep <Pod name keyword>

      Output yang diharapkan:

      CONTAINER           IMAGE               CREATED             STATE                      
      a1a214d2*****       35d28df4*****       2 days ago          Running
    2. Lihat PID kontainer menggunakan CONTAINER ID.

      crictl inspect a1a214d2***** |grep -i PID

      Output yang diharapkan:

          "pid": 2309838,    # PID kontainer target.
                  "pid": 1
                  "type": "pid"

    Docker

    1. Lihat CONTAINER ID kontainer.

      docker ps |grep <pod name keyword>

      Output yang diharapkan:

      CONTAINER ID        IMAGE                  COMMAND     
      a1a214d2*****       35d28df4*****          "/nginx
    2. Lihat PID kontainer menggunakan CONTAINER ID.

      docker inspect  a1a214d2***** |grep -i PID

      Output yang diharapkan:

                  "Pid": 2309838,  # PID kontainer target.
                  "PidMode": "",
                  "PidsLimit": null,
  3. Tangkap paket.

    Tangkap paket jaringan antara pod dan database target menggunakan PID kontainer.

    nsenter -t <container PID> tcpdump -i any -n -s 0 tcp and host <database IP address> 

    Tangkap paket jaringan antara pod dan host menggunakan PID kontainer.

    nsenter -t <container PID> tcpdump -i any -n -s 0 tcp and host <node IP address>

    Tangkap paket jaringan antara host dan database.

    tcpdump -i any -n -s 0 tcp and host <database IP address> 
6. Optimalkan aplikasi
  • Implementasikan mekanisme koneksi ulang otomatis dalam aplikasi Anda untuk memastikan koneksi dapat dipulihkan secara otomatis selama alih bencana atau migrasi database.

  • Gunakan koneksi persisten alih-alih koneksi singkat untuk berkomunikasi dengan database. Koneksi persisten dapat secara signifikan mengurangi overhead kinerja dan konsumsi sumber daya, meningkatkan efisiensi sistem secara keseluruhan.

Pemecahan masalah konsol

Masuk ke Konsol ACK dan buka halaman detail kluster Anda untuk memecahkan masalah Pod.

Tindakan

Konsol

Periksa status Pod

  1. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

  2. Di pojok kiri atas halaman Pods, pilih Namespace Pod dan periksa statusnya.

    • Jika statusnya Running, Pod berfungsi seperti yang diharapkan.

    • Jika statusnya bukan Running, Pod berada dalam status tidak normal. Lihat topik ini untuk langkah-langkah pemecahan masalah.

Periksa informasi dasar Pod

  1. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

  2. Di pojok kiri atas halaman Pods, pilih Namespace Pod target. Lalu, klik nama Pod atau klik Details di kolom Actions untuk melihat detail seperti nama Pod, gambar, alamat IP, dan node tempatnya berjalan.

Periksa konfigurasi Pod

  1. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

  2. Di pojok kiri atas halaman Pods, pilih Namespace Pod target. Lalu, klik nama Pod atau klik Details di kolom Actions.

  3. Di pojok kanan atas halaman detail Pod, klik Edit YAML untuk melihat file konfigurasi YAML Pod.

Periksa event Pod

  1. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

  2. Di pojok kiri atas halaman Pods, pilih Namespace Pod target. Lalu, klik nama Pod atau klik Details di kolom Actions.

  3. Di bagian bawah halaman detail Pod, klik tab Events untuk melihat event Pod.

    Catatan

    Secara default, Kubernetes menyimpan event selama satu jam terakhir. Untuk menyimpan event lebih lama, lihat Buat dan gunakan Pusat Insiden K8s.

Lihat log Pod

  1. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

  2. Di pojok kiri atas halaman Pods, pilih Namespaces Pod target. Lalu, klik nama Pod atau klik Details di kolom Actions.

  3. Di bagian bawah halaman detail Pod, klik tab Logs untuk melihat log Pod.

Catatan

ACK terintegrasi dengan Simple Log Service (SLS) untuk pengumpulan log kontainer. Lihat Kumpulkan log kontainer dari kluster ACK.

Periksa data pemantauan Pod

  1. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Operations > Prometheus Monitoring.

  2. Pada halaman Prometheus Monitoring, klik tab Cluster Overview untuk melihat dashboard pemantauan CPU, memori, dan I/O jaringan Pod.

Catatan

ACK terintegrasi dengan Managed Service for Prometheus untuk pemantauan kluster dan kontainer secara real-time. Lihat Hubungkan ke dan konfigurasikan Managed Service for Prometheus.

Gunakan terminal untuk mengakses kontainer dan melihat file lokal

  1. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

  2. Pada halaman Pods, temukan Pod target dan klik Terminal di kolom Actions.

Jalankan diagnostik Pod

  1. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

  2. Pada halaman Pods, temukan Pod target dan klik Diagnose di kolom Actions. Selesaikan masalah yang teridentifikasi berdasarkan hasil diagnostik.

Catatan

Container Intelligent Service menyediakan diagnostik satu klik. Lihat Gunakan diagnostik kluster.

Penghapusan Pod yang tidak terduga

kube-controller-manager (KCM) melakukan garbage-collect terhadap pod dalam status Completed ketika jumlahnya melebihi ambang batas default 12.500. Parameter --terminated-pod-gc-threshold mengonfigurasi ambang batas ini. Lihat dokumentasi parameter KCM.

Rekomendasi: Bersihkan secara berkala pod Completed untuk mencegahnya memengaruhi efisiensi pengontrol.