Spot Ocean 上的 kOps 入门 ¶
Ocean 是由 Spot 提供的,它简化了 Kubernetes 的基础设施管理。借助强大的、容器驱动的基础设施自动扩展和智能容器资源需求调整,操作人员可以真正地“设置并忘记”底层集群。
Ocean 与你现有的实例组无缝集成,作为 AWS 自动扩展组的直接替换,并允许你简化和优化整个工作流程,从最初创建集群到持续管理和优化集群。
功能 ¶
-
简化集群管理 — Ocean 的虚拟节点组使你能够轻松地在单个集群中运行不同的基础设施,这些基础设施可以跨越多个 AWS VPC 可用区和子网以实现高可用性。
-
容器驱动的自动扩展和垂直调整 — 自动检测你的容器基础设施需求,以便始终提供适当的实例大小或类型。衡量 Pod 的实时 CPU/内存使用情况,以进行持续的资源优化。
-
云原生回溯 — 对你的集群的成本细分(计算和存储)进行细粒度查看,以查看每个集群资源,例如命名空间、部署、守护进程集、作业和 Pod。
-
优化的定价和利用率 — Ocean 不仅智能地利用 Spot 实例和预留容量来降低成本,而且还通过容器驱动的自动扩展和高级装箱消除未充分利用的实例。
先决条件 ¶
确保你已安装 kOps 和 安装 kubectl。
设置你的环境 ¶
Spot ¶
在 这里 生成你的凭据。如果你不是 Spot Ocean 用户,请在 这里 免费注册。有关更多信息,请查看我们的 Spot API 指南,该指南在 Spot 帮助中心 网站上提供。
要使用环境变量,请运行
export SPOTINST_TOKEN=<spotinst_token>
export SPOTINST_ACCOUNT=<spotinst_account>
要使用凭据文件,请运行 spotctl configure 命令
spotctl configure
? Enter your access token [? for help] **********************************
? Select your default account [Use arrows to move, ? for more help]
> act-01234567 (prod)
act-0abcdefg (dev)
或者,手动创建类似这样的 INI 格式文件
[default]
token = <spotinst_token>
account = <spotinst_account>
并将它放在
- Unix/Linux/macOS
~/.spotinst/credentials
- Windows
%UserProfile%\.spotinst\credentials
AWS ¶
确保设置 专用 IAM 用户、DNS 记录 和 集群状态存储。有关更多详细信息,请参阅 设置你的环境。
功能标志 ¶
标志 | 描述 |
---|---|
+Spotinst |
启用 Spot 集成的使用。 |
+SpotinstOcean |
启用 Spot Ocean 集成的使用。 |
+SpotinstOceanTemplate - 启用 Spot Ocean 对象作为虚拟节点组模板的使用。 |
|
+SpotinstHybrid |
在混合和完整实例组实现之间切换。允许你通过继续使用 AWS 自动扩展组中的实例组来逐步集成 Spot Ocean,除了使用预定义的 元数据标签 标记的特定实例组。 |
-SpotinstController |
切换 Spot 控制器附加组件的安装关闭。请注意,功能标志必须以减号 (- ) 作为前缀才能将其值设置为 false ,这会导致控制器被禁用。 |
创建集群 ¶
你可以将 Ocean 实例组添加到新集群或现有集群。若要使用 Ocean 实例组创建新集群,请运行
# configure the feature flags
export KOPS_FEATURE_FLAGS="Spotinst,SpotinstOcean,SpotinstOceanTemplate"
# create the cluster
kops create cluster --zones=us-west-2a example
注意
可以使用 Ocean 管理的和未管理的实例组来创建集群。
# configure the feature flags
export KOPS_FEATURE_FLAGS="Spotinst,SpotinstOcean,SpotinstHybrid"
# create the instance groups
kops create -f instancegroups.yaml
# instancegroups.yaml
# A cluster with both Ocean-managed and unmanaged instance groups.
---
# Use Ocean in hybrid mode.
apiVersion: kops.k8s.io/v1alpha2
kind: InstanceGroup
metadata:
labels:
kops.k8s.io/cluster: "example"
spotinst.io/hybrid: "true"
...
---
# Use AWS Auto Scaling group.
apiVersion: kops.k8s.io/v1alpha2
kind: InstanceGroup
metadata:
labels:
kops.k8s.io/cluster: "example"
...
创建实例组 ¶
若要创建新实例组,请运行
# configure the feature flags
export KOPS_FEATURE_FLAGS="Spotinst,SpotinstOcean,SpotinstOceanTemplate"
# create the instance group
kops create instancegroup --role=node --name=example
若要创建新实例组并对配置进行更多控制,可以使用配置文件。
# instancegroup.yaml
# An instance group with Ocean configuration.
---
apiVersion: kops.k8s.io/v1alpha2
kind: InstanceGroup
metadata:
labels:
kops.k8s.io/cluster: "example"
spotinst.io/spot-percentage: "90"
spec:
image: 099720109477/ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-20221206
instanceMetadata:
httpPutResponseHopLimit: 1
httpTokens: required
machineType: m5.large
#define the max and min numbers of instances in the group
maxSize: 3
minSize: 1
role: Node
subnets:
- us-west-2b
实例组元数据标签 ¶
标签 | 描述 | 默认值 |
---|---|---|
spotinst.io/spot-percentage |
指定应从目标容量中启动的 Spot 实例的百分比。 | 100 |
spotinst.io/utilize-reserved-instances |
指定是否应利用预留实例。 | true |
spotinst.io/utilize-commitments |
指定是否应利用预留实例承诺。 | none |
spotinst.io/fallback-to-ondemand |
指定是否应启用回退到按需实例。 | true |
spotinst.io/draining-timeout |
指定节点在终止期间标记后,在运行中的 Pod 保持活动状态的时间段(以秒为单位)。 | none |
spotinst.io/grace-period |
指定 Ocean 应在应用实例运行状况检查之前等待的时间段(以秒为单位)。 | none |
spotinst.io/ocean-default-launchspec |
指定是否使用 InstanceGroup 的规范作为 Ocean 集群的默认启动规范。 | none |
spotinst.io/ocean-instance-types-whitelist |
指定是否将特定实例类型列入白名单。 | none |
spotinst.io/ocean-instance-types-blacklist |
指定是否将特定实例类型列入黑名单。 | none |
spotinst.io/ocean-instance-types |
指定 Ocean 启动规范应使用的实例类型列表。 | none |
spotinst.io/autoscaler-disabled |
指定是否应禁用自动扩展器。 | false |
spotinst.io/autoscaler-default-node-labels |
指定是否应为自动扩展器设置默认节点标签。 | false |
spotinst.io/autoscaler-auto-config |
指定是否应自动配置和优化备用资源。 | true |
spotinst.io/autoscaler-auto-headroom-percentage |
指定自动备用百分比(范围在 [0, 200] 之内的数字),它控制备用百分比。 | none |
spotinst.io/autoscaler-headroom-cpu-per-unit |
指定要为备用分配的 CPU 数量。CPU 以毫核表示,其中 1000 毫核 = 1 个 vCPU。 | none |
spotinst.io/autoscaler-headroom-gpu-per-unit |
指定要为备用分配的 GPU 数量。 | none |
spotinst.io/autoscaler-headroom-mem-per-unit |
指定要为备用分配的内存量(MB)。 | none |
spotinst.io/autoscaler-headroom-num-of-units |
指定要保留为备用的单元数量,每个单元都有定义的 CPU 和内存。 | none |
spotinst.io/autoscaler-cooldown |
指定 Ocean 应在扩展操作之间等待的时间段(以秒为单位)。 | 300 |
spotinst.io/autoscaler-scale-down-max-percentage |
指定最大缩减百分比。 | none |
spotinst.io/autoscaler-scale-down-evaluation-periods |
指定在执行缩减操作之前应累积的评估周期数。 | 5 |
spotinst.io/autoscaler-resource-limits-max-vcpu |
指定可以分配给集群的虚拟 CPU 的最大数量。 | none |
spotinst.io/autoscaler-resource-limits-max-memory |
指定可以分配给集群的总物理内存(以 GiB 为单位)的最大量。 | none |
spotinst.io/restrict-scale-down |
指定是否应限制缩减活动。 | none |
spotinst.io/other-architecture-images |
指定其他架构图像。 | none |
集群元数据标签 ¶
# cluster.yaml
# A Cluster with Ocean configuration.
---
apiVersion: kops.k8s.io/v1alpha2
kind: Cluster
metadata:
name: "example"
labels:
spotinst.io/strategy-cluster-spread-nodes-by: "count"
spotinst.io/strategy-cluster-orientation-availability-vs-cost: "balanced"
spotinst.io/resource-tag-specification-volumes: "true"
...
|| 标签 | 描述 | 默认值 | |---|----------------------------------------------------------------------------------------|---| | spotinst.io/strategy-cluster-spread-nodes-by
| 指定 Ocean 如何根据此值 [vcpu,count] 在不同市场上分布节点。 | count
| | spotinst.io/strategy-cluster-orientation-availability-vs-cost
| 指定 Ocean 启动节点时采用的方法 [cost,balanced,cheapest]。 | balanced
| | spotinst.io/resource-tag-specification-volumes
| 指定卷资源是否使用虚拟节点组标签或 Ocean 标签进行标记。 | false
|
文档 ¶
如果您是 Spot 的新手,想要开始使用,请查看我们的 入门 指南,该指南可在 Spot 文档 网站上找到。
获取帮助 ¶
请使用以下社区资源获取帮助
- 加入我们 Spot 社区在 Slack 上。
- 在 GitHub 上打开一个 问题。
- 在 Stack Overflow 上提问并标记为
spot-ocean
。