10.2 容器云部署准备(二)
文章目录
- 1. Containerd部署
- 安装需要的安装包
- 设置docker的软件包仓库
- 更新yum软件包缓存
- 安装containerd
- 修改containerd配置
- 启动并验证
- 2. 公共镜像仓库配置(docker hub为例)
- 修改containerd配置
- 创建镜像源配置文件
- 验证
- 3. 部署runc
- 手工部署runnc
- 验证
- 4. 部署CNI
- 手工部署CNI
1. Containerd部署
containerd是Docker剥离的底层容器运行时,负责管理容器生命周期(创建、运行、销毁)、镜像传输、存储和网络等基础功能,可独立于Docker运行。
-
安装需要的安装包
yum-utils是一个集合,包含了许多有用的 yum 工具和扩展。
yum install -y yum-utils
-
设置docker的软件包仓库
这个命令用于在 yum 包管理器中添加
Docker
官方仓库,目的是将 Docker CE 的阿里云镜像仓库添加到系统的 yum 仓库列表中,以便可以从该仓库安装containerd
及其更新版本,这里使用的是阿里云的镜像仓库。[root@docker1 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo Loaded plugins: fastestmirror adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo repo saved to /etc/yum.repos.d/docker-ce.repo# 注意,由于麒麟操作系统没有适配的docker官方仓库,所以借用centos的阿里云镜像仓库 # 目前所使用的麒麟操作系统相当于centos8.0版本,需要修改/etc/yum.repos.d/docker-ce.repo文件 # 将docker-ce.repo中的$releasever修改为8.0# 查看目前yum源中containerd.io的版本 yum list --showduplicates containerd.io
-
更新yum软件包缓存
Yum 在运行时需要依赖一个本地的软件包元数据缓存,这个缓存包含从远程仓库获取的所有可用软件包及其版本、依赖关系等信息。当系统安装了新的 yum 仓库或者仓库中的软件包有更新时,执行 yum makecache命令可以快速重建这个本地缓存。
yum makecache
-
安装containerd
通过yum的方式安装来自Docker 官方仓库的containerd,版本可能略旧但经过打包测试。并且自动安装 systemd 服务、目录结构和依赖(常见的有 runc、container-selinux 等),管理起来和升级都更方便。
GitHub 包:需要你自行确保 runc、CNI plugins(/opt/cni/bin)。
yum install -y containerd.ioyum install -y cri-tools # cri-tools是一组用于与Kubernetes CRI(Container Runtime Interface)交互的命令行工具集,主要包含crictl工具
备注1:建议使用 containerd 1.6.x 或 1.7.x(与 K8s 1.2x/1.3x 系列兼容良好)。过旧版本(如1.2、1.3、1.4)可能与新 K8s 不兼容。
备注2:runc 与 CNI,必须安装 runc(与 containerd 兼容的版本)和 CNI插件(/opt/cni/bin 下),否则 Pod 无法创建或无法联网。
备注3:sandbox 镜像:在国内网络建议把 sandbox_image(pause 镜像)改为可访问的镜像仓库,否则创建Pod 可能卡在拉不下 pause。
-
修改containerd配置
通过 yum 安装后,config.toml 通常建议先生成一份默认配置,再在其基础上进行修改。.
# 重新生成默认配置 /usr/bin/containerd config default > /etc/containerd/config.toml#修改containerd的配置文件 vim /etc/containerd/config.toml#修改内容如下 # 设定 pause 镜像(选一个当前网络能拉到的) [plugins."io.containerd.grpc.v1.cri"] sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9" # 设定 runc 使用 systemd cgroup(和 kubelet 默认一致,避免资源与驱动不匹配) [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true
备注:修改 sandbox_image 配置的主要目的是指定 Kubernetes Pod 中使用的 pause容器镜像地址。pause 容器是每个 Pod 的基础基础设施容器(Infra Container),负责管理 Pod的命名空间和网络等共享资源。
-
启动并验证
# 启动服务 systemctl start containerd# 配置开启自启动 systemctl enable containerd# 验证containerd版本 ctr version
2. 公共镜像仓库配置(docker hub为例)
-
修改containerd配置
#修改containerd的配置文件 vim /etc/containerd/config.toml#修改内容如下 # 给 docker.io 配置可访问的镜像站,相关配置信息路径设置 [plugins."io.containerd.grpc.v1.cri".registry] config_path = "/etc/containerd/certs.d"
-
创建镜像源配置文件
由于docker hub可能存在无法访问的问题,因此给 docker.io 配置可访问的镜像站。
备注:Kubernetes/CRI 路径已经打开了 config_path =
“/etc/containerd/certs.d”,所以 kubelet 和 crictl 会用到 hosts.toml;但 ctr
不会。生产中用 crictl 测试即可。ctr 是低层调试工具,默认行为和 CRI 不同。# 创建目录结构 mkdir -p /etc/containerd/certs.d/docker.io# 编写镜像源规则 cat >/etc/containerd/certs.d/docker.io/hosts.toml <<EOF server = "https://registry-1.docker.io" [host."https://docker.m.daocloud.io"] capabilities = ["pull", "resolve"] [host."https://docker.1ms.run"]capabilities = ["pull", "resolve"] [host."https://mirror.ccs.tencentyun.com"]capabilities = ["pull", "resolve"] [host."https://docker.hlmirror.com"]capabilities = ["pull", "resolve"] [host."https://hub.fast360.xyz"]capabilities = ["pull", "resolve"] EOF# capabilities: pull(拉取镜像)、resolve(解析镜像名)、push(推送镜像,私有仓库需启用)。
-
验证
# 拉取镜像进行测试,需要显式指定 ctr images pull --hosts-dir="/etc/containerd/certs.d" docker.io/library/nginx:latest
ctr 与 CRI(kubelet、crictl)是两条路径:
CRI 路径:读取 /etc/containerd/config.toml 的[plugins.“io.containerd.grpc.v1.cri”.registry] 配置,并按 config_path 去找 /etc/containerd/certs.d 下的 hosts.toml。
ctr 路径:不会读取 CRI 配置。是否默认扫描 /etc/containerd/certs.d 取决于版本/编译选项;在 1.6.32 版本上需要显式传入 --hosts-dir 才会用该目录。
3. 部署runc
通过yum安装containerd后,通常会自动部署runc。
-
手工部署runnc
[root@master ~]# wget https://github.com/opencontainers/runc/releases/download/v1.1.6/runc.amd 64 [root@master ~]# install -m 755 runc.amd64 /usr/local/sbin/runc
-
验证
runc --version# 做一次最小运行测试,若成功输出 OK,说明 containerd+runc 工作正常 [root@master01 ~]# ctr images pull --hosts-dir /etc/containerd/certs.d docker.io/library/alpine:3.19 [root@master01 ~]# ctr run --rm --tty docker.io/library/alpine:3.19 t1 echo OK OK
4. 部署CNI
通过yum安装containerd后,通常会自动部署CNI,至/usr/libexec/cni。
但目前社区推荐CNI安装路径为/opt/cni/bin,因此containerd的配置文件/etc/containerd/config.toml推荐配置如下:
[plugins."io.containerd.grpc.v1.cri".cni]bin_dir = "/opt/cni/bin"conf_dir = "/etc/cni/net.d"
因此,可以通过手工部署CNI的方式进行部署。
-
手工部署CNI
在gethub上下载tgz包
https://github.com/containernetworking/plugins/releases/
[root@master ~]# mkdir -p /opt/cni/bin [root@master ~]# tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.2.0.tgz