containerd 1.6.22 安装初使用

先聊几个必要的知识点

1,k8s 1.24之后弃用了docker-shim。

        dockershim 的作用是 Kubernetes 通过 CRI 来操作 Docker,所以Kubernetes 任何的功能变动或 Docker 有任何的功能特性变更,dockershim 代码必须加以改动保证能够支持相关的变更。(维护特别不方便)

        另外,Docker 的底层运行时是 containerd(大家装docker的时候应该也会发现有containerd这样几个东西),最终都是要调用 containerd且 containerd 自身也支持 CRI 。那为什么要先绕过一层 Docker 呢?是不是可以直接通过 CRI 跟 Containerd 进行交互呢?这也就造成了现在 Kubernetes 社区弃用 dockershim的原因。

2,linux操作系统systemd的服务管理

        系统服务在/usr/lib/systemd/system目录下,名字为*.service之类的文件,systemctl可以通过文件名管理服务。这就是为什么有些systemctl 可以管理一些二进制启动的服务,linux的3.10的内核以后直接后台运行二进制程序显然不够优雅。

3,主流的平台platform有x86(amd),arm(aarch)等等,操作系统也是分linux/windows的

        参考cpu架构,如果不熟悉的话,还是不好记住的,特别是amd/arm这种容易混。特别注意的是,用ctr命令拉取、导入、导出镜像,是需要指定平台的,否则有时候会报相关错误,ctr也支持全平台,但是文件就比较大了。

4,containerd的工具为ctr,k8s管理containerd的工具为crictl

        ctr是containerd的工具,它运行时,需要在ctr 紧后加入-n namespace。例如k8s的镜像是放在k8s.io的命名空间下的,你直接用ctr查看,是看不到镜像的,你需要这样才能看到:ctr -n k8s.io images list。但是可以用crictl直接查看到k8s运行的服务的镜像。

准备工作:

containerd的二进制下载地址(我用的1.6.22):

https://github.com/containerd/containerd/releases

k8s二进制的下载地址(直接修改版本号可用):

例如:

​wget https://dl.k8s.io/v1.23.1/bin/linux/arm64/kubeadm --no-check-certificatewget

wget https://dl.k8s.io/v1.27.1/bin/linux/amd64/kubeadm --no-check-certificate ​

干点正事:

一,启动containerd

包下载好到本地,解压出来。

tar -xzvf [cri-containerd包名] -C [解压目标目录]

可以看到解压出来这么多东东,图中的是需要跑的二进制文件,

可以放到/usr/bin/

也可以放到/usr/local/bin/

因为这两个目录都具有系统的环境变量,可以直接运行。比如ssh命令其实就在/usr/bin/ssh

赋予它们可执行权限,4=读,2=写,1=可执行,加一起就是他的权限。

    chmod 0755 /usr/bin/containerd*
    chmod 0755 /usr/bin/crictl
    chmod 0755 /usr/bin/ctd-decoder
    chmod 0755 /usr/bin/runc
    chmod 0755 /usr/bin/ctr

 把上面解压的这个文件containerd.service,放到systemd的目录下:/usr/lib/systemd/system/ 

同样要赋予权限

chmod 0755 /usr/lib/systemd/system/containerd.service

如果你不想每次使用crictl都带一行类似下面这样的参数,

crictl --image-endpoint unix:///var/run/containerd/containerd.sock

那么你就执行下面的命令

  cat >>/etc/crictl.yaml <<EOF
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10
debug: false
EOF

以下是我自己的service,与包里的稍微有一些不一致

vim /usr/lib/systemd/system/containerd.service

[Unit]

Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
#After=network-online.target firewalld.service

[Service]

Restart=always
RestartSec=5
Delegate=yes
KillMode=process
OOMScoreAdjust=-999
LimitNOFILE=1048576
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
ExecStart=/usr/bin/containerd
ExecReload=/bin/kill -s HUP $MAINPID

[Install]

WantedBy=multi-user.target

好了,到这里基本上安装好了,接下来,就启动它吧。是不是特别简单啊

    systemctl daemon-reload
    systemctl enable containerd
    systemctl start containerd

 二,containerd的使用

首先,通过类似的方式,我下载了kubeadm kubectl kubelet,本地离线安装了一个k8s环境。

那么我想做k8s整套的离线包,就需要把镜像导出来,以下是正确的导入导出方式

回顾:平台ARM=arm64,x86=amd64

containerd拉取、导入、导出镜像都是分平台的,--all-platform是全平台

镜像拉取:

ctr -n k8s.io i pull --platform=amd64 [镜像名:tag] 

镜像导出:

ctr -n k8s.io images export --platform=amd64 [out包名.tar] [镜像名称:tag]

镜像导入:

ctr -n k8s.io images import --platform=amd64 n.tar

修改tag:

ctr -n k8s.io i tag src_name:src_tag dst_name:dst_tag

命令对比参考如下图:ctr和crictl对比和联系_crictl ctr_倾心之奇迹的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值