3. 环境准备与基础搭建:云环境与本地集群

本章是整条推理链路落地的物理基础。无论选择公有云托管集群还是本地 Minikube 开发环境,都需要完成 Kubernetes 集群的初始化、命令行工具链的安装以及多租户命名空间的规划。以下内容按照“集群选型 → 工具安装 → 空间规划”的顺序展开,确保后续章节的模型部署、服务暴露与监控链路能够无缝衔接。

3.1 集群环境选型对比

根据团队规模、预算与运维能力,推荐以下三种主流方案。生产环境优先选择 AWS EKS 或 GCP GKE;个人实验或离线开发场景使用 Minikube。

维度 AWS EKS GCP GKE Minikube(本地)
控制面托管 完全托管,自动升级 完全托管,自动升级 本地单节点,手动管理
节点组管理 EC2 Auto Scaling Groups Node Pool + Autopilot 单机 Docker/VM 驱动
GPU 实例支持 P4 / T4 / A10G / A100 T4 / L4 / A100 需宿主机直通 NVIDIA GPU
网络模型 AWS VPC CNI + Calico VPC-native + Dataplane v2 Docker bridge / Calico
成本(月估) 控制面 ~$73 + 节点按需 控制面 ~$73 + 节点按需 仅消耗本地电力
适用场景 生产推理、多 AZ 高可用 生产推理、GCP 生态集成 开发调试、离线实验
选型建议: 本课程后续所有 YAML 与 Helm Chart 均兼容以上三种集群。如果你在本地学习,推荐使用 Minikube + Docker 驱动,内存分配不低于 8 GB,CPU 不低于 4 核。

3.2 集群搭建快速指南

3.2.1 Minikube(本地开发环境)

Minikube 是本地搭建单节点 Kubernetes 集群的最快方式,适合课程实验与模型调试。

# 安装 Minikube(Linux / macOS)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 启动集群(指定 Docker 驱动,分配 8 GB 内存)
minikube start --driver=docker --memory=8192 --cpus=4

# 验证集群状态
kubectl cluster-info
kubectl get nodes

3.2.2 AWS EKS(生产环境)

使用 eksctl 工具快速创建生产级集群,自动配置 VPC、IAM 与节点组。

# 安装 eksctl
curl -sL "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin

# 创建集群(含 GPU 节点组)
eksctl create cluster \
  --name aml-inference-cluster \
  --region us-west-2 \
  --nodegroup-name gpu-workers \
  --node-type p3.2xlarge \
  --nodes 2 \
  --nodes-min 1 \
  --nodes-max 4 \
  --with-oidc \
  --managed

3.2.3 GCP GKE(生产环境)

使用 gcloud 命令创建 Autopilot 或 Standard 集群,自动管理控制面与节点。

# 安装 gcloud 并配置项目
gcloud auth login
gcloud config set project your-project-id

# 创建 GKE Standard 集群(含 GPU 节点池)
gcloud container clusters create aml-inference-cluster \
  --region us-central1 \
  --node-locations us-central1-a \
  --machine-type n1-standard-4 \
  --num-nodes 2 \
  --accelerator type=nvidia-tesla-t4,count=1 \
  --enable-autoscaling --min-nodes 1 --max-nodes 4
注意: 云环境创建集群会产生费用。实验完成后请及时执行 eksctl delete cluster 或 gcloud container clusters delete 清理资源,避免持续计费。

3.3 命令行工具链安装

集群就绪后,必须安装 kubectl 与 helm 两个核心工具。kubectl 负责与 API Server 交互,helm 负责打包部署推理 Chart。

工具 版本要求 安装方式(Linux) 验证命令
kubectl ≥ 1.28 curl -LO "https://dl.k8s.io/release/v1.28.0/bin/linux/amd64/kubectl" kubectl version --client
helm ≥ 3.14 curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash helm version
# 安装 kubectl(以 v1.28.0 为例)
curl -LO "https://dl.k8s.io/release/v1.28.0/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

# 安装 helm
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

# 配置 kubectl 上下文(以 Minikube 为例)
kubectl config use-context minikube

3.4 命名空间规划与多租户隔离

在推理链路中,合理的命名空间规划可以隔离不同模型、不同环境(开发/预发/生产)以及不同团队的资源。推荐采用“环境 + 模型域”的二维命名策略。

3.4.1 命名空间设计原则

  • 环境隔离: 每个环境(dev / staging / prod)使用独立命名空间,避免误操作影响生产流量。
  • 模型域隔离: 同一环境下,不同模型域(如 NLP / CV / 推荐)使用不同命名空间,便于资源配额管理。
  • 共享服务: 监控、日志、Ingress Controller 等基础设施组件统一部署在 infra 或 monitoring 命名空间。

3.4.2 推荐命名空间清单

命名空间 用途 资源配额(示例)
aml-dev-nlp 开发环境 NLP 模型推理 CPU 4 核 / 内存 8 GB / GPU 0
aml-dev-cv 开发环境 CV 模型推理 CPU 4 核 / 内存 8 GB / GPU 1
aml-staging 预发环境全模型集成测试 CPU 8 核 / 内存 16 GB / GPU 2
aml-prod 生产环境在线推理 CPU 32 核 / 内存 64 GB / GPU 8
infra Ingress、Prometheus、Grafana CPU 2 核 / 内存 4 GB
# 创建命名空间
kubectl create namespace aml-dev-nlp
kubectl create namespace aml-dev-cv
kubectl create namespace aml-staging
kubectl create namespace aml-prod
kubectl create namespace infra

# 为命名空间设置资源配额(以 aml-dev-nlp 为例)
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ResourceQuota
metadata:
  name: dev-nlp-quota
  namespace: aml-dev-nlp
spec:
  hard:
    requests.cpu: "4"
    requests.memory: "8Gi"
    limits.cpu: "8"
    limits.memory: "16Gi"
    requests.nvidia.com/gpu: 0
EOF
最佳实践: 在 aml-prod 命名空间上额外绑定 NetworkPolicy,只允许 infra 命名空间的 Ingress Controller 访问推理 Pod 的 8080 端口,禁止外部直接访问。

3.5 环境架构总览

下图展示了本章搭建的完整环境拓扑:本地或云集群作为底座,kubectl/helm 作为控制工具,命名空间按环境与模型域划分,为后续模型部署与推理链路做好准备。

环境架构总览:集群 → 工具 → 命名空间 Kubernetes 集群 Minikube(本地) / AWS EKS / GCP GKE GPU 节点池(T4 / A10G / A100) 命令行工具链 kubectl (≥1.28) + Helm (≥3.14) 命名空间规划(多租户隔离) aml-dev-nlp NLP 开发 aml-dev-cv CV 开发 aml-staging 预发集成 aml-prod 生产推理 infra 基础设施 每个命名空间独立配置 ResourceQuota 与 NetworkPolicy

3.6 环境验证清单

完成上述步骤后,执行以下命令确认环境就绪。所有检查项通过后,即可进入下一章“模型镜像构建与推送”。

# 1. 检查集群节点状态
kubectl get nodes -o wide

# 2. 检查命名空间列表
kubectl get namespaces

# 3. 检查命名空间资源配额
kubectl get resourcequota -n aml-dev-nlp

# 4. 检查 Helm 是否可正常添加仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# 5. 检查 GPU 节点可调度(如有 GPU)
kubectl describe nodes | grep -i nvidia
快速排障: 如果 kubectl get nodes 返回 NotReady,请检查容器运行时(Docker/containerd)是否正常运行;如果 GPU 节点未显示 nvidia.com/gpu 资源,请确认已安装 NVIDIA 驱动与 nvidia-container-toolkit。