在不集成Docker环境的前提下,要独立完成containerd的网络插件部署,并使得创建的容器能够使用网络
·
1.脚本一键部署containerd 和runc
[root@ctr103 ~]#cat containerd.sh
#bin/bash
wget https://github.com/containerd/containerd/releases/download/v1.7.20/cri-containerd-cni-1.7.20-linux-amd64.tar.gz
if [ !$? = 0 ];then
echo "下载失败"
exit
fi
sleep 1
tar xf cri-containerd-cni-1.7.20-linux-amd64.tar.gz
sleep 5
#拷贝containerd运行时文件到宿主机指定路径
cp usr/local/bin/containerd /usr/local/bin/
#拷贝containerd的systemd的配置文件
cp etc/systemd/system/containerd.service /usr/lib/systemd/system/
#拷贝ctr客户端工具到PATH环境变量
cp usr/local/bin/ctr /usr/bin/
#拷贝容器的运行时,用于后期启动容器
cp usr/local/bin/containerd-shim-runc-v2 /usr/bin/
#下载runc
wget https://github.com/opencontainers/runc/releases/download/v1.1.12/runc.amd64
sleep 1
#移动runc软件包到PATH环境变量
mv runc.amd64 /usr/bin/runc
#为runc程序添加执行权限
chmod +x /usr/bin/runc
#创建配置文件目录
mkdir /etc/containerd
sleep 1
#生成默认的配置文件
containerd config default > /etc/containerd/config.toml
#修改Cgroup的管理者为systemd组件
sed -ri 's#(SystemdCgroup = )false#\1true#' /etc/containerd/config.toml
#修改pause的基础镜像名称
sed -i 's#registry.k8s.io/pause:3.8#registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8#' /etc/containerd/config.toml
systemctl enable --now containerd
if [ $? = 0 ];then
echo "部署成功"
exit
else
echo "启动失败"
fi
2.配置containerd的CNI插件
vim /etc/cni/net.d/10-containerd-plugins.conf
{
"name": "containerd-plugins",
"cniVersion": "0.3.1",
"plugins": [
{
"type": "bridge",
"bridge": "cni0",
"isGateway": true,
"ipMasq": true,
"ipam": {
"type": "host-local",
"subnet": "10.0.0.0/16",
"routes": [
{ "dst": "0.0.0.0/0" }
]
}
},
{
"type": "portmap",
"capabilities": {
"portMappings": true
}
}
]
}
#首先在Kubernetes的flannel网络下,并不是用docker0来作为网桥,而是通过一个CNI接口来替代docker0,它在宿主机上的默认名字叫cni0
以Flannel的vxlan模式为例,其在Kubernetes中的工作流程不变,只是其中的docker0网桥替换为cni0网桥了
需要注意的是,CNI 网桥只是接管所有 CNI 插件负责的、即 Kubernetes 创建的容器(Pod)。而此时,如果你用 docker run 单独启动一个容器,那么 Docker 项目还是会把这个容器连接到 docker0 网桥上。所以这个容器的 IP 地址,一定是属于 docker0 网桥的 172.17.0.0/16 网段。 #而在k8s的calico网络下并没有使用cni网桥模式,因此无论是IPIP模式还是BGP模式都查不到对应的cni0网桥,只有docker0网桥设备
# 由此可见,cni0和docker0都属于网桥设备,但完全不是一个东西不是一回事,一个是基于docker的网桥设备,一个是基于k8s所创建的网桥设备
3.安装CNI插件所需的网络插件(如CNI插件)。
wget https://github.com/containernetworking/plugins/releases/download/v0.9.1/cni-plugins-linux-amd64-v0.9.1.tgz sudo mkdir -p /opt/cni/bin sudo tar -zxvf cni-plugins-linux-amd64-v0.9.1.tgz -C /opt/cni/bin
4.安装containerd
编辑/etc/containerd/config.toml文件,添加或修改以下部分 vim /etc/containerd/config.toml [plugins."io.containerd.grpc.v1.cri".cni] bin_dir = "/opt/cni/bin" conf_dir = "/etc/cni/net.d"
5.重启containerd服务
sudo systemctl restart containerd # 现在,当你创建容器时,containerd将使用CNI插件来配置网络。确保你的容器运行时(如runc)配置正确,并且宿主机上的网络配置允许容器网络通信
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)