配置来源与覆盖#
SkyPilot 允许您通过多种来源设置配置,从而提供了管理配置的灵活性。
它还实现了一种覆盖优先级机制,用于在分层配置时合并来自不同来源的配置。
例如,您可以有一个项目配置用于存储项目中所有任务的默认值,一个应用于所有项目的全局用户配置,以及针对特定任务的 Task YAML 覆盖。
配置来源#
配置类型 |
配置位置 |
描述 |
---|---|---|
API 服务器上的 |
适用于对 SkyPilot API 服务器发出的所有请求。 |
|
|
适用于所有 SkyPilot 调用。 |
|
|
适用于当前目录中的所有 SkyPilot 调用。 |
|
SkyPilot YAML 中的 |
适用于特定的 SkyPilot 任务。 |
|
使用 |
覆盖特定命令的配置。 |
所有配置都使用配置语法。任何新的配置更改都不会影响现有集群。
您可以叠加来自多个来源的配置。当指定多个来源时,SkyPilot 会合并它们。
提示
如果您是 SkyPilot API 服务器的管理员,您可以通过执行管理员策略来禁用覆盖或仅允许覆盖特定字段。
服务器配置#
如果您使用的是远程SkyPilot API 服务器,它会在 API 服务器实例/容器中查找 ~/.sky/config.yaml
以找到服务器配置。
如果您使用的是本地 API 服务器,您可以使用用户配置来设置全局配置。
用户配置#
SkyPilot 客户端会在 ~/.sky/config.yaml
中查找用户配置。
项目配置#
SkyPilot 客户端会在 $pwd/.sky.yaml
中查找当前项目配置。
要指定不同的文件,请将 SKYPILOT_PROJECT_CONFIG
环境变量设置为所需路径。
SkyPilot YAML#
您可以在 SkyPilot YAML 文件中的 config 字段中指定内联配置选项。
SkyPilot YAML 内联配置支持以下字段
示例
# In your SkyPilot YAML
config:
docker:
run_options: ...
kubernetes:
pod_config: ...
provision_timeout: ...
gcp:
managed_instance_group: ...
nvidia_gpus:
disable_ecc: ...
CLI 标志#
您可以使用 --config
标志将配置参数传递给 CLI。
--config
标志可以是配置 YAML 文件的路径,也可以是键值对的点列表。如果传入的是配置文件,则只能提供一个 --config
标志。
示例
# pass a config file
sky launch --config my_config.yaml ...
# pass individual config options
sky launch --config 'kubernetes.provision_timeout=600' --config 'kubernetes.pod_config.spec.priorityClassName=high-priority' ...
sky launch --config 'kubernetes.custom_metadata.annotations.myannotation1=myvalue1' --config 'kubernetes.custom_metadata.annotations.myannotation2=myvalue2' ...
配置覆盖#
如果在多个配置来源中指定了相同的配置字段,则根据以下优先级顺序进行配置覆盖
CLI 标志 (最高优先级)
SkyPilot YAML
项目配置
用户配置
服务器配置 (最低优先级)
合并规则
列表会被优先级更高的配置来源覆盖。
例外:
kubernetes.pod_config
中的列表会附加到现有列表中。
字典会被合并,其中单个键会被优先级更高的配置来源覆盖。
覆盖示例#
如果以下配置在用户配置文件中
kubernetes:
allowed_contexts: [context1, context2]
provision_timeout: 600
aws:
labels:
map-migrated: my-value
Owner: user-unique-name
并且以下配置在项目配置文件中
# project config overrides user config
kubernetes:
allowed_contexts: [context3, context4]
provision_timeout: 300
aws:
labels:
Owner: project-unique-name
合并后的配置为
kubernetes:
# lists are overridden by config sources with higher priority
allowed_contexts: [context3, context4]
provision_timeout: 300
aws:
# dicts are merged, with individual keys overridden by
# config sources with higher priority
labels:
map-migrated: my-value
Owner: project-unique-name