《Kubernetes部署篇:Ubuntu20.04基于二进制安装安装cri-containerd-cni》

一、背景

由于客户网络处于专网环境下, 使用kubeadm工具安装K8S集群,由于无法连通互联网,所有无法使用apt工具安装kubeadm、kubelet、kubectl,当然你也可以使用apt-get工具在一台能够连通互联网环境的服务器上下载cri-tools、containerd、kubernetes-cni软件包,然后拷贝到专网主机上,通过dpkg工具安装cri-tools、containerd、kubernetes-cni,这里并没有采用这种方式,在当前客户主机网络环境下,我们使用二进制方式来安装cri-tools、containerd、kubernetes-cni。

环境信息如下所示:

操作系统 内核版本 cri-containerd-cni版本
Ubuntu 20.04.5 LTS 5.15.0-69-generic 1.7.2

cri-containerd-cni二进制包,包含如下软件:

软件名称 软件版本
cri-tools 1.26.0
containerd 1.7.2
runc 1.1.7
cni 1.2.0

问题一:为什么安装containerd,需要同时安装runc及cni网络插件?

安装containerd,需要同时安装runc及cni网络插件。Containerd不能直接操作容器,需要通过runc来运行容器。默认Containerd管理的容器仅有lo网络(无法访问容器之外的网络),如果需要访问容器之外的网络则需要安装CNI网络插件。CNI(Container Network Interface) 是一套容器网络接口规范,用于为容器分配ip地址,通过CNI插件Containerd管理的容器可以访问容器之外的网络。


问题二:为什么安装cri-tools?

cri-tools(容器运行时工具):这是一个 用于与Kubernetes容器运行时接口(CRI)进行交互的命令行工具集。它提供了一些有用的功能,如创建、销毁和管理容器等。


二、操作步骤

1、下载软件包

bash 复制代码
wget https://github.com/containerd/containerd/releases/download/v1.7.2/cri-containerd-cni-1.7.2-linux-amd64.tar.gz

2、解压安装

bash 复制代码
tar axf cri-containerd-cni-1.7.2-linux-amd64.tar.gz -C /

3、生成默认配置文件

bash 复制代码
mkdir -p /etc/containerd && containerd config default > /etc/containerd/config.toml

4、配置systemd cgroup驱动

bash 复制代码
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml

5、重载沙箱pause镜像

bash 复制代码
sed -i 's#sandbox_image = "registry.k8s.io/pause:3.8"#sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7"#g' /etc/containerd/config.toml

6、网络插件CNI配置文件

bash 复制代码
rm -f /etc/cni/net.d/10-containerd-net.conflist
cat <<EOF | sudo tee /etc/cni/net.d/cni-default.conf 
{
    "name": "mynet",
    "cniVersion": "0.3.1",
    "type": "bridge",
    "bridge": "mynet0",
    "isDefaultGateway": true,
    "ipMasq": true,
    "hairpinMode": true,
    "ipam": {
        "type": "host-local",
        "subnet": "10.48.0.0/16"
    }
}
EOF

说明:10.48.0.0/16是集群pod网段。

7、重启containerd服务并设置开机自启

bash 复制代码
systemctl daemon-reload && systemctl restart containerd && systemctl enable containerd

安装完成后,确保k8s集群所有节点的runc和containerd版本如下所示:

bash 复制代码
root@k8s-master-63:~# containerd -v
containerd github.com/containerd/containerd v1.7.2 0cae528dd6cb557f7201036e9f43420650207b58

root@k8s-master-63:~# runc -v
runc version 1.1.7
commit: v1.1.7-0-g860f061b
spec: 1.0.2-dev
go: go1.20.4
libseccomp: 2.5.1

说明:由于网络问题,无法下载国外的K8S镜像,所以这里使用阿里云的镜像仓库地址registry.cn-hangzhou.aliyuncs.com/google_containers代替。如果你有阿里云的账号,可以对 containerd配置镜像加速地址来实现快速下载镜像。


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:企业级K8s集群运维实战

相关推荐
终端行者6 小时前
k8s之Ingress服务接入控制器
云原生·容器·kubernetes
学Linux的语莫11 小时前
k8s的nodeport和ingress
网络·rpc·kubernetes
aashuii17 小时前
k8s通过NUMA亲和分配GPU和VF接口
云原生·容器·kubernetes
Most661 天前
kubesphere安装使用
kubernetes
Kentos(acoustic ver.)1 天前
云原生 —— K8s 容器编排系统
云原生·容器·kubernetes·云计算·k8s
哈里谢顿1 天前
Kubernetes 简介
kubernetes
__Smile°1 天前
k8s-MongoDB 副本集部署
云原生·容器·kubernetes
Jy_06221 天前
k8s 中的 deployment,statefulset,daemonset 控制器的区别
云原生·容器·kubernetes
果子⌂2 天前
Kubernetes 服务发布进阶
linux·运维·服务器·云原生·容器·kubernetes·云计算
Gold Steps.2 天前
K8s WebUI 选型:国外 Rancher vs 国内 KubeSphere vs 原生 Dashboard,从部署到使用心得谁更适合企业级场景?
云原生·容器·kubernetes