Containerd单机使用教程

为什么不用Docker?

k8s需要ContainerRuntime来运行节点中的容器,随着越来越多的容器出现(dockercontainerd…),在k8s 1.5版本后推出了CRI(ContainerRuntimeInterface,容器运行时接口)用于与容器交互,但只有遵循CRI规范的容器才能与其交互,如containerd,docekr虽然使用containerd作为后端,但docker本身不遵循CRI规范,所以需要加一个中间层dockershim(已被移除,现在使用cri-dockerd)来与docker交互,既然containerd遵循CRI规范为什么不直接使用containerd呢?

  • 如果你想要更方便的单机使用容器,docker仍然是最好的选择
  • 如果要用于k8s集群,containerd或者CRI-O或许是更好的选择

容器扫盲

  • Container Runtime Interface(CRI)k8s使用grpc协议通信的容器运行时接口,k8s可以与遵循CRI规范的容器运行时交互

  • Open Container Initiative (OCI):OCI 开放容器倡议,维护容器镜像格式规范、容器如何运行,只要运行时符合OCI倡议的规范,例如使用Dockerwin上可以跑的镜像,在Linuxcontainerd也能跑

    • 容器运行时规范: 定义了如何根据相应的配置构建容器运行时
    • 容器镜像规范: 定义了容器运行时使用的镜像的打包规范
  • runc(libcontainer):符合OCI规范的容器执行器,或叫低级容器运行时,使用一个符合OCI规范的容器即可通过runc运行,是大多数容器运行时的底层容器执行器(低级运行时)实现,只关注容器创建、运行和与操作系统的交互,runc使用Linux内核的cgroupsnamespace和其他特性来实现容器的隔离和资源管理

  • conatinerd高级容器运行时,守护进程,专注于容器生命周期管理(创建、管理、销毁容器),遵循OCI规范,提供了容器的生命周期管理、镜像管理、存储和网络等核心功能

    • cri-containerd(containerd 2.0会删除):在conatinerd:v1.0需要cri-containerd来与k8s的CRI接口交互,conatinerd:v1.1后通过CRI插件实现,只需要安装containerd即可
  • CRI-O高级容器运行时,遵循CRIOCI规范,专为k8s提供符合CRI规范API的容器运行时

  • Docker容器化平台,可以用来开发、运输、运行容器,运行容器实际上是使用Containerdrunc来运行的

    • dockershim:由于Docker不遵循CRI接口规范,k8sDocker交互需要加这个中间层,这个中间层遵循CRI规范
    • cri-dockerdockershim已经从kubelet中移除,dockershim的替代品
    • dockerd(Docker Daemon):守护进程,用于构建、运行、管理容器
    • Docker Hub:官方镜像仓库
    • docker cli:用于与容器、镜像交互的命令行工具
  • Podman(Pod Manager):直接调用runc接口来管理容器的命令行工具,遵循OCI规范,相当于docker cli+dockerd,大多数docker命令换成podman即可使用,如查看正在运行的容器:docker ps->podman ps

    • podman cli:命令行工具
    • conmon:负责监控,日志,TTY 分配,以及类似 out-of-memory 情况的杂事
  • rkt(rocket)高级容器运行时,遵循OCI规范,已停止活跃开发

    • rktlet:遵循OCI规范的容器执行器
  • CRI-O高级容器运行时,专为k8s设计的轻量级容器运行时,与containerd同级,遵循CRIOCI规范,底层使用runc

在这里插入图片描述

系统环境(Linux)

Debian12

一、安装Containerd

在线安装 containerd

#查看软件包
apt list | grep containerd
#安装
sudo apt-get install containerd.io
#卸载
sudo apt-get remove containerd

设置containerd开机自启动

systemctl enable containerd
systemctl start containerd
#查看状态
systemctl status containerd

检查

ctr version

离线安装 containerd

1、从 https://github.com/containerd/containerd/releases 下载最新版containerd(右键复制链接)
在这里插入图片描述

#下载
wget https://github.com/containerd/containerd/releases/download/v1.7.20/containerd-1.7.20-linux-amd64.tar.gz
#解压
tar Cxzvf /usr/local containerd-1.7.20-linux-amd64.tar.gz
#清理
rm containerd-1.7.20-linux-amd64.tar.gz

新建目录mkdir -p /usr/local/lib/systemd/system

新增加配置文件vim /usr/local/lib/systemd/system/containerd.service

# Copyright The containerd Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target

[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd

Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5

# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity

# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target

然后执行

systemctl daemon-reload
systemctl enable --now containerd

2、安装 runc
https://github.com/opencontainers/runc/releases下载最新版runc(右键复制链接)
在这里插入图片描述

#下载
wget https://github.com/opencontainers/runc/releases/download/v1.1.13/runc.amd64
#安装
install -m 755 runc.amd64 /usr/local/sbin/runc
#清理
rm runc.amd64
#检查
runc -v

3、安装 CNI 插件
https://github.com/containernetworking/plugins/releases 下载最新版CNI(右键复制链接)

在这里插入图片描述

#下载
wget https://github.com/containernetworking/plugins/releases/download/v1.5.1/cni-plugins-linux-amd64-v1.5.1.tgz
#新建目录
mkdir -p /opt/cni/bin
#解压
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.5.1.tgz
#清理
rm cni-plugins-linux-amd64-v1.5.1.tgz

检查

ctr version

二、自定义conatinerd

配置详情https://github.com/containerd/containerd/blob/main/docs/man/containerd-config.toml.5.md

生成默认配置

containerd config default > /etc/containerd/config.toml

三、containerd使用

  • 单机运行的conatinerd使用内置的ctr来执行命令
  • k8s中的containerd使用k8s的命令行工具crictl来执行命令
  • 只要是符合OCI规范的镜像就可以使用,比如docker的镜像就可以直接使用

如查看本地镜像单机中使用ctr images ls,在k8s中使用crictl images ls(ctr大多数命令crictl都不支持)

镜像命令

DockerContainerd解释
docker pull docker.io/library/nginx:latestctr i pull docker.io/library/nginx:latest下载镜像(一定要指定主机)
docker imagesctr i lsorctr image list查看本地镜像
docker run --name mysql -v /opt/soft/mysql/log:/var/log/mysql mysql:5.7ctr i mount docker.io/library/nginx:latest /mnt挂载镜像
``umount /mnt解挂
docker save -o nginx.tar.gz nginx:latestctr i export nginx.tar.gz docker.io/library/nginx:latest导出镜像
docker load -i nginx.tar.gzctr i import nginx.tar.gz导入镜像
docker rmi docker.io/library/nginx:latestctr i rm docker.io/library/nginx:latest删除镜像
docker tag docker.io/library/nginx:latest nginx:latestctr i tag docker.io/library/nginx:latest nginx:latest修改镜像tag

容器命令

DockerContainerd解释
docker ps -actr conatiner lsorctr c ls查看静态容器列表
docker start mynginxctr task lsorctr t ls查看正在运行的容器
docker run nginxctr c create docker.io/library/nginx:latest nginx创建容器(静态容器,需要提前pull下载)
docker rmi nginxctr c rm nginx删除静态容器
docker start nginxctr t start -d nginx启动静态容器为动态容器
docker stop mynginxctr t kill nginx停止容器
docker pause mynginxctr t pause nginx暂停容器
docker unpause mynginxctr t resume nginx恢复容器
docker rm mynginxctr t rm nginx删除容器进程
docker rm mynginxctr c rm nginx删除容器(先停再删)
docker psctr t ps nginx查看容器所有进程
docker exec -it mynginx /bin/shctr t exec --exec-id 1 nginx /bin/sh进入容器
docker inspect mynginxctr c info nginx查看容器详细信息
docker run ctr run 创建并启动容器(动态容器)

快照命令

Containerd解释
ctr snapshot ls查看容器快照
ctr snapshot create <container_id> <snapshot_name>创建容器快照
ctr snapshot rm <snapshot_name>删除指定快照
ctr snapshot restore <snapshot_name> <new_container_id>恢复容器快照

命名空间命令

Containerd解释
ctr namespace create k8sorctr ns create k8s创建命名空间
ctr ns default i ls查看默认命名空间的镜像
ctr ns rm k8s删除命名空间
ctr ns label k8s env=production为命名空间添加标签
  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cci497

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值