2. 环境准备:Kubernetes集群搭建与工具链配置
本章是后续所有 GitOps 实践的基础。你将完成一个可用的 Kubernetes 集群搭建,并配置 kubectl、Helm 等核心工具链。我们提供两种集群搭建路径:kubeadm(生产级多节点)与 minikube(本地快速验证),请根据实际场景选择。
路径选择建议: 若你拥有至少 2 台 Linux 服务器(2C4G 以上),推荐使用 kubeadm 搭建多节点集群,更贴近生产环境;若仅在个人笔记本上学习,minikube 是最轻量的选择。
2.1 集群搭建方案对比
| 特性 | kubeadm | minikube |
|---|---|---|
| 节点数量 | 多节点(1 Master + N Worker) | 单节点(All-in-One) |
| 适用场景 | 生产、预发布、集成测试 | 本地开发、功能验证、CI 环境 |
| 资源要求 | 每节点 2C4G,磁盘 20GB+ | 2C2G,磁盘 20GB |
| 网络插件 | 需手动安装 CNI(如 Calico/Flannel) | 内置,自动配置 |
| 持久化存储 | 需自行对接存储后端 | 内置 hostPath / 虚拟存储 |
| 启动时间 | 15-30 分钟(含依赖安装) | 3-5 分钟 |
2.2 方案一:kubeadm 搭建多节点集群
2.2.1 前置条件
- 操作系统:Ubuntu 22.04 LTS / CentOS 7.9+
- 所有节点关闭 swap:
sudo swapoff -a并注释 /etc/fstab 中的 swap 条目 - 所有节点安装容器运行时(containerd 1.6+)
- 所有节点安装 kubelet、kubeadm、kubectl(版本锁定 1.28.x)
2.2.2 安装步骤(Master 节点)
- 安装 containerd:配置 Docker 官方源,安装 containerd.io,生成默认配置并启用 systemd cgroup 驱动。
- 安装 kubeadm/kubelet/kubectl:添加 Kubernetes 官方源,安装指定版本,并
apt-mark hold锁定版本。 - 初始化集群:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16,记录生成的 join 命令。 - 配置 kubectl:
mkdir -p $HOME/.kube && sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config。 - 安装 CNI 插件:以 Calico 为例,
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26/manifests/calico.yaml。
2.2.3 加入 Worker 节点
在每台 Worker 节点上执行 Master 初始化时输出的 kubeadm join 命令。若 过期,可在 Master 上重新生成:
kubeadm create --print-join-command
2.2.4 验证集群
kubectl get nodes
# 预期输出:所有节点状态为 Ready
kubectl get pods -n kube-system
# 预期输出:CoreDNS、Calico 等核心组件运行正常
2.3 方案二:minikube 快速搭建
2.3.1 安装 minikube 与 kubectl
# 安装 minikube(Linux x86-64)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 安装 kubectl
curl -LO "https://dl.k8s.io/release/v1.28.0/bin/linux/amd64/kubectl"
chmod +x kubectl && sudo mv kubectl /usr/local/bin/
2.3.2 启动集群
minikube start --driver=docker --cpus=2 --memory=4096 --kubernetes-version=v1.28.0
参数说明:--driver 指定容器驱动(docker/podman/qemu),--cpus 与 --memory 按宿主机资源调整。
2.3.3 验证与常用命令
minikube status # 查看集群状态
kubectl get nodes # 确认节点 Ready
minikube dashboard # 启动 Web 仪表盘(可选)
注意: minikube 默认使用虚拟化驱动,若在虚拟机内嵌套运行,建议使用
--driver=none(需宿主机已安装 Docker 并配置好 cgroup)。
2.4 工具链配置:kubectl 与 Helm
2.4.1 kubectl 自动补全与上下文管理
# Bash 自动补全
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
# 配置多集群上下文(示例)
kubectl config set-cluster prod --server=https://prod-cluster:6443
kubectl config set-context prod --cluster=prod --user=admin
kubectl config use-context prod
2.4.2 Helm 安装与仓库配置
# 安装 Helm v3
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 添加常用仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add argo https://argoproj.github.io/argo-helm
helm repo add fluxcd https://fluxcd-community.github.io/helm-charts
helm repo update
2.4.3 工具链版本兼容性
| 工具 | 推荐版本 | 最低版本 | 备注 |
|---|---|---|---|
| kubectl | 1.28.x | 1.24.x | 需与集群版本偏差 ≤ 1 个 minor |
| Helm | 3.14.x | 3.10.x | 支持 OCI 仓库,推荐 v3.12+ |
| kubeadm | 1.28.x | 1.24.x | 与集群版本一致 |
| containerd | 1.7.x | 1.6.x | 需启用 systemd cgroup 驱动 |
2.5 环境验证清单
完成搭建后,请逐项确认以下检查点:
- 集群健康:
kubectl get componentstatuses显示 etcd、scheduler、controller-manager 均为 Healthy。 - 节点就绪:所有节点
kubectl get nodes状态为 Ready。 - DNS 解析:创建一个测试 Pod,
kubectl run test --image=busybox -- sleep 3600,进入 Pod 执行nslookup kubernetes.default应返回 Cluster IP。 - Helm 可用:
helm list -n kube-system不报错,且能正常搜索 chart。 - kubectl 上下文:
kubectl config current-context指向正确的集群。
最佳实践: 建议将上述验证步骤写入脚本
env-check.sh,每次环境变更后自动执行,确保集群始终处于可用状态。后续章节的 Argo CD 与 Flux 安装将依赖此环境。
2.6 常见问题与排障
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
kubeadm init 卡在 preflight |
swap 未关闭、容器运行时未启动 | 执行 swapoff -a;检查 systemctl status containerd |
| 节点状态 NotReady | CNI 插件未安装或 Pod 网络不通 | 重新 apply Calico 清单;检查 kubectl logs -n kube-system |
| Helm 安装 chart 失败 | 仓库未更新或版本不兼容 | helm repo update;指定 chart 版本 --version |
| minikube 启动报 driver 错误 | Docker 未运行或权限不足 | systemctl start docker;将用户加入 docker 组 |