容器服务ACK已完整支持云服务器Arm节点池的生命周期管理,包括节点添加、扩容、升级、删除。同时ACR支持多架构镜像的管理,使用统一镜像部署在Arm和x86节点池中,简化ACK基础组件和用户应用在多架构集群中的管理。本文详细介绍了如何创建Arm集群和节点池以及将应用部署到Arm节点上。
使用限制
-
配置Arm节点池的集群版本≥1.20。
-
Arm节点的操作系统只支持Alibaba Cloud Linux 3。
-
组件中心中支持Arm的组件列表:
-
核心组件
-
日志和监控
-
存储
-
网络
-
-
应用市场的组件不支持Arm。
步骤一:创建Arm集群和节点池
重要
-
在混用Arm和x86节点的容器集群中,为了防止非Arm应用和组件被错误的调度到Arm节点上,建议为Arm节点添加污点
kubernetes.io/arch=arm64:NoSchedule
,确保只有指定运行在Arm节点上的应用和组件才会被调度到Arm节点上。 -
通过nodeSelector或者nodeAffinity指定Arm节点部署应用的情况下,在ACK Kubernetes 1.24及之后的版本中,调度器会自动容忍污点
kubernetes.io/arch=arm64:NoSchedule
,您不需要额外添加容忍此污点的声明。
方案一:创建集群时添加Arm节点
使用这种方案,您可以创建一个只包含Arm节点的新集群。
创建集群,详细信息请参见创建Kubernetes托管版集群。在集群创建过程中,进行节点池配置时,在实例规格区域,架构选择ARM计算,然后按需选择所需实例规格。然后配置其他参数,完成集群创建。
说明
-
您可以前往ECS实例可购买地域,查看实例在各地域的可购情况。
-
您可以选择的Arm计算规格族群包括:
-
通用型实例规格族g8y
-
计算型实例规格族c8y
-
内存型实例规格族r8y
-
通用型实例规格族g6r
-
计算型实例规格族c6r
-
方案二:创建一个Arm节点池
使用这种方案,您可以在已有集群上创建一个包含Arm节点的节点池。
创建节点池,详细信息请参见操作步骤。在节点池创建过程中,在实例规格区域,架构选择ARM计算,然后按需选择所需实例规格。然后配置其他参数,完成节点池创建。
说明
-
您可以前往ECS实例可购买地域,查看实例在各地域的可购情况。
-
您可以选择的Arm计算规格族群包括:
-
通用型实例规格族g8y
-
计算型实例规格族c8y
-
内存型实例规格族r8y
-
通用型实例规格族g6r
-
计算型实例规格族c6r
-
步骤二:将应用部署到Arm节点上
为了让应用运行在Arm节点上,您的应用需要支持Arm架构。您可以使用多架构容器镜像,或者推送针对Arm编译的容器镜像。
指定应用运行在Arm节点上
如果您的集群中既有Arm节点也有非Arm节点,且您的应用只支持Arm架构,您需要指定应用运行在Arm节点上,以免应用Pod被调度到非Arm节点上导致启动失败。所有Arm节点上默认带有Label kubernetes.io/arch=arm64
,您可以通过两种方式nodeSelector和nodeAffinity指定应用部署到Arm节点上。
方式一:使用nodeSelector指定应用部署到Arm节点上
您可以通过在Pod的Spec增加如下约束,指定应用部署在Arm节点上。
nodeSelector:
kubernetes.io/arch: arm64 #指定Arm节点。
此约束指定Pod只能被调度到带有Label kubernetes.io/arm=arm64
的节点上。
当Pod Spec上带有这个约束时,ACK调度器自动容忍节点上的污点kubernetes.io/arch=arm64:NoSchedule
。
下面的示例将Nginx部署到Arm节点上。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
nodeSelector:
kubernetes.io/arch: arm64 #指定Arm节点。
containers:
- name: nginx
image: nginx:1.14.2
方式二:使用nodeAffinity指定应用部署到Arm节点上
除了使用nodeSelector,您还可以通过在Pod上增加如下约束,使用节点亲和性声明指定应用部署到Arm节点上。
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
此约束指定Pod只能被调度到带有Label kubernetes.io/arm=arm64
的节点上。
当Pod Spec上带有此约束时,ACK调度器自动容忍节点上的污点kubernetes.io/arch=arm64:NoSchedule
。
下面的示例同样指定将Nginx部署到Arm节点上。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
containers:
- name: nginx
image: nginx:1.14.2
使用多架构容器镜像
多架构容器镜像支持在一个镜像内包含多种架构的镜像,例如同时支持amd64和Arm的镜像,它可以运行在Arm节点上,也可以运行在amd64节点上。为了推送多架构镜像,镜像客户端和镜像服务器都需要支持多架构,目前阿里云镜像服务ACR已经支持多架构镜像。
下面的实例演示如何构建和推送一个nginx多架构镜像。
-
准备支持amd64的镜像和支持Arm的镜像。本例中使用的两个镜像为
registry.cn-hangzhou.aliyuncs.com/acs/myapp:amd64
和registry.cn-hangzhou.aliyuncs.com/acs/myapp:arm
。 -
执行如下命令,创建多架构镜像。
docker manifest create registry.cn-hangzhou.aliyuncs.com/acs/myapp \ --amend registry.cn-hangzhou.aliyuncs.com/acs/myapp:amd64 \ --amend registry.cn-hangzhou.aliyuncs.com/acs/myapp:arm64
-
使用
docker manifest push
命令,将多架构镜像registry.cn-hangzhou.aliyuncs.com/acs/myapp:latest
推送到镜像仓库。docker manifest push registry.cn-hangzhou.aliyuncs.com/acs/myapp
接下来就可以在Pod中使用这个镜像了。
将社区多架构镜像同步到自己的仓库中
很多开源软件都提供了容器镜像,并且支持多架构。为了让应用在ACK上部署更快,您可以将这些镜像同步到您自己的ACR仓库中。下面以nginx:1.23.2
为例,介绍如何在自己的ACR仓库中添加一份nginx多架构镜像。
-
执行如下命令,拉取amd64镜像,并将tag重命名为
nginx:1.23.2-amd64
。docker pull --platform linux/amd64 nginx:1.23.2 docker tag nginx:1.23.2 nginx:1.23.2-amd64
-
执行如下命令,拉取Arm镜像,并将tag重命名为
nginx:1.23.2-arm64
。docker pull --platform linux/arm64 nginx:1.23.2 docker tag nginx:1.23.2 nginx:1.23.2-arm64
-
执行如下命令,创建多架构镜像,请将下面的仓库地址替换成您的仓库地址。
docker manifest create registry.cn-hangzhou.aliyuncs.com/acs/nginx:1.23.2 \ # --amend nginx:1.23.2-arm64 \ --amend nginx:1.23.2-amd64
-
执行如下命令,推送多架构镜像,请将下面的仓库地址替换成您的仓库地址。
docker manifest push registry.cn-hangzhou.aliyuncs.com/acs/nginx:1.23.2
相关文档
云服务器ECS ARM实例规格族
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/170691.html