安装与配置 #

安装前准备 #

在安装 Kubeflow 之前,需要确保你的环境满足基本要求。

硬件要求 #

text
最低配置(开发测试):
├── CPU: 4 核
├── 内存: 16 GB
├── 存储: 50 GB
└── 网络: 稳定网络连接

推荐配置(生产环境):
├── CPU: 8 核以上
├── 内存: 32 GB 以上
├── 存储: 200 GB 以上
└── GPU: 可选(深度学习)

软件要求 #

text
必备软件:
├── Kubernetes 集群
│   ├── 版本: 1.25+
│   └── kubectl 已配置
│
├── 容器运行时
│   ├── Docker
│   ├── containerd
│   └── 或其他兼容运行时
│
└── 命令行工具
    ├── kubectl
    ├── git
    └── python3 (可选)

检查环境 #

bash
# 检查 kubectl 版本
kubectl version --short

# 检查集群状态
kubectl cluster-info

# 检查节点状态
kubectl get nodes

# 检查可用资源
kubectl describe nodes | grep -A 5 "Allocated resources"

安装方式概览 #

text
┌─────────────────────────────────────────────────────────────┐
│                   Kubeflow 安装方式                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  本地开发环境:                                              │
│  ├── MiniKF (推荐新手)                                      │
│  ├── kind + Kubeflow                                       │
│  └── minikube + Kubeflow                                   │
│                                                             │
│  云平台托管:                                                │
│  ├── Google Cloud (GKE)                                    │
│  ├── Amazon Web Services (EKS)                             │
│  ├── Microsoft Azure (AKS)                                 │
│  └── 阿里云 (ACK)                                           │
│                                                             │
│  生产环境部署:                                              │
│  ├── Kubeflow Manifests                                    │
│  ├── Kubeflow Operator                                     │
│  └── ArgoCD GitOps                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

方式一:本地开发环境 #

使用 MiniKF(推荐新手) #

MiniKF 是一个预配置的 Kubeflow 开发环境,基于 Vagrant 和 VirtualBox。

bash
# 安装依赖
# macOS
brew install vagrant virtualbox

# 安装 MiniKF
vagrant init arrikto/minikf
vagrant up

# 访问 Kubeflow
# 打开浏览器访问 http://10.10.10.10

使用 kind(Kubernetes in Docker) #

kind 适合本地开发和测试,使用 Docker 容器作为 Kubernetes 节点。

bash
# 安装 kind
# macOS
brew install kind

# Linux
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 create cluster --name kubeflow

# 验证集群
kubectl cluster-info --context kind-kubeflow

使用 minikube #

minikube 是另一个流行的本地 Kubernetes 解决方案。

bash
# 安装 minikube
# macOS
brew install minikube

# Linux
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 启动集群(建议配置)
minikube start \
  --cpus=6 \
  --memory=16384 \
  --disk-size=100g \
  --driver=docker

# 启用插件
minikube addons enable storage-provisioner
minikube addons enable default-storageclass

方式二:安装 Kubeflow #

使用 Kubeflow Manifests(推荐) #

Kubeflow Manifests 是官方推荐的安装方式,使用 kustomize 管理配置。

bash
# 克隆 Kubeflow Manifests
git clone https://github.com/kubeflow/manifests.git
cd manifests

# 检出稳定版本
git checkout v1.8.0

# 安装 Kubeflow
while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done

# 等待所有组件就绪
kubectl wait --for=condition=Ready pods --all -n kubeflow --timeout=600s

# 检查安装状态
kubectl get pods -n kubeflow

安装 kustomize #

bash
# macOS
brew install kustomize

# Linux
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
sudo mv kustomize /usr/local/bin/

# 验证安装
kustomize version

使用 Kubeflow Operator #

Kubeflow Operator 提供更简单的安装和管理方式。

bash
# 安装 Operator Lifecycle Manager (OLM)
curl -sL https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.25.0/install.sh | bash -s v0.25.0

# 安装 Kubeflow Operator
kubectl create -f https://operatorhub.io/install/kubeflow.yaml

# 创建 Kubeflow 实例
cat <<EOF | kubectl apply -f -
apiVersion: kubeflow.org/v1beta1
kind: Kubeflow
metadata:
  name: kubeflow-installation
  namespace: kubeflow-operator
spec:
  version: v1.8.0
EOF

方式三:云平台部署 #

Google Cloud (GKE) #

bash
# 安装 Google Cloud CLI
brew install google-cloud-sdk

# 初始化配置
gcloud init

# 创建 GKE 集群
gcloud container clusters create kubeflow-cluster \
  --zone=us-central1-a \
  --machine-type=n1-standard-8 \
  --num-nodes=3 \
  --enable-network-policy

# 获取集群凭据
gcloud container clusters get-credentials kubeflow-cluster --zone=us-central1-a

# 使用 Google Cloud AI Platform
# 或手动安装 Kubeflow

Amazon Web Services (EKS) #

bash
# 安装 eksctl
brew install eksctl

# 创建 EKS 集群
eksctl create cluster \
  --name=kubeflow-cluster \
  --region=us-west-2 \
  --nodes=3 \
  --node-type=m5.xlarge

# 安装 Kubeflow
# 使用 AWS 的 Kubeflow 发行版
git clone https://github.com/awslabs/kubeflow-manifests.git
cd kubeflow-manifests
make install

Microsoft Azure (AKS) #

bash
# 安装 Azure CLI
brew install azure-cli

# 登录 Azure
az login

# 创建资源组
az group create --name kubeflow-rg --location eastus

# 创建 AKS 集群
az aks create \
  --resource-group kubeflow-rg \
  --name kubeflow-cluster \
  --node-count 3 \
  --node-vm-size Standard_D4s_v3 \
  --enable-managed-identity

# 获取集群凭据
az aks get-credentials --resource-group kubeflow-rg --name kubeflow-cluster

访问 Kubeflow Dashboard #

端口转发方式 #

bash
# 端口转发到本地
kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80

# 访问 Dashboard
# 打开浏览器访问 http://localhost:8080

获取登录凭据 #

bash
# 获取默认用户名和密码
# 用户名: user@example.com
# 密码: 12341234

# 或查看 Dex 配置
kubectl get secret -n kubeflow dex-credentials -o jsonpath='{.data}'

配置 Ingress(生产环境) #

yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kubeflow-ingress
  namespace: istio-system
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  tls:
  - hosts:
    - kubeflow.yourdomain.com
    secretName: kubeflow-tls
  rules:
  - host: kubeflow.yourdomain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: istio-ingressgateway
            port:
              number: 80

配置存储 #

配置默认存储类 #

bash
# 查看可用存储类
kubectl get storageclass

# 设置默认存储类
kubectl patch storageclass standard \
  -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

配置持久卷 #

yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: kubeflow-pvc
  namespace: kubeflow
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi
  storageClassName: standard

配置 NFS 存储(可选) #

yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 500Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: nfs-server.example.com
    path: /data/kubeflow
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
  namespace: kubeflow
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 500Gi
  volumeName: nfs-pv

配置 GPU 支持 #

安装 NVIDIA 设备插件 #

bash
# 添加 NVIDIA Helm 仓库
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
helm repo update

# 安装 GPU Operator
helm install gpu-operator nvidia/gpu-operator \
  --namespace gpu-operator \
  --create-namespace

验证 GPU 支持 #

bash
# 检查 GPU 节点
kubectl describe node | grep nvidia.com/gpu

# 测试 GPU Pod
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: gpu-test
spec:
  containers:
  - name: cuda
    image: nvidia/cuda:11.0-base
    command: ["nvidia-smi"]
    resources:
      limits:
        nvidia.com/gpu: 1
  restartPolicy: Never
EOF

# 查看日志
kubectl logs gpu-test

多租户配置 #

创建用户命名空间 #

yaml
apiVersion: v1
kind: Namespace
metadata:
  name: kubeflow-user-newuser
  labels:
    istio-injection: enabled
---
apiVersion: kubeflow.org/v1beta1
kind: Profile
metadata:
  name: kubeflow-user-newuser
spec:
  owner:
    kind: User
    name: newuser@example.com

配置用户配额 #

yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
  namespace: kubeflow-user-newuser
spec:
  hard:
    requests.cpu: "10"
    requests.memory: 20Gi
    limits.cpu: "20"
    limits.memory: 40Gi
    requests.nvidia.com/gpu: "2"
    persistentvolumeclaims: "10"

验证安装 #

检查组件状态 #

bash
# 检查所有 Pod 状态
kubectl get pods -n kubeflow

# 检查关键组件
kubectl get pods -n istio-system
kubectl get pods -n knative-serving
kubectl get pods -n cert-manager

# 检查服务状态
kubectl get svc -n kubeflow

检查组件健康 #

bash
# 检查 Pipelines
kubectl get pods -n kubeflow | grep pipeline

# 检查 Notebooks
kubectl get pods -n kubeflow | grep notebook

# 检查 Katib
kubectl get pods -n kubeflow | grep katib

# 检查 Training Operator
kubectl get pods -n kubeflow | grep training

功能测试 #

bash
# 测试创建 Notebook
# 在 Dashboard 中创建一个 Jupyter Notebook

# 测试 Pipeline
# 运行一个简单的示例 Pipeline

# 测试 Katib
# 创建一个简单的超参数调优实验

常见问题 #

安装失败 #

bash
# 问题:资源不足
# 解决:增加集群资源或清理不必要的 Pod

# 检查资源使用
kubectl describe nodes | grep -A 5 "Allocated resources"

# 清理失败的 Pod
kubectl delete pods --field-selector=status.phase=Failed -n kubeflow

Pod 启动失败 #

bash
# 检查 Pod 状态
kubectl describe pod <pod-name> -n kubeflow

# 检查日志
kubectl logs <pod-name> -n kubeflow

# 检查事件
kubectl get events -n kubeflow --sort-by='.lastTimestamp'

镜像拉取失败 #

bash
# 问题:镜像拉取超时或失败
# 解决:配置镜像加速器或使用国内镜像

# 配置 Docker 镜像加速
# 编辑 /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com"
  ]
}

# 重启 Docker
sudo systemctl restart docker

访问问题 #

bash
# 问题:无法访问 Dashboard
# 解决:检查端口转发和 Ingress 配置

# 检查 Istio Gateway
kubectl get gateway -n istio-system

# 检查 VirtualService
kubectl get virtualservice -n istio-system

# 重新配置端口转发
kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80

卸载 Kubeflow #

完全卸载 #

bash
# 删除 Kubeflow 命名空间
kubectl delete namespace kubeflow --wait=false

# 删除 Istio 命名空间
kubectl delete namespace istio-system --wait=false

# 删除其他相关命名空间
kubectl delete namespace knative-serving --wait=false
kubectl delete namespace cert-manager --wait=false

# 清理残留资源
kubectl delete crd $(kubectl get crd | grep -E 'kubeflow|istio|knative' | awk '{print $1}')

清理本地集群 #

bash
# kind 集群
kind delete cluster --name kubeflow

# minikube 集群
minikube delete

# MiniKF
vagrant destroy

下一步 #

安装完成后,继续学习 快速开始,开始使用 Kubeflow!

最后更新:2026-04-05