应对突发流量,如何快速为自建 K8s 添加云上弹性能力

这篇具有很好参考价值的文章主要介绍了应对突发流量,如何快速为自建 K8s 添加云上弹性能力。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:庄宇

以 Kubernetes 为代表的容器技术带来的是一种应用交付模式的变革,其正迅速成为全世界数据中心的统一 API。

为了保证业务持续稳定、用户访问不中断,高可用、高弹性等能力是应用架构设计不变的追求,多集群架构天然具备这样的能力。而只有在 Kubernetes 这层统一且标准的 API 之下,多集群和混合云的能力才开始真正体现价值。

在前一篇文章《选对方法,K8s 多集群管理没那么难》中,我们着重介绍了阿里云分布式云容器平台 ACK One 注册集群的应用场景、架构实现、安全加固,以及在他云 K8s 集群和 IDC 自建 K8s 集群中使用阿里云容器服务 ACK 的强大可观测性能力,实现云上云下 K8s 集群的统一运维管理。

本文中,我们重点介绍 ACK One 注册集群的另一个重要使用场景–云上弹性。

云上弹性能力典型应用场景和优势

ACK One 注册集群的云上弹性能力针对的场景:

1. 业务快速增长: 在本地 IDC 中部署的 K8s 集群,往往受到 IDC 计算资源的限制无法及时扩容,计算资源的采购部署上线往往周期较长,无法承担业务流量的快速增长。

2. 业务周期性增长或突发增长: 本地 IDC 中的计算资源数量相对固定,无法应对业务周期性高峰,或者突发业务流量的增长。

解决以上场景的根本是计算资源弹性能力,可以跟随业务流量的变化,弹性扩大或者缩小计算资源,满足业务需求的同时也保证了成本的平衡。

ACK One 注册集群云上弹性架构如下图所示:

应对突发流量,如何快速为自建 K8s 添加云上弹性能力,kubernetes,容器,云原生

通过 ACK One 注册集群,本地 IDC 中的 K8s 集群可以弹性扩容阿里云 ECS 节点池,利用阿里云容器服务的极致弹性能力,扩容应对业务流量增长,缩容实现成本节约。尤其针对 AI 场景,通过 ACK One 注册集群,可以将云上 GPU 机器接入 IDC 中的 K8s 集群。

为本地 IDC K8s 集群添加阿里云 GPU 算力的最佳实践

1. 创建 ACK One 注册集群

访问 ACK One 控制台注册集群用页面,我们已经创建了注册集群 “ACKOneRegisterCluster1” 并接入了本地 IDC 中的 K8s 集群。参见:《选对方法,K8s 多集群管理没那么难》

ACK One 控制台注册集群用页面:

https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fcs.console.aliyun.com%2Fone

应对突发流量,如何快速为自建 K8s 添加云上弹性能力,kubernetes,容器,云原生

接入后,可以通过 ACK One 控制台查看本地 IDC K8s 集群,目前只有一个 master 节点。

应对突发流量,如何快速为自建 K8s 添加云上弹性能力,kubernetes,容器,云原生

2. 创建 GPU 节点池并手动扩容创建 1 个 GPU 节点

在注册集群中创建节点池 GPU-P100,将云上 GPU 机器加入 IDC 中 K8s 集群。

应对突发流量,如何快速为自建 K8s 添加云上弹性能力,kubernetes,容器,云原生

在 IDC K8s 集群中执行 kubectl 查看节点信息。

kubectl get node
NAME                           STATUS   ROLES    AGE     VERSION
cn-zhangjiakou.172.16.217.xx   Ready    <none>   5m35s   v1.20.9    // 云上GPU机器
iz8vb1xtnuu0ne6b58hvx0z        Ready    master   20h     v1.20.9    // IDC机器

k describe node cn-zhangjiakou.172.16.217.xx
Name:               cn-zhangjiakou.172.16.217.xx
Roles:              <none>
Labels:             aliyun.accelerator/nvidia_count=1             //nvidia labels
                    aliyun.accelerator/nvidia_mem=16280MiB        //nvidia labels 
                    aliyun.accelerator/nvidia_name=Tesla-P100-PCIE-16GB  //nvidia labels
                    beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=cn-zhangjiakou.172.16.217.xx
                    kubernetes.io/os=linux
Capacity:
  cpu:                4
  ephemeral-storage:  123722704Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             30568556Ki
  nvidia.com/gpu:     1              //nvidia gpu
  pods:               110
Allocatable:
  cpu:                4
  ephemeral-storage:  114022843818
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             30466156Ki
  nvidia.com/gpu:     1              //nvidia gpu
  pods:               110
System Info:
  OS Image:                   Alibaba Cloud Linux (Aliyun Linux) 2.1903 LTS (Hunting Beagle)
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  docker://19.3.13
  Kubelet Version:            v1.20.9
  Kube-Proxy Version:         v1.20.9
......

3. 运行 GPU 任务测试

在 IDC 中 K8s 集群中提交 GPU 测试任务,运行结果成功。

> cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
 name: gpu-pod
spec:
  restartPolicy: Never
  containers:
    - name: cuda-container
      image: acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/cuda10.2-vectoradd
      resources:
        limits:
          nvidia.com/gpu: 1 # requesting 1 GPU
EOF

> kubectl logs gpu-pod
[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done

多级弹性调度策略,自定义弹性资源优先级

自定义弹性资源优先级调度是阿里云提供的弹性调度策略。您可以在应用发布或扩容过程中,自定义资源策略(ResourcePolicy),设置应用实例 Pod 被调度到不同类型节点资源的顺序。同时在缩容过程中按照原调度顺序逆序缩容。

通过上面的演示,我们可以通过 ACK One 注册集群,使用云上 ECS 资源创建节点池,并添加到 IDC 集群中。您可以为节点池或者节点打标(label),并通过设置 Pod 的节点亲 “affinity” 或者 “nodeSelector" 的方式,为 Pod 选择是在 IDC 本地节点中运行,还是在云上 ECS 节点用运行。这种方式需要修改应用 pod 的配置,如果生产系统有较多的应用需要处理,则需要编写调度规则,适合自定义调度的场景,例如:特定 CUDA 版本的 GPU 训练任务调度到云上特定的 GPU ECS 实例上。

为了简化 IDC 中 K8s 集群使用云上 ECS 资源,ACK One 注册集群提供多级弹性调度功能,通过安装 ack-co-scheduler 组件,您可以定义 ResourcePolicy CR 对象,使用多级弹性调度功能。

ResourcePolicy CR 是命名空间资源,重要参数解析:

  • selector:声明 ResourcePolicy 作用于同一命名空间下 label 上打了 key1=value1 的 Pod。
  • strategy:调度策略选择,目前只支持 prefer。
  • units:用户自定义的调度单元。应用扩容时,将按照 units 下资源的顺序选择资源运行;应用缩容时,将按照逆序进行缩容。
  • resource:弹性资源的类型,目前支持 idc、ecs 和 eci 三种类型。
  • nodeSelector:用 node 的 label 标识该调度单元下的节点,只对 ecs 资源生效。
  • max:在该组资源最多部署多少个实例。

ResourcePolicy 支持以下场景:

场景 1:优先使用 IDC 中集群资源,再使用云上 ECS 资源

apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
 name: cost-balance-policy
spec:
  selector:
    app: nginx           // 选择应用Pod
  strategy: prefer
  units:
  - resource: idc        //优先使用idc指定使用IDC中节点资源
  - resource: ecs        //当idc节点资源不足时,使用云上ECS,可以通过nodeSelector选择节点
    nodeSelector:
      alibabacloud.com/nodepool-id=np7b30xxx

场景 2:混合使用 IDC 资源和云上 ECS 资源

apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
 name: load-balance-policy
spec:
  selector:
    app: nginx
  strategy: prefer
  units:
  - resource: idc
    max: 2             //在idc节点中最多启动2个应用实例
  - resource: ecs
    nodeSelector:
      alibabacloud.com/nodepool-id=np7b30xxx
    max: 4             //在ecs节点池中最多启动4个应用实例

总结

演示中,我们将阿里云 GPU P100 机器添加到 IDC 中的 K8s 集群,扩展了 IDC 的 GPU 算力。

通过 ACK One 注册集群:

  1. 您可以选择阿里云上的各种 ECS 实例类型和规格,包括:X86,ARM,GPU 等。

  2. 您可以手动扩容和缩容 ECS 实例数量。

  3. 您可以配置 ECS 实例数量的自动弹性伸缩。

  4. 您可以使用多级弹性调度,优先使用 IDC 中资源,IDC 资源不足的情况下,自动扩容云上 ECS 节点池处理突发业务流量。

后续我们将陆续推出 ACK One 注册集群的系列文章,包括:Serverless 方式扩容 IDC 中 K8s 集群,容灾备份,安全管理等。如果您希望了解并交流 ACK One 的更多能力,欢迎加入 ACK One 客户钉钉交流群讨论(群号):35688562。

参考文档:

[1] 注册集群概述

https://help.aliyun.com/document_detail/155208.html

[2] 创建 ECS 节点池

https://help.aliyun.com/document_detail/208054.html

[3] 配置 ECS 节点自动弹性伸缩

https://help.aliyun.com/document_detail/208055.html

[4] 多级弹性调度

https://help.aliyun.com/document_detail/446694.html

点击此处,查看 ACK One 更多产品详情文章来源地址https://www.toymoban.com/news/detail-590613.html

到了这里,关于应对突发流量,如何快速为自建 K8s 添加云上弹性能力的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于grpc-java开发的普通工程在k8s内部署多实例,如何实现客户端流量的负载均衡

    本文主要讨论通过grpc-java开发的普通的java grpc工程,以多实例的方式部署在容器编排平台kubernetes(以下简称k8s)上,如何能够实现让同样部署在k8s 集群内的客户端请求流量均衡的分发到多个grpc应用部署实例上去。 grpc服务端程序在k8s内部署的多个实例通过headless service暴露服

    2024年01月17日
    浏览(51)
  • k8s通过sa和自建角色实现权限精细化分配

    角色role-sa 具有的权限仅仅是namespace planck内的所有pod的查看权限,以及deployment的查看权限,无权删除修改这些资源 为什么要授权是因为sa内的secrets里的token只有在dashboard内使用,而上面的角色和角色绑定都是dev这个namespace内的,这样绑定后,拿到token才可以登录到dashboard的首

    2024年02月13日
    浏览(43)
  • 从业务出发,K8S环境自建和非自建整体架构设计比较

    新钛云服已累计为您分享 751 篇技术干货 随着数字化转型的大潮到来,越来越多的企业开始上云,同时也纷纷加入到微服务和K8S队伍中。但在K8S整体环境究竟应该用自建的还是非自建?以及他们需要用到的服务,究竟应该自建还是直接用PAAS服务?这些问题往往会困扰住大家。

    2024年02月09日
    浏览(41)
  • K8S之istio流量控制管理(十七)

    一,istio介绍 1、istio架构   结合上图我们来理解Istio的各组件的功能及相互之间的协作方式。 1. 自动注入:在创建应用程序时自动注入 Sidecar代理Envoy程序。在 Kubernetes中创建 Pod时,Kube-apiserver调用控制面组件的 Sidecar-Injector服务,自动修改应用程序的描述信息并注入Sidecar。在

    2024年02月09日
    浏览(45)
  • 云原生之深入解析如何使用Vagrant Kubespray快速初始化K8S集群

    Vagrant 是一款用于构建及配置虚拟开发环境的软件,采用 Ruby 编写,主要以命令行方式运行。其主要使用 Oracle VirtualBox 提供虚拟化系统,与 Chef,Salt,Puppet 等环境配置管理软件搭配使用,可以实现快速搭建虚拟开发环境。 Kubespray 是利用 Ansible 工具,通过 SSH 协议批量让指定

    2024年02月15日
    浏览(48)
  • 【Kubernetes】使用Kubeshark监控K8s集群的API流量

            Kubeshark 是一款针对 Kubernetes 的 API 流量分析器,提供对 Kubernetes 内部网络的实时协议级可见性,捕获和监控进出容器、Pod、节点和集群的所有流量和有效负载。         Kubeshark 的安装和运行很简单,安装之前,我们需要先联网下载一个二进制文件(当前最新版:

    2024年02月11日
    浏览(62)
  • k8s简介及虚拟机快速搭建k8s集群

    1.1、部署方式的变迁 传统部署时代: 在物理服务器上运行应用程序 无法为应用程序定义资源边界 导致资源分配问题 例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况, 结果可能导致其他应用程序的性能下降。 一种解决方案是

    2024年02月12日
    浏览(78)
  • 【devops】非必要 不要自建harbor 能力不足 真的被坑的服了 阿里云ACR不香吗?k8s接入ACR

    首先你需要让出来这2个端口,然后如果你要https的话,你还要考虑443怎么配置上不同证书(目前我是不清楚这里可不可以) 而且能让这里生效的方式,还需要再2处进行修改(自行查找) 我在阿里云一次买了5台服务器 选择其中一个创建了harbor 然后再其他4台中,有三台是可以

    2023年04月09日
    浏览(45)
  • 快速安装k8s

    官方文章资源地址 https://rke.docs.rancher.com/installation rke工具下载地址(arm,amd,windows都有) https://github.com/rancher/rke/releases x86的用amd64下载rke工具 https://github.com/rancher/rke/releases/download/v1.4.8/rke_linux-amd64 1.安装docker(来自开源社区goodrain.com的安装脚本) 或者安装docker 2.禁用swap,关掉se

    2024年02月09日
    浏览(33)
  • k8s快速入门

    官网:https://kubernetes.io/zh-cn/docs/home/ 1.1 Kubernetes (K8S) 是什么 它是一个为 容器化 应用提供集群部署和管理的开源工具,由 Google 开发。K8S 是负责自动化运维管理多个跨机器 Docker 程序的集群 1.2 核心特性 服务发现与负载均衡:无需修改你的应用程序即可使用陌生的服务发现机

    2023年04月27日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包