转载自:https://blog.laeni.cn/note/cloud/cri/ctl/
由于 Containerd 已经从 Docker 独立,这代表 Docker 底层也是使用的是 Containerd。而 Containerd 是实现了 CRI 规范的,所以 k8s 是可以直接使用 Containerd 而无需再使用 Docker 的。但是大部分时候我们还是使用 Docker 作为 k8s 的容器运行时,原因是因为我们习惯了 Docker,如果换为 Containerd 必定要使用新的工具来替换 Docker,而这些命令就是 ctr、crictl 等(不同的运行时会有一定差异)。
关系 ctr:Containerd自带的客户端工具,安装 Containerd 的同时就会安装 ctr(目前一起安装的工具为:containerd、containerd-shim、containerd-shim-runc-v1、containerd-shim-runc-v2、containerd-stress、ctr),如果使用其他容器运行时则会对应其他工具。
crictl:Kubelet 容器运行时接口 (CRI) 的 CLI 和验证工具,是cri-tools的别名。也就是说只要时实现了 CRI 规范的容器运行时都能使用它,一般安装 k8s 就会安装(手动安装)该工具,目前如果使用kubeadm初始化 k8s 集群前必须要先安装该工具。
nerdctl:nerdctl是containerd组中的一个子项目,目的是为了兼容 Docker CTL,即可以使用 nerdctl 代替 docker 命令,它只支持 containerd 容器运行时。
与 Docker 命令对比 命令 docker / nerdctl ctr(containerd) crictl(kubernetes) 查看运行的容器 docker ps ctr task ls/ctr container ls crictl ps 查看镜像 docker images ctr image ls crictl images 查看容器日志 docker logs 无 crictl logs 查看容器数据信息 docker inspect ctr container info crictl inspect 查看容器资源 docker stats 无 crictl stats 启动/关闭已有的容器 docker start/stop ctr task start/kill crictl start/stop 运行一个新的容器 docker run ctr run 无(最小单元为 pod) 打标签 docker tag ctr image tag 无 创建一个新的容器 docker create ctr container create crictl create 导入镜像 docker load ctr image import 无 导出镜像 docker save ctr image export 无 删除容器 docker rm ctr container rm crictl rm 删除镜像 docker rmi ctr image rm crictl rmi 拉取镜像 docker pull ctr image pull ctictl pull 推送镜像 docker push ctr image push 无 登录或在容器内部执行命令 docker exec 无 crictl exec 清空不用的镜像 docker image prune 无 crictl rmi --prune crictl Help $ crictl help NAME: crictl - client for CRI
USAGE: crictl [global options] command [command options] [arguments...]
VERSION: v1.25.0
COMMANDS: attach 附加到正在运行的容器 | Attach to a running container create 创建新容器 | Create a new container exec 在正在运行的容器中运行命令 | Run a command in a running container version 显示运行时版本信息 | Display runtime version information images, image, img 列出镜像 | List images inspect 显示一个或多个容器的状态 | Display the status of one or more containers inspecti 返回一个或多个镜像的状态 | Return the status of one or more images imagefsinfo 返回镜像文件系统信息 | Return image filesystem info inspectp 显示一个或多个 Pod 的状态 | Display the status of one or more pods logs 获取容器的日志 | Fetch the logs of a container port-forward 将本地端口转发到 Pod | Forward local port to a pod ps 列出容器 | List containers pull 从注册表中拉取镜像 | Pull an image from a registry run 在沙箱中运行一个新容器 | Run a new container inside a sandbox runp 运行一个新的 Pod | Run a new pod rm 删除一个或多个容器 | Remove one or more containers rmi 删除一个或多个镜像 | Remove one or more images rmp 删除一个或多个 Pod | Remove one or more pods pods 列出 Pod | List pods start 启动一个或多个已创建的容器 | Start one or more created containers info 显示容器运行时信息 | Display information of the container runtime stop 停止一个或多个容器 | Stop one or more running containers stopp 停止一个或多个 Pod | Stop one or more running pods update 更新一个或多个正在运行的容器 | Update one or more running containers config 获取和设置 crictl 客户端配置选项 | Get and set crictl client configuration options stats 列出容器资源使用统计信息 | List container(s) resource usage statistics statsp 列出 Pod 资源使用统计信息 | List pod resource usage statistics completion 输出shell完成代码(Shell自动提示/补全) | Output shell completion code checkpoint 检查一个或多个正在运行的容器 | Checkpoint one or more running containers help, h 显示命令列表或一个命令的帮助 | Shows a list of commands or help for one command
GLOBAL OPTIONS: --config value, -c value 客户端配置文件的位置。 如果未指定且默认不存在,也会搜索程序的目录 | Location of the client config file. If not specified and the default does not exist, the program's directory is searched as well (default: "/etc/crictl.yaml") [$CRI_CONFIG_FILE] --debug, -D Enable debug mode (default: false) --help, -h show help (default: false) --image-endpoint value, -i value CRI 镜像管理器服务的端点(默认:使用'runtime-endpoint'设置) | Endpoint of CRI image manager service (default: uses 'runtime-endpoint' setting) [$IMAGE_SERVICE_ENDPOINT] --runtime-endpoint value, -r value CRI 容器运行时服务的端点(默认:按默认列表中的顺序使用第一个成功的)。现在不推荐使用默认值,应该明确设置。 | Endpoint of CRI container runtime service (default: uses in order the first successful one of [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]). Default is now deprecated and the endpoint should be set instead. [$CONTAINER_RUNTIME_ENDPOINT] --timeout value, -t value 以秒为单位连接到服务器的超时时间。| Timeout of connecting to the server in seconds (e.g. 2s, 20s.). 0 or less is set to default (default: 2s) --version, -v print the version (default: false) help runp $ crictl help runp NAME: crictl runp - Run a new pod
USAGE: crictl runp [command options] pod-config.[json|yaml]
OPTIONS: --cancel-timeout value, -T value 在取消请求之前等待运行 pod 沙箱请求完成的秒数 | Seconds to wait for a run pod sandbox request to complete before cancelling the request (default: 0s) --runtime value, -r value 要使用的运行时处理程序。 可用选项由容器运行时定义。 | Runtime handler to use. Available options are defined by the container runtime. 示例 配置 如设置运行时端点:
$ crictl config runtime-endpoint unix:///run/containerd/containerd.sock 该操作会将配置内容存储到/etc/crictl.yaml,所以可以直接修改该配置文件。
Pod 查看所有Pod $ crictl pods 停止Pod $ crictl stopp <POD-ID> 删除Pod $ crictl rmp <POD-ID> # 只能删除已停止的POD $ crictl rmp -f <POD-ID> # 即时POD未停止也强制删除 $ crictl rmp -a <POD-ID> # 删除全部POD 删除POD会自动删除POD中的容器。
创建POD $ cat <<EOF | tee pod-config.json { "metadata": { "name": "nginx-sandbox", "namespace": "default", "attempt": 1, "uid": "hdishd83djaidwnduwk28bcsb" }, "logDirectory": "/tmp", "linux": { } } EOF $ crictl runp pod-config.json 在POD中创建容器
$ cat <<EOF | tee pod-config.json { "metadata": { "name": "busybox" }, "image":{ "image": "busybox" }, "command": [ "top" ], "log_path":"busybox.log", "linux": { } } EOF $ crictl create <POD-ID> container-config.json pod-config.json 容器 列出所有容器 $ crictl ps -a 类似Docker:docker ps -a
查看容器日志 $ crictl logs [command options] <CONTAINER-ID>
参考资料 https://cdn.modb.pro/db/485911
标签:容器,container,ctr,Containerd,image,nerdctl,crictl,docker From: https://blog.51cto.com/kusorz/6188302