1. 环境准备与基础配置
在ARM架构上部署Kubernetes集群需要特别注意硬件兼容性和软件选型。我最近在一台搭载飞腾FT-2000/4处理器的服务器上完成了K8s 1.30.14 + KubeSphere的部署,整个过程踩了不少坑,也积累了一些经验。
1.1 硬件与操作系统选择
ARM架构的多样性比x86复杂得多,不同厂商的CPU(如华为鲲鹏、飞腾、龙芯等)在指令集实现上存在差异。我选择openEuler 22.03 LTS作为基础操作系统,原因有三:
- 对国产ARM芯片支持完善,预装了必要的固件和驱动
- 默认采用5.10内核,对容器运行时接口(CRI)支持良好
- 提供了针对容器场景优化的软件源
安装系统时需要注意:
- 分区建议:/var/lib/containerd至少预留50GB空间
- 关闭Swap:
swapoff -a并注释掉/etc/fstab中的swap行 - 检查CPU特性:
lscpu | grep -i arm确认架构为aarch64
1.2 网络与安全配置
ARM服务器常部署在内网环境,需要特别注意网络隔离:
bash复制# 关闭防火墙或放行必要端口
systemctl stop firewalld
systemctl disable firewalld
# 设置SELinux为permissive模式
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
# 加载内核模块
modprobe overlay
modprobe br_netfilter
# 配置网络参数
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
1.3 容器运行时准备
Containerd已成为K8s默认运行时,在ARM架构上需要特别注意镜像兼容性:
bash复制# 安装containerd
yum install -y containerd.io
# 配置cgroup驱动为systemd
mkdir -p /etc/containerd
containerd config default | sed 's/SystemdCgroup = false/SystemdCgroup = true/' > /etc/containerd/config.toml
# 重启服务
systemctl restart containerd
systemctl enable containerd
注意:ARM平台常见问题是某些x86镜像不可用,建议提前准备ARM兼容的基础镜像如busybox:latest-arm64
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Kubernetes集群部署
ARM架构的K8s部署与x86流程类似,但需要特别注意组件镜像的架构标签。
2.1 安装kubeadm工具
bash复制# 配置阿里云ARM镜像源
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 安装指定版本组件
yum install -y kubeadm-1.30.14 kubelet-1.30.14 kubectl-1.30.14 --disableexcludes=kubernetes
# 设置kubelet自启
systemctl enable --now kubelet
2.2 初始化控制平面
创建kubeadm配置文件kubeadm-config.yaml:
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: v1.30.14
imageRepository: registry.aliyuncs.com/google_containers
controlPlaneEndpoint: "192.168.1.100:6443"
networking:
podSubnet: "10.244.0.0/16"
serviceSubnet: "10.96.0.0/12"
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
执行初始化:
bash复制kubeadm init --config=kubeadm-config.yaml --upload-certs
初始化完成后常见问题处理:
- 如果卡在pull镜像环节,可手动拉取:
bash复制
kubeadm config images pull --config=kubeadm-config.yaml - ARM架构特有的镜像缺失问题,可尝试:
bash复制
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9-arm64 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9-arm64 registry.aliyuncs.com/google_containers/pause:3.9
2.3 网络插件安装
ARM平台推荐使用Flannel的ARM兼容版本:
bash复制kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
验证网络:
bash复制kubectl get pods -n kube-system -l app=flannel
kubectl run test --image=arm64v8/busybox -- sleep 3600
kubectl exec test -- ping -c 4 kubernetes.default
3. KubeSphere部署与配置
KubeSphere提供了ARM64的安装包,但需要额外处理一些依赖问题。
3.1 前置条件检查
bash复制# 检查存储类
kubectl get sc
# 若无默认存储类需要先部署
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.24/deploy/local-path-storage.yaml
# 安装OpenEBS作为存储方案(ARM兼容版本)
kubectl apply -f https://openebs.github.io/charts/openebs-operator-arm64.yaml
3.2 KubeSphere核心安装
使用最小化安装配置文件ks-installer.yaml:
yaml复制apiVersion: installer.kubesphere.io/v1alpha1
kind: ClusterConfiguration
metadata:
name: ks-installer
namespace: kubesphere-system
labels:
version: v3.4.1
spec:
persistence:
storageClass: "openebs-hostpath"
common:
redis:
enabled: false
openldap:
enabled: false
minioVolumeSize: "20Gi"
monitoring:
endpoint: http://prometheus-operated.kubesphere-monitoring-system.svc:9090
alerting:
enabled: false
auditing:
enabled: false
devops:
enabled: false
events:
enabled: false
logging:
enabled: false
metrics_server:
enabled: true
monitoring:
storageClass: "openebs-hostpath"
multicluster:
clusterRole: none
network:
networkpolicy:
enabled: false
topology:
type: none
openpitrix:
store:
enabled: false
servicemesh:
enabled: false
执行安装:
bash复制kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/kubesphere-installer.yaml
kubectl apply -f ks-installer.yaml
# 查看安装日志
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
3.3 常见问题处理
- ARM镜像缺失问题:
bash复制# 手动替换x86镜像
kubectl get deploy -n kubesphere-system ks-console -o yaml | sed 's/image: kubesphere\/ks-console/image: kubesphere\/ks-console-arm64/' | kubectl apply -f -
- 资源不足问题:
bash复制# 调整组件资源限制
kubectl edit deploy -n kubesphere-system ks-apiserver
# 将requests和limits适当调低
- 存储卷挂载失败:
检查OpenEBS Pod状态:
bash复制kubectl get pod -n openebs
4. 集群验证与优化
部署完成后需要进行全面验证和性能调优。
4.1 基础功能验证
bash复制# 检查节点状态
kubectl get nodes -o wide
# 测试DNS解析
kubectl run dns-test --image=arm64v8/busybox --restart=Never --rm -it -- nslookup kubernetes.default
# 测试跨节点通信
kubectl create deployment nginx --image=arm64v8/nginx
kubectl expose deployment nginx --port=80
kubectl run test --image=arm64v8/busybox --restart=Never --rm -it -- wget -qO- nginx
4.2 ARM架构特有优化
- 内核参数调优:
bash复制# 调整进程调度
echo 'vm.swappiness = 10' >> /etc/sysctl.conf
echo 'net.core.somaxconn = 32768' >> /etc/sysctl.conf
# 针对NUMA架构优化
echo 'kernel.numa_balancing = 0' >> /etc/sysctl.conf
- Kubelet配置优化:
bash复制# 编辑/etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cpu-manager-policy=static --system-reserved=cpu=500m,memory=1Gi --kube-reserved=cpu=500m,memory=1Gi"
- Containerd性能调优:
toml复制# 在/etc/containerd/config.toml中增加
[plugins."io.containerd.grpc.v1.cri".containerd]
snapshotter = "overlayfs"
disable_snapshot_annotations = true
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
4.3 监控与运维
- 部署ARM兼容的监控方案:
bash复制# 使用kube-prometheus的ARM分支
git clone -b arm64-support https://github.com/sjtug/kube-prometheus
cd kube-prometheus
kubectl apply --server-side -f manifests/setup
kubectl wait --for condition=Established --all CustomResourceDefinition --namespace=monitoring
kubectl apply -f manifests/
- 日志收集方案:
bash复制# 使用Fluent-bit的ARM版本
kubectl apply -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/fluent-bit-arm64.yaml
- 备份与恢复:
bash复制# 使用Velero的ARM兼容版本
wget https://github.com/vmware-tanzu/velero/releases/download/v1.11.0/velero-v1.11.0-linux-arm64.tar.gz
tar -xvf velero-v1.11.0-linux-arm64.tar.gz
./velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.7.0 --bucket my-backup --secret-file ./credentials-velero --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio.example.com
5. 生产环境注意事项
在实际生产环境中部署ARM架构的Kubernetes集群还需要考虑以下因素:
-
混合架构集群管理:
- 通过节点选择器确保工作负载调度到正确的架构节点
yaml复制apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: template: spec: nodeSelector: kubernetes.io/arch: arm64 -
镜像构建策略:
- 使用docker buildx构建多架构镜像
bash复制
docker buildx build --platform linux/arm64 -t my-image:arm64 . -
持续集成/持续部署(CI/CD):
- 在GitLab Runner或Jenkins Agent上配置ARM执行器
- 使用如下Pipeline脚本:
groovy复制pipeline { agent { label 'arm64' } stages { stage('Build') { steps { sh 'docker buildx build --platform linux/arm64 -t my-registry/my-image:arm64 .' } } } } -
安全加固措施:
- 使用gVisor作为额外运行时隔离层
bash复制# 安装gVisor ARM版本 set -e ARCH=$(uname -m) URL=https://storage.googleapis.com/gvisor/releases/release/latest/${ARCH} wget ${URL}/runsc ${URL}/runsc.sha512 \ ${URL}/containerd-shim-runsc-v1 ${URL}/containerd-shim-runsc-v1.sha512 sha512sum -c runsc.sha512 -c containerd-shim-runsc-v1.sha512 chmod a+rx runsc containerd-shim-runsc-v1 sudo mv runsc containerd-shim-runsc-v1 /usr/local/bin -
长期维护建议:
- 定期检查ARM专属安全公告
- 建立ARM镜像缓存仓库
- 监控ARM节点的温度和工作负载平衡
通过以上步骤,我们成功在ARM架构服务器上部署了Kubernetes 1.30.14集群并安装了KubeSphere管理界面。整个过程虽然比x86架构复杂一些,但只要注意镜像兼容性和内核配置,同样可以获得稳定的运行效果。ARM架构在能效比方面的优势,使其在边缘计算和特定场景下具有独特的价值。
