2. 环境准备:Kubernetes集群搭建与CLI工具安装

本章节将指导你完成《平台门户展示Helm故障域隔离的演练状态看板》课程所需的全部基础环境搭建。你将掌握两种轻量级Kubernetes集群(minikube与k3s)的部署方法,并完成kubectl与helm CLI的安装与验证。这是后续所有演练步骤的基石。

2.1 环境概览与选型对比

在开始安装前,请根据你的本地资源与演练目标选择合适的集群方案。下表对比了两种主流轻量级Kubernetes发行版的核心差异:

特性 minikube k3s
定位 本地开发与测试 边缘计算、IoT、CI/CD
架构 单节点(支持多节点实验) 单节点或高可用集群
资源占用 中等(约2GB内存起步) 极低(约512MB内存起步)
组件 完整Kubernetes组件 精简组件(替换docker为containerd)
持久化存储 内置CSI驱动 内置local-path-provisioner
网络插件 默认Calico或Flannel 内置Flannel(Traefik作为Ingress)
适用场景 模拟生产环境、学习完整K8s特性 快速启动、资源受限环境
选型建议: 如果你的开发机内存大于8GB,推荐使用minikube以获得更完整的Kubernetes体验;若内存小于4GB或希望在虚拟机/树莓派上运行,k3s是更优选择。本课程后续演练在两种集群上均可执行。

2.2 环境准备流程总览

下图展示了从裸机到可运行Helm Chart的完整环境准备链路,包含三个核心阶段:容器运行时安装、集群部署、CLI工具链配置。

环境准备流程总览 阶段一:容器运行时 Docker / containerd 阶段二:集群部署 minikube / k3s 阶段三:CLI工具链 kubectl + helm minikube start minikube status curl -sfL https://get.k3s.io | sh - k3s kubectl get node kubectl version --client helm version 验证:kubectl get nodes -o wide 确认集群节点状态为 Ready

2.3 安装容器运行时

Kubernetes集群依赖容器运行时来运行Pod。Docker是最常用的运行时,但k3s默认使用containerd。以下步骤以Docker为例进行安装:

2.3.1 安装Docker(适用于minikube)

# 更新包索引并安装依赖
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release

# 添加Docker官方GPG密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 设置稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker引擎
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 将当前用户加入docker组(避免每次使用sudo)
sudo usermod -aG docker $USER
newgrp docker

# 验证安装
docker --version
注意: 如果使用k3s,无需单独安装Docker。k3s内置了containerd作为运行时,安装脚本会自动配置。若你仍希望k3s使用Docker,可在安装时添加 --docker 参数。

2.4 搭建Kubernetes集群

根据你的选型,选择以下两种方式之一进行集群搭建。

2.4.1 方式一:使用minikube搭建集群

minikube是本地运行Kubernetes的最佳实践工具,支持多种驱动(Docker、Hyper-V、VirtualBox等)。以下以Docker驱动为例:

# 下载并安装minikube二进制文件
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 启动集群(指定Docker驱动,分配2核CPU、4GB内存)
minikube start --driver=docker --cpus=2 --memory=4096

# 检查集群状态
minikube status

# 启用必要插件(如ingress、metrics-server)
minikube addons enable ingress
minikube addons enable metrics-server

2.4.2 方式二:使用k3s搭建集群

k3s以其极简安装流程著称,一条命令即可完成集群部署:

# 使用官方安装脚本安装k3s(默认使用containerd)
curl -sfL https://get.k3s.io | sh -

# 检查节点状态
sudo k3s kubectl get nodes

# 查看kubeconfig文件位置(后续kubectl需要引用)
sudo cat /etc/rancher/k3s/k3s.yaml

# 可选:将k3s的kubeconfig复制到默认位置,避免每次使用sudo
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER:$USER ~/.kube/config
关键配置: k3s默认将kubeconfig文件放在 /etc/rancher/k3s/k3s.yaml,且需要sudo权限读取。建议将其复制到 ~/.kube/config 并修改权限,以便后续kubectl和helm无需sudo即可操作集群。

2.5 安装kubectl与Helm CLI

kubectl是操作Kubernetes集群的命令行工具,Helm是Kubernetes的包管理器。两者是后续演练的核心工具。

2.5.1 安装kubectl

# 下载最新稳定版kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

# 安装kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

# 验证版本
kubectl version --client

# 配置自动补全(可选,提升操作效率)
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc

2.5.2 安装Helm CLI

# 使用官方脚本安装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

# 添加常用Helm仓库(如Bitnami、稳定版仓库)
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable https://charts.helm.sh/stable
helm repo update

2.6 环境验证清单

完成上述安装后,请按以下清单逐项验证环境是否就绪:

验证项 命令 预期结果
Docker运行状态 docker info 显示Server Version等信息,无错误
集群节点状态 kubectl get nodes 所有节点状态为 Ready
集群组件健康 kubectl get componentstatuses scheduler、controller-manager、etcd均为 Healthy
kubectl版本 kubectl version --client 显示客户端版本号,与集群版本偏差在±1以内
Helm版本 helm version 显示v3.x版本号
Helm仓库连通性 helm repo list 显示已添加的仓库列表,且状态正常
Pod调度测试 kubectl run nginx-test --image=nginx --restart=Never Pod成功创建并进入 Running 状态
快速排障: 如果 kubectl get nodes 显示 NotReady,请检查容器运行时是否正常启动(systemctl status docker 或 systemctl status k3s)。对于minikube,可执行 minikube logs 查看详细日志。

2.7 环境拓扑示意

下图展示了最终搭建完成的环境架构,包含CLI工具与集群的交互关系:

环境拓扑:CLI工具与集群交互 用户工作站 kubectl helm ~/.kube/config K8s集群节点 kube-apiserver kube-scheduler kube-controller 集群内部组件 etcd(键值存储) CoreDNS(服务发现) Ingress Controller 交互流程:kubectl/helm → kube-apiserver → etcd/scheduler/controller 所有操作均通过API Server进行认证与授权 持久化存储(CSI / local-path) 保障故障域隔离演练的数据持久性 网络插件(Flannel / Calico) 保障Pod跨节点通信与网络策略

2.8 常见问题与避坑指南

  • 端口冲突: minikube默认使用8443端口作为API Server端口,如果本地已有服务占用该端口,可通过 minikube start --apiserver-port=8444 指定其他端口。
  • 资源不足: 如果minikube启动失败,检查Docker资源限制(Linux需确保 cgroups 版本为v1或v2兼容模式)。可执行 minikube delete 后重新启动。
  • kubectl版本偏差: kubectl的版本应与集群版本保持在±1个小版本内,否则可能出现API兼容性问题。使用 kubectl version 对比客户端与服务端版本。
  • Helm仓库认证: 如果添加私有仓库需要认证,使用 helm repo add --username <user> --password <pass> 参数。
  • k3s的kubeconfig权限: 如果复制kubeconfig后仍提示权限拒绝,检查 ~/.kube/config 文件权限是否为600(chmod 600 ~/.kube/config)。