Runtime Container
Kubernetes v1.6 [stable]
Untuk menjalankan Container di Pod, Kubernetes menggunakan runtime Container (Container runtimes). Berikut ini adalah petunjuk instalasi untuk berbagai macam runtime.
Sebuah kekurangan ditemukan dalam cara runc
menangani pendeskripsi berkas (file) sistem ketika menjalankan Container.
Container yang berbahaya dapat menggunakan kekurangan ini untuk menimpa konten biner runc
dan
akibatnya Container tersebut dapat menjalankan perintah yang sewenang-wenang pada sistem host dari Container tersebut.
Silahkan merujuk pada CVE-2019-5736 untuk informasi lebih lanjut tentang masalah ini.
Penerapan
Kamu harus menjalankan semua perintah dalam panduan ini sebagai root
. Sebagai contoh, awali perintah
dengan sudo
, atau masuk sebagai root
dan kemudian baru menjalankan perintah sebagai pengguna root
.
Driver cgroup
Ketika systemd dipilih sebagai sistem init untuk sebuah distribusi Linux, proses init menghasilkan
dan menggunakan grup kontrol root (cgroup
) dan proses ini akan bertindak sebagai manajer cgroup. Systemd memiliki integrasi yang ketat
dengan cgroup dan akan mengalokasikan cgroups untuk setiap proses. Kamu dapat mengonfigurasi
runtime Container dan kubelet untuk menggunakan cgroupfs
. Menggunakan cgroupfs
bersama dengan systemd berarti
akan ada dua manajer cgroup yang berbeda.
Cgroup digunakan untuk membatasi sumber daya yang dialokasikan untuk proses.
Sebuah manajer cgroup tunggal akan menyederhanakan pandangan tentang sumber daya apa yang sedang dialokasikan
dan secara bawaan (default) akan memiliki pandangan yang lebih konsisten tentang sumber daya yang tersedia dan yang sedang digunakan. Ketika kita punya memiliki
dua manajer maka kita pun akan memiliki dua pandangan berbeda tentang sumber daya tersebut. Kita telah melihat kasus di lapangan
di mana Node yang dikonfigurasi menggunakan cgroupfs
untuk kubelet dan Docker, dan systemd
untuk semua sisa proses yang berjalan pada Node maka Node tersebut akan menjadi tidak stabil di bawah tekanan sumber daya.
Mengubah aturan sedemikian rupa sehingga runtime Container dan kubelet kamu menggunakan systemd
sebagai driver cgroup
akan menstabilkan sistem. Silahkan perhatikan opsi native.cgroupdriver=systemd
dalam pengaturan Docker di bawah ini.
Docker
Pada setiap mesin kamu, mari menginstall Docker. Versi yang direkomendasikan adalah 19.03.11, tetapi versi 1.13.1, 17.03, 17.06, 17.09, 18.06 dan 18.09 juga diketahui bekerja dengan baik. Jagalah versi Docker pada versi terbaru yang sudah terverifikasi pada catatan rilis Kubernetes.
Gunakan perintah berikut untuk menginstal Docker pada sistem kamu:
# (Menginstal Docker CE)
## Mengatur repositori:
### Menginstal packet untuk mengijinkan apt untuk menggunakan repositori melalui HTTPS
apt-get update && apt-get install -y \
apt-transport-https ca-certificates curl software-properties-common gnupg2
# Menambahkan key GPG resmi dari Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
# Menambahkan repositori apt dari Docker:
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
# Menginstal Docker CE
apt-get update && apt-get install -y \
containerd.io=1.2.13-2 \
docker-ce=5:19.03.11~3-0~ubuntu-$(lsb_release -cs) \
docker-ce-cli=5:19.03.11~3-0~ubuntu-$(lsb_release -cs)
# Mengatur daemon Docker
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
# Menjalankan ulang Docker
systemctl daemon-reload
systemctl restart docker
# (Menginstal Docker CE)
## Mengatur repositori
### Menginstal paket yang diperlukan
yum install -y yum-utils device-mapper-persistent-data lvm2
## Menambahkan repositori apt dari Docker
yum-config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# Menginstal Docker CE
yum update -y && yum install -y \
containerd.io-1.2.13 \
docker-ce-19.03.11 \
docker-ce-cli-19.03.11
## Membuat berkas /etc/docker
mkdir /etc/docker
# Mengatur daemon Docker
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
# Menjalankan ulang Docker
systemctl daemon-reload
systemctl restart docker
Jika kamu menginginkan layanan Docker berjalan dari saat memulai pertama (boot), jalankan perintah ini:
sudo systemctl enable docker
Silahkan merujuk pada Panduan resmi instalasi Docker untuk informasi lebih lanjut.
CRI-O
Bagian ini mencakup langkah-langkah yang diperlukan untuk menginstal CRI-O
sebagai runtime CRI.
Gunakan perintah-perinath berikut untuk menginstal CRI-O pada sistem kamu:
Prasyarat
modprobe overlay
modprobe br_netfilter
# Mengatur parameter sysctl yang diperlukan, dimana ini akan bernilai tetap setiap kali penjalanan ulang.
cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sysctl --system
# Debian Unstable/Sid
echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_Unstable/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
wget -nv https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/Debian_Unstable/Release.key -O- | sudo apt-key add -
# Debian Testing
echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_Testing/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
wget -nv https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/Debian_Testing/Release.key -O- | sudo apt-key add -
# Debian 10
echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_10/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
wget -nv https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/Debian_10/Release.key -O- | sudo apt-key add -
# Raspbian 10
echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Raspbian_10/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
wget -nv https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/Raspbian_10/Release.key -O- | sudo apt-key add -
dan kemudian install CRI-O:
sudo apt-get install cri-o-1.17
# Mengatur repositori paket
. /etc/os-release
sudo sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/x${NAME}_${VERSION_ID}/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list"
wget -nv https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/x${NAME}_${VERSION_ID}/Release.key -O- | sudo apt-key add -
sudo apt-get update
# Menginstal CRI-O
sudo apt-get install cri-o-1.17
# Menginstal prasyarat
curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/CentOS_7/devel:kubic:libcontainers:stable.repo
curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:1.23.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:1.23/CentOS_7/devel:kubic:libcontainers:stable:cri-o:1.23.repo
# Menginstal CRI-O
yum install -y cri-o
sudo zypper install cri-o
Memulai CRI-O
systemctl daemon-reload
systemctl start crio
Silahkan merujuk pada Panduan instalasi CRI-O untuk informasi lanjut.
Containerd
Bagian ini berisi langkah-langkah yang diperlukan untuk menggunakan containerd
sebagai runtime CRI.
Gunakan perintah-perintah berikut untuk menginstal containerd pada sistem kamu:
Prasyarat
cat > /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
# Mengatur parameter sysctl yang diperlukan, dimana ini akan bernilai tetap setiap kali penjalanan ulang.
cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sysctl --system
Menginstal containerd
# (Meninstal containerd)
## Mengatur repositori paket
### Install packages to allow apt to use a repository over HTTPS
apt-get update && apt-get install -y apt-transport-https ca-certificates curl software-properties-common
## Menambahkan key GPG resmi dari Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
## Mengatur repositori paket Docker
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
## Menginstal containerd
apt-get update && apt-get install -y containerd.io
# Mengonfigure containerd
mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
# Menjalankan ulang containerd
systemctl restart containerd
# (Menginstal containerd)
## Mengatur repositori
### Menginstal paket prasyarat
yum install -y yum-utils device-mapper-persistent-data lvm2
## Menambahkan repositori Docker
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
## Menginstal containerd
yum update -y && yum install -y containerd.io
## Mengonfigurasi containerd
mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
# Menjalankan ulang containerd
systemctl restart containerd
systemd
Untuk menggunakan driver cgroup systemd
, atur plugins.cri.systemd_cgroup = true
pada /etc/containerd/config.toml
.
Ketika menggunakan kubeadm, konfigurasikan secara manual
driver cgroup untuk kubelet
Runtime CRI yang lainnya: Frakti
Silahkan lihat Panduan cepat memulai Frakti untuk informasi lebih lanjut.