K8S 之 Tools

摘要

crictl 命令

  • crictl 是k8s官方出品的一个命令行工具,用于与 containerd 进行通信。

  • crictl 命令默认需要 sudo 权限,如果不想每次都加 sudo,可以将用户加入 containerd 的 socket 权限组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# containerd 的默认 socket 是 /var/run/containerd/containerd.sock
$ ls -l /var/run/containerd/containerd.sock
srw-rw---- 1 root root 0 7月 1 10:57 /var/run/containerd/containerd.sock
# 如果 group 是 root:你可以改为其它组,比如 docker
# 如果 docker 组不存在则创建
sudo groupadd docker
# 修改文件所属组为 docker
sudo chgrp docker /var/run/containerd/containerd.sock
# 为组添加读写权限
sudo chmod g+rw /var/run/containerd/containerd.sock
# 添加用户到 docker 组
sudo usermod -aG docker $USER
# 刷新权限
newgrp docker

# 此时虽然已经可以不用 sudo 了,但是一旦重启 containerd 就会重新回到 root 权限,因此需要添加如下配置
sudo mkdir -p /etc/systemd/system/containerd.service.d/
sudo tee /etc/systemd/system/containerd.service.d/override.conf <<EOF
[Service]
ExecStartPost=/bin/bash -c 'chmod 660 /run/containerd/containerd.sock && chgrp docker /run/containerd/containerd.sock'
EOF

sudo systemctl daemon-reload
sudo systemctl restart containerd
  • crictl 命令的使用方式比较类似docker命令

操作 docker 命令 crictl 命令 说明
查看正在运行的容器 docker ps crictl ps
查看所有容器(包括已停止) docker ps -a crictl ps -a
查看镜像 docker images crictl images
查看容器日志 docker logs <container_id> crictl logs <container_id>
进入容器交互 docker exec -it <id> sh crictl exec -it <id> sh
查看容器详细信息 docker inspect <container_id> crictl inspect <container_id>
查看 Pod 详细信息 ❌(不支持) crictl inspectp <pod_id> K8s 专属
删除容器 docker rm <container_id> crictl rm <container_id>
删除镜像 docker rmi <image_id> crictl rmi <image_id>
拉取镜像 docker pull nginx crictl pull nginx
运行容器(非 K8s 场景) docker run -it nginx ❌(不支持) crictl 不运行容器,仅调试现有容器
列出容器运行时信息 docker info crictl info
查看容器运行状态 docker stats crictl stats 简要版
设置配置文件 ~/.docker/config.json /etc/crictl.yaml 如设置 endpoint

nerdctl

  • nerdctl 是一个 兼容 Docker CLI 的容器命令行工具,用于管理 containerd 容器运行时。

  • 它是 containerd 官方子项目,由 CNCF 维护,其命令语法与 Docker CLI 兼容,目标是让习惯 Docker 的用户也能轻松使用 containerd。

  • 安装 nerdctl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 1. 下载最新版本
VERSION=2.1.3
wget https://github.com/containerd/nerdctl/releases/download/v${VERSION}/nerdctl-${VERSION}-linux-amd64.tar.gz

# 2. 解压
tar -xvf nerdctl-${VERSION}-linux-amd64.tar.gz

# 3. 移动到系统 PATH
sudo mv nerdctl /usr/local/bin/

# nerdctl 需要 sudo 权限
## 为 sudo 添加 PATH
sudo visudo
## 找到这一行
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
## 修改为,即将 nerdctl 所在的目录加入 PATH
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

# 4.测试
## 查看版本
sudo nerdctl version
## 列出容器,--namespace k8s.io 表示查看 k8s 中的容器
sudo nerdctl ps --namespace k8s.io

## 如果不想每次都加上 --namespace k8s.io,可以设置别名
echo "alias kps='sudo nerdctl --namespace=k8s.io ps'" >> ~/.bashrc
source ~/.bashrc
## 测试
kps

Helm

  • 官网文档

  • Helm 是 Kubernetes 的包管理器,类似于 Linux 下的包管理工具如 yum、apt 等。可以方便的将之前打包好的 yaml 文件部署到 Kunernetes 上。

Helm的安装

1
2
3
4
5
wget https://get.helm.sh/helm-v3.17.4-linux-amd64.tar.gz
tar -zxvf helm-v3.17.4-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm
$ helm version
version.BuildInfo{Version:"v3.17.4", GitCommit:"595a05da6166037d0abebaa27ac8a498fa4d7ed2", GitTreeState:"clean", GoVersion:"go1.23.10"}
1
2
3
4
5
6
7
8
# 安装 helm 的自动补全功能
# 1 当前用户
echo 'source <(helm completion bash)' >> ~/.bashrc
source ~/.bashrc

# 2 所有用户
helm completion bash | sudo tee /etc/bash_completion.d/helm > /dev/null
sudo chmod a+r /etc/bash_completion.d/helm

Helm的使用