容器服务kubernetes虚拟节点实践二:Job任务 + 虚拟节点

简介: 都说kuberntes集群的奔溃是从节点资源不够开始的,节点资源配置不足会导致pod无法及时运行,购买过多的节点又会导致资源的闲置浪费。虚拟节点就像是kubernetes集群的“魔法口袋”,让我们摆脱节点计算力不足的烦扰,也避免了节点的闲置浪费,满足“无限”计算力的想象,pod按需创建,轻松应对计算的波峰波谷。

都说kuberntes集群的奔溃是从节点资源不够开始的,节点资源配置不足会导致pod无法及时运行,购买过多的节点又会导致资源的闲置浪费。虚拟节点就像是kubernetes集群的“魔法口袋”,让我们摆脱节点计算力不足的烦扰,也避免了节点的闲置浪费,满足“无限”计算力的想象,pod按需创建,轻松应对计算的波峰波谷。

大规格Job任务的调度运行

对于很多kubernetes集群,通常同时支撑在线和离线多种负载,在线负载流量的波动性和离线计算任务的时间不确定性,导致在不同时刻负载的资源需求呈波峰波谷状,比如很多企业需要在周末、月中和月末进行大批量的数据计算,在特定的时间点需要大量的计算力,以应对突发的计算资源需求。

目前k8s通常的做法是通过autoscaler自动扩容节点(约2min启动一个新节点),直到pod被成功调度运行,当pod执行完成后会自动回收临时节点。这种扩容方式pod往往需要等待2min多时间才能被调度运行。

有没有可能无需创建新节点也可以快速运行这些Job任务呢?

image

通过虚拟节点的方式,我们可以用最小的运维成本(无需调整节点数量),来应对集群计算资源高峰压力。

虚拟节点就像是kubernetes集群的“魔法口袋”,让我们摆脱节点计算力不足的烦扰,也避免了节点的闲置浪费,满足“无限”计算力的需求,轻松应对波峰波谷的计算力波动。

示例:Job任务 + 虚拟节点

在前几篇的分享文章中,我们分别介绍了kubernetes虚拟节点的部署以及使用虚拟节点创建Ingress的示例。

这里我们将介绍虚拟节点的另一种常用典型场景:使用虚拟节点运行Job任务

示例环境为ACK Managed K8s托管集群,Master节点被托管(用户无需付费),2台Worker分别是4c8g规格,所以整个k8s集群的可用计算容量是8c16g。

假设我们需要运行一个Job离线任务做数据处理,Job的cpu/mem需求为16c32g,很明显Job无法在我们的k8s集群中运行,因为其资源需求已经超过k8s集群的8c16g计算容量。这里我们选择把这个Job任务调度到虚拟节点上,而不占用集群本身节点的计算资源。

下面我们使用一个简单的job作为示例。

kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
        resources:
          requests:
            cpu: 16
            memory: 32Gi
      restartPolicy: Never
  backoffLimit: 4

执行job.yaml

#kubectl create ns vk
#kubectl label namespace vk virtual-node-affinity-injection=enabled

#kubectl -n vk apply  -f ./job.yaml
job "pi" created

#kubectl -n vk get pod -a
NAME       READY     STATUS      RESTARTS   AGE
pi-7cmwv   0/1       Completed   0          2m

#kubectl -n vk describe pod
Name:               pi-7cmwv
Namespace:          vk
Priority:           0
PriorityClassName:  <none>
Node:               virtual-kubelet/
...
Events:
  Type    Reason                 Age   From               Message
  ----    ------                 ----  ----               -------
  Normal  Scheduled              3m    default-scheduler  Successfully assigned vk/pi-7cmwv to virtual-kubelet
  Normal  SuccessfulMountVolume  2m    kubelet, eci       MountVolume.SetUp succeeded for volume "default-token-b2tff"
  Normal  Pulling                2m    kubelet, eci       pulling image "perl"
  Normal  Pulled                 2m    kubelet, eci       Successfully pulled image "perl"
  Normal  Created                2m    kubelet, eci       Created container
  Normal  Started                2m    kubelet, eci       Started container

虚拟节点中的pod约30s启动执行,按需收费,当pod执行完成后停止收费。可以看到,使用虚拟节点运行Job短时间任务可以节省计算成本,减轻集群运维负担,用户无需关心集群的计算资源是否充足,也无需关心节点的扩容和缩容。

适用场景

虚拟节点不仅可运行在阿里云容器服务ACK集群中,也可运行在用户的自建Kubernetes集群中,或者线下IDC集群中(通过虚拟节点构建混合云方案),让用户的集群轻松获得云上“无限”弹性计算资源。
image

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
1343 3
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
1418 33
|
存储 负载均衡 测试技术
ACK Gateway with Inference Extension:优化多机分布式大模型推理服务实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with Inference Extension组件,在Kubernetes环境中为多机分布式部署的LLM推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
1376 17
|
存储 人工智能 Kubernetes
ACK Gateway with AI Extension:面向Kubernetes大模型推理的智能路由实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with AI Extension组件,在Kubernetes环境中为大语言模型(LLM)推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
存储 人工智能 物联网
ACK Gateway with AI Extension:大模型推理的模型灰度实践
本文介绍了如何使用 ACK Gateway with AI Extension 组件在云原生环境中实现大语言模型(LLM)推理服务的灰度发布和流量分发。该组件专为 LLM 推理场景设计,支持四层/七层流量路由,并提供基于模型服务器负载感知的智能负载均衡能力。通过自定义资源(CRD),如 InferencePool 和 InferenceModel,可以灵活配置推理服务的流量策略,包括模型灰度发布和流量镜像。
|
Kubernetes Shell Windows
【Azure K8S | AKS】在AKS的节点中抓取目标POD的网络包方法分享
在AKS中遇到复杂网络问题时,可通过以下步骤进入特定POD抓取网络包进行分析:1. 使用`kubectl get pods`确认Pod所在Node;2. 通过`kubectl node-shell`登录Node;3. 使用`crictl ps`找到Pod的Container ID;4. 获取PID并使用`nsenter`进入Pod的网络空间;5. 在`/var/tmp`目录下使用`tcpdump`抓包。完成后按Ctrl+C停止抓包。
656 12
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
Kubernetes Java 开发者
部署应用到阿里云容器服务 Kubernetes| 学习笔记
快速学习部署应用到阿里云容器服务 Kubernetes。
434 0
部署应用到阿里云容器服务 Kubernetes| 学习笔记

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版
  • 推荐镜像

    更多