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
相关实践学习
利用大模型大规模分发技术,实现AIGC在线应用秒级弹性
通过ECI的数据缓存技术实现大模型的快速分发,将模型与应用解耦,敏捷部署,实现秒级在线弹性启动。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
6天前
|
运维 Kubernetes 网络协议
Kubernetes详解(十六)——Pod容器探测
Kubernetes详解(十六)——Pod容器探测
29 1
|
7天前
|
运维 Kubernetes 网络协议
Kubernetes详解(十六)——Pod容器探测
Kubernetes详解(十六)——Pod容器探测
17 0
|
8天前
|
存储 Kubernetes API
使用Kubernetes管理容器化应用的深度解析
【5月更文挑战第20天】本文深度解析Kubernetes在管理容器化应用中的作用。Kubernetes是一个开源平台,用于自动化部署、扩展和管理容器,提供API对象描述应用资源并维持其期望状态。核心组件包括负责集群控制的Master节点(含API Server、Scheduler、Controller Manager和Etcd)和运行Pod的工作节点Node(含Kubelet、Kube-Proxy和容器运行时环境)。
|
13天前
|
Kubernetes 应用服务中间件 Docker
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
|
23小时前
|
Windows
node搭建本地https和wss服务
node搭建本地https和wss服务
|
6天前
|
存储 运维 分布式计算
分布式云容器平台ACK One概述
分布式云容器平台ACK One概述
26 2
|
7天前
|
Kubernetes 关系型数据库 分布式数据库
【PolarDB开源】PolarDB与Kubernetes集成:容器化部署的最佳实践
【5月更文挑战第21天】本文介绍了将阿里云的高性能数据库PolarDB与容器编排工具Kubernetes集成的步骤。首先,需准备Kubernetes集群和PolarDB Docker镜像,安装Helm。然后,通过Helm部署PolarDB,设置存储类和副本数。接着,应用配置PolarDB连接信息,打包成Docker镜像并在K8s集群中部署。此外,调整PolarDB参数以优化性能,并使用Prometheus和Grafana监控。本文为PolarDB在Kubernetes中的最佳实践提供了指导。
32 4
|
8天前
|
存储 弹性计算 Kubernetes
【阿里云云原生专栏】深入解析阿里云Kubernetes服务ACK:企业级容器编排实战
【5月更文挑战第20天】阿里云ACK是高性能的Kubernetes服务,基于开源Kubernetes并融合VPC、SLB等云资源。它提供强大的集群管理、无缝兼容Kubernetes API、弹性伸缩、安全隔离及监控日志功能。用户可通过控制台或kubectl轻松创建和部署应用,如Nginx。此外,ACK支持自动扩缩容、服务发现、负载均衡和持久化存储。多重安全保障和集成监控使其成为企业云原生环境的理想选择。
154 3
|
11天前
|
Kubernetes 前端开发 容器
k8s部署模板
k8s部署模板
|
11天前
|
存储 Java Serverless
ACK One Argo 工作流集群:玩转容器对象存储
ACK One Argo 工作流集群:玩转容器对象存储
ACK One Argo 工作流集群:玩转容器对象存储

相关产品

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