在K8S集群部署容器运行时:Containerd

网友投稿 1181 2022-05-29

一、Containerd简介

containerd 实现了 kubernetes 的 Container Runtime Interface (CRI) 接口,提供容器运行时核心功能,如镜像管理、容器管理等,相比 dockerd 更加简单、健壮和可移植。

而且由于kubernetes官方社区在发布的v1.20版本中声明将弃用 Dockershim,即 Docker 容器运行时接口(CRI),这意味着不再支持 Docker,并将在后续版本中删除。

二、Containerd部署

1、下载分发二进制文件

一、Containerd简介

containerd 实现了 kubernetes 的 Container Runtime Interface (CRI) 接口,提供容器运行时核心功能,如镜像管理、容器管理等,相比 dockerd 更加简单、健壮和可移植。

而且由于kubernetes官方社区在发布的v1.20版本中声明将弃用 Dockershim,即 Docker 容器运行时接口(CRI),这意味着不再支持 Docker,并将在后续版本中删除。

二、Containerd部署

1、下载分发二进制文件

所需组件-:下载最新的二进制包

https://github.com/kubernetes-sigs/cri-tools/releases/

https://github.com/opencontainers/runc/releases/

https://github.com/containernetworking/plugins/releases/

https://github.com/containerd/containerd/releases/

如果下载太慢,那么下载到本地电脑然后上传至服务器

[root@k8s-master1 ~]# mkdir -p /opt/k8s/work/

[root@k8s-master1 ~]# cd /opt/k8s/work/

[root@k8s-master1 work]# wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.19.0/crictl-v1.19.0-linux-amd64.tar.gz \

https://github.com/opencontainers/runc/releases/download/v1.0.0-rc92/runc.amd64 \

https://github.com/containernetworking/plugins/releases/download/v0.9.0/cni-plugins-linux-amd64-v0.9.0.tgz \

https://github.com/containerd/containerd/releases/download/v1.4.3/containerd-1.4.3-linux-amd64.tar.gz

[root@k8s-master1 work]# mkdir containerd

[root@k8s-master1 work]# tar -xvf containerd-1.4.3-linux-amd64.tar.gz -C containerd

[root@k8s-master1 work]# tar -xvf crictl-v1.19.0-linux-amd64.tar.gz

[root@k8s-master1 work]# mkdir cni-plugins

[root@k8s-master1 work]# tar -xvf cni-plugins-linux-amd64-v0.9.0.tgz -C cni-plugins

[root@k8s-master1 work]# mv runc.amd64 runc

2、分发二进制程序

将程序包分发给Worker节点

NODE_IPS变量可以在profile中定义worker节点的IP地址数组

[root@k8s-master1 work]# for node_ip in ${NODE_IPS[@]}

do

echo ">>> ${node_ip}"

ssh root@${node_ip} "mkdir -p /opt/k8s/bin"

scp containerd/bin/* crictl cni-plugins/* runc root@${node_ip}:/opt/k8s/bin

ssh root@${node_ip} "chmod a+x /opt/k8s/bin/* && mkdir -p /etc/cni/net.d"

done

3、创建和分发 containerd 配置文件

[root@k8s-master1 work]# cat << EOF | sudo tee containerd-config.toml

version = 2

root = "/data/k8s/containerd/root"

state = "/data/k8s/containerd/state"

[plugins]

[plugins."io.containerd.grpc.v1.cri"]

sandbox_image = "registry.cn-hangzhou.aliyuncs.com/hu279318344/pause-amd64:3.1"

[plugins."io.containerd.grpc.v1.cri".cni]

bin_dir = "/opt/k8s/bin"

conf_dir = "/etc/cni/net.d"

[plugins."io.containerd.runtime.v1.linux"]

shim = "containerd-shim"

runtime = "runc"

runtime_root = ""

no_shim = false

shim_debug = false

EOF

分发配置文件至集群各个worker节点

NODE_IPS变量我是在/etc/profile中定义的各个Worker节点IP数组

CONTAINERD_DIR同样也是在/etc/profile中定义的,这里我定义的路径为/data/k8s/containerd

[root@k8s-master1 work]# for node_ip in ${NODE_IPS[@]}

do

echo ">>> ${node_ip}"

ssh root@${node_ip} "mkdir -p /etc/containerd/ ${CONTAINERD_DIR}/{root,state}"

scp containerd-config.toml root@${node_ip}:/etc/containerd/config.toml

done

4、创建 containerd systemd模板文件

[root@k8s-master1 work]# cat <

[Unit]

Description=containerd container runtime

Documentation=https://containerd.io

After=network.target

[Service]

Environment="PATH=/opt/k8s/bin:/bin:/sbin:/usr/bin:/usr/sbin"

ExecStartPre=/sbin/modprobe overlay

ExecStart=/opt/k8s/bin/containerd

Restart=always

RestartSec=5

Delegate=yes

KillMode=process

OOMScoreAdjust=-999

LimitNOFILE=1048576

LimitNPROC=infinity

LimitCORE=infinity

[Install]

WantedBy=multi-user.target

EOF

5、分发 systemd文件并启动服务

[root@k8s-master1 work]# for node_ip in ${NODE_IPS[@]}

do

echo ">>> ${node_ip}"

scp containerd.service root@${node_ip}:/etc/systemd/system

ssh root@${node_ip} "systemctl enable containerd && systemctl restart containerd"

done

三、部署crictl命令行工具

[root@k8s-master1 work]# cat << EOF | sudo tee crictl.yaml

runtime-endpoint: unix:///run/containerd/containerd.sock

image-endpoint: unix:///run/containerd/containerd.sock

timeout: 10

debug: false

EOF

在K8S集群中部署容器运行时:Containerd

分发到所有 worker 节点:

[root@k8s-master1 work]# for node_ip in ${NODE_IPS[@]}

do

echo ">>> ${node_ip}"

scp crictl.yaml root@${node_ip}:/etc/crictl.yaml

done

2、crictl命令使用

Docker Nginx 容器

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:华为云鲲鹏编译mysql文档
下一篇:ELK Stack 教程 – 有效地发现、分析和可视化您的数据
相关文章