麒麟Linux服务器 AMR架构
🧰 离线部署 Kubernetes v1.25.9(麒麟系统 + Docker)
一、验证Docker部署状态 检查Docker服务运行状态
systemctl status docker 预期输出应显示 Active: active (running),表明服务已启动18。 运行测试容器验证功能
docker run --rm hello-world 若输出包含 Hello from Docker!,表明Docker引擎及容器运行时正常8。 查看Docker版本信息
docker version 确认 Client 和 Server 版本信息一致且无报错18。
✅ 你需要准备的资源(在联网的 Windows 上下载)
{ "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"], "exec-opts": ["native.cgroupdriver=cgroupfs"] }
-
Kubernetes 安装包
-
下载 Linux 版二进制工具: https://dl.k8s.io/release/v1.25.9/bin/linux/amd64/
-
kubeadm
-
kubelet
-
kubectl
-
-
或通过离线 yum 源(我可以帮你整理)
-
-
Kubernetes 必需镜像 使用以下命令获取 Kubernetes 所需镜像列表(版本 1.25.9):
bash 复制编辑 kubeadm config images list --kubernetes-version=v1.25.9
输出大概是:
bash复制编辑registry.k8s.io/kube-apiserver:v1.25.9 registry.k8s.io/kube-controller-manager:v1.25.9 registry.k8s.io/kube-scheduler:v1.25.9 registry.k8s.io/kube-proxy:v1.25.9 registry.k8s.io/pause:3.8 registry.k8s.io/etcd:3.5.4-0 registry.k8s.io/coredns/coredns:v1.9.3
然后:
-
在 Windows 上用 WSL/Docker Desktop 拉取这些镜像;
-
用
docker save
保存成 tar 包:bash 复制编辑 docker save -o k8s-images.tar <镜像列表>
-
-
网络插件 Flannel(或 Calico)
-
推荐下载 flannel yaml: https://github.com/flannel-io/flannel/releases
-
或使用这个命令保存 YAML 文件:
bash 复制编辑 curl -O https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
-
💾 将这些文件复制到麒麟系统中
推荐用以下方式之一:
-
U 盘或移动硬盘;
-
Windows → Linux 的
scp
; -
WinSCP
工具图形化上传;
🏗️ 麒麟服务器离线安装步骤
前提:在麒麟服务器上新建一个目录存放所有离线资源:
mkdir -p /root/k8s-offline
cd /root/k8s-offline
1️⃣ 安装 kubelet/kubectl/kubeadm
将下载好的三大组件移动到 /usr/bin/
目录,并赋予执行权限:
chmod +x kubeadm kubelet kubectl mv kubeadm kubelet kubectl /usr/bin/
2️⃣ 配置 systemd 启动 kubelet
2.1 创建 systemd 配置目录
sudo mkdir -p /etc/systemd/system/kubelet.service.d
2.2 创建 kubelet 配置文件
编辑 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
,内容如下:
sudo vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
[Service] Environment="KUBELET_KUBEADM_ARGS=--container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cgroup-driver=cgroupfs/systemd" ExecStart= ExecStart=/usr/bin/kubelet $KUBELET_KUBEADM_ARGS
检查docker采取哪个驱动:docker info | grep -i "Cgroup Driver"
2.3 创建主服务文件
编辑 /etc/systemd/system/kubelet.service
,内容如下:
[Unit] Description=kubelet: The Kubernetes Node Agent Documentation=Kubernetes Documentation | Kubernetes After=network.target
[Service] ExecStart=/usr/bin/kubelet Restart=always StartLimitInterval=0 RestartSec=10
[Install] WantedBy=multi-user.target
2.4 重载并启用服务
systemctl daemon-reexec systemctl daemon-reload systemctl enable kubelet
3️⃣ 加载镜像
删除镜像 docker rmi <镜像名或镜像ID> docker load -i kube-apiserver-v1.25.9-arm64.tar docker load -i kube-controller-manager-v1.25.9-arm64.tar docker load -i kube-scheduler-v1.25.9-arm64.tar docker load -i kube-proxy-v1.25.9-arm64.tar docker load -i pause-3.8-arm64.tar docker load -i etcd-3.5.6-0-arm64.tar docker load -i coredns-v1.9.3-arm64.tar 加载完成后,你可以通过以下命令来确认镜像的架构: docker inspect <镜像名> | grep Architecture 例如:docker inspect kube-apiserver:v1.25.9 | grep Architecture --"Architecture": "arm64"
4️⃣ 关闭 swap、优化内核
swapoff -a sed -i '/swap/s/^/#/' /etc/fstab modprobe br_netfilter sysctl -w net.bridge.bridge-nf-call-iptables=1 sysctl -p
5️⃣ 初始化 Kubernetes
kubeadm init --kubernetes-version=1.25.9 \ --apiserver-advertise-address=192.168.1.210 \ --pod-network-cidr=10.244.0.0/16 kubeadm init --kubernetes-version=1.25.9 \ --apiserver-advertise-address=172.20.10.9 \ --pod-network-cidr=10.244.0.0/16 如果有报错:!! [ERROR CRI]: container runtime is not running: output: time="2025-04-18T00:03:22-07:00" level=fatal msg="unable to determine runtime API version: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or directory\"" 一.安装 crictl 打开浏览器,访问 https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.25.0/crictl-v1.25.0-linux-amd64.tar.gz(已下载) 下载后解压,得到一个可执行文件 crictl 把 crictl 拷贝到你的 Kylin 服务器,比如你现在的 /k8s-offline 目录。 然后在服务器执行: chmod +x crictl mv crictl /usr/bin/ 验证: which crictl crictl --version 二.安装cri-dockerd Kubernetes v1.24 起,默认已移除对 Docker 的直接支持(即 Dockershim 被移除了)。 1. 你需要准备以下资源并从外网下载 ()cri-dockerd文件 2.创建 cri-dockerd.service sudo tee /etc/systemd/system/cri-dockerd.service > /dev/null <<EOF [Unit] Description=CRI interface for Docker Application Container Engine Documentation=https://docs.mirantis.com After=network.target docker.service Requires=docker.service [Service] Type=notify --ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock ExecReload=/bin/kill -s HUP \$MAINPID TimeoutSec=0 RestartSec=2 Restart=always StartLimitBurst=3 StartLimitInterval=60s LimitNOFILE=1048576 LimitNPROC=infinity LimitCORE=infinity TasksMax=infinity Delegate=yes KillMode=process OOMScoreAdjust=-999 [Install] WantedBy=multi-user.target EOF 3. 创建 cri-dockerd.socket sudo tee /etc/systemd/system/cri-dockerd.socket > /dev/null <<EOF [Unit] Description=CRI Docker Socket for the API PartOf=cri-dockerd.service [Socket] ListenStream=/var/run/cri-dockerd.sock SocketMode=0660 SocketUser=root SocketGroup=docker [Install] WantedBy=sockets.target EOF 修改完重启: sudo systemctl daemon-reload sudo systemctl restart cri-docker.service sudo systemctl restart kubelet 4.# 移动可执行文件 install -o root -g root -m 0755 cri-dockerd /usr/bin/cri-dockerd 5.# 安装 systemd 配置(如有) cp cri-docker.service cri-docker.socket /etc/systemd/system/ 三.安装 conntrack 的命令如下: 在联网的机器上执行: yum install --downloadonly --downloaddir=./conntrack conntrack 这将把 conntrack 的 RPM 包下载到当前目录。 安装:sudo rpm -ivh /root/rpms/conntrack-*.rpm --修改自己的安装路劲 sudo rpm -ivh libnetfilter_cthelper-1.0.0-15.el8.aarch64.rpm \ libnetfilter_cttimeout-1.0.0-11.el8.aarch64.rpm \ libnetfilter_queue-1.0.4-3.el8.aarch64.rpm \ conntrack-tools-1.4.4-11.el8.aarch64.rpm 四:部署 socat 先从联网机器下载 RPM 包 : yum install --downloadonly --downloaddir=./socat socat 安装: sudo rpm -ivh /root/rpms/socat-*.rpm --修改自己的安装路劲 验证: conntrack --version socat -V 在联网的机器上执行: 6.# 重新加载 systemd 配置并启动 # 重新加载 systemd sudo systemctl daemon-reexec sudo systemctl daemon-reload # 启用服务开机自启 sudo systemctl enable cri-dockerd.socket sudo systemctl enable cri-dockerd.service # 启动服务 sudo systemctl start cri-dockerd.socket sudo systemctl start cri-dockerd.service # 查看状态(贴这个输出)验证 sudo systemctl status cri-dockerd.service sudo systemctl status kubelet systemctl status kubelet -l journalctl -u kubelet -xe --no-pager 验证 kube-apiserver 容器是否运行 crictl ps | grep kube-apiserver 7.执行 kubeadm init \ --kubernetes-version=1.25.9 \ --apiserver-advertise-address=192.168.1.210 \ --pod-network-cidr=10.244.0.0/16 \ --cri-socket=unix:///var/run/cri-dockerd.sock kubeadm init \ --kubernetes-version=1.25.9 \ --apiserver-advertise-address=172.20.10.9 \ --pod-network-cidr=10.244.0.0/16 \ --cri-socket=unix:///var/run/cri-dockerd.sock 如果需要重新初始化:------- kubeadm reset -f rm -rf /etc/cni/net.d /var/lib/etcd /etc/kubernetes systemctl restart kubelet
6️⃣ 设置 kubectl 配置
mkdir -p $HOME/.kube cp /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config
7️⃣ 安装 Flannel 网络插件
kubectl apply -f kube-flannel.yml
8️⃣ 去除 master 污点,让其也能跑 Pod:
kubectl taint nodes --all node-role.kubernetes.io/control-plane-