跳到主要内容

查看containerd的命名空间

操作节点:所有节点

由于新版本的k8s直接采用containerd作为容器运行时,因此,后续创建的服务,通过docker的命令无法查询,因此,如果有需要对节点中的容器进行操作的需求,需要用containerd的命令行工具来替换,目前总共有三种,包含:

  • ctr
  • crictl
  • nerctl
ctr

ctr为最基础的containerd的操作命令行工具,安装containerd时已默认安装,因此无需再单独安装。

ctr的可操作的命令很少,且很不人性化,因此极力不推荐使用

Containerd 也有 namespaces 的概念,对于上层编排系统的支持,ctr 客户端 主要区分了 3 个命名空间分别是k8s.iomobydefault

比如操作容器和镜像:

# 查看containerd的命名空间
ctr ns ls;

# 查看containerd启动的容器列表
ctr -n k8s.io container ls

# 查看镜像列表
ctrl -n k8s.io image ls

# 导入镜像
ctr -n=k8s.io image import dashboard.tar

# 从私有仓库拉取镜像,前提是/etc/containerd/certs.d下已经配置过该私有仓库的非安全认证
ctr images pull --user admin:admin --hosts-dir "/etc/containerd/certs.d" 172.21.65.226:5000/eladmin/eladmin-api:v1-rc1

# ctr命令无法查看容器的日志,也无法执行exec等操作
crictl

crictl 是遵循 CRI 接口规范的一个命令行工具,通常用它来检查和管理kubelet节点上的容器运行时和镜像。

主机安装了 k8s 后,命令行会有 crictl 命令,无需单独安装。

crictl 命令默认使用k8s.io 这个名称空间,因此无需单独指定,使用前,需要先加一下配置文件:

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

常用操作:

# 查看容器列表
crictl ps

# 查看镜像列表
crictl images

# 删除镜像
crictl rmi 172.21.65.226:5000/eladmin/eladmin-api:v1-rc1

# 拉取镜像, 若拉取私有镜像,需要修改containerd配置添加认证信息,比较麻烦且不安全
crictl pull nginx:alpine

# 执行exec操作
crictl ps
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD
d23fe516d2eeb 8b0e63fd4fec6 5 hours ago Running eladmin-api 0 5dbae572dcb6b eladmin-api-5d979bb778-tc5kz

# 注意只能使用containerid
crictl exec -ti d23fe516d2eeb bash

# 查看容器日志
crictl logs -f d23fe516d2eeb

# 清理镜像
crictl rmi --prune
nerdctl

推荐使用 nerdctl,使用效果与 docker 命令的语法基本一致 , 官网https://github.com/containerd/nerdctl

安装:

# 下载精简版安装包,精简版的包无法使用nerdctl进行构建镜像
wget https://github.com/containerd/nerdctl/releases/download/v0.23.0/nerdctl-0.23.0-linux-amd64.tar.gz

#如果下载超时或者速度慢,也可以去网盘自取
链接: https://pan.baidu.com/s/14Q2tPbiNXdN-PLKk1hpKhA 提取码: 496v

# 解压后,将nerdctl 命令拷贝至$PATH下即可
cp nerdctl /usr/bin/

常用操作:

# 查看镜像列表
nerdctl -n k8s.io ps -a

# 执行exec
nerdctl -n k8s.io exec -ti e2cd02190005 sh

# 登录镜像仓库
nerdctl login 172.21.65.226:5000

# 拉取镜像,如果是想拉取了让k8s使用,一定加上-n k8s.io,否则会拉取到default空间中, k8s默认只使用k8s.io
nerdctl -n k8s.io pull 172.21.65.226:5000/eladmin/eladmin-api:v1-rc1


# 启动容器
nerdctl -n k8s.io run -d --name test nginx:alpine

# exec
nerdctl -n k8s.io exec -ti test sh

# 查看日志, 注意,nerdctl 只能查看使用nerdctl命令创建从容器的日志,k8s中kubelet创建的产生的容器无法查看
nerdctl -n k8s.io logs -f test

# 构建,但是需要额外安装buildkit的包
nerdctl build . -t xxxx:tag -f Dockerfile
使用小经验
  • 用了k8s后,对于业务应用的基本操作,90%以上都可以通过kubectl命令行完成
  • 对于镜像的构建,仍然推荐使用docker build 来完成,推送到镜像仓库后,containerd可以直接使用
  • 对于查看containerd中容器的日志,使用 crictl logs完成,因为ctr、nerdctl均不支持
  • 对于其他常规的containerd容器操作,建议使用nerdctl完成

更多命令可以参考下文: