Appearance
Kubernetes 工具链详解
Kubernetes 工具链详解
从零开始掌握 Kind、Kubectl、K9s、Lens、Helm
KindKubectlK9sLensHelm
工具全景图
┌─────────────────────────────────────────────────────────┐
│ 你的Windows电脑 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ Docker │ │ WSL2 │ │ Lens (GUI) │ │
│ │ Desktop │ │ (Linux内核) │ │ (可视化界面) │ │
│ └──────┬──────┘ └──────┬──────┘ └─────────────────┘ │
│ │ │ │
│ └────────────────┘ │
│ 运行 Kind 创建的集群 │
│ ┌─────────────────┐ │
│ │ Kind 集群 │ ← 模拟真实K8s集群 │
│ │ ┌─────┐┌─────┐ │ │
│ │ │Node1││Node2│ │ ← 每个Node是一个Docker容器 │
│ │ │Node3││Node4│ │ │
│ │ └─────┘└─────┘ │ │
│ └─────────────────┘ │
│ 管理工具 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ kubectl │ │ K9s │ │ Helm │ │
│ │ (命令行工具) │ │ (终端UI) │ │ (包管理器) │ │
│ └─────────────┘ └─────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────┘工具对比速览
| 工具 | 类型 | 核心作用 | 使用场景 | 优先级 |
|---|---|---|---|---|
| Kind | 集群创建 | 在Docker中运行K8s节点 | 本地开发测试环境 | ⭐⭐⭐⭐⭐ |
| kubectl | 命令行工具 | 与K8s API交互 | 日常操作、自动化脚本 | ⭐⭐⭐⭐⭐ |
| K9s | 终端UI | 可视化操作集群资源 | 快速浏览、排查问题 | ⭐⭐⭐⭐⭐ |
| Lens | 桌面GUI | 图形化管理多集群 | 可视化监控、资源关系 | ⭐⭐⭐⭐ |
| Helm | 包管理器 | 应用打包与版本管理 | 部署复杂应用 | ⭐⭐⭐⭐ |
工具1:Kind(Kubernetes in Docker)
为什么选择Kind?
| 对比项 | Kind | Minikube | Docker Desktop K8s |
|---|---|---|---|
| 资源占用 | 低(容器化节点) | 中等(虚拟机) | 低 |
| 启动速度 | 30秒内 | 2-5分钟 | 1分钟 |
| 多节点支持 | ✅ 原生支持 | ⚠️ 需额外配置 | ❌ 单节点 |
| 与WSL2配合 | 完美 | 偶尔网络问题 | 良好 |
| 节点模拟 | 多容器=多节点 | 单VM=单节点 | 无 |
核心概念:Kind 将 K8s 的每个节点(Node)都跑成一个 Docker 容器,在你的 Windows + WSL2 + Docker Desktop 环境下最轻量、最快。
安装步骤
环境要求
- Windows 10/11 已启用 WSL2
- Docker Desktop 已安装并集成 WSL2
- WSL2 发行版(Ubuntu/Debian)已安装
Step 1:在 WSL2 中安装 Kind
bash
# 打开 WSL2 终端(开始菜单搜索"Ubuntu")
# 下载 Kind 二进制文件
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.22.0/kind-linux-amd64
# 添加执行权限
chmod +x ./kind
# 移动到系统路径,成为全局命令
sudo mv ./kind /usr/local/bin/kind
# 验证安装
kind version
# 预期输出:kind v0.22.0 go1.20 linux/amd64Step 2:创建单节点测试集群
bash
# 创建最简单的单节点集群
kind create cluster --name test
# 预期输出:
# Creating cluster "test" ...
# ✓ Ensuring node image (kindest/node:v1.29.2) 🖼
# ✓ Preparing nodes 📦
# ✓ Writing configuration 📜
# ✓ Starting control-plane 🕹️
# ✓ Installing CNI 🔌
# ✓ Installing StorageClass 💾
# Set kubectl context to "kind-test"Step 3:创建多节点生产级集群
bash
# 先删除测试集群
kind delete cluster --name test
# 创建配置文件
cat > ~/kind-cluster.yaml <<'EOF'
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
# 控制平面节点(集群大脑)
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
# 将容器80/443端口映射到主机,用于访问Ingress
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
# 工作节点1(运行应用)
- role: worker
labels:
tier: frontend
zone: zone-a
# 工作节点2
- role: worker
labels:
tier: backend
zone: zone-b
# 工作节点3
- role: worker
labels:
tier: database
zone: zone-c
EOF
# 创建集群
kind create cluster --name k8s-learn --config ~/kind-cluster.yamlStep 4:验证集群状态
bash
# 查看所有节点
kubectl get nodes
# 预期输出:
# NAME STATUS ROLES AGE VERSION
# k8s-learn-control-plane Ready control-plane 2m v1.29.2
# k8s-learn-worker Ready <none> 1m v1.29.2
# k8s-learn-worker2 Ready <none> 1m v1.29.2
# k8s-learn-worker3 Ready <none> 1m v1.29.2Kind 常用命令
bash
# 集群管理
kind get clusters # 列出所有集群
kind delete cluster --name k8s-learn # 删除指定集群
kind delete clusters --all # 删除所有集群
# 配置导出
kind export kubeconfig --name k8s-learn # 导出kubeconfig
kind export kubeconfig --name k8s-learn --kubeconfig ~/.kube/kind-config # 指定路径
# 镜像加载(开发必备)
docker build -t my-app:latest . # 本地构建镜像
kind load docker-image my-app:latest --name k8s-learn # 加载到Kind集群工具2:kubectl(Kubernetes 命令行工具)
为什么需要kubectl?
kubectl 是 K8s 的官方命令行工具,就像 git 操作代码仓库一样,用 kubectl 操作 K8s 集群。它是与 K8s API 交互的标准方式,所有其他工具底层都依赖它。
安装与配置
Step 1:安装 kubectl(WSL2)
bash
# 下载最新稳定版
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 安装到系统路径
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# 验证
kubectl version --clientStep 2:配置自动补全(强烈推荐)
bash
# 安装bash-completion
sudo apt-get update && sudo apt-get install -y bash-completion
# 启用kubectl自动补全
echo 'source <(kubectl completion bash)' >> ~/.bashrc
echo 'alias k=kubectl' >> ~/.bashrc # 设置别名 k
echo 'complete -o default -F __start_kubectl k' >> ~/.bashrc
source ~/.bashrcStep 3:理解 kubeconfig(核心概念)
kubectl 通过 ~/.kube/config 文件知道连接哪个集群:
yaml
# ~/.kube/config 结构示例
apiVersion: v1
kind: Config
clusters:
- name: kind-k8s-learn
cluster:
server: https://127.0.0.1:45623 # 集群API地址
certificate-authority-data: ... # 证书
- name: docker-desktop
cluster:
server: https://kubernetes.docker.internal:6443
users:
- name: kind-k8s-learn
user:
client-certificate-data: ... # 用户证书
client-key-data: ...
contexts: # 上下文 = 集群 + 用户 + 命名空间
- name: kind-k8s-learn
context:
cluster: kind-k8s-learn
user: kind-k8s-learn
namespace: default
- name: docker-desktop
context:
cluster: docker-desktop
user: docker-desktopStep 4:多集群切换
bash
# 查看所有上下文
kubectl config get-contexts
# 示例输出:
# CURRENT NAME CLUSTER AUTHINFO NAMESPACE
# * kind-k8s-learn kind-k8s-learn kind-k8s-learn default
# docker-desktop docker-desktop docker-desktop default
# 切换到Kind集群
kubectl config use-context kind-k8s-learn
# 切换到Docker Desktop集群
kubectl config use-context docker-desktop
# 查看当前上下文
kubectl config current-contextkubectl 核心命令
查看类命令
bash
# 基础查看
kubectl get nodes # 查看节点
kubectl get pods # 查看Pod(当前namespace)
kubectl get pods -A # 查看所有namespace的Pod
kubectl get pods -o wide # 显示更多信息(IP、所在Node)
kubectl get pods --watch # 实时监视变化
# 其他资源
kubectl get deployment # 查看Deployment
kubectl get service # 查看Service
kubectl get configmap # 查看ConfigMap
kubectl get secret # 查看Secret
kubectl get all # 查看所有资源
kubectl get events # 查看事件(排查问题)描述与诊断
bash
# 查看详情(排查问题神器)
kubectl describe node <node-name> # 节点详情(看资源压力、污点)
kubectl describe pod <pod-name> # Pod详情(看Events找错误原因)
kubectl describe deployment <name> # Deployment详情
# 查看日志
kubectl logs <pod-name> # 查看日志
kubectl logs <pod-name> -f # 实时跟踪(tail -f效果)
kubectl logs <pod-name> --previous # 查看上一次崩溃的日志
kubectl logs <pod-name> -c <container> # 多容器Pod指定容器操作类命令
bash
# 创建与删除
kubectl apply -f file.yaml # 通过YAML创建/更新资源
kubectl delete -f file.yaml # 删除YAML定义的资源
kubectl delete pod <name> # 删除Pod
kubectl delete pod <name> --force # 强制删除(卡死时用)
# 进入容器调试
kubectl exec -it <pod-name> -- /bin/sh # 进入容器
kubectl exec -it <pod-name> -- bash # 有bash的容器
kubectl exec -it <pod-name> -c <container> -- sh # 多容器指定容器
# 端口转发(本地访问集群服务)
kubectl port-forward svc/<service-name> 8080:80 # 本地8080→服务80
kubectl port-forward pod/<pod-name> 3306:3306 # 本地3306→Pod 3306快捷技巧
bash
# 生成YAML模板(不执行)
kubectl run nginx --image=nginx --dry-run=client -o yaml # 输出YAML
kubectl create deployment web --image=nginx --dry-run=client -o yaml > web.yaml
# 批量操作
kubectl get pods -n kube-system | grep Running # 过滤
kubectl delete pods -l app=nginx # 按标签删除
kubectl get pods --all-namespaces --field-selector=status.phase!=Running # 找非Running工具3:K9s(终端 UI 工具)
为什么需要K9s?
| 场景 | kubectl方式 | K9s方式 |
|---|---|---|
| 浏览所有Pod | 敲命令,复制名字 | 方向键上下浏览,实时刷新 |
| 查看Pod日志 | kubectl logs <名字> | 选中Pod,按 l |
| 进入容器调试 | kubectl exec -it <名字> -- sh | 选中Pod,按 s |
| 删除资源 | kubectl delete pod <名字> | 选中,按 ctrl-d |
| 切换namespace | kubectl -n <name> get pods | 按 : 输入名字 |
| 查看资源关系 | 多次命令查询 | 按 d 看依赖图 |
K9s 是终端里的"图形界面",让你用键盘飞快地操作 K8s,效率提升10倍。
安装与启动
Step 1:安装(WSL2)
bash
# 下载最新版
wget https://github.com/derailed/k9s/releases/download/v0.32.4/k9s_Linux_amd64.tar.gz
# 解压
tar -xzf k9s_Linux_amd64.tar.gz
# 移动
sudo mv k9s /usr/local/bin/
# 验证
k9s versionStep 2:启动 K9s
bash
# 直接使用当前kubectl上下文启动
k9s
# 你会看到全屏界面:
# ┌─────────────────────────────────────────────────────────────┐
# │ 🐶 K9s - Context: kind-k8s-learn 14:23:45 │
# ├─────────────────────────────────────────────────────────────┤
# │ Namespace: default │ Pods(4) │
# ├─────────────────────────────────────────────────────────────┤
# │ NAME │ READY │ STATUS │ RESTARTS │ AGE │
# │ nginx-7c4f9... │ 1/1 │ Running │ 0 │ 2m │
# │ mysql-8d2a1... │ 1/1 │ Running │ 0 │ 5m │
# │ redis-9f3b2... │ 1/1 │ Running │ 0 │ 8m │
# └─────────────────────────────────────────────────────────────┘K9s 核心操作指南
导航操作
| 按键 | 功能 | 使用场景 |
|---|---|---|
↑↓←→ | 上下左右选择 | 浏览资源列表 |
Enter | 查看详情 | 看资源的完整YAML |
Esc / q | 返回/退出 | 层级返回,完全退出 |
Tab | 切换面板 | 在不同视图间切换 |
资源操作
| 按键 | 功能 | 详细说明 |
|---|---|---|
l | 查看日志 | 选中Pod,按 l 进入日志视图,实时刷新 |
s | 进入Shell | 选中Pod,按 s 进入容器终端,直接调试 |
d | 描述资源 | 等同于 kubectl describe,看Events |
e | 编辑资源 | 打开编辑器修改YAML,保存即生效 |
y | 查看YAML | 查看资源定义,不进入编辑模式 |
ctrl-d | 删除资源 | 会提示确认,防止误删 |
ctrl-r | 重启/滚动更新 | 对Deployment等有效 |
视图切换
| 按键 | 切换到 | 说明 |
|---|---|---|
: | Namespace选择 | 输入namespace名字快速切换 |
/ | 搜索过滤 | 在当前视图过滤资源 |
1 | Pods视图 | 查看所有Pod |
2 | Deployments视图 | 查看Deployment |
3 | Services视图 | 查看Service |
4 | StatefulSets视图 | 查看StatefulSet |
5 | Nodes视图 | 查看节点 |
6 | Namespaces视图 | 查看并切换namespace |
7 | ConfigMaps视图 | 查看ConfigMap |
8 | Secrets视图 | 查看Secret |
0 | 回到上一视图 | 快速返回 |
? | 帮助 | 查看所有快捷键 |
实战场景示例
场景1:排查崩溃的Pod
1. k9s 启动
2. 看到Pod状态为 CrashLoopBackOff
3. 方向键选中该Pod
4. 按 l 查看日志 → 看到错误信息
5. 按 Esc 返回,按 d 查看Events → 确认原因
6. 按 e 编辑配置修复 → 保存后自动更新场景2:进入容器调试
1. 选中目标Pod
2. 按 s 进入容器Shell
3. 执行命令:ps aux, curl, nslookup 等
4. 按 Ctrl+D 退出容器,回到K9s场景3:切换namespace查看系统Pod
1. 按 : 进入命令模式
2. 输入 kube-system 回车
3. 现在看到的是系统namespace的Pod
4. 可以看到 kube-proxy, coredns 等工具4:Lens(桌面 GUI 工具)
为什么需要Lens?
如果说 K9s 是"终端里的图形界面",Lens 就是"真正的桌面级图形界面"。适合:
- 不喜欢命令行的初学者
- 需要看资源拓扑图、依赖关系
- 同时管理多个集群,需要可视化切换
- 实时监控 Pod 资源使用(CPU/内存图表)
安装与配置
Step 1:Windows上安装
powershell
# 使用 winget 安装(推荐)
winget install Mirantis.Lens
# 或从官网下载:https://k8slens.dev/Step 2:配置连接 Kind 集群
Kind 集群的 kubeconfig 默认在 WSL2 的 ~/.kube/config,需要让 Windows 上的 Lens 能访问到。
bash
# 在 WSL2 中执行:导出kubeconfig到Windows可见的位置
mkdir -p /mnt/c/Users/$USER/.kube # $USER是你的Windows用户名
# 导出Kind集群配置
cp ~/.kube/config /mnt/c/Users/$USER/.kube/config
# 或者只导出特定集群
kind export kubeconfig --name k8s-learn --kubeconfig /mnt/c/Users/$USER/.kube/kind-configStep 3:Lens 中导入集群
- 打开 Lens → 左侧 Catalog(目录)
- 点击右上角 "+" → Add from kubeconfig
- 选择 Windows 路径下的 kubeconfig 文件
- 集群会出现在左侧列表,点击连接
Lens 核心功能
| 功能模块 | 用途 | 操作示例 |
|---|---|---|
| Workloads | 管理工作负载 | 查看Pod、Deployment状态,点击Pod看日志 |
| Network | 网络管理 | 查看Service、Ingress,测试端口连通性 |
| Storage | 存储管理 | 查看PVC、PV绑定状态,存储容量 |
| Config | 配置管理 | 编辑ConfigMap、Secret,查看配置引用 |
| Resource Map | 资源关系图 | 可视化看到 Deployment → Pod → Service 的依赖 |
| Terminal | 内置终端 | 不用切窗口,直接执行 kubectl |
| Metrics | 资源监控 | 查看Pod CPU/内存实时图表(需安装metrics-server) |
Lens vs K9s 选择建议
| 场景 | 推荐工具 | 原因 |
|---|---|---|
| 快速排查问题 | K9s | 启动快,键盘操作,不离开终端 |
| 学习资源关系 | Lens | 可视化拓扑图,直观理解依赖 |
| 多集群管理 | Lens | 左侧列表切换,图形化对比 |
| 生产环境紧急操作 | K9s | 轻量,ssh到服务器就能用 |
| 演示和教学 | Lens | 界面美观,适合投影展示 |
| 资源监控 | Lens | 内置图表,无需额外配置 |
工具5:Helm(包管理器)
为什么需要Helm?
部署一个 WordPress 需要创建多个资源:
- Deployment(WordPress应用)
- Service(暴露端口)
- ConfigMap(配置文件)
- Secret(数据库密码)
- PersistentVolumeClaim(存储)
- 可能还有Ingress、ServiceAccount、HPA...
手动写5个YAML文件太繁琐,Helm 提供"一键安装":
bash
# 不用Helm:手动写5个YAML,kubectl apply 5次
# 用Helm:一行命令安装完整应用
helm install my-wordpress bitnami/wordpress核心概念
| 概念 | 说明 | 类比 |
|---|---|---|
| Chart | Helm包,包含一组K8s资源模板 | apt的.deb包,yum的.rpm包 |
| Repository | Chart的仓库,存放多个Chart | apt源,yum源 |
| Release | Chart的实例,安装后生成 | 安装后的软件实例 |
| Values | 自定义配置,覆盖Chart默认值 | 配置文件 |
安装与使用
Step 1:安装 Helm(WSL2)
bash
# 官方安装脚本
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 验证
helm versionStep 2:添加仓库
bash
# 添加 Bitnami 官方仓库(最常用)
helm repo add bitnami https://charts.bitnami.com/bitnami
# 添加 Helm 稳定版仓库
helm repo add stable https://charts.helm.sh/stable
# 更新仓库索引(获取最新Chart列表)
helm repo update
# 搜索可用Chart
helm search repo bitnami | head -20
helm search repo nginx # 搜索特定应用Step 3:安装应用
bash
# 安装 nginx(最新版本)
helm install my-nginx bitnami/nginx
# 查看安装的 Release
helm list
# 查看状态
helm status my-nginx
# 查看生成的K8s资源
kubectl get all | grep my-nginxStep 4:自定义配置(重要)
bash
# 导出默认配置值
helm show values bitnami/wordpress > my-values.yaml
# 编辑 my-values.yaml,修改关键参数
# 例如:
# wordpressUsername: admin
# wordpressPassword: mypassword
# wordpressEmail: admin@example.com
# service.type: NodePort
# persistence.size: 10Gi
# 使用自定义配置安装
helm install my-blog bitnami/wordpress -f my-values.yaml
# 升级配置
helm upgrade my-blog bitnami/wordpress -f my-values.yaml
# 回滚到上一版本
helm rollback my-blog 1Helm 常用命令
bash
# 仓库管理
helm repo list # 列出已添加仓库
helm repo update # 更新所有仓库索引
helm search repo <keyword> # 搜索Chart
# Release管理
helm install <name> <chart> # 安装
helm install <name> <chart> -f values.yaml # 指定配置安装
helm upgrade <name> <chart> # 升级
helm rollback <name> <revision> # 回滚
helm uninstall <name> # 卸载(删除所有资源)
helm list # 列出所有Release
helm list --all-namespaces # 所有namespace
# 查看信息
helm show chart <chart> # 查看Chart信息
helm show values <chart> # 查看可配置项
helm show readme <chart> # 查看使用说明
helm get values <release> # 查看Release配置
helm get manifest <release> # 查看生成的K8s YAML
helm history <release> # 查看版本历史实战:部署完整应用栈
bash
# 1. 添加必要仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
# 2. 安装 Ingress 控制器(先决条件)
helm install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --create-namespace
# 3. 安装 MySQL(带持久化存储)
helm install mysql bitnami/mysql --set auth.rootPassword=secretpassword --set primary.persistence.size=10Gi
# 4. 安装 WordPress(使用上面的MySQL)
helm install wordpress bitnami/wordpress --set wordpressUsername=admin --set wordpressPassword=admin123 --set mariadb.enabled=false --set externalDatabase.host=mysql.default.svc.cluster.local --set externalDatabase.password=secretpassword
# 5. 查看所有Release
helm list
# 6. 查看Pod状态
kubectl get pods -w完整工作流程
Day 1 实操:从零到运行应用
bash
# ========== 1. 确认环境 ==========
# 确认Docker Desktop运行(任务栏鲸鱼图标)
# 确认WSL2已启用
# ========== 2. 安装工具链 ==========
# 在WSL2中依次执行:
# - Kind安装
# - kubectl安装
# - K9s安装
# - Helm安装
# ========== 3. 创建集群 ==========
kind create cluster --name k8s-learn --config ~/kind-cluster.yaml
# ========== 4. 验证集群 ==========
kubectl get nodes
# 应该看到4个Ready节点
# ========== 5. 体验K9s ==========
k9s
# 方向键浏览,l看日志,s进容器,q退出
# ========== 6. 配置Lens ==========
# Windows上:导出kubeconfig,Lens中添加集群
# ========== 7. 部署测试应用 ==========
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install test-nginx bitnami/nginx
kubectl get pods # 看到nginx在运行
helm uninstall test-nginx # 清理常见问题排查
Kind 问题
| 问题 | 原因 | 解决 |
|---|---|---|
docker: command not found | WSL2中没装Docker | 确保Docker Desktop集成WSL2 |
failed to create cluster | 端口被占用 | 检查80/443端口,或修改hostPort |
| 节点一直NotReady | 内存不足 | Kind需要至少4GB内存分配给WSL2 |
kubectl 问题
| 问题 | 原因 | 解决 |
|---|---|---|
Unable to connect to the server | 集群没启动/上下文错误 | kind get clusters 检查,kubectl config use-context 切换 |
connection refused | Kind集群被删除 | 重新 kind create cluster |
| 命令找不到 | 没安装或不在PATH | 检查 /usr/local/bin/kubectl |
K9s 问题
| 问题 | 原因 | 解决 |
|---|---|---|
| 界面乱码 | 终端不支持Unicode | 换用Windows Terminal |
| 看不到资源 | 权限不足/没资源 | 检查kubectl是否能get |
| 快捷键无效 | 焦点不在主界面 | 按Esc返回主列表 |
Helm 问题
| 问题 | 原因 | 解决 |
|---|---|---|
failed to download chart | 仓库没加/没更新 | helm repo add 和 helm repo update |
| 安装后Pod pending | 资源不足 | kubectl describe pod 看原因 |
| 配置不生效 | values.yaml格式错误 | 用 helm template 预览 |
学习路径建议
第1天:安装 Kind + kubectl,创建集群,熟悉基础命令
↓
第2天:安装 K9s,用K9s代替kubectl浏览资源
↓
第3天:安装 Lens,对比K9s和Lens的使用场景
↓
第4天:安装 Helm,用Helm部署第一个应用
↓
第5天:综合练习:用Helm部署,用K9s排查,用Lens监控工具链就绪,开始你的Kubernetes之旅! 🚀
掌握这五个工具,你已经具备了企业级K8s开发的基础能力
