ACK容器服务发布virtual node addon,快速部署虚拟节点提升集群弹性能力

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 在上一篇博文中(https://yq.aliyun.com/articles/647119),我们展示了如何手动执行yaml文件给Kubernetes集群添加虚拟节点,然而,手动执行的方式用户体验并不友好,也无法以组件的方式持续升级和管理。

在上一篇博文中(https://yq.aliyun.com/articles/647119),我们展示了如何手动执行yaml文件给Kubernetes集群添加虚拟节点,然而,手动执行的方式用户体验并不友好,也无法以组件的方式持续升级和管理。现在我们已经可以通过Helm的方式,让ack-virtual-node的部署和管理变得更加简单。首先,让我们简单回顾一下虚拟节点Virtual Node是如何运行的。

虚拟节点Virtual Node

image
虚拟节点来源于社区的virtual kubelet技术,其实现了kubernetes与弹性容器实例ECI的无缝连接,让kubernetes集群轻松获得极大的弹性能力,而不必受限于集群的节点计算容量。

image

基于ECI的虚拟节点支持多种功能,其不仅增强了kubernetes集群的弹性,同时提供了丰富的能力扩展,如GPU容器实例,挂载eip,大规格容器实例等,让用户可以在一个kubernetes集群中轻松管理多种计算workload,满足多种场景下的需求。
在混合集群中,真实节点上的pod与虚拟节点上的eci pod互联互通。
请注意,虚拟节点上的eci pod是按需收费的,这与真实节点上的计费不同。eci收费规则请参考:https://help.aliyun.com/document_detail/89142.html。eci pod规格配置支持0.25c至64c,请参考:https://help.aliyun.com/document_detail/89138.html

使用场景

虚拟节点和Serverless Kubernetes都是基于弹性容器实例ECI构建,都属于Serverless Container产品形态,主要适用于多种Serverless workload场景,可以极大的降低运维成本,降低用户的总体计算成本,提高计算效率。
image

安装ack-virtual-node插件

首先登录容器服务控制台,创建托管版kubernetes集群。在应用目录页面选择ack-virtual-node。
https://cs.console.aliyun.com/#/k8s/catalog/detail/incubator_ack-virtual-node

image

image

配置虚拟节点参数,包括Region,AK信息,vswitchId和securityGroupId需要和Kubernetes集群配置相同(可在集群信息页面查看网络配置信息)

image

安装Chart成功后,在节点页面可以看到添加了一个节点virtual-kubelet
image

通过kubectl命令,我们可以查看节点和helm部署状态,后续也可以通过helm对ack-virtual-node进行升级和管理。
image

基于虚拟节点创建pod

当集群中存在虚拟节点时,我们就可以把pod调度到虚拟节点上,vk将会创建出相应的eci pod。

目前我们可以通过三种方法创建eci pod。

1. 给pod设置nodeSelector和tolerations

创建如下nginx pod,设置正确的nodeSelector和tolerations,确保pod会被调度到虚拟节点上。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx
    imagePullPolicy: Always
    name: nginx
  nodeSelector:
    type: virtual-kubelet
  tolerations:
  - key: virtual-kubelet.io/provider
    operator: Exists

image

image

2. 给pod设置nodeName

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx
    imagePullPolicy: Always
    name: nginx
  nodeName: virtual-kubelet

3. 配置namespace标签,指定namespace中所有pod调度到虚拟节点上

通过给namespace加上“virtual-node-affinity-injection=enabled”的label,系统中的admission controller将会自动给namespace中的pod加上nodeAffinity和tolerations,用户无需手动为pod配置tolerations,这种方式极大的简化了虚拟节点的使用,容器yaml文件也无需对虚拟节点做出适配。

kubectl create ns vk
kubectl label namespace vk virtual-node-affinity-injection=enabled
kubectl -n vk run nginx --image nginx

我们可以通过这种方式基于虚拟节点上创建ingress应用,在指定的namespace中应用yaml文件无需做出任何修改即可运行。

# kubectl -n vk apply -f https://raw.githubusercontent.com/AliyunContainerService/serverless-k8s-examples/master/ingress/ingress-cafe-demo.yaml
deployment "coffee" created
service "coffee-svc" created
deployment "tea" created
service "tea-svc" created
ingress "cafe-ingress" created

# kubectl -n vk get pod -o wide
NAME                      READY     STATUS    RESTARTS   AGE       IP              NODE
coffee-56668d6f78-7mdvc   1/1       Running   0          2m        192.168.1.170   virtual-kubelet
coffee-56668d6f78-tpslg   1/1       Running   0          2m        192.168.1.169   virtual-kubelet
tea-85f8bf86fd-5fl2v      1/1       Running   0          2m        192.168.1.172   virtual-kubelet
tea-85f8bf86fd-8n9n8      1/1       Running   0          2m        192.168.1.171   virtual-kubelet
tea-85f8bf86fd-jv7kj      1/1       Running   0          2m        192.168.1.173   virtual-kubelet

# kubectl -n vk get ing
NAME           HOSTS              ADDRESS       PORTS     AGE
cafe-ingress   cafe.example.com   120.55.8.82   80        2m

# curl -H "Host:cafe.example.com" 120.55.8.82/tea
Server address: 192.168.1.173:80
Server name: vk-tea-85f8bf86fd-jv7kj
Date: 13/May/2019:05:54:32 +0000
URI: /tea
Request ID: 84d2afa2d3a74d7af38f94de21d11d37

# curl -H "Host:cafe.example.com" 120.55.8.82/coffee
Server address: 192.168.1.169:80
Server name: vk-coffee-56668d6f78-tpslg
Date: 13/May/2019:05:54:36 +0000
URI: /coffee
Request ID: 280df5e9f29d22d8174540f8dfe77861
相关实践学习
基于ACK Serverless轻松部署企业级Stable Diffusion
本实验指导您在容器服务Serverless版(以下简称 ACK Serverless )中,通过Knative部署满足企业级弹性需求的Stable Diffusion服务。同时通过对该服务进行压测实验,体验ACK Serverless 弹性能力。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
5天前
|
存储 Kubernetes 对象存储
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
借助阿里云ACK One注册集群,充分利用阿里云强大ACS GPU算力,实现DeepSeek推理模型高效部署。
|
10天前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
本教程演示如何在ACK中使用vLLM框架快速部署DeepSeek R1模型推理服务。
|
11天前
|
存储 人工智能 弹性计算
NVIDIA NIM on ACK:优化生成式AI模型的部署与管理
本文结合NVIDIA NIM和阿里云容器服务,提出了基于ACK的完整服务化管理方案,用于优化生成式AI模型的部署和管理。
|
1月前
|
存储 运维 Kubernetes
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
飞轮科技推出了 Doris 的 Kubernetes Operator 开源项目(简称:Doris Operator),并捐赠给 Apache 基金会。该工具集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
|
5天前
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
本教程演示如何在ACK中多机分布式部署DeepSeek R1满血版。
|
29天前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
117 21
|
1月前
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
2月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
178 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
1月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
209 11
|
2月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版