Skip to main content

Mengenal CRI-O sebagai Container Runtime untuk Kubernetes

CRI-O merupakan salah satu container runtime yang bisa digunakan untuk kubernetes yang bersifat free dan open sources. CRIO menjadi salah satu alternatif container runtime yang bisa digunakan pada kubernetes selain Docker.

Aristektur

CRI-O architecture

Arsitektur diatas merupakan penerapan cri-o pada environment kubernetes dimana flownya sebagai berikut

  • Kubernetes akan meminta kubelet untuk membuat pod
    • pod adalah entitas terkecil didalam kubernetes dimana pada pod terdapat satu atau lebih container yang saling berbagi sumber daya seperti IPC, NET dan PID namespace dan berjalan didalam cgroup yang sama
  • Kemudian kubelet akan meneruskan permintaan ke CRI-O melalui kubernetes CRI (Container Runtime Interface) untuk menjalankan pod baru
  • CRI-O mengunakan library containers/image untuk pull image dari sebuah image registry
  • hasil download image akan di ekstrak kedalam filesistem root container, dimana akan disimpan pada filesistem COW mengunakan library containers/storage
  • setelah rootfs terbuat untuk container, maka CRI-O akan mengenerate file json spesifikasi runtime OCI (Open Container Initiative) yang menjelaskan cara menjalankan container mengunakan tools OCI generator
  • CRIO kemudian menjalankan OCI compatible runtime mengunakan spesifikasi yang sudah digenerate sebelumnya untuk menjalankan sebuah proses container, dimana default OCI runtime adalah runc
  • setiap container akan dimonitor oleh proses conmon terpisah. proses conmon mengunakan pty pid 1 dari proses contianer untuk menangani logging kontainer dan mencatat exit code pada proses kontainer
  • Networking pada pod akan dibuat mengunakan CNI, dimana terdapat banyak CNI yang bisa digunakan dengan CRIO seperti calico, flannel, weave dan lain-lain

Komponen

CRI-O terbuat dari beberapa komponen yang terdapat pada github diantaranya adalah

CRI-O mendukung runtime yang kompatibel dengan OCI dan sudah teruji dengan runc

ini digunakan untuk mengatur layer dan membuat file sistem root untuk kontianer pada sebuah pod dan dapat di implementasikan pada tipe file sistem seperti : overlayfs, deveicemapper, AUFS dan btrfs dengan defaultnya adalah Overlayfs

ini digunakan untuk download atau pull image dari registry. utnuk saat ini mendukung docker schema 2/version 1 dan schema 2/version 2

pada Container Network Interface digunakan untuk seting jaringan pada pod.  beberapa plugin CNI seperti Flannel, Weave dan Openshift-SDN telah diuji dengan CRI-O dan berfungsi sesuai harapan

conmon merupakan tools dialan CRIO yang digunakan untuk memantau kontainer, menangani logging dari proses kontainer serta mendeteksi adanya Out of memory (OOM)

  • untuk security disediakan beberapa inti kernel pada linux

Kebijakan pemisahan keamanan kontainer disediakan oleh serangkaian tools termasuk SELinux, Capabilities, seccomp, dan kebijakan pemisahan keamanan lainnya sebagaimana ditentukan dalam Spesifikasi OCI.

Package Distribusi

CRI-O dibangun untuk native package managers mengunakan openSUSE’s OBS

CRI-O mengikuti siklus Kubernetes support cycle dari tiga rilis minor. CRI-O mendukung beberapa sistem operasi seperti berikut:

untuk install bisa memilih sistem operasi diatas dengan export variable seperti ini export VERSION=1.19 atau jika ingin sampai level subproject bisa mengunakan export VERSION=1.19:1.19.1

Panduan Instalasi

OpenSUSE

Fedora 31 atau yang lebih baru

*Note: pada fedora hanya mendukung versi minor contohnya VERSION=1.18, dan tidak mendukung versi patch seperti VERSION=1.18.3

Sistem operasi berbasis Yum seperti Centos

Sistem Operasi $OS
Centos 8 CentOS_8
Centos 8 Stream CentOS_8_Stream
Centos 7 CentOS_7

kemudian jalankan perintah seperti dibawah ini dengan akses root

Sistem operasi berbasis APT

Sistem Operasi $OS
Debian Unstable Debian_Unstable
Debian Testing Debian_Testing
Debian 10 Debian_10
Raspberry Pi OS Raspbian_10
Ubuntu 20.04 xUbuntu_20.04
Ubuntu 19.10 xUbuntu_19.10
Ubuntu 19.04 xUbuntu_19.04
Ubuntu 18.04 xUbuntu_18.04

Jika menginstal cri-o-runc (disarankan), Anda harus menginstal libseccomp >= 2.4.1.

*Note: Ini tidak tersedia di distro berbasis Debian 10(buster) atau di bawahnya, jadi backport buster perlu diaktifkan:

kemudian jalankan perintah seperti dibawah ini dengan akses root

*Note: Kami menyertakan cri-o-runc karena Ubuntu dan Debian menyertakan versi paket runc mereka sendiri. Meskipun versi ini harus bekerja dengan CRI-O, menjaga versi paket CRI-O dan runc sinkron memastikan mereka bekerja bersama. Jika Anda ingin menggunakan runc distribusi, Anda harus menambahkan file pada /etc/crio/crio.conf.d/ :

Refrensi:

  • https://cri-o.io/

Alan Adi Prastyo

System Engineer