Skip to content

Manajemen Container - CRI (containerd/CRI-O)

Vapor mendukung runtime yang kompatibel dengan Container Runtime Interface (CRI) termasuk containerd dan CRI-O. Ini menyediakan manajemen container yang kompatibel dengan Kubernetes tanpa Docker.

Prasyarat

  • containerd atau CRI-O harus terinstal dan berjalan
  • Izin yang sesuai untuk mengakses socket CRI
  • Tool CLI crictl (otomatis digunakan oleh Vapor)

Runtime yang Didukung

containerd

  • Runtime default untuk banyak distribusi Kubernetes
  • Lokasi socket: /run/containerd/containerd.sock
  • Ringan dan efisien

CRI-O

  • Dibuat khusus untuk Kubernetes
  • Lokasi socket: /var/run/crio/crio.sock
  • Runtime yang sesuai dengan OCI
  1. Dari menu utama, klik Containers
  2. Vapor otomatis mendeteksi runtime CRI yang tersedia

Deteksi Runtime

Vapor otomatis mendeteksi runtime mana yang tersedia:

  1. Pertama memeriksa socket containerd
  2. Kemudian memeriksa socket CRI-O
  3. Kembali ke Docker jika tidak ada runtime CRI ditemukan

Runtime yang aktif ditampilkan di status bar atas.

Container

Tampilan Containers menampilkan semua container yang dikelola oleh runtime CRI.

Daftar Container

Setiap container menampilkan:

  • Container ID (dipotong)
  • Nama dan namespace
  • Referensi image
  • State (Running, Exited, Unknown)
  • Timestamp dibuat
  • Asosiasi Pod

Status Container

Container CRI dapat berada dalam status berikut:

  • Running: Container sedang berjalan aktif
  • Exited: Container telah berhenti
  • Unknown: Status tidak dapat ditentukan
  • Created: Container dibuat tapi belum dimulai

Mengelola Container

Melihat Detail Container

Klik pada container untuk melihat:

  • Container ID lengkap
  • Image ID dan digest
  • Pod sandbox ID
  • Label dan anotasi
  • Waktu dibuat dan dimulai
  • Exit code (jika berhenti)

Log Container

  1. Klik tombol Logs
  2. Lihat streaming log
  3. Opsi:
    • Ikuti log secara real-time
    • Tampilkan timestamp
    • Batasi jumlah baris
    • Filter berdasarkan rentang waktu

Menjalankan Perintah

  1. Klik tombol Exec
  2. Pilih atau masukkan perintah untuk dijalankan
  3. Membuka sesi terminal interaktif
  4. Mendukung shell standar (sh, bash)

Menghapus Container

  1. Hentikan container terlebih dahulu (jika berjalan)
  2. Klik Remove di menu aksi
  3. Konfirmasi penghapusan

Catatan: Di lingkungan CRI, container biasanya dikelola oleh Kubernetes. Manipulasi langsung harus dilakukan dengan hati-hati.

Images

Bagian Images mengelola container images.

Daftar Image

Menampilkan image yang di-cache dengan:

  • Repository dan tag image
  • Image ID
  • Ukuran
  • Jumlah container yang menggunakannya

Operasi Image

Pull Image

  1. Klik Pull Image
  2. Masukkan referensi image lengkap:
    • Docker Hub: docker.io/library/nginx:latest
    • Registry lain: quay.io/coreos/flannel:latest
  3. Konfigurasi autentikasi jika diperlukan
  4. Klik Pull

Menghapus Image

  1. Pastikan tidak ada container yang menggunakan image
  2. Klik Remove di menu aksi
  3. Konfirmasi penghapusan

Catatan: Penghapusan image di CRI lebih ketat daripada Docker. Image yang sedang digunakan tidak dapat dihapus.

Pod (Khusus CRI)

Runtime CRI mengorganisir container ke dalam pod (bahkan container tunggal).

Informasi Pod

Setiap pod menampilkan:

  • Pod ID
  • Nama dan namespace
  • State
  • Network namespace
  • Waktu dibuat

Operasi Pod

  • List Pods: Lihat semua pod sandbox
  • Pod Status: Periksa status pod detail
  • Remove Pod: Hapus pod dan container-nya

Integrasi Kubernetes

Saat berjalan di node Kubernetes:

Informasi Node

  • Nama dan role node
  • Versi container runtime
  • Versi Kubernetes
  • Informasi plugin CNI

Container Kubernetes

  • Container sistem (namespace kube-system)
  • Container aplikasi
  • Init container
  • Sidecar container

Perbedaan CRI vs Docker

Fitur Tersedia di CRI

  • Lifecycle container dasar (start, stop, remove)
  • Melihat log
  • Eksekusi perintah
  • Pull dan remove image
  • Manajemen pod

Fitur TIDAK Tersedia di CRI

  • Pembuatan container (dikelola oleh Kubernetes)
  • Restart container (dikelola oleh kubelet)
  • Pause/unpause container
  • Build image
  • Manajemen volume (dikelola oleh Kubernetes)
  • Manajemen network (dikelola oleh CNI)

Perbedaan Penting

  1. Pembuatan Container: Container harus dibuat melalui Kubernetes, bukan langsung
  2. Networking: Dikelola oleh plugin CNI, tidak dapat dikonfigurasi langsung
  3. Storage: Volume dikelola oleh Kubernetes, bukan CRI
  4. Format Image: Menggunakan format OCI, kompatibel dengan Docker images

Bekerja dengan crictl

Vapor menggunakan crictl secara internal, tapi Anda juga bisa menggunakannya langsung:

Perintah Umum

bash
# List container
crictl ps

# List image
crictl images

# Lihat log
crictl logs <container-id>

# Eksekusi perintah
crictl exec -it <container-id> sh

# Pull image
crictl pull nginx:latest

# Inspect container
crictl inspect <container-id>

Praktik Terbaik

  1. Kubernetes Dulu: Di lingkungan CRI, kelola container melalui Kubernetes jika memungkinkan
  2. Kesadaran Namespace: Perhatikan namespace Kubernetes saat bekerja dengan container
  3. Hindari Manipulasi Langsung: Jangan memodifikasi container yang dikelola Kubernetes secara langsung
  4. Gunakan Label: Manfaatkan label Kubernetes untuk organisasi
  5. Monitor Resource: CRI menyediakan stats dasar, gunakan metrik Kubernetes untuk monitoring detail
  6. Manajemen Log: Konfigurasi log driver yang tepat di level Kubernetes

Pemecahan Masalah

Runtime Tidak Terdeteksi

  • Verifikasi containerd atau CRI-O berjalan:
    bash
    systemctl status containerd
    # atau
    systemctl status crio
  • Periksa socket ada:
    bash
    ls -la /run/containerd/containerd.sock
    # atau
    ls -la /var/run/crio/crio.sock

Tidak Dapat Melihat Container

  • Pastikan Anda memiliki izin untuk mengakses socket
  • Periksa apakah container berada di namespace berbeda
  • Verifikasi crictl dikonfigurasi dengan benar

Kegagalan Pull Image

  • Periksa aksesibilitas registry
  • Verifikasi format referensi image
  • Konfigurasi mirror registry jika diperlukan
  • Periksa autentikasi untuk registry privat

Log Container Kosong

  • Container mungkin menggunakan log driver berbeda
  • Periksa log pod Kubernetes sebagai gantinya
  • Verifikasi pengaturan rotasi log

Exec Gagal

  • Container mungkin tidak memiliki shell terinstal
  • Coba shell berbeda (sh daripada bash)
  • Periksa container berjalan
  • Verifikasi izin

Dibuat dengan semangat gotong royong demi kemajuan bangsa 🇮🇩