《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集群运维实战

相关推荐
A ?Charis13 分钟前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab
北漂IT民工_程序员_ZG1 小时前
k8s集群安装(minikube)
云原生·容器·kubernetes
2301_806131368 小时前
Kubernetes的基本构建块和最小可调度单元pod-0
云原生·容器·kubernetes
SilentCodeY8 小时前
containerd配置私有仓库registry
容器·kubernetes·containerd·镜像·crictl
binqian14 小时前
【k8s】ClusterIP能http访问,但是不能ping 的原因
http·容器·kubernetes
探索云原生15 小时前
GPU 环境搭建指南:如何在裸机、Docker、K8s 等环境中使用 GPU
ai·云原生·kubernetes·go·gpu
是垚不是土18 小时前
Istio流量镜像测试
运维·kubernetes·云计算·istio
蚊子不吸吸21 小时前
DevOps开发运维简述
linux·运维·ci/cd·oracle·kubernetes·gitlab·devops
林小果11 天前
K8S搭建
云原生·容器·kubernetes
码财小子1 天前
k8s 集群中 Golang pprof 工具的使用
后端·kubernetes·go