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

2023年 7月 19日 71.5k 0

作者:庄宇

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

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

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

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

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

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

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

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

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

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

image

通过 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 控制台注册集群用页面:

account.aliyun.com/login/login…

image

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

image.png

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

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

image

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

kubectl get node
NAME                           STATUS   ROLES    AGE     VERSION
cn-zhangjiakou.172.16.217.xx   Ready       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:              
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

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论