3. 环境准备:Kubernetes 集群搭建与仓库配置

在开始 Flux CD 的 GitOps 实践之前,必须准备好底层运行环境。本章将指导你完成三个核心步骤:搭建轻量级 Kubernetes 集群、安装配置 kubectl 命令行工具、以及准备 Git 仓库(GitHub/GitLab)。这些是后续所有流水线操作的基础设施。

3.1 环境概览与组件关系

下图展示了本课程实验环境的整体架构,以及各组件之间的协作关系:

Flux CD GitOps 实验环境架构图 Flux CD GitOps 实验环境架构 开发者工作站 kubectl + git CLI Git 仓库 GitHub / GitLab Kubernetes 集群 Minikube / K3s 核心流程 开发者推送代码 → Git 仓库触发 Webhook → Flux 自动同步至 Kubernetes 集群 kubectl 配置 ~/.kube/config 仓库分支策略 main / staging / production 集群访问方式 NodePort / LoadBalancer

3.2 Kubernetes 集群搭建

本课程推荐两种轻量级 Kubernetes 发行版:Minikube(适合本地开发)和 K3s(适合资源受限环境)。选择依据如下:

特性 Minikube K3s
适用场景 本地开发、单节点测试 边缘计算、CI/CD 环境、生产边缘
资源占用 中等(2GB+ 内存) 低(512MB 内存即可运行)
安装复杂度 简单(二进制或包管理器) 简单(单文件安装)
默认驱动 Docker / VirtualBox / Hyper-V containerd(内置)
Flux 兼容性 完全兼容 完全兼容

3.2.1 使用 Minikube 搭建集群

Minikube 是 Kubernetes 官方维护的本地集群工具,适合在个人电脑上快速启动一个单节点集群。

前置条件:已安装 Docker 或 Hyper-V 等容器/虚拟化环境。

安装步骤:

  1. 下载 Minikube 二进制文件并赋予执行权限。
  2. 启动集群,指定资源配额和 Kubernetes 版本。
  3. 验证集群状态。
# 下载 Minikube(Linux/macOS)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 启动集群(推荐分配 2 核 CPU、4GB 内存)
minikube start --cpus=2 --memory=4096 --kubernetes-version=v1.28.0

# 检查集群状态
minikube status

# 查看节点信息
kubectl get nodes

3.2.2 使用 K3s 搭建集群

K3s 是 Rancher 推出的轻量级 Kubernetes 发行版,二进制文件仅约 60MB,非常适合在虚拟机或 CI 环境中快速部署。

# 一键安装 K3s(Server 模式)
curl -sfL https://get.k3s.io | sh -

# 检查 K3s 服务状态
sudo systemctl status k3s

# 获取 kubeconfig 文件(默认路径)
sudo cat /etc/rancher/k3s/k3s.yaml

# 使用 kubectl 访问集群(需配置 KUBECONFIG 环境变量)
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
kubectl get nodes

提示:K3s 默认使用 containerd 作为容器运行时,并内置了 Traefik Ingress Controller。如果不需要,可以在安装时通过 --disable=traefik 禁用。

3.3 kubectl 安装与配置

kubectl 是 Kubernetes 的命令行工具,用于与集群进行交互。无论使用哪种集群方案,都需要正确安装并配置 kubectl。

3.3.1 安装 kubectl

# Linux(使用 curl 下载最新稳定版)
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

# macOS(使用 Homebrew)
brew install kubectl

# Windows(使用 Chocolatey)
choco install kubernetes-cli

3.3.2 配置 kubeconfig

kubectl 通过 ~/.kube/config 文件连接集群。Minikube 和 K3s 会自动生成该文件,但有时需要手动合并或切换上下文。

# 查看当前上下文
kubectl config current-context

# 列出所有上下文
kubectl config get-contexts

# 切换上下文(例如从 minikube 切换到 k3s)
kubectl config use-context k3s

# 验证集群连接
kubectl cluster-info
命令 用途 示例输出
kubectl version --client 查看客户端版本 Client Version: v1.28.0
kubectl get nodes 查看集群节点状态 NAME  STATUS  ROLES  AGE  VERSION
kubectl get pods -A 查看所有命名空间的 Pod NAMESPACE  NAME  READY  STATUS

3.4 Git 仓库准备

GitOps 的核心是将 Git 仓库作为声明式配置的单一事实来源。你需要准备一个 GitHub 或 GitLab 仓库,用于存放 Kubernetes 清单文件和 Flux 配置。

3.4.1 仓库结构设计

推荐采用 环境目录 + 应用目录 的层次结构,便于 Flux 按环境同步:

gitops-repo/
├── clusters/
│   ├── production/
│   │   ├── flux-system/        # Flux 自身组件
│   │   └── apps/               # 生产环境应用
│   └── staging/
│       ├── flux-system/
│       └── apps/
├── apps/
│   ├── nginx/
│   │   ├── deployment.yaml
│   │   └── service.yaml
│   └── redis/
│       ├── deployment.yaml
│       └── service.yaml
└── README.md

3.4.2 创建仓库并配置访问

GitHub 操作步骤:

  1. 登录 GitHub,点击右上角 "+" → "New repository"。
  2. 填写仓库名称(如 gitops-demo),选择 Public 或 Private。
  3. 勾选 "Add a README file",点击 "Create repository"。
  4. 在本地克隆仓库:git clone https://github.com/<用户名>/gitops-demo.git
  5. 创建上述目录结构并推送。

GitLab 操作步骤:

  1. 登录 GitLab,点击 "New project" → "Create blank project"。
  2. 输入项目名称(如 gitops-demo),设置可见性级别。
  3. 克隆到本地:git clone https://gitlab.com/<用户名>/gitops-demo.git
  4. 初始化目录结构并推送。

注意:如果使用私有仓库,Flux 需要配置部署密钥(Deploy Key)或 Personal Access (PAT)才能拉取代码。后续章节会详细讲解凭证配置。

3.5 环境验证清单

完成上述步骤后,请逐项确认以下检查点:

检查项 验证命令 预期结果
集群运行中 kubectl get nodes 节点状态为 Ready
kubectl 版本匹配 kubectl version --short Client 与 Server 版本差异 < 1 个次要版本
Git 仓库可访问 git ls-remote 返回远程引用列表
集群内部 DNS 正常 kubectl run -it --rm dns-test --image=busybox -- nslookup kubernetes.default 返回 Cluster IP

3.6 常见问题与排错

  • Minikube 启动失败:检查 Docker 是否运行,尝试 minikube delete 后重新 minikube start。
  • K3s 服务未启动:运行 sudo journalctl -u k3s -n 50 查看日志,检查端口 6443 是否被占用。
  • kubectl 连接超时:确认 KUBECONFIG 环境变量指向正确的配置文件,或使用 --kubeconfig 参数指定路径。
  • Git 推送被拒:检查仓库权限,确保已添加 SSH 公钥或使用 HTTPS 凭据。

最佳实践:建议在开始 Flux 安装之前,先运行一个简单的 Nginx Deployment 验证集群功能完整。这能帮助你区分是集群问题还是 Flux 配置问题。

# 快速验证集群
kubectl create deployment nginx-test --image=nginx
kubectl expose deployment nginx-test --port=80 --type=NodePort
kubectl get pods,svc

# 清理测试资源
kubectl delete deployment nginx-test
kubectl delete svc nginx-test