视频的网站自助建站,天津网站建站推广,用linux做网站,wordpress添加icon文件作者#xff1a;庄宇
以 Kubernetes 为代表的容器技术带来的是一种应用交付模式的变革#xff0c;其正迅速成为全世界数据中心的统一 API。
为了保证业务持续稳定、用户访问不中断#xff0c;高可用、高弹性等能力是应用架构设计不变的追求#xff0c;多集群架构天然具备…作者庄宇
以 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_callbackhttps%3A%2F%2Fcs.console.aliyun.com%2Fone 接入后可以通过 ACK One 控制台查看本地 IDC K8s 集群目前只有一个 master 节点。 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_count1 //nvidia labelsaliyun.accelerator/nvidia_mem16280MiB //nvidia labels aliyun.accelerator/nvidia_nameTesla-P100-PCIE-16GB //nvidia labelsbeta.kubernetes.io/archamd64beta.kubernetes.io/oslinuxkubernetes.io/archamd64kubernetes.io/hostnamecn-zhangjiakou.172.16.217.xxkubernetes.io/oslinux
Capacity:cpu: 4ephemeral-storage: 123722704Kihugepages-1Gi: 0hugepages-2Mi: 0memory: 30568556Kinvidia.com/gpu: 1 //nvidia gpupods: 110
Allocatable:cpu: 4ephemeral-storage: 114022843818hugepages-1Gi: 0hugepages-2Mi: 0memory: 30466156Kinvidia.com/gpu: 1 //nvidia gpupods: 110
System Info:OS Image: Alibaba Cloud Linux (Aliyun Linux) 2.1903 LTS (Hunting Beagle)Operating System: linuxArchitecture: amd64Container Runtime Version: docker://19.3.13Kubelet Version: v1.20.9Kube-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: Nevercontainers:- name: cuda-containerimage: acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/cuda10.2-vectoraddresources: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 上打了 key1value1 的 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 // 选择应用Podstrategy: preferunits:- resource: idc //优先使用idc指定使用IDC中节点资源- resource: ecs //当idc节点资源不足时使用云上ECS可以通过nodeSelector选择节点nodeSelector:alibabacloud.com/nodepool-idnp7b30xxx场景 2混合使用 IDC 资源和云上 ECS 资源
apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:name: load-balance-policy
spec:selector:app: nginxstrategy: preferunits:- resource: idcmax: 2 //在idc节点中最多启动2个应用实例- resource: ecsnodeSelector:alibabacloud.com/nodepool-idnp7b30xxxmax: 4 //在ecs节点池中最多启动4个应用实例总结
演示中我们将阿里云 GPU P100 机器添加到 IDC 中的 K8s 集群扩展了 IDC 的 GPU 算力。
通过 ACK One 注册集群 您可以选择阿里云上的各种 ECS 实例类型和规格包括X86ARMGPU 等。 您可以手动扩容和缩容 ECS 实例数量。 您可以配置 ECS 实例数量的自动弹性伸缩。 您可以使用多级弹性调度优先使用 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 更多产品详情