3. 搭建实验环境:Minikube/K3s集群搭建、kubectl配置、Helm安装、必备Dashboard部署

本章将带领你从零搭建一套完整的 Kubernetes 实验环境,涵盖单节点集群部署、命令行工具配置、包管理工具安装以及可视化面板的部署。这套环境将作为后续支付订单系统弹性伸缩与流量治理实战的基石。

3.1 环境选型:Minikube vs K3s

对于本地开发和实验场景,Minikube 和 K3s 是最主流的两种选择。下表从资源占用、启动速度、功能完整度等维度进行对比,帮助你根据自身硬件条件做出选择。

对比维度MinikubeK3s
资源占用中等(约 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 搭建集群

  1. 安装 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
  1. 启动集群(指定驱动和资源)
# 使用 Docker 驱动,分配 4GB 内存、4 核 CPU
minikube start --driver=docker --memory=4096 --cpus=4 --kubernetes-version=v1.28.3

# 等待集群就绪
minikube status
  1. 验证集群节点
kubectl get nodes -o wide

3.2.2 使用 K3s 搭建集群

  1. 一键安装 K3s
# 安装最新稳定版 K3s
curl -sfL https://get.k3s.io | sh -

# 检查服务状态
sudo systemctl status k3s
  1. 配置 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
  1. 验证集群
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 实验环境架构总览

下图展示了本章搭建的完整实验环境组件及其关系:

实验环境架构总览 Kubernetes 集群(Minikube / K3s) kube-apiserver 集群控制面 kube-scheduler 调度器 kube-controller 控制器 etcd 键值存储 工作节点:kubelet + kube-proxy + 容器运行时(Docker/containerd) 运行支付订单系统的 Pod 命令行工具与包管理 kubectl Helm v3 kubectx / kubens k9s 可视化与监控面板 Kubernetes Dashboard Metrics Server kubectl proxy

3.7 环境验证清单

完成上述步骤后,请逐项检查以下清单,确保实验环境完全就绪:

检查项验证命令预期结果
集群节点状态kubectl get nodes所有节点状态为 Ready
系统 Pod 运行kubectl get pods -n kube-system核心组件(coredns、etcd、kube-proxy 等)均为 Running
kubectl 版本匹配kubectl versionClient 与 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 暂停服务。