1. 项目概述:ARM架构下基于containerd的K8s 1.30.14与KubeSphere部署方案
在ARM架构设备上部署Kubernetes集群一直是边缘计算和国产化环境中的典型需求。不同于x86架构的标准部署流程,ARM平台需要特别注意容器运行时适配、系统依赖兼容性等问题。本次我们将使用containerd作为容器运行时,在openEuler系统上完整部署Kubernetes 1.30.14集群,并集成KubeSphere管理界面。
这个方案特别适合需要在国产化ARM服务器或开发板(如华为鲲鹏、飞腾等)上构建云原生环境的场景。相比传统Docker方案,containerd提供了更轻量级的运行时支持,而KubeSphere则为企业用户提供了开箱即用的可视化管控能力。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与系统配置
2.1 硬件与操作系统要求
推荐使用以下环境配置:
- ARMv8架构服务器或开发板(至少4核CPU/8GB内存)
- openEuler 22.03 LTS或更高版本
- 100GB可用磁盘空间
- 稳定的网络连接(建议千兆以太网)
注意:如果使用树莓派等开发板,建议选择4B及以上型号,并配备主动散热装置以避免性能降频。
2.2 系统基础配置
首先执行系统更新并安装必要工具:
bash复制sudo dnf update -y
sudo dnf install -y vim curl wget tar socat conntrack ipset
禁用swap并配置内核参数:
bash复制sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
2.3 Containerd运行时安装与配置
安装containerd 1.7+版本:
bash复制export CONTAINERD_VERSION="1.7.2"
wget https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/containerd-${CONTAINERD_VERSION}-linux-arm64.tar.gz
sudo tar Cxzvf /usr/local containerd-${CONTAINERD_VERSION}-linux-arm64.tar.gz
创建systemd服务单元:
bash复制sudo mkdir -p /usr/local/lib/systemd/system/
wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
sudo mv containerd.service /usr/local/lib/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now containerd
配置containerd使用systemd cgroup驱动:
bash复制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
3. Kubernetes集群部署
3.1 安装kubeadm、kubelet和kubectl
添加Kubernetes仓库并安装组件:
bash复制cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/repodata/repomd.xml.key
EOF
sudo dnf install -y kubelet-1.30.14 kubeadm-1.30.14 kubectl-1.30.14 --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
3.2 初始化控制平面节点
使用kubeadm初始化集群:
bash复制sudo kubeadm init \
--kubernetes-version=v1.30.14 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--cri-socket=unix:///run/containerd/containerd.sock \
--image-repository=registry.aliyuncs.com/google_containers
初始化完成后,按照提示配置kubectl:
bash复制mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.3 安装网络插件
部署Flannel网络组件:
bash复制kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
验证节点状态:
bash复制kubectl get nodes -o wide
4. KubeSphere部署与配置
4.1 准备工作
确保集群满足KubeSphere的最低要求:
- 至少2个可用节点
- 每个节点至少4GB内存
- 已配置默认StorageClass
安装helm(如未安装):
bash复制curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
4.2 部署KubeSphere Core
使用ks-installer进行部署:
bash复制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
监控安装进度:
bash复制kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
4.3 访问KubeSphere控制台
获取控制台访问地址:
bash复制kubectl get svc -n kubesphere-system ks-console -o jsonpath='{.spec.ports[0].nodePort}'
默认管理员凭据:
- 用户名:admin
- 密码:P@88w0rd
5. 常见问题与解决方案
5.1 ARM架构镜像缺失问题
当部署工作负载时可能会遇到x86镜像不兼容的情况,解决方法:
- 显式指定ARM架构镜像标签:
yaml复制image: nginx:1.25-alpine-arm64
-
使用多架构镜像(如带有
-arm64后缀的镜像) -
自行构建ARM架构镜像:
bash复制docker buildx build --platform linux/arm64 -t your-image:tag .
5.2 节点NotReady状态排查
如果节点长时间处于NotReady状态:
- 检查kubelet日志:
bash复制journalctl -u kubelet -f
- 验证网络插件是否正常运行:
bash复制kubectl get pods -n kube-system
- 确认containerd服务状态:
bash复制sudo systemctl status containerd
5.3 KubeSphere组件启动失败
常见原因及解决方法:
- 资源不足:增加节点资源或调整KubeSphere组件资源请求
- 存储配置问题:确保默认StorageClass可用
- 网络策略限制:检查是否启用了NetworkPolicy并适当配置
6. 性能优化建议
6.1 内核参数调优
在/etc/sysctl.conf中添加:
conf复制vm.swappiness = 10
vm.vfs_cache_pressure = 50
net.core.somaxconn = 32768
net.ipv4.tcp_tw_reuse = 1
6.2 Kubelet资源配置
编辑/var/lib/kubelet/config.yaml:
yaml复制systemReserved:
cpu: "500m"
memory: "500Mi"
kubeReserved:
cpu: "500m"
memory: "500Mi"
evictionHard:
memory.available: "200Mi"
nodefs.available: "10%"
6.3 Containerd性能优化
调整/etc/containerd/config.toml中的配置:
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
7. 扩展功能集成
7.1 监控系统增强
在KubeSphere中启用监控组件:
bash复制kubectl edit cc -n kubesphere-system ks-installer
将monitoring.enabled设置为true
7.2 日志收集方案
部署EFK日志栈:
bash复制kubectl apply -f https://raw.githubusercontent.com/kubesphere/ks-installer/master/roles/ks-core/prepare/files/ks-init/logging.yaml
7.3 存储解决方案
安装OpenEBS提供本地存储:
bash复制kubectl apply -f https://openebs.github.io/charts/openebs-operator.yaml
8. 维护与升级策略
8.1 Kubernetes版本升级
- 首先升级kubeadm:
bash复制sudo dnf upgrade -y kubeadm-1.30.14
- 执行控制平面升级:
bash复制sudo kubeadm upgrade apply v1.30.14
- 升级kubelet和kubectl:
bash复制sudo dnf upgrade -y kubelet-1.30.14 kubectl-1.30.14
sudo systemctl restart kubelet
8.2 KubeSphere升级
备份关键配置:
bash复制kubectl get cc -n kubesphere-system ks-installer -o yaml > ks-config.yaml
部署新版本installer:
bash复制kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/kubesphere-installer.yaml
8.3 日常维护命令
检查集群健康状态:
bash复制kubectl get componentstatuses
kubectl get events --sort-by='.metadata.creationTimestamp'
清理无用资源:
bash复制kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.namespace}{"\n"}{end}' | grep -E "Evicted|Completed" | awk '{print $2 " " $1}' | xargs -n2 kubectl delete pod -n
