部署kubernetes1.27.2(containerd)
ctr也是一个用于containerd交互的命令行工具,它可以用来管理和监控containerd中运行的容器和镜像,例如创建,删除和暂停容器,上传和下载镜像等,因为ctr时containerd自带的cli命令行工具crictl是k8s自带的所以ctr默认连接就是containerd的sock。根据官方的要求还需从他们的官方网站安装runc和CNI插件。crictl是一个用于CRI兼容的容器运行时进
先完成基础环境的配置再安装containerd
为什么用containerd
containerd是一个基于Go语言编写的开源容器运行时(container runtime),它是docker项目的一部分,后来被独立出来成为一个开源项目,与Docker相比containerd拥有更细粒度的控制,更高的可扩性和更强的安全性,使得它在生产环境中使用的越来越广泛。
containerd提供了接口让上层容器编排系统(如kubernetes)可以与底层容器引擎进行通信,通过这个接口,上层容器编排系统可以管理和配置容器,监控和调整容器的资源使用情况,对容器进行快速的启动和停止重启等操作。
部署containerd
根据kubernetes官网推荐的部署方式,进入github源代码仓库,根据源代码仓库中的说明,给出了两种部署方式,分别是使用二进制文件的方式来部署containerd或者使用apt-get或者dnf也就是使用rpm包的yum源进行部署。
方法一:
要使用二进制包进行安装首先下载官方给出的软件包,根据自己的架构和系统来进行选择合适的二进制包,containerd的官方二进制版本可以用于amd64(x86)和arm64(aarch64)体系结构。
根据官方的要求还需从他们的官方网站安装runc和CNI插件。首先下载二进制包并安装containerd,将二进制包解压并将其二进制文件放入/usr/bin并给予权限。根据官网要求下载service文件。
[root@master ~]# tar -zxvf containerd-1.7.1-linux-amd64.tar.gz -C /usr/local/
bin/
bin/containerd-stress
bin/ctr
bin/containerd-shim-runc-v2
bin/containerd
bin/containerd-shim
bin/containerd-shim-runc-v1
[root@master system]# mkdir -p /usr/local/lib/systemd/system/
[root@master ~]# cd /usr/local/lib/systemd/system/
[root@master system]# wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
[root@master system]# systemctl daemon-reload
[root@master system]# systemctl restart containerd
[root@master system]# systemctl status containerd
根据官网要求安装官方的runc,此处下载amd64架构的二进制包进行安装。
[root@master ~]# install -m 755 runc.amd64 /usr/local/sbin/runc
[root@master ~]# cd /usr/local/sbin/
[root@master sbin]# ls
runc
然后根据官网要求安装CNI插件即可,仍然选择amd64的架构。
所有二进制文件都是静态构建的应该可以在任何linux发行版本上使用
[root@master ~]# mkdir -p /opt/cni/bin/
[root@master ~]# tar -zxvf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin/
[root@master ~]# cd /opt/cni/bin/
[root@master bin]# ls
bandwidth dhcp firewall host-local loopback portmap sbr tap vlan
bridge dummy host-device ipvlan macvlan ptp static tuning vrf
方法二:
根据官方的说法是参考docker文档,来部署containerd.io,containerd.io也包含runc,但不包含CNI插件。
官方给出了多种系统下的部署方式。这里参考的是centos操作系统。
首先卸载掉所有旧版本的docker或者docker引擎,这一步在安装依赖项必须首先完成。在卸载掉docker时,存储在/var/lib/docker中的映像,容器,卷和网络不会自动删除。
[root@master ~]# yum remove docker* -y
[root@node1 ~]# yum install -y yum-utils
[root@node1 ~]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# wget https://download.docker.com/linux/centos/docker-ce.repo
[root@node1 ~]# yum install containerd.io -y
cgroup驱动
在部署完成containerd后可以开始配置containerd的cgroup的驱动,配置containerd需要在/etc/containerd/config.toml文件中配置,但是二进制安装的containerd中不存在config.toml文件,可以生成默认的config.toml文件。如果config.toml中没有相关配置也可以重新生成一个。
[root@master ~]# mkdir -p /etc/containerd/
[root@master ~]# cd /etc/containerd/
[root@master containerd]# containerd config default > config.toml
然后可以开始配置cgroup驱动,先前说过根据kubernetes官方的建议containerd和CRI-O都使用systemd驱动。所以修改配置文件。
[root@master ~]# vim /etc/containerd/config.toml
SystemdCgroup = true
#修改其内容然后重启。
配置pause镜像
和docker一样containerd一样有自己默认指定的pause镜像,将其修改为自己本地存在的pause镜像即可。
[root@master ~]# vim /etc/containerd/config.toml
sandbox_image = "registry.k8s.io/pause:3.9"
#修改其内容然后重启。
[root@node1 ~]# systemctl restart containerd
crictl和ctr
crictl是一个用于CRI兼容的容器运行时进行交互的命令行工具,可以用来管理和监控运行中的容器,例如创建,删除和暂停容器,查看容器的状态等。
ctr也是一个用于containerd交互的命令行工具,它可以用来管理和监控containerd中运行的容器和镜像,例如创建,删除和暂停容器,上传和下载镜像等,因为ctr时containerd自带的cli命令行工具crictl是k8s自带的所以ctr默认连接就是containerd的sock。
crictl默认连接到unix:///var/run/dockershim.sock所以当底层容器为containerd时则需要修改其连接的sock。
[root@master ]# crictl config runtime-endpoint unix:///run/containerd/containerd.sock
[root@master images-1.27.2]# crictl images
IMAGE TAG IMAGE ID SIZE
#则crictl可以正常使用。
使用crictl和ctr都可以管理镜像和容器。
初始化集群
先上传相关版本镜像,这里注意ctr中存在命名空间的概念,一般kubernetes会有一个名为k8s.io的命名空间,用于存储各种kubernetes相关的组件和资源,所以在ctr导入镜像的时候使用k8s.io命名空间,其中的镜像才能被检测到,可以通过crictl images来查看,只要crictl可以查看到就说明可以被检测到。
[root@master images-1.27.2]# for i in $(ls);do ctr -n=k8s.io image import $i;done
[root@master images-1.27.2]# ctr -n=k8s.io images list
REF TYPE DIGEST SIZE PLATFORMS LABELS
registry.k8s.io/coredns/coredns:v1.10.1 application/vnd.docker.distribution.manifest.v2+json sha256:1bd4868dd431817e7c93b318666d022ca9a9074ac56c01293cad8e1534b3527a 51.1 MiB linux/amd64 -
registry.k8s.io/etcd:3.5.7-0 application/vnd.docker.distribution.manifest.v2+json sha256:b5739b1cc0941ec9cc3d69549f95215fdcbb824d211a5ac16d2d5eecd8d7f5f1 283.3 MiB linux/amd64 -
registry.k8s.io/kube-apiserver:v1.27.2 application/vnd.docker.distribution.manifest.v2+json sha256:78e8e2f164bdbb49dede69bd1d1d8c2337704067d19248673dd20eaa1140f8f2 116.4 MiB linux/amd64 -
registry.k8s.io/kube-controller-manager:v1.27.2 application/vnd.docker.distribution.manifest.v2+json sha256:5c3df23a876d8c88e36d634cc4e2860f87b398ebe2878b5cd01507900df9e9fb 108.6 MiB linux/amd64 -
registry.k8s.io/kube-proxy:v1.27.2 application/vnd.docker.distribution.manifest.v2+json sha256:82c51dd0fb02a6f7675416ac22b4732e69ca24a85373c2501d7ef382e9fb25d7 69.3 MiB linux/amd64 -
registry.k8s.io/kube-scheduler:v1.27.2 application/vnd.docker.distribution.manifest.v2+json sha256:d6830b9d31487de763fa88cb95e2ca4b62860e653657c912b8922ab79098ae6d 57.0 MiB linux/amd64 -
registry.k8s.io/pause:3.9 application/vnd.docker.distribution.manifest.v2+json sha256:10a321ba49fad60aff637304a5095c6f4c9edca3ca3339c438587334eba8df94 729.9 KiB linux/amd64 -
[root@master ~]# kubeadm config print init-defaults > kubeadm.yaml
#生成初始化文件,修改一下内容,cri默认就是containerd,然后再service地址池下添加pod地址池。
advertiseAddress: 192.168.100.10
criSocket: unix:///var/run/containerd/containerd.sock
kubernetesVersion: 1.27.2
podSubnet: 10.244.0.0/16
#然后初始化集群
[root@master ~]# kubeadm init --config kubeadm.yaml
倘若初始化集群超时,请检查pause镜像是否存在和containerd配置的pause镜像是否和上传的一致,检查网关和dns是否配置。然后给予权限,部署网络插件集群就会ready。
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
至此containerd做kubernetes底层容器的部署完毕。
更多推荐
所有评论(0)