如何指定Azure Arc Runner Pod在ARM64架构K8s节点部署?
解决Azure Arc Runner架构调度不匹配问题
问题背景
Azure Kubernetes集群同时部署AMD64和ARM64节点,Azure Arc Runner的Pod被随机调度到AMD64节点后,运行ARM64架构的MySQL镜像时因架构不兼容导致工作流失败,而Arc Runner Controller的Helm Chart未提供直接指定Pod架构的配置项。
解决方案
1. 通过节点选择器强制调度到ARM64节点
在Runner Scale Set的Helm配置中,为Runner Pod添加nodeSelector,指定仅调度到kubernetes.io/arch=arm64的节点:
修改values.yaml
containerMode: type: "dind" runnerPod: nodeSelector: kubernetes.io/arch: arm64
或在Terraform中直接设置(无需修改values.yaml)
在helm_release.arc_runners资源中新增set块:
resource "helm_release" "arc_runners" { # 原有配置... set { name = "runnerPod.nodeSelector.kubernetes.io/arch" value = "arm64" } }
2. 使用节点亲和性实现灵活调度(可选)
如果需要更复杂的调度逻辑(比如优先选择ARM64节点,无可用节点时再 fallback 到AMD64),可以配置节点亲和性:
修改values.yaml
containerMode: type: "dind" runnerPod: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/arch operator: In values: - arm64
3. 指定ARM64版本的DIND镜像(配合调度规则)
由于使用dind模式,需确保DIND容器本身为ARM64架构镜像,避免跨架构模拟引发的兼容问题:
containerMode: type: "dind" dindContainer: image: docker:dind-arm64v8 tag: latest # 根据实际需求指定具体版本 runnerPod: nodeSelector: kubernetes.io/arch: arm64
验证配置
部署更新后的Runner Scale Set后,执行以下命令确认Pod是否成功调度到ARM64节点:
# 查看Runner Pod对应的节点 kubectl get pods -n arc-systems -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.nodeName}{"\n"}{end}' # 查看节点架构信息 kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.nodeInfo.architecture}{"\n"}{end}'
内容的提问来源于stack exchange,提问作者Manikanta
相关产品推荐
相关产品推荐

