3. 搭建 K8s 实验集群:使用 Minikube 或 Kind 搭建单节点集群,验证 kubectl 连通性,部署 Dashboard

在本地开发与课程实验环境中,我们不需要生产级多节点集群。本章将使用 Minikube 或 Kind 快速搭建一个单节点 Kubernetes 集群,完成 kubectl 连通性验证,并部署 Kubernetes Dashboard 作为可视化运维入口。

3.1 环境准备与工具选择

在开始之前,请确保你的宿主机满足以下最低要求:

资源项 最低要求 推荐配置
CPU 2 核 4 核
内存 4 GB 8 GB
磁盘 20 GB 空闲 40 GB SSD
容器运行时 Docker / containerd Docker 24+

两种工具的核心差异如下:

特性 Minikube Kind (Kubernetes in Docker)
底层驱动 虚拟机 / Docker Docker 容器
启动速度 较慢(需下载 ISO) 快(秒级)
多节点支持 支持(需额外配置) 原生支持
适用场景 模拟真实节点 CI/CD、快速验证
Dashboard 集成 一键启用 需手动部署
课程推荐: 本课程后续章节将频繁重建集群,建议使用 Kind 以获得更快的启动速度和资源占用。若你希望体验更接近生产环境的节点隔离,可选择 Minikube。

3.2 安装与启动集群

3.2.1 使用 Kind 搭建集群

Kind 将整个 Kubernetes 控制平面和工作节点运行在 Docker 容器中。安装 Kind 后,通过配置文件即可定义集群拓扑。

# 安装 Kind(Linux / macOS)
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

# 创建单节点集群配置文件 kind-config.yaml
cat <<EOF > kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
EOF

# 启动集群
kind create cluster --config kind-config.yaml --name k8s-report-cluster

启动成功后,Kind 会自动将 kubeconfig 写入 ~/.kube/config,并设置当前上下文。

3.2.2 使用 Minikube 搭建集群

Minikube 通过虚拟机或 Docker 驱动创建节点。以下使用 Docker 驱动以降低资源开销:

# 安装 Minikube(Linux)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 启动单节点集群
minikube start --driver=docker --cpus=2 --memory=4096 --kubernetes-version=v1.28.0

# 验证状态
minikube status
注意: Minikube 使用 Docker 驱动时,需要确保 Docker 已安装并运行。若遇到 docker: command not found,请先安装 Docker 并启动服务。

3.3 验证 kubectl 连通性

无论使用哪种工具,集群启动后都应立即验证 kubectl 能否正常通信。以下是标准验证步骤:

  1. 检查节点状态
kubectl get nodes
# 预期输出:
# NAME                 STATUS   ROLES           AGE   VERSION
# k8s-report-cluster-control-plane   Ready    control-plane   2m    v1.28.0
  1. 检查核心组件 Pod 状态
kubectl get pods -n kube-system
# 应看到 coredns、etcd、kube-apiserver、kube-controller-manager、kube-scheduler 等 Pod 处于 Running 状态
  1. 测试 API Server 响应
kubectl cluster-info
# 输出示例:
# Kubernetes control plane is running at https://127.0.0.1:6443
# CoreDNS is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
  1. 验证 kubectl 上下文
kubectl config current-context
# 应输出类似:kind-k8s-report-cluster 或 minikube
连通性检查清单:
  • ✅ kubectl get nodes 返回 Ready 状态
  • ✅ kubectl get pods -n kube-system 无 CrashLoopBackOff
  • ✅ kubectl cluster-info 无连接拒绝错误
  • ✅ kubectl version --short 客户端与服务端版本匹配

3.4 部署 Kubernetes Dashboard

Dashboard 是官方 Web UI,用于可视化查看集群资源、日志和监控。以下部署步骤适用于 Kind 和 Minikube 两种环境。

3.4.1 部署 Dashboard 组件

# 部署最新版 Dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

# 验证部署
kubectl get pods -n kubernetes-dashboard
# 等待 dashboard-metrics-scraper 和 kubernetes-dashboard Pod 进入 Running 状态

3.4.2 创建访问用户与令牌

Dashboard 默认使用 RBAC 鉴权,需要创建一个 ServiceAccount 并绑定 cluster-admin 角色才能获得完整访问权限。

# 创建 ServiceAccount
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
EOF

# 创建 ClusterRoleBinding
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
EOF

# 获取访问令牌
kubectl -n kubernetes-dashboard create token admin-user

3.4.3 访问 Dashboard

根据集群类型选择访问方式:

集群类型 访问命令 说明
Kind kubectl proxy 访问 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
Minikube minikube dashboard 自动打开浏览器,无需手动配置代理

在浏览器中打开 Dashboard 后,选择 Token 方式登录,粘贴上一步生成的令牌即可进入管理界面。

3.5 集群搭建与 Dashboard 部署流程总览

下图展示了从环境准备到 Dashboard 可用的完整流程:

单节点集群搭建与 Dashboard 部署流程 1. 环境准备 Docker / 资源检查 2. 选择工具 Minikube / Kind 3. 启动集群 kind create / minikube start 4. 验证连通性 kubectl get nodes 5. 部署 Dashboard kubectl apply -f 6. 创建访问用户 ServiceAccount + Token 7. 访问 Dashboard kubectl proxy / minikube dashboard 8. 登录验证 Token 登录 / 资源查看 💡 完成以上步骤后,即可通过 Dashboard 管理集群资源,为后续报表导出服务部署做好准备

3.6 常见问题与排错

问题现象 可能原因 解决方案
kubectl get nodes 返回 NotReady CNI 插件未就绪 / 容器运行时异常 检查 kubectl get pods -n kube-system,重启集群或重新安装 CNI
Dashboard Pod 处于 CrashLoopBackOff 镜像拉取失败 / 资源不足 手动 docker pull 镜像,或增加集群内存分配
Token 登录提示 Unauthorized ServiceAccount 未绑定 ClusterRole 确认 ClusterRoleBinding 已创建,且名称与 ServiceAccount 一致
kind create cluster 超时 Docker 镜像拉取慢 / 网络代理问题 配置 Docker 镜像加速器,或使用 --retain 参数保留失败日志排查
最佳实践: 每次重建集群前,执行 kind delete cluster --name k8s-report-cluster 或 minikube delete 清理旧环境,避免端口冲突和证书残留。

3.7 集群状态确认

完成所有步骤后,执行以下命令确认集群处于可用状态:

# 综合验证脚本
echo "=== 节点状态 ==="
kubectl get nodes -o wide

echo "=== 核心组件 ==="
kubectl get pods -n kube-system

echo "=== Dashboard 状态 ==="
kubectl get pods -n kubernetes-dashboard

echo "=== 集群信息 ==="
kubectl cluster-info

echo "=== 当前上下文 ==="
kubectl config current-context

若所有输出均显示正常,则单节点实验集群已搭建完成,可以进入下一阶段的学习。