EKS混合amd64/arm64节点下ebs-csi组件无法调度到arm64节点问题咨询
你不需要添加额外的选择器限制ebs-csi-controller的部署范围,反而需要调整helm chart的默认节点亲和性配置,放开arm64架构的部署限制,具体操作如下:
问题根因
2.3.0版本的aws-ebs-csi-driver helm chart默认配置的节点亲和性规则仅支持amd64架构节点,因此不管是DaemonSet类型的ebs-csi-node还是Deployment类型的ebs-csi-controller,都只会调度到amd64节点上运行,导致arm64节点没有对应的CSI节点驱动,存储卷无法正常挂载供给。
调整helm values配置
新建values.yaml文件,加入以下配置:
# 配置ebs-csi-node DaemonSet同时适配amd64和arm64节点 node: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/os operator: In values: - linux - key: kubernetes.io/arch operator: In values: - amd64 - arm64 # 配置ebs-csi-controller的调度规则 controller: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/os operator: In values: - linux # 如果你希望controller仅在amd64节点运行,只需保留amd64即可,不影响arm64节点的存储使用 - key: kubernetes.io/arch operator: In values: - amd64 - arm64
如果你的arm64节点配置了专属污点,还需要在node.tolerations字段下添加对应的污点容忍规则。
重新部署驱动
执行以下helm命令升级已部署的aws-ebs-csi-driver:helm upgrade --install aws-ebs-csi-driver aws-ebs-csi-driver/aws-ebs-csi-driver --namespace kube-system --version 2.3.0 -f values.yaml
验证部署结果
升级完成后执行以下命令查看DaemonSet状态:kubectl get daemonset ebs-csi-node -n kube-system
正常情况下DESIRED字段的数值会和aws-node、kube-proxy一致,代表arm64节点上也已经成功调度了ebs-csi-node pod。
内容的提问来源于stack exchange,提问作者Khushboo Kumari

