3. 环境准备:Kubernetes集群搭建(Minikube/Kind)、kubectl配置、Git仓库创建、GitHub/GitLab 生成

在开始 GitOps 流水线工程实践之前,必须完成本地开发环境的搭建。本章将指导你完成四个核心步骤:选择并启动本地 Kubernetes 集群、配置 kubectl 命令行工具、创建 Git 仓库、以及生成平台访问令牌。这些环境组件是后续所有 Flux CD 操作的基础。

3.1 本地 Kubernetes 集群选择:Minikube vs Kind

对于本地开发和测试,Minikube 和 Kind(Kubernetes in Docker)是最主流的两种选择。下表从关键维度对比两者的差异,帮助你根据硬件条件和需求做出选择。

对比维度 Minikube Kind
底层技术 虚拟机(HyperKit/Hyper-V/VirtualBox)或 Docker Docker 容器作为节点
启动速度 较慢(2-5 分钟,取决于驱动) 快速(30-60 秒)
资源占用 较高(默认 2 CPU / 2GB RAM) 较低(共享 Docker 资源)
多节点支持 支持(需指定 --nodes) 原生支持(配置文件定义)
LoadBalancer 内置 minikube tunnel 需额外安装 MetalLB
持久化存储 内置 hostPath Provisioner 需手动配置
适用场景 完整功能验证、Ingress 测试 CI/CD 流水线、快速原型
推荐选择: 如果你的机器内存 ≥ 8GB,建议使用 Minikube 以获得更完整的 Kubernetes 体验;如果内存 ≤ 4GB 或主要用于 Flux 流水线测试,Kind 是更轻量的选择。本课程后续示例将基于 Kind 集群,但所有操作同样适用于 Minikube。

3.2 使用 Kind 搭建集群

Kind 将 Kubernetes 节点作为 Docker 容器运行,非常适合本地开发和 CI 环境。以下是标准安装步骤。

3.2.1 安装 Kind

# 使用 Homebrew(macOS / Linux)
brew install kind

# 或使用 curl 直接安装(Linux / macOS)
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

# 验证安装
kind version

3.2.2 创建多节点集群配置文件

创建一个包含 1 个控制平面节点和 2 个工作节点的集群,模拟真实环境。

# kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    protocol: TCP
  - containerPort: 443
    hostPort: 443
    protocol: TCP
- role: worker
- role: worker

3.2.3 启动集群

kind create cluster --name flux-cluster --config kind-config.yaml

# 验证节点状态
kubectl get nodes

# 输出示例
NAME                         STATUS   ROLES           AGE   VERSION
flux-cluster-control-plane   Ready    control-plane   45s   v1.27.3
flux-cluster-worker          Ready    <none>          30s   v1.27.3
flux-cluster-worker2         Ready    <none>          30s   v1.27.3
Minikube 替代命令: 如果你选择 Minikube,使用 minikube start --cpus=4 --memory=8192 --driver=docker 启动,然后使用 minikube tunnel 暴露 LoadBalancer 服务。

3.3 kubectl 配置与验证

kubectl 是与 Kubernetes 集群交互的命令行工具。安装后需要确保其版本与集群版本匹配,并正确配置上下文。

3.3.1 安装 kubectl

# macOS(Homebrew)
brew install kubectl

# Linux(curl)
curl -LO "https://dl.k8s.io/release/v1.27.3/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

# 验证版本
kubectl version --client

3.3.2 配置 kubeconfig 上下文

Kind 创建集群后会自动将上下文写入 kubeconfig 文件。你可以使用以下命令管理多个集群上下文。

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

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

# 切换到指定上下文
kubectl config use-context kind-flux-cluster

# 验证集群连接
kubectl cluster-info

3.3.3 验证集群功能

# 部署一个测试 Pod 验证集群正常工作
kubectl run test-pod --image=nginx --restart=Never
kubectl get pods
kubectl delete pod test-pod
版本兼容性警告: kubectl 的次版本号应与集群版本相差不超过 1。例如,集群 v1.27.x 可以使用 kubectl v1.26.x、v1.27.x 或 v1.28.x。使用 kubectl version 检查客户端和服务器版本是否匹配。

3.4 Git 仓库创建与初始化

GitOps 的核心是将 Git 仓库作为声明式配置的唯一真相来源。你需要创建两个仓库:一个用于存储应用代码,另一个用于存储 Kubernetes 清单和 Flux 配置。

3.4.1 仓库结构设计

仓库名称 用途 包含内容
app-source 应用源代码仓库 Dockerfile、应用代码、CI 配置文件
gitops-config GitOps 配置仓库 Kustomize 覆盖、Helm 值、Flux 自定义资源

3.4.2 创建 GitOps 配置仓库

# 在 GitHub 或 GitLab 上手动创建空仓库,或使用 CLI
# GitHub CLI 示例
gh repo create gitops-config --private --clone

# 初始化仓库结构
cd gitops-config
mkdir -p apps/production apps/staging infrastructure
echo "# GitOps Configuration Repository" > README.md
git add .
git commit -m "chore: initialize repository structure"
git push origin main

3.4.3 推荐的分支策略

  • main:生产环境稳定配置,仅通过 PR 合并
  • staging:预发布环境配置,自动部署
  • feature/*:功能分支,用于开发测试
最佳实践: 在仓库根目录创建 .github/workflows 或 .gitlab-ci.yml 文件,后续用于触发 CI/CD 流水线。Flux 会自动同步 main 分支的变更到生产集群。

3.5 GitHub / GitLab 生成

Flux 需要访问 Git 仓库的权限,以便读取配置并推送状态更新。 是推荐的认证方式,比 SSH 密钥更适合自动化场景。

3.5.1 GitHub Personal Access

# 步骤 1:登录 GitHub,进入 Settings → Developer settings → Personal access tokens → Tokens (classic)
# 步骤 2:点击 "Generate new  (classic)"
# 步骤 3:配置权限

# 所需权限范围
# - repo (Full control of private repositories)
# - read:org (读取组织信息,如果仓库属于组织)

# 步骤 4:生成  并立即复制保存
# 示例 (已脱敏)
ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

3.5.2 GitLab Personal Access

# 步骤 1:登录 GitLab,进入 Preferences → Access Tokens
# 步骤 2:创建新 

# 所需权限范围
# - read_repository (读取仓库)
# - write_repository (写入仓库,用于 Flux 状态回写)

# 步骤 3:生成 
# 示例 (已脱敏)
glpat-xxxxxxxxxxxxxxxxxxxx

3.5.3 安全存储

不要将 硬编码到配置文件中。使用环境变量或密钥管理工具。

# 导出为环境变量(仅当前会话有效)
export GITHUB_="ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# 或使用 1Password CLI / Bitwarden 等密码管理器
# 后续 Flux 安装时会引用此变量
安全提醒: 具有仓库读写权限,务必妥善保管。不要提交到 Git 仓库、不要分享到聊天工具、定期轮换 。如果 泄露,立即在 GitHub/GitLab 设置页面撤销并重新生成。

3.6 环境准备总览

下图展示了本地开发环境的完整组件关系,以及各工具之间的交互流程。

环境准备组件关系图 环境准备组件关系图 开发者工作站 kubectl CLI Kind / Minikube Git CLI Kubernetes 集群 Git 仓库 凭证 关键说明: • kubectl 通过 kubeconfig 上下文连接 Kind/Minikube 集群 • Git CLI 使用 认证访问远程仓库(GitHub/GitLab) • 需要 repo 和 write_repository 权限,用于 Flux 后续同步 • 所有组件安装完成后,即可进入 Flux CD 安装阶段

3.7 环境验证清单

完成上述步骤后,使用以下清单逐项验证环境是否就绪。

检查项 验证命令 预期结果
Kind 集群运行中 kind get clusters 输出 flux-cluster
节点状态正常 kubectl get nodes 所有节点状态为 Ready
kubectl 版本匹配 kubectl version Server Version 与 Client Version 次版本差 ≤ 1
Git 仓库可访问 git ls-remote <repo-url> 输出远程引用列表
权限有效 curl -H "Authorization: $GITHUB_" https://api.github.com/user 返回用户信息 JSON
下一步准备: 环境就绪后,下一阶段将安装 Flux CLI 并引导 Flux 组件到集群中。确保 和仓库 URL 随时可用,后续命令将直接引用这些配置。