应对突发流量,如何快速为自建 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 注册集群云上弹性架构如下图所示:



通过 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



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

image.png

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

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



在 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 更多产品详情

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
弹性计算 人工智能 资源调度
DeepSeek大解读系列公开课上新!阿里云专家主讲云上智能算力、Kubernetes容器服务、DeepSeek私有化部署
智猩猩「DeepSeek大解读」系列公开课第三期即将开讲,聚焦阿里云弹性计算助力大模型训练与部署。三位专家将分别讲解智能算力支撑、Kubernetes容器服务在AI场景的应用实践、以及DeepSeek一键部署和多渠道应用集成,分享云计算如何赋能大模型发展。欲观看直播,可关注【智猩猩GenAI视频号】预约。 (239字符)
|
弹性计算 调度 数据中心
阿里云 ACK One 注册集群云上弹性:扩展业务新利器
随着企业数字化转型深入,传统IDC数据中心因物理容量限制,难以实现动态扩容,缺乏弹性能力。阿里云ACK One注册集群凭借其高度灵活性和丰富资源选择,成为解决此问题的最佳方案。通过与阿里云资源的整合,ACK One不仅实现了计算资源的按需扩展,提高了资源利用率,还通过按需付费模式降低了成本,使企业能够更高效地应对业务增长和高峰需求。
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
本文介绍了云原生环境下Kubernetes集群的安全问题及攻击方法。首先概述了云环境下的新型攻击路径,如通过虚拟机攻击云管理平台、容器逃逸控制宿主机等。接着详细解释了Kubernetes集群架构,并列举了常见组件的默认端口及其安全隐患。文章通过具体案例演示了API Server 8080和6443端口未授权访问的攻击过程,以及Kubelet 10250端口未授权访问的利用方法,展示了如何通过这些漏洞实现权限提升和横向渗透。
1944 0
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
|
Kubernetes 应用服务中间件 nginx
k8s学习--Traffic Shifting 流量接入
k8s学习--Traffic Shifting 流量接入
234 1
|
Kubernetes 网络协议 数据可视化
kubernetes Tcp流量可视化
kubernetes Tcp流量可视化
302 4
|
弹性计算 运维 负载均衡
基于阿里云容器服务Kubernetes版(ACK)| 容器化管理云上应用
【8月更文挑战第3天】基于阿里云容器服务Kubernetes版(ACK)| 容器化管理云上应用
|
人工智能 运维 安全
阿里云容器服务ACK:高效管理云上应用的容器化解决方案
阿里云容器服务ACK(Alibaba Cloud Container Service for Kubernetes)为开发者提供了一套全面的容器化管理解决方案,旨在简化云上应用的部署、运维和管理。本文将深入探讨ACK的功能、优势及应用场景,为开发者展现容器化技术在云环境下的强大能力。
1221 0
|
Kubernetes 应用服务中间件 调度
云上应用管理问题之如何在Kubernetes集群中配置跨可用区的Pod调度
云上应用管理问题之如何在Kubernetes集群中配置跨可用区的Pod调度
|
存储 Kubernetes 安全
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
697 5

相关产品

  • 容器服务Kubernetes版