Skip to content

Container runtimes

Containerd

1.Prerequisites

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# Setup required sysctl params, these persist across reboots.
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

# Apply sysctl params without reboot
sudo sysctl --system
2.Install the containerd.io package from the official Docker repositories.
sudo yum install -y yum-utils
#sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's|download.docker.com|mirrors.ustc.edu.cn/docker-ce|' /etc/yum.repos.d/docker-ce.repo
sudo yum makecache fast

sudo yum install -y containerd.io
3.Configure containerd.
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i '/\[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options\]/a\            SystemdCgroup = true' /etc/containerd/config.toml
sudo sed -i "s|k8s.gcr.io|registry.aliyuncs.com/google_containers|g"  /etc/containerd/config.toml
sudo sed -i "s|registry-1.docker.io|registry.aliyuncs.com|g"  /etc/containerd/config.toml

How can I change the default location?
sudo mkdir -p /data/containerd
sudo sed -i 's|/var/lib/containerd|/data/containerd|g'  /etc/containerd/config.toml

4.Configure containerd sock.

sudo tee /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
5.Configure containerd auto start.
cat <<EOF | sudo tee /usr/lib/systemd/system/containerd.service 
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target

[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl enable containerd
sudo systemctl daemon-reload
sudo systemctl restart containerd
sudo systemctl status containerd

Make sure the right path of containerd.
ExecStart=/usr/bin/containerd

Docker

Kubernetes is deprecating Docker as a container runtime after v1.20.

Dockershim Deprecation FAQ

1.Install docker engine on each of k8s nodes.

2.Configure the docker daemon.

sudo mkdir /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

1.How can I speed up downloading images?
/etc/docker/daemon.json:
  "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"],
2.How can I change the default location for Docker images?
shell:
  sudo mkdir -p <desired path>
/etc/docker/daemon.json:
  "data-root": "<desired path>",

3.Restart Docker and enable it on boot.

sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker

Reference

1.Install Docker Engine
2.Kubernetes Container Runtimes
3.Crictl Configuration
4.Containerd.service