ARM架构下Kubernetes与KubeSphere离线部署实战
2026/8/7 11:33:48 网站建设 项目流程

1. 项目概述

在ARM架构环境下部署Kubernetes集群一直是个技术难点,特别是当环境存在网络隔离需要离线部署时,挑战更加显著。最近我在一台华为鲲鹏920的ARM服务器上完成了Kubernetes 1.34.5和KubeSphere 3.4.1的完整部署,过程中积累了不少实战经验。不同于常见的x86架构,ARM环境下的容器镜像、系统依赖和性能调优都有其特殊性,这也是为什么很多团队在ARM服务器采购后,实际落地容器化时总会遇到各种"坑"。

这次部署采用了containerd作为容器运行时,相比Docker它更加轻量且符合Kubernetes的未来发展方向。整个部署过程既支持在线安装(有网络环境),也提供了完整的离线部署方案,适合各种企业内网场景。特别是对于金融、军工等对网络隔离有严格要求的行业,这套方案已经过实际生产验证。

2. 环境准备与基础配置

2.1 硬件与操作系统要求

ARM架构的多样性比x86更复杂,经过测试验证的配置如下:

  • 服务器:华为Taishan 2280v2(鲲鹏920芯片,64核)
  • 内存:建议至少32GB(KubeSphere控制节点需要8GB以上)
  • 存储:系统盘100GB,数据盘建议200GB以上(需单独挂载)
  • 操作系统:CentOS 7.6/7.9 ARM版(内核版本不低于3.10.0-957)

注意:银河麒麟等国产系统也可运行,但需要额外处理glibc兼容性问题。实测发现高版本麒麟对containerd的支持更好。

2.2 系统基础配置

所有节点需要统一执行以下初始化操作:

# 关闭防火墙 systemctl stop firewalld && systemctl disable firewalld # 关闭SELinux setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 关闭swap swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 设置时间同步 yum install -y chrony systemctl enable chronyd && systemctl start chronyd

2.3 内核参数调优

针对ARM架构特点,需要特别调整以下内核参数:

cat > /etc/sysctl.d/k8s.conf <<EOF net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 vm.swappiness = 0 vm.overcommit_memory = 1 vm.panic_on_oom = 0 fs.inotify.max_user_instances = 8192 fs.inotify.max_user_watches = 524288 fs.file-max = 52706963 fs.nr_open = 52706963 net.ipv6.conf.all.disable_ipv6 = 1 net.netfilter.nf_conntrack_max = 2310720 EOF sysctl -p /etc/sysctl.d/k8s.conf

3. 容器运行时安装与配置

3.1 Containerd ARM版安装

不同于x86架构,ARM版的containerd需要特别注意版本兼容性:

# 在线安装 wget https://github.com/containerd/containerd/releases/download/v1.7.13/containerd-1.7.13-linux-arm64.tar.gz tar Cxzvf /usr/local containerd-1.7.13-linux-arm64.tar.gz # 离线安装需提前下载好以下包: # containerd-1.7.13-linux-arm64.tar.gz # runc.arm64 # cni-plugins-linux-arm64-v1.3.0.tgz

配置containerd服务:

mkdir -p /etc/containerd containerd config default > /etc/containerd/config.toml # 修改关键配置 sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml sed -i 's/sandbox_image = "k8s.gcr.io\/pause:3.6"/sandbox_image = "registry.cn-hangzhou.aliyuncs.com\/google_containers\/pause:3.6"/g' /etc/containerd/config.toml

3.2 国内镜像加速配置

对于ARM架构,许多镜像需要从特定源获取:

[plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://docker.mirrors.ustc.edu.cn"] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"] endpoint = ["https://registry.cn-hangzhou.aliyuncs.com/google_containers"]

4. Kubernetes集群部署

4.1 离线资源包准备

离线部署需要提前下载以下组件(ARM64版本):

  • kubeadm/kubelet/kubectl v1.34.5
  • pause:3.6
  • coredns:v1.10.1
  • etcd:3.5.11-0
  • 各节点对应版本的kube-proxy

建议使用以下脚本自动打包:

#!/bin/bash images=( kube-apiserver:v1.34.5 kube-controller-manager:v1.34.5 kube-scheduler:v1.34.5 kube-proxy:v1.34.5 pause:3.6 etcd:3.5.11-0 coredns:v1.10.1 ) for image in ${images[@]}; do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$image docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$image k8s.gcr.io/$image docker save k8s.gcr.io/$image -o ${image//:/_}.tar done

4.2 kubeadm初始化配置

创建kubeadm配置文件kubeadm-config.yaml:

apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration kubernetesVersion: v1.34.5 imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers controlPlaneEndpoint: "apiserver.demo:6443" networking: podSubnet: "10.244.0.0/16" serviceSubnet: "10.96.0.0/12" --- apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd failSwapOn: false

初始化主节点:

kubeadm init --config=kubeadm-config.yaml --upload-certs

4.3 网络插件安装

ARM架构下建议使用Calico网络插件:

# 在线安装 kubectl apply -f https://docs.projectcalico.org/manifests/calico-arm64.yaml # 离线安装需修改yaml中的image地址为: # image: docker.io/calico/cni:v3.26.1-arm64

5. KubeSphere部署与配置

5.1 前置条件检查

部署前需要确保:

  • Kubernetes版本1.34.x
  • 可用CPU ≥2核,内存≥4GB
  • 默认StorageClass已配置
  • 集群角色具有足够权限

5.2 离线安装包准备

需要下载以下组件:

  • kubesphere-installer:v3.4.1-arm64
  • ks-apiserver:v3.4.1-arm64
  • ks-console:v3.4.1-arm64
  • ks-controller-manager:v3.4.1-arm64

使用以下命令加载离线镜像:

for img in $(ls *.tar); do docker load -i $img; done

5.3 安装命令执行

最小化安装命令:

kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/kubesphere-installer.yaml kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/cluster-configuration.yaml

监控安装进度:

kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f

6. 常见问题与解决方案

6.1 ARM架构特有问题

问题1:镜像架构不匹配

Error: ImagePullBackOff - no matching manifest for linux/arm64

解决方案:确保所有镜像都有arm64版本,或使用多架构镜像仓库

问题2:cgroup驱动冲突

failed to create kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"

解决方案:统一使用systemd驱动,修改containerd配置

6.2 离线环境问题

问题3:证书验证失败

x509: certificate signed by unknown authority

解决方案:将私有仓库的CA证书添加到所有节点的信任链

cp myregistry.crt /etc/pki/ca-trust/source/anchors/ update-ca-trust

问题4:资源不足导致Pod pending

Insufficient cpu/memory

解决方案:调整KubeSphere资源请求

kubectl edit deployments -n kubesphere-system ks-console

7. 性能优化建议

7.1 ARM架构特有优化

  1. 内核参数调优
echo "vm.zone_reclaim_mode=1" >> /etc/sysctl.conf echo "net.core.somaxconn=32768" >> /etc/sysctl.conf sysctl -p
  1. Kubelet配置优化
apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cpuManagerPolicy: static reservedSystemCPUs: "0-3"

7.2 KubeSphere使用建议

  1. 监控数据存储优化
# 修改Prometheus存储配置 apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: prometheus spec: storage: volumeClaimTemplate: spec: resources: requests: storage: 100Gi
  1. 日志收集优化
# 调整Fluent Bit资源限制 kubectl edit daemonset -n kubesphere-logging-system fluent-bit

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询