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 环境准备总览
下图展示了本地开发环境的完整组件关系,以及各工具之间的交互流程。
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 随时可用,后续命令将直接引用这些配置。