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的使用

仓库管理

  • add:添加图表存储库

1
helm repo add bitnami https://charts.bitnami.com/bitnami
  • list:列出图表存储库

1
helm repo list
  • remove:删除图表存储库

1
helm repo remove bitnami
  • update:从图表存储库更新本地可用图表的信息

1
2
3
4
# 更新所有仓库
helm repo update
# 更新指定的仓库
helm repo update bitnami

在仓库中搜索

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 在所有仓库中搜索,默认只展示最新的版本
helm search repo nginx
# 在指定的仓库中搜索
helm search repo bitnami/wordpress
# 显示所有版本
helm search repo nginx -l

# 在全部版本中搜索大于等于指定版本
$ helm search repo nginx --version ^21.0.0 -l
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/nginx 21.0.8 1.29.0 NGINX Open Source is a web server that can be a...
bitnami/nginx 21.0.7 1.29.0 NGINX Open Source is a web server that can be a...
bitnami/nginx 21.0.6 1.29.0 NGINX Open Source is a web server that can be a...
bitnami/nginx 21.0.4 1.29.0 NGINX Open Source is a web server that can be a...
bitnami/nginx 21.0.3 1.29.0 NGINX Open Source is a web server that can be a...
bitnami/nginx 21.0.2 1.29.0 NGINX Open Source is a web server that can be a...
bitnami/nginx 21.0.1 1.29.0 NGINX Open Source is a web server that can be a...
bitnami/nginx 21.0.0 1.29.0 NGINX Open Source is a web server that can be a...

安装包

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
30
31
32
33
# 安装最新版
helm install nginx bitnami/nginx
# 安装指定版本
helm install nginx bitnami/nginx --version 21.0.3
# 安装包到指定命名空间
helm install nginx bitnami/nginx -n <namespace>
# 安装包并创建命名空间
helm install nginx bitnami/nginx -n <namespace> --create-namespace
# oci: 从 docker 仓库中安装
helm pull oci://registry-1.docker.io/bitnamicharts/nginx --version 21.0.8

# 安装本地 chart 目录
helm install my-release ./nginx
# 安装 .tgz 格式的打包 chart
helm install my-release ./nginx-1.2.3.tgz
# 从远程tgz安装
helm install my-release https://example.com/charts/nginx-1.2.3.tgz


# 安装 Git 仓库中的 chart(结合 plugin)
helm plugin install https://github.com/aslafy-z/helm-git
helm repo add mychart 'git+https://github.com/myorg/mychart.git'
helm install my-release mychart/nginx
# 卸载helm-git插件
helm plugin remove helm-git

# 使用 --set 传递单个或多个值
helm install my-release bitnami/nginx --set service.type=NodePort
# 使用 --values 或 -f 加载 YAML 配置文件
helm install my-release bitnami/nginx -f custom-values.yaml
# 同时使用多种 values 文件 + --set
helm install my-release bitnami/nginx -f base.yaml -f prod.yaml --set replicaCount=3

查看已经安装的包

1
2
3
4
5
6
# 查看指定命名空间已安装的包
helm list -n <namespace>
# 查看所有已安装的包
helm list -A
# 查看已安装的包状态
helm status ngxin -n <namespace>

卸载包

1
helm uninstall nginx -n <namespace>