部署指南#
下面我们提供了在不同环境中设置新Kubernetes集群的简要指南,包括云上的托管服务。
在您的笔记本电脑上本地部署#
要在您的笔记本电脑上尝试在Kubernetes上运行SkyPilot,或在不需要任何云访问的情况下本地运行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的节点。
Example: create a GKE cluster with 2 nodes, each having 16 CPUs.
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] 对于版本高于1.30.1-gke.115600的GKE,NVIDIA驱动程序已预安装,无需额外设置。如果您使用的是较旧的GKE版本,可能需要 手动安装 NVIDIA驱动程序以支持GPU。您可以通过部署守护进程集来实现,具体取决于节点上的GPU和操作系统:
# 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 TOTAL_GPUS TOTAL_FREE_GPUS L4 1, 2, 4 8 6 A100 1, 2 4 2 Kubernetes per node GPU availability NODE_NAME GPU_NAME TOTAL_GPUS FREE_GPUS my-cluster-0 L4 4 4 my-cluster-1 L4 4 2 my-cluster-2 A100 2 2 my-cluster-3 A100 2 0
注意
目前不支持GKE自动驾驶集群。仅支持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 TOTAL_GPUS TOTAL_FREE_GPUS A100 1, 2 4 2 Kubernetes per node GPU availability NODE_NAME GPU_NAME TOTAL_GPUS FREE_GPUS my-cluster-0 A100 2 2
在本地集群上部署#
如果您有一份IP地址列表和您的本地集群的SSH凭证,您可以按照我们的 使用现有机器指南在您的本地集群上设置SkyPilot。
或者,您也可以使用现成的工具在本地集群上部署Kubernetes, 例如 kubeadm, k3s 或 Rancher。 请按照各自的指南部署您的Kubernetes集群。
特定Kubernetes发行版的注意事项#
一些Kubernetes发行版需要额外的步骤来设置GPU支持。
Rancher Kubernetes Engine 2 (RKE2)#
在RKE2上通过helm安装Nvidia GPU操作符需要额外的标志来将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'
K3s#
在K3s上安装Nvidia GPU操作符与Nvidia的RKE2说明类似,但需要将CONTAINERD_CONFIG变量更改为/var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl。以下是在K3s上安装Nvidia GPU操作符的示例命令:
$ 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操作符的安装状态。安装过程需要几分钟,并且在安装过程中可能会出现一些CrashLoopBackOff错误。
提示
如果你的gpu-operator安装一直卡在CrashLoopBackOff状态,你可能需要创建一个指向ldconfig二进制文件的符号链接,以解决nvidia-docker运行时的一个已知问题。在你的节点上运行以下命令:
$ ln -s /sbin/ldconfig /sbin/ldconfig.real
安装GPU操作符后,创建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指南。