多 Kubernetes 集群#
SkyPilot 允许您通过一个单一的界面管理跨多个 Kubernetes 集群的开发 Pod、作业和服务。
您可能有多个 Kubernetes 集群用于不同的
用例:例如,生产集群和开发/测试集群。
区域或云:例如,美国和欧盟区域;或 AWS 和 Lambda 云。
加速器:例如,NVIDIA H100 集群和 Google TPU 集群。
配置:例如,用于单个节点的小型集群和用于多个节点的大型集群。
Kubernetes 版本:例如,要将集群从 Kubernetes 1.20 升级到 1.21,您可以创建一个新的 Kubernetes 集群以避免停机或意外错误。
配置#
步骤 1:设置凭据#
要使用多个 Kubernetes 集群,必须在本地的 ~/.kube/config
文件中将它们的凭据设置为单独的上下文(context)。
有关部署新集群和获取凭据的信息,请参阅部署指南。
例如,一个 ~/.kube/config
文件可能如下所示
apiVersion: v1
clusters:
- cluster:
certificate-authority-data:
...
server: https://xx.xx.xx.xx:45819
name: my-h100-cluster
- cluster:
certificate-authority-data:
...
server: https://yy.yy.yy.yy:45819
name: my-tpu-cluster
contexts:
- context:
cluster: my-h100-cluster
user: my-h100-cluster
name: my-h100-cluster
- context:
cluster: my-tpu-cluster
namespace: my-namespace
user: my-tpu-cluster
name: my-tpu-cluster
current-context: my-h100-cluster
...
在这个示例中,我们有两个 Kubernetes 集群:my-h100-cluster
和 my-tpu-cluster
,并且每个 Kubernetes 集群都有一个对应的上下文。
步骤 2:设置 SkyPilot 以访问多个 Kubernetes 集群#
与云不同,SkyPilot 默认不会通过不同的 Kubernetes 集群(区域)进行故障转移,因为每个 Kubernetes 集群可能有不同的用途。
默认情况下,SkyPilot 只使用 kubeconfig 中 current-context
设置的上下文。您可以通过运行 kubectl config current-context
来获取当前上下文。
要允许 SkyPilot 访问多个 Kubernetes 集群,您可以在 SkyPilot 全局配置文件 ~/.sky/config.yaml
中设置 kubernetes.allowed_contexts
。
kubernetes:
allowed_contexts:
- my-h100-cluster
- my-tpu-cluster
要检查已启用的 Kubernetes 集群,您可以运行 sky check k8s
。
$ sky check k8s
🎉 Enabled clouds 🎉
✔ Kubernetes
Allowed contexts:
├── my-h100-cluster
└── my-tpu-cluster
要检查 Kubernetes 集群中可用的 GPU,您可以运行 sky show-gpus --cloud k8s
。
$ sky show-gpus --cloud k8s
Kubernetes GPUs
GPU UTILIZATION
H100 16 of 16 free
A100 8 of 8 free
Context: my-h100-cluster
GPU REQUESTABLE_QTY_PER_NODE UTILIZATION
H100 1, 2, 4, 8 16 of 16 free
Context: kind-skypilot
GPU REQUESTABLE_QTY_PER_NODE UTILIZATION
A100 1, 2, 4, 8 8 of 8 free
Kubernetes per-node GPU availability
CONTEXT NODE GPU UTILIZATION
my-h100-cluster gke-skypilotalpha-default-pool-ff931856-6uvd - 0 of 0 free
my-h100-cluster gke-skypilotalpha-largecpu-05dae726-1usy H100 8 of 8 free
my-h100-cluster gke-skypilotalpha-largecpu-05dae726-4rxa H100 8 of 8 free
kind-skypilot skypilot-control-plane A100 8 of 8 free
跨多个 Kubernetes 集群的故障转移#
设置 kubernetes.allowed_contexts
配置后,SkyPilot 将按照该字段中指定的顺序在 Kubernetes 集群之间进行故障转移。
$ sky launch --gpus H100 --cloud k8s echo 'Hello World'
Considered resources (1 node):
------------------------------------------------------------------------------------------------------------
CLOUD INSTANCE vCPUs Mem(GB) ACCELERATORS REGION/ZONE COST ($) CHOSEN
------------------------------------------------------------------------------------------------------------
Kubernetes 2CPU--8GB--1H100 2 8 H100:1 my-h100-cluster-gke 0.00 ✔
Kubernetes 2CPU--8GB--1H100 2 8 H100:1 my-h100-cluster-eks 0.00
------------------------------------------------------------------------------------------------------------
在特定的 Kubernetes 集群中启动#
SkyPilot 使用 region
字段来表示 Kubernetes 上下文。您可以通过指定该集群的上下文名称作为 --region
来指向一个 Kubernetes 集群。
$ # Launch in a specific Kubernetes cluster.
$ sky launch --cloud k8s --region my-tpu-cluster echo 'Hello World'
$ # Check the GPUs available in a Kubernetes cluster
$ sky show-gpus --cloud k8s --region my-h100-cluster ✭ ✱
Kubernetes GPUs
Context: my-h100-cluster
GPU REQUESTABLE_QTY_PER_NODE UTILIZATION
H100 1, 2, 4, 8 16 of 16 free
Kubernetes per-node GPU availability
CONTEXT NODE GPU UTILIZATION
my-h100-cluster gke-skypilotalpha-default-pool-ff931856-6uvd - 0 of 0 free
my-h100-cluster gke-skypilotalpha-largecpu-05dae726-1usy H100 8 of 8 free
my-h100-cluster gke-skypilotalpha-largecpu-05dae726-4rxa H100 8 of 8 free
启动 SkyPilot 集群或任务时,您也可以通过 --region
指定上下文名称,以在该集群中启动集群或任务。
动态更新要使用的集群#
您可以配置 SkyPilot 动态获取 Kubernetes 集群配置并强制限制使用哪些集群。更多信息请参阅动态更新要使用的 Kubernetes 上下文。