Mengenal CRI-O sebagai Container Runtime untuk Kubernetes

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:

Fedora 31+
openSUSE
CentOS 8
CentOS 8 Stream
CentOS 7
Debian Unstable
Debian Testing
Debian 10
Rasbian 10
xUbuntu 20.10
xUbuntu 20.04
xUbuntu 18.04

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

sudo zypper install cri-o

Fedora 31 atau yang lebih baru

sudo dnf module enable cri-o:$VERSION
sudo dnf install cri-o

*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

export VERSION=1.22
export OS=CENTOS_7
curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/devel:kubic:libcontainers:stable.repo
curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo
yum install cri-o

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:

echo 'deb http://deb.debian.org/debian buster-backports main' > /etc/apt/sources.list.d/backports.list
apt update
apt install -y -t buster-backports libseccomp2 || apt update -y -t buster-backports libseccomp2

kemudian jalankan perintah seperti dibawah ini dengan akses root

echo "deb [signed-by=/usr/share/keyrings/libcontainers-archive-keyring.gpg] https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
echo "deb [signed-by=/usr/share/keyrings/libcontainers-crio-archive-keyring.gpg] https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list

mkdir -p /usr/share/keyrings
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | gpg --dearmor -o /usr/share/keyrings/libcontainers-archive-keyring.gpg
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/Release.key | gpg --dearmor -o /usr/share/keyrings/libcontainers-crio-archive-keyring.gpg

apt-get update
apt-get install cri-o cri-o-runc

*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/ :

[crio.runtime.runtimes.runc]
runtime_path = ""
runtime_type = "oci"
runtime_root = "/run/runc"

Refrensi:

  • https://cri-o.io/
About the author
Alan Adi Prastyo

Routecloud Networks

Information about Server, Linux and Computer Network.

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to Routecloud Networks.

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.