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 节点)

  1. 安装 containerd:配置 Docker 官方源,安装 containerd.io,生成默认配置并启用 systemd cgroup 驱动。
  2. 安装 kubeadm/kubelet/kubectl:添加 Kubernetes 官方源,安装指定版本,并 apt-mark hold 锁定版本。
  3. 初始化集群:sudo kubeadm init --pod-network-cidr=10.244.0.0/16,记录生成的 join 命令。
  4. 配置 kubectl:mkdir -p $HOME/.kube && sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config。
  5. 安装 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 环境验证清单

完成搭建后,请逐项确认以下检查点:

  1. 集群健康:kubectl get componentstatuses 显示 etcd、scheduler、controller-manager 均为 Healthy。
  2. 节点就绪:所有节点 kubectl get nodes 状态为 Ready。
  3. DNS 解析:创建一个测试 Pod,kubectl run test --image=busybox -- sleep 3600,进入 Pod 执行 nslookup kubernetes.default 应返回 Cluster IP。
  4. Helm 可用:helm list -n kube-system 不报错,且能正常搜索 chart。
  5. kubectl 上下文:kubectl config current-context 指向正确的集群。
最佳实践: 建议将上述验证步骤写入脚本 env-check.sh,每次环境变更后自动执行,确保集群始终处于可用状态。后续章节的 Argo CD 与 Flux 安装将依赖此环境。
Kubernetes 集群搭建与工具链架构图 Kubernetes 集群搭建与工具链架构 集群搭建路径 kubeadm 多节点集群 minikube 单节点集群 Kubernetes 集群 API Server Scheduler Controller etcd 工具链 kubectl Helm v3 环境验证清单 集群健康 → 节点就绪 → DNS 解析 → Helm 可用 → kubectl 上下文正确

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 组