部署指南#
下面我们提供了在不同环境中设置新的 Kubernetes 集群的精简指南,包括云上的托管服务。
在您的笔记本电脑上进行本地部署#
为了在您的笔记本电脑上试用 SkyPilot on Kubernetes 或在无需任何云访问的情况下本地运行 SkyPilot 任务,我们提供了 sky local up
CLI 来在本地创建一个 1 节点 Kubernetes 集群。
在底层,sky local up
使用 kind,一个用于在您的本地机器上创建 Kubernetes 集群的工具。它在容器内部运行 Kubernetes 集群,因此无需额外设置。
运行
sky local up
来启动一个 Kubernetes 集群并自动配置您的 kubeconfig 文件$ sky local up
运行
sky check
并验证 SkyPilot 中已启用 Kubernetes。现在您可以使用sky launch
在此本地托管的 Kubernetes 集群上运行 SkyPilot 任务。在使用完集群后,您可以使用
sky local down
将其移除。这将销毁本地 kubernetes 集群并将您的 kubeconfig 切换回其原始上下文$ sky local down
注意
我们建议为您的 Docker 运行时分配至少 4 个或更多 CPU,以确保 kind 拥有足够的资源。查看增加 CPU 分配的说明此处。
注意
kind 不支持多节点和 GPU。不建议在生产环境中使用。如果您想运行私有本地集群,请参阅关于 本地部署 的部分了解更多信息。
在 Google Cloud GKE 上部署#
创建一个至少包含 1 个节点的 GKE 标准集群。我们建议创建至少包含 4 个 vCPU 的节点。
示例:创建一个包含 2 个节点且每个节点有 16 个 CPU 的 GKE 集群。
PROJECT_ID=$(gcloud config get-value project) CLUSTER_NAME=testcluster gcloud beta container --project "${PROJECT_ID}" clusters create "${CLUSTER_NAME}" --zone "us-central1-c" --no-enable-basic-auth --cluster-version "1.29.4-gke.1043002" --release-channel "regular" --machine-type "e2-standard-16" --image-type "COS_CONTAINERD" --disk-type "pd-balanced" --disk-size "100" --metadata disable-legacy-endpoints=true --scopes "https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" --num-nodes "2" --logging=SYSTEM,WORKLOAD --monitoring=SYSTEM --enable-ip-alias --network "projects/${PROJECT_ID}/global/networks/default" --subnetwork "projects/${PROJECT_ID}/regions/us-central1/subnetworks/default" --no-enable-intra-node-visibility --default-max-pods-per-node "110" --security-posture=standard --workload-vulnerability-scanning=disabled --no-enable-master-authorized-networks --addons HorizontalPodAutoscaling,HttpLoadBalancing,GcePersistentDiskCsiDriver --enable-autoupgrade --enable-autorepair --max-surge-upgrade 1 --max-unavailable-upgrade 0 --enable-managed-prometheus --enable-shielded-nodes --node-locations "us-central1-c"
获取您集群的 kubeconfig。以下命令将自动更新
~/.kube/config
,为 GKE 集群添加新的 kubecontext。$ gcloud container clusters get-credentials <cluster-name> --region <region> # Example: # gcloud container clusters get-credentials testcluster --region us-central1-c
[如果使用 GPU] 对于 GKE 版本晚于 1.30.1-gke.115600,NVIDIA 驱动程序已预安装,无需额外设置。如果您使用较旧的 GKE 版本,您可能需要手动安装 NVIDIA 驱动程序以支持 GPU。您可以通过根据节点上的 GPU 和操作系统部署 daemonset 来完成此操作。
# For Container Optimized OS (COS) based nodes with GPUs other than Nvidia L4 (e.g., V100, A100, ...): $ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml # For Container Optimized OS (COS) based nodes with L4 GPUs: $ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded-latest.yaml # For Ubuntu based nodes with GPUs other than Nvidia L4 (e.g., V100, A100, ...): $ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded.yaml # For Ubuntu based nodes with L4 GPUs: $ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded-R525.yaml
提示
要验证 GPU 驱动程序是否已设置,运行
kubectl describe nodes
并验证nvidia.com/gpu
资源列在Capacity
部分下方。通过运行
sky check
来验证您的 kubernetes 集群是否已正确设置为 SkyPilot 使用$ sky check
[如果使用 GPU] 使用
sky show-gpus --cloud k8s
检查 kubernetes 集群中的可用 GPU$ sky show-gpus --cloud k8s GPU REQUESTABLE_QTY_PER_NODE UTILIZATION L4 1, 2, 4 6 of 8 free A100 1, 2 2 of 4 free Kubernetes per node GPU availability NODE GPU UTILIZATION my-cluster-0 L4 4 of 4 free my-cluster-1 L4 2 of 4 free my-cluster-2 A100 2 of 2 free my-cluster-3 A100 0 of 2 free
注意
当前不支持 GKE autopilot 集群。仅支持 GKE 标准集群。
在 Amazon EKS 上部署#
创建一个至少包含 1 个节点的 EKS 集群。我们建议创建至少包含 4 个 vCPU 的节点。
获取您集群的 kubeconfig。以下命令将自动更新
~/.kube/config
,为 EKS 集群添加新的 kubecontext。$ aws eks update-kubeconfig --name <cluster-name> --region <region> # Example: # aws eks update-kubeconfig --name testcluster --region us-west-2
[如果使用 GPU] EKS 集群已预配置 Nvidia 驱动程序。但是,您需要用 GPU 类型标记节点。使用 SkyPilot 节点标记工具来完成此操作
python -m sky.utils.kubernetes.gpu_labeler
这将在每个节点上创建一个作业,用于从 nvidia-smi 读取 GPU 类型并为节点分配一个
skypilot.co/accelerator
标签。您可以通过运行...来检查这些作业的状态kubectl get jobs -n kube-system
通过运行
sky check
来验证您的 kubernetes 集群是否已正确设置为 SkyPilot 使用$ sky check
[如果使用 GPU] 使用
sky show-gpus --cloud k8s
检查 kubernetes 集群中的可用 GPU$ sky show-gpus --cloud k8s GPU REQUESTABLE_QTY_PER_NODE UTILIZATION A100 1, 2 2 of 2 free Kubernetes per node GPU availability NODE GPU UTILIZATION my-cluster-0 A100 2 of 2 free
在本地集群上部署#
如果您拥有本地集群的 IP 地址列表和 SSH 凭据,您可以按照我们的 使用现有机器 指南在您的本地集群上设置 SkyPilot。
或者,您也可以使用现成的工具在本地集群上部署 Kubernetes,例如 kubeadm,k3s 或 Rancher。请按照它们各自的指南来部署您的 Kubernetes 集群。
特定 Kubernetes 发行版的注意事项#
一些 Kubernetes 发行版需要额外步骤来设置 GPU 支持。
Rancher Kubernetes Engine 2 (RKE2)#
通过 helm 在 RKE2 上安装 Nvidia GPU operator 需要额外参数来将 nvidia
设置为 containerd 的默认运行时。
$ helm install gpu-operator -n gpu-operator --create-namespace \
nvidia/gpu-operator $HELM_OPTIONS \
--set 'toolkit.env[0].name=CONTAINERD_CONFIG' \
--set 'toolkit.env[0].value=/var/lib/rancher/rke2/agent/etc/containerd/config.toml.tmpl' \
--set 'toolkit.env[1].name=CONTAINERD_SOCKET' \
--set 'toolkit.env[1].value=/run/k3s/containerd/containerd.sock' \
--set 'toolkit.env[2].name=CONTAINERD_RUNTIME_CLASS' \
--set 'toolkit.env[2].value=nvidia' \
--set 'toolkit.env[3].name=CONTAINERD_SET_AS_DEFAULT' \
--set-string 'toolkit.env[3].value=true'
请参考关于 使用 Helm 在 RKE2 上安装 Nvidia GPU Operator 的说明获取详细信息。
K3s#
在 K3s 上安装 Nvidia GPU operator 类似于 来自 Nvidia 的 RKE2 说明,但需要将 CONTAINERD_CONFIG
变量更改为 /var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl
。以下是在 K3s 上安装 Nvidia GPU operator 的示例命令
$ helm install gpu-operator -n gpu-operator --create-namespace \
nvidia/gpu-operator $HELM_OPTIONS \
--set 'toolkit.env[0].name=CONTAINERD_CONFIG' \
--set 'toolkit.env[0].value=/var/lib/rancher/k3s/agent/etc/containerd/config.toml' \
--set 'toolkit.env[1].name=CONTAINERD_SOCKET' \
--set 'toolkit.env[1].value=/run/k3s/containerd/containerd.sock' \
--set 'toolkit.env[2].name=CONTAINERD_RUNTIME_CLASS' \
--set 'toolkit.env[2].value=nvidia'
通过运行 kubectl get pods -n gpu-operator
来检查 GPU operator 安装状态。安装需要几分钟,安装过程中可能会出现一些 CrashLoopBackOff 错误。
提示
如果您的 gpu-operator 安装一直停留在 CrashLoopBackOff 状态,您可能需要为 ldconfig
二进制文件创建符号链接,以解决 已知问题 的 nvidia-docker 运行时问题。在您的节点上运行以下命令
$ ln -s /sbin/ldconfig /sbin/ldconfig.real
安装 GPU operator 后,创建 K3s 所需的 nvidia RuntimeClass。SkyPilot 将自动使用此运行时类来调度 GPU Pod。
$ kubectl apply -f - <<EOF
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
name: nvidia
handler: nvidia
EOF
在云虚拟机上部署#
您还可以启动按需云虚拟机并在其上部署 Kubernetes。
我们提供脚本来处理虚拟机的配置、Kubernetes 的安装、GPU 支持的设置以及本地 kubeconfig 的配置。请参考我们的 在虚拟机上部署 Kubernetes 指南 获取更多详细信息。