Skip to content

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?

对比项KindMinikubeDocker 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/amd64

Step 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.yaml

Step 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.2

Kind 常用命令

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 --client

Step 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 ~/.bashrc

Step 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-desktop

Step 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-context

kubectl 核心命令

查看类命令

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
切换namespacekubectl -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 version

Step 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名字快速切换
/搜索过滤在当前视图过滤资源
1Pods视图查看所有Pod
2Deployments视图查看Deployment
3Services视图查看Service
4StatefulSets视图查看StatefulSet
5Nodes视图查看节点
6Namespaces视图查看并切换namespace
7ConfigMaps视图查看ConfigMap
8Secrets视图查看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-config

Step 3:Lens 中导入集群

  1. 打开 Lens → 左侧 Catalog(目录)
  2. 点击右上角 "+"Add from kubeconfig
  3. 选择 Windows 路径下的 kubeconfig 文件
  4. 集群会出现在左侧列表,点击连接

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

核心概念

概念说明类比
ChartHelm包,包含一组K8s资源模板apt的.deb包,yum的.rpm包
RepositoryChart的仓库,存放多个Chartapt源,yum源
ReleaseChart的实例,安装后生成安装后的软件实例
Values自定义配置,覆盖Chart默认值配置文件

安装与使用

Step 1:安装 Helm(WSL2)

bash
# 官方安装脚本
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# 验证
helm version

Step 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-nginx

Step 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 1

Helm 常用命令

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 foundWSL2中没装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 refusedKind集群被删除重新 kind create cluster
命令找不到没安装或不在PATH检查 /usr/local/bin/kubectl

K9s 问题

问题原因解决
界面乱码终端不支持Unicode换用Windows Terminal
看不到资源权限不足/没资源检查kubectl是否能get
快捷键无效焦点不在主界面按Esc返回主列表

Helm 问题

问题原因解决
failed to download chart仓库没加/没更新helm repo addhelm 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开发的基础能力