3. 搭建实验环境:Minikube/K3s集群搭建、kubectl配置、Helm安装、必备Dashboard部署
本章将带领你从零搭建一套完整的 Kubernetes 实验环境,涵盖单节点集群部署、命令行工具配置、包管理工具安装以及可视化面板的部署。这套环境将作为后续支付订单系统弹性伸缩与流量治理实战的基石。
3.1 环境选型:Minikube vs K3s
对于本地开发和实验场景,Minikube 和 K3s 是最主流的两种选择。下表从资源占用、启动速度、功能完整度等维度进行对比,帮助你根据自身硬件条件做出选择。
| 对比维度 | Minikube | K3s |
|---|---|---|
| 资源占用 | 中等(约 2GB 内存 + 2 核 CPU) | 低(约 512MB 内存 + 1 核 CPU) |
| 启动速度 | 较慢(首次拉取镜像约 3-5 分钟) | 快(约 30 秒完成启动) |
| 功能完整度 | 完整 Kubernetes 功能,支持多数 addon | 精简版,移除部分 alpha/cloud-provider 功能 |
| 多节点支持 | 支持(通过 driver 模拟) | 原生支持多节点集群 |
| 适用场景 | 开发测试、学习 Kubernetes 完整特性 | 边缘计算、资源受限环境、快速原型 |
| 持久化存储 | 内置 hostPath 和 NFS 驱动 | 内置 Local Path Provisioner |
选型建议:如果你的笔记本内存 ≥ 8GB,推荐使用 Minikube 以获得最完整的 Kubernetes 体验;若内存 ≤ 4GB 或使用树莓派等 ARM 设备,K3s 是更优选择。本课程后续操作同时兼容两种环境。
3.2 集群搭建步骤
3.2.1 使用 Minikube 搭建集群
- 安装 Minikube 二进制
# Linux / macOS
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 验证安装
minikube version
- 启动集群(指定驱动和资源)
# 使用 Docker 驱动,分配 4GB 内存、4 核 CPU
minikube start --driver=docker --memory=4096 --cpus=4 --kubernetes-version=v1.28.3
# 等待集群就绪
minikube status
- 验证集群节点
kubectl get nodes -o wide
3.2.2 使用 K3s 搭建集群
- 一键安装 K3s
# 安装最新稳定版 K3s
curl -sfL https://get.k3s.io | sh -
# 检查服务状态
sudo systemctl status k3s
- 配置 kubeconfig 权限
# K3s 默认将 kubeconfig 放在 /etc/rancher/k3s/k3s.yaml
# 复制到用户目录并设置权限
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
export KUBECONFIG=~/.kube/config
- 验证集群
kubectl get nodes
kubectl get pods -A
注意:K3s 默认使用 containerd 作为容器运行时,且内置了 Traefik Ingress Controller。如果后续实验需要特定版本的 Ingress Controller,请先禁用 K3s 自带的 Traefik(通过
--disable=traefik 安装参数)。
3.3 kubectl 配置与常用命令
kubectl 是操作 Kubernetes 集群的核心命令行工具。无论使用 Minikube 还是 K3s,都需要确保 kubectl 版本与集群版本相差不超过一个次要版本。
3.3.1 安装 kubectl
# 下载指定版本(与集群版本对齐)
curl -LO "https://dl.k8s.io/release/v1.28.3/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
# 验证版本
kubectl version --client
3.3.2 配置 kubeconfig 上下文
kubeconfig 文件管理多个集群的访问信息。以下命令演示如何查看和切换上下文:
# 查看当前配置
kubectl config view
# 查看所有上下文
kubectl config get-contexts
# 切换上下文(例如切换到 minikube)
kubectl config use-context minikube
# 设置默认命名空间
kubectl config set-context --current --namespace=payment-system
3.3.3 常用命令速查表
| 命令 | 用途 | 示例 |
|---|---|---|
kubectl get pods | 查看 Pod 列表 | kubectl get pods -n kube-system |
kubectl describe pod | 查看 Pod 详细信息 | kubectl describe pod my-pod |
kubectl logs | 查看 Pod 日志 | kubectl logs -f deployment/order-service |
kubectl exec | 进入容器执行命令 | kubectl exec -it my-pod -- /bin/sh |
kubectl apply | 声明式创建/更新资源 | kubectl apply -f deployment.yaml |
kubectl delete | 删除资源 | kubectl delete pod my-pod |
3.4 Helm 安装与配置
Helm 是 Kubernetes 的包管理工具,用于简化复杂应用的部署。支付订单系统中的多个组件(如 Redis、Kafka、Prometheus)都将通过 Helm Chart 进行安装。
3.4.1 安装 Helm
# 使用官方脚本安装最新版本
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
# 验证安装
helm version
3.4.2 添加常用仓库
# 添加官方稳定仓库
helm repo add stable https://charts.helm.sh/stable
# 添加 Bitnami 仓库(常用中间件)
helm repo add bitnami https://charts.bitnami.com/bitnami
# 添加 Prometheus 社区仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
# 更新仓库索引
helm repo update
3.4.3 Helm 常用操作
# 搜索 Chart
helm search repo redis
# 安装 Chart(指定 release 名称和命名空间)
helm install my-redis bitnami/redis --namespace=payment-system --create-namespace
# 查看已安装的 release
helm list -A
# 升级 release
helm upgrade my-redis bitnami/redis --set replica.replicaCount=3
# 卸载 release
helm uninstall my-redis -n payment-system
最佳实践:在生产环境中,建议将 Helm values 文件单独管理,通过
helm install -f values.yaml 的方式覆盖默认参数,避免直接在命令行中编写长串 --set 参数。
3.5 必备 Dashboard 部署
Kubernetes Dashboard 提供 Web UI 界面,方便可视化查看集群状态、工作负载和日志。同时,我们还将部署 Metrics Server 以支持 Pod 的 CPU/内存监控。
3.5.1 部署 Kubernetes Dashboard
# 部署最新版 Dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
# 验证 Pod 状态
kubectl get pods -n kubernetes-dashboard
3.5.2 创建访问令牌
Dashboard 默认使用 RBAC 鉴权,需要创建 ServiceAccount 并绑定 cluster-admin 角色:
# 创建 ServiceAccount
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
EOF
# 绑定 cluster-admin 角色
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.5.3 启动 Dashboard 代理
# 启动 kubectl 代理(默认监听 8001 端口)
kubectl proxy &
# 访问地址(在浏览器中打开)
# http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
3.5.4 部署 Metrics Server
Metrics Server 是 Kubernetes 内置的指标采集组件,HPA(水平自动伸缩)依赖它获取 Pod 的 CPU/内存使用率。
# 部署 Metrics Server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# 验证指标采集
kubectl top nodes
kubectl top pods -A
常见问题:如果
kubectl top 返回错误 metrics not available yet,请检查 Metrics Server Pod 日志。在 Minikube 中,可能需要添加 --kubelet-insecure-tls 参数:kubectl edit deployment metrics-server -n kube-system,在 args 中添加该参数。
3.6 实验环境架构总览
下图展示了本章搭建的完整实验环境组件及其关系:
3.7 环境验证清单
完成上述步骤后,请逐项检查以下清单,确保实验环境完全就绪:
| 检查项 | 验证命令 | 预期结果 |
|---|---|---|
| 集群节点状态 | kubectl get nodes | 所有节点状态为 Ready |
| 系统 Pod 运行 | kubectl get pods -n kube-system | 核心组件(coredns、etcd、kube-proxy 等)均为 Running |
| kubectl 版本匹配 | kubectl version | Client 与 Server 版本差异 ≤ 1 |
| Helm 可用 | helm list -A | 无报错,返回空列表或已有 release |
| Dashboard 可访问 | 浏览器打开代理地址 | 显示登录页面,输入 token 后可进入 |
| Metrics Server 正常 | kubectl top nodes | 返回节点的 CPU/内存使用率 |
环境保存建议:对于 Minikube 用户,可以使用
minikube stop 暂停集群,下次使用 minikube start 恢复,无需重新搭建。K3s 用户则通过 sudo systemctl stop k3s 暂停服务。