ARM架构下Kubernetes集群部署实战指南

📅 2026/7/27 9:27:28
ARM架构下Kubernetes集群部署实战指南
1. 项目背景与核心挑战在混合架构的云计算环境中ARM架构处理器凭借其高能效比特性正获得越来越广泛的应用。最近我在一台搭载鲲鹏920处理器的服务器上需要部署Kubernetes V1.30.6集群用于边缘计算场景的测试。与常见的x86架构相比ARM架构下的kubeadm部署会遇到一些特有的问题官方仓库的ARM架构镜像不全部分CNI插件需要重新编译系统依赖库存在架构差异内核参数需要特别调优这次部署经历让我积累了不少ARM架构下的实战经验下面就把完整过程和技术要点整理出来特别是那些官方文档没有明确说明的坑点。2. 环境准备与系统配置2.1 硬件与操作系统要求推荐使用以下配置作为基础环境CPU: ARMv8架构以上如鲲鹏920、Ampere Altra内存: Master节点至少4GBWorker节点至少2GB磁盘: 每节点50GB以上空间OS: Ubuntu 22.04 LTS (ARM64) 或 CentOS 8 Stream (aarch64)重要提示避免使用树莓派等开发板作为生产节点其IO性能和网络吞吐可能无法满足K8s基础需求2.2 系统基础配置在所有节点执行以下配置# 关闭swap sudo swapoff -a sudo sed -i / swap / s/^/#/ /etc/fstab # 设置内核参数 cat EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 vm.swappiness 0 EOF sudo sysctl --system # 设置时区和时间同步 sudo timedatectl set-timezone Asia/Shanghai sudo systemctl enable --now chronyd2.3 容器运行时安装由于ARM架构的特殊性建议使用containerd而非Docker# 安装containerd sudo apt-get update sudo apt-get install -y containerd # 生成默认配置并启用systemd cgroup sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml sudo sed -i s/SystemdCgroup false/SystemdCgroup true/ /etc/containerd/config.toml # 重启服务 sudo systemctl restart containerd sudo systemctl enable containerd3. kubeadm部署实战3.1 安装kubeadm工具链ARM架构需要特别注意软件源配置# 添加ARM架构的Kubernetes源 sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg echo deb [archarm64 signed-by/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main | sudo tee /etc/apt/sources.list.d/kubernetes.list # 安装指定版本组件 sudo apt-get update sudo apt-get install -y kubelet1.30.6-00 kubeadm1.30.6-00 kubectl1.30.6-00 sudo apt-mark hold kubelet kubeadm kubectl3.2 初始化Master节点创建自定义的kubeadm配置文件# kubeadm-config.yaml apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration nodeRegistration: criSocket: unix:///var/run/containerd/containerd.sock kubeletExtraArgs: cgroup-driver: systemd --- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration kubernetesVersion: 1.30.6 imageRepository: registry.aliyuncs.com/google_containers controlPlaneEndpoint: MASTER_IP:6443 networking: podSubnet: 10.244.0.0/16 serviceSubnet: 10.96.0.0/12 --- apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd执行初始化命令sudo kubeadm init --configkubeadm-config.yaml --upload-certs初始化完成后按照提示设置kubectl配置mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config3.3 安装CNI插件ARM架构下推荐使用Flannel但需要修改其DaemonSet配置kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml然后编辑flannel配置kubectl edit daemonset kube-flannel-ds -n kube-system找到net-conf.json部分确保配置如下{ Network: 10.244.0.0/16, Backend: { Type: vxlan, Port: 4789 } }4. ARM架构特有优化4.1 镜像兼容性处理部分官方镜像可能没有ARM64版本需要手动替换# 检查缺失的镜像 kubeadm config images list --kubernetes-version v1.30.6 # 手动拉取ARM64兼容镜像示例 docker pull registry.aliyuncs.com/google_containers/kube-apiserver-arm64:v1.30.6 docker tag registry.aliyuncs.com/google_containers/kube-apiserver-arm64:v1.30.6 registry.k8s.io/kube-apiserver:v1.30.64.2 内核参数调优在/etc/sysctl.d/10-k8s.conf中添加# 提升连接跟踪表大小 net.netfilter.nf_conntrack_max 524288 net.netfilter.nf_conntrack_tcp_timeout_established 86400 # ARM架构特有的内存管理优化 vm.zone_reclaim_mode 0 vm.dirty_ratio 10 vm.dirty_background_ratio 54.3 节点资源预留配置修改/var/lib/kubelet/config.yamlapiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration systemReserved: cpu: 500m memory: 500Mi kubeReserved: cpu: 500m memory: 500Mi evictionHard: memory.available: 200Mi nodefs.available: 10%5. 常见问题排查5.1 镜像拉取失败典型错误ImagePullBackOff: Back-off pulling image registry.k8s.io/pause:3.6解决方案# 使用阿里云镜像源替代 docker pull registry.aliyuncs.com/google_containers/pause-arm64:3.6 docker tag registry.aliyuncs.com/google_containers/pause-arm64:3.6 registry.k8s.io/pause:3.65.2 cgroup驱动不匹配错误日志failed to start Kubelet: misconfiguration: kubelet cgroup driver: systemd is different from docker cgroup driver: cgroupfs解决方法 确保containerd配置(/etc/containerd/config.toml)和kubelet配置(/var/lib/kubelet/config.yaml)中都使用systemd驱动。5.3 节点NotReady状态检查步骤# 查看kubelet日志 journalctl -u kubelet -f # 检查CNI插件状态 kubectl get pods -n kube-system # 验证网络连通性 kubectl run -it --rm --imagealpine:3.18 test -- ping 其他节点IP6. 生产环境建议经过多次部署验证在ARM架构上运行Kubernetes还需要注意节点异构性管理混合ARM和x86节点时务必使用节点亲和性和污点机制tolerations: - key: kubernetes.io/arch operator: Equal value: arm64 effect: NoSchedule监控方案适配Prometheus等监控工具需要ARM64版本的exporterHPA参数调整ARM节点的自动扩缩容阈值建议比x86提高10-15%存储性能优化ARM架构下建议使用本地SSD存储分布式存储性能损耗较大内核版本选择推荐使用5.10内核以获得更好的调度器性能