跳至内容

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 文档 网站上找到。

获取帮助

请使用以下社区资源获取帮助