2. 云原生环境搭建:Kubernetes集群部署(Minikube/K3s)、kubectl配置、命名空间规划
本章是项目落地的第一步。在资源画像驱动的成本分摊模型中,Kubernetes 集群是数据采集与调度执行的核心载体。我们将采用轻量级发行版(Minikube 或 K3s)快速搭建本地实验环境,完成 kubectl 工具链配置,并按照 FinOps 分层治理原则规划命名空间体系。
2.1 发行版选型:Minikube vs K3s
对于单节点开发测试环境,Minikube 与 K3s 是最主流的两个选择。下表从资源占用、组件完整性、启动速度三个维度进行对比,帮助你在不同硬件条件下做出合理决策。
| 对比维度 | Minikube | K3s |
|---|---|---|
| 内存基线 | 推荐 ≥ 2 GB | 最低 512 MB |
| 磁盘占用 | 约 1.5 GB(含镜像缓存) | 约 200 MB(二进制) |
| 组件完整性 | 完整 Kubernetes 组件 + 内置 Addons | 精简组件,默认关闭部分特性 |
| 启动速度 | 60–120 秒 | 15–30 秒 |
| 适用场景 | API 兼容性验证、Addon 测试 | 边缘节点、资源受限环境 |
选型建议:本课程后续的资源画像采集组件(如 kube-state-metrics、metrics-server)在 Minikube 中可通过 Addon 一键启用,因此推荐使用 Minikube 作为主力环境。若你的开发机内存低于 4 GB,则优先选择 K3s。
2.2 集群部署步骤(以 Minikube 为例)
以下步骤基于 Linux/macOS 环境,Windows 用户请使用 WSL2 或 PowerShell 配合 Minikube 驱动。
- 安装 Minikube 二进制
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
- 启动集群并指定资源配额
minikube start \
--cpus=2 \
--memory=4096 \
--disk-size=20g \
--driver=docker \
--kubernetes-version=v1.28.0
- 验证集群状态
minikube status
kubectl cluster-info
kubectl get nodes
- 启用必要 Addon
minikube addons enable metrics-server
minikube addons enable dashboard
关键检查点:执行
kubectl get pods -n kube-system 确认所有系统组件处于 Running 状态,特别是 metrics-server 必须正常工作,否则后续资源画像数据无法采集。
2.3 kubectl 配置与上下文管理
kubectl 是操作集群的唯一命令行入口。Minikube 启动后会自动生成 kubeconfig 文件并切换上下文,但你需要理解其结构以便后续多集群管理。
kubeconfig 文件结构(~/.kube/config)
| 字段 | 说明 | 示例值 |
|---|---|---|
clusters |
集群 API Server 地址与证书 | server: https://192.168.49.2:8443 |
users |
客户端认证凭据 | client-certificate-data |
contexts |
集群 + 用户 + 命名空间的组合 | minikube |
current-context |
当前激活的上下文 | minikube |
常用上下文操作命令
# 查看当前上下文
kubectl config current-context
# 列出所有上下文
kubectl config get-contexts
# 切换上下文
kubectl config use-context minikube
# 设置默认命名空间(避免每次加 -n)
kubectl config set-context --current --namespace=finops
常见陷阱:当使用多个集群时,务必在操作前执行
kubectl config current-context 确认目标集群。误操作生产环境是 FinOps 实践中最昂贵的错误之一。
2.4 命名空间规划:FinOps 分层治理
命名空间是 Kubernetes 中逻辑隔离的基本单元。在成本分摊模型中,合理的命名空间规划直接决定了资源标签的覆盖率和分摊粒度的准确性。我们采用三层治理模型:
- 业务层(Business):按产品线或项目划分,例如
payment、recommend、user-portal。 - 环境层(Environment):按部署阶段划分,例如
dev、staging、prod。 - 基础设施层(Infra):存放共享组件,例如
monitoring、logging、ingress-nginx。
推荐命名规范:<env>-<product>,例如 prod-payment、dev-recommend。
下图展示了本课程实验环境的命名空间拓扑结构:
2.5 创建实验命名空间并设置标签
执行以下命令创建本课程所需的命名空间,并附加 FinOps 标签用于后续成本分摊:
# 创建基础设施命名空间
kubectl create namespace monitoring
kubectl label namespace monitoring layer=infra cost-center=shared
kubectl create namespace logging
kubectl label namespace logging layer=infra cost-center=shared
# 创建业务命名空间(按环境+产品组合)
kubectl create namespace dev-payment
kubectl label namespace dev-payment layer=business env=dev product=payment
kubectl create namespace prod-payment
kubectl label namespace prod-payment layer=business env=prod product=payment
kubectl create namespace dev-recommend
kubectl label namespace dev-recommend layer=business env=dev product=recommend
kubectl create namespace prod-recommend
kubectl label namespace prod-recommend layer=business env=prod product=recommend
验证命令:
kubectl get ns --show-labels 可查看所有命名空间及其标签,确保 layer 和 cost-center 标签已正确附加。
2.6 环境就绪检查清单
完成上述步骤后,请逐项确认以下状态:
| 检查项 | 验证命令 | 预期结果 |
|---|---|---|
| 集群节点就绪 | kubectl get nodes |
节点状态为 Ready |
| 系统组件健康 | kubectl get pods -n kube-system |
所有 Pod 为 Running |
| Metrics Server 运行 | kubectl get pods -n kube-system | grep metrics |
Pod 状态 Running |
| 命名空间与标签 | kubectl get ns --show-labels |
包含 layer、env、product 标签 |
| kubectl 上下文 | kubectl config current-context |
输出 minikube 或自定义名称 |
至此,云原生实验环境已搭建完毕。下一阶段将基于此集群部署资源画像采集组件,为成本分摊模型提供原始数据支撑。