查看containerd的命名空间
操作节点:所有节点
由于新版本的k8s直接采用containerd
作为容器运行时,因此,后续创建的服务,通过docker
的命令无法查询,因此,如果有需要对节点中的容器进行操作的需求,需要用containerd
的命令行工具来替换,目前总共有三种,包含:
- ctr
- crictl
- nerctl
ctr
ctr为最基础的containerd
的操作命令行工具,安装containerd
时已默认安装,因此无需再单独安装。
ctr的可操作的命令很少,且很不人性化,因此极力不推荐使用
Containerd 也有 namespaces 的概念,对于上层编排系统的支持,ctr
客户端 主要区分了 3 个命名空间分别是k8s.io
、moby
和default
比如操作容器和镜像:
# 查看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完成
更多 命令可以参考下文: