Kluster ACK mendukung dua runtime kontainer: runC dan runV (Sandboxed-Container). runC adalah runtime kontainer Linux standar yang menggunakan isolasi kernel bersama melalui control groups (cgroups) dan namespace. runV menjalankan setiap Pod di dalam VM ringan khusus, menyediakan kernel independen dan isolasi tingkat perangkat keras.
Perbandingan antara runC dan runV
| Komponen | runC | runV |
|---|---|---|
| Mesin kontainer | Docker dan containerd | containerd |
| Tipe node | Instans Elastic Compute Service (ECS) dan instans ECS Bare Metal (EBM) | Instans EBM |
| Kernel kontainer | Berbagi kernel host | Menggunakan kernel khusus |
| Isolasi kontainer | Control groups (cgroups) dan namespace | VM ringan |
| Rootfs Graph Driver | OverlayFS | OverlayFS |
| Pembatasan kecepatan I/O RootFS | cgroups | Tidak didukung |
| Pemasangan NAS | Tidak didukung | Didukung |
| Pemasangan disk | Tidak didukung | Tidak didukung |
| Pengumpulan log kontainer | Logtail mengumpulkan log kontainer langsung dari node | Logtail Sidecar |
| beban tambahan Pod | N/A | Memori = 64 MiB + (permintaan memori pod × 2%). Maksimum: 512 MiB. Minimum: 64 MiB. |
Overhead Pod pada runV
Setiap Pod runV memiliki overhead memori untuk menjalankan VM ringan dan komponen tamunya.
Rumusnya adalah: memori overhead pod = 64 MiB + permintaan memori pod × 2%, dengan batas maksimum 512 MiB dan minimum 64 MiB.
Total memori yang terlihat di dalam Pod runV sama dengan permintaan memori pod ditambah overhead pod, dikurangi sejumlah kecil memori yang digunakan oleh sistem. Jumlah CPU di dalam Pod juga berbeda dari host.
Batasan runV
Fitur-fitur berikut tidak didukung saat menggunakan runV:
Pembatasan kecepatan I/O RootFS: Pembatasan kecepatan I/O berbasis cgroup tidak tersedia untuk rootfs.
Pemasangan disk: Volume disk persisten tidak dapat dipasang secara langsung.
Pengumpulan log langsung: Logtail tidak dapat mengumpulkan log langsung dari node. Gunakan Logtail Sidecar sebagai gantinya.
Buat Pod yang menggunakan runC
Prasyarat
Sebelum memulai, pastikan Anda telah:
Buat Pod
Jalankan perintah berikut untuk membuat Pod yang menggunakan runC:
CatatanMenyetel
runtimeClassName: runcbersifat opsional karena runC merupakan runtime kontainer default.cat <<EOF | kubectl create -f - apiVersion: v1 kind: Pod metadata: name: busybox-runc labels: app: busybox-runc spec: containers: - name: busybox image: registry.cn-hangzhou.aliyuncs.com/acs/busybox:v1.29.2 command: - tail - -f - /dev/null resources: limits: cpu: 1000m memory: 512Mi requests: cpu: 1000m memory: 512Mi EOF
Buat Pod yang menggunakan runV
Prasyarat
Sebelum memulai, pastikan Anda telah:
Buat Pod
(Opsional) Verifikasi bahwa objek RuntimeClass bernama
runvada di kluster:kubectl get runtimeclass runv -o yamlCatatanObjek RuntimeClass bernama
runvdibuat secara otomatis di setiap kluster ACK yang menggunakan Sandboxed-Container.Jalankan perintah berikut untuk membuat Pod yang menggunakan runV:
PentingUntuk versi Kubernetes sebelum 1.16, bidang
nodeSelectorwajib digunakan. Untuk versi 1.16 dan seterusnya, bidang ini tidak diperlukan.cat <<EOF | kubectl create -f - apiVersion: v1 kind: Pod metadata: name: busybox-runv labels: app: busybox-runv spec: runtimeClassName: runv nodeSelector: alibabacloud.com/container-runtime: Sandboxed-Container.runv containers: - name: busybox image: registry.cn-hangzhou.aliyuncs.com/acs/busybox:v1.29.2 command: - tail - -f - /dev/null resources: limits: cpu: 1000m memory: 512Mi requests: cpu: 1000m memory: 512Mi EOFVerifikasi bahwa Pod berjalan di dalam sandbox:
kubectl get pod busybox-runv -o jsonpath={.spec.runtimeClassName}Jika output mencakup
runv, maka Pod tersebut berjalan di dalam sandbox.Masuk ke dalam Pod dan periksa konfigurasi CPU serta memorinya:
kubectl exec -ti pod busybox-runv /bin/sh / # cat /proc/meminfo | head -n1 MemTotal: 1130692 kB / # cat /proc/cpuinfo | grep processor processor : 0Jumlah CPU di dalam Pod berbeda dari host. Total memori sama dengan memori Pod ditambah overhead Pod, dan sedikit lebih kecil karena sistem menggunakan sebagian memori.
Langkah selanjutnya
Untuk memeriksa bidang-bidang Pod mana saja yang kompatibel dengan runtime Sandboxed-Container, lihat Catatan kompatibilitas Sandboxed-Container.
Untuk informasi lebih lanjut mengenai sumber daya RuntimeClass dan pemilihan runtime, lihat RuntimeClass.