麒麟V10离线部署Kubernetes 1.32.11全攻略
1. 项目背景与核心挑战
在国产化替代的大背景下,越来越多的企业开始将业务系统迁移到国产操作系统平台。麒麟V10作为国产操作系统的代表之一,其安全性和稳定性已得到广泛验证。而Kubernetes(k8s)作为容器编排领域的事实标准,在国产系统上的部署需求也日益增长。
这次我们要解决的问题是在麒麟V10系统上离线部署k8s 1.32.11版本。离线环境意味着我们无法直接使用包管理器的在线安装方式,所有依赖都需要预先下载并传输到目标环境。这种部署方式常见于金融、军工等对网络安全要求严格的场景。
提示:离线安装的核心难点在于依赖包的完整性和版本匹配,一个缺失的依赖可能导致整个安装过程失败。
2. 环境准备与依赖检查
2.1 系统基础环境配置
麒麟V10基于openEuler开发,采用Linux 5.10内核。在开始安装前,需要确认以下系统配置:
- 关闭防火墙和SELinux:
systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config- 关闭swap分区:
swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab- 设置主机名解析:
echo "192.168.1.100 master" >> /etc/hosts echo "192.168.1.101 node1" >> /etc/hosts2.2 离线资源包准备
需要提前下载以下组件包:
- kubeadm、kubelet、kubectl 1.32.11版本
- containerd或Docker运行时
- CNI插件(推荐使用flannel或calico)
- 相关依赖库(libseccomp、conntrack等)
建议在联网环境使用以下命令下载所需rpm包:
yum install --downloadonly --downloaddir=/path/to/save kubelet-1.32.11 kubeadm-1.32.11 kubectl-1.32.113. 容器运行时安装与配置
3.1 containerd安装
containerd是Kubernetes推荐的容器运行时,相比Docker更加轻量:
- 安装containerd:
rpm -ivh containerd-*.rpm- 配置containerd:
mkdir -p /etc/containerd containerd config default > /etc/containerd/config.toml- 修改配置文件启用systemd cgroup:
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] ... [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true3.2 镜像仓库配置
离线环境需要配置私有镜像仓库:
- 在可联网机器上拉取所需镜像:
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.32.11- 将镜像打包并导入离线环境:
docker save -o k8s-images.tar $(docker images -q)4. Kubernetes集群部署
4.1 主节点初始化
- 安装kubeadm、kubelet和kubectl:
rpm -ivh kubelet-1.32.11*.rpm kubeadm-1.32.11*.rpm kubectl-1.32.11*.rpm- 初始化控制平面:
kubeadm init \ --image-repository=local-registry:5000/google_containers \ --kubernetes-version=v1.32.11 \ --pod-network-cidr=10.244.0.0/16- 配置kubectl:
mkdir -p $HOME/.kube cp /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config4.2 网络插件安装
以flannel为例:
- 下载flannel镜像和manifest:
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml- 修改配置文件中的网络CIDR:
net-conf.json: | { "Network": "10.244.0.0/16", "Backend": { "Type": "vxlan" } }- 应用配置:
kubectl apply -f kube-flannel.yml5. 节点加入与验证
5.1 工作节点加入
- 在工作节点上执行:
kubeadm join 192.168.1.100:6443 \ --token <token> \ --discovery-token-ca-cert-hash sha256:<hash>- 在主节点验证节点状态:
kubectl get nodes5.2 集群功能验证
- 部署测试应用:
kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort- 检查服务状态:
kubectl get pods,svc6. 常见问题排查
6.1 镜像拉取失败
现象:Pod处于ImagePullBackOff状态
解决方案:
- 检查镜像仓库配置是否正确
- 确认镜像已导入本地仓库
- 查看kubelet日志:
journalctl -u kubelet -f6.2 网络不通
现象:Pod间无法通信
排查步骤:
- 检查flannel Pod是否正常运行
- 验证节点路由表:
ip route show- 检查防火墙规则
6.3 kubelet启动失败
可能原因:
- cgroup驱动不匹配
- 证书过期
- 端口冲突
解决方法:
systemctl daemon-reload systemctl restart kubelet journalctl -xeu kubelet7. 性能优化建议
- 内核参数调优:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf sysctl -p- kubelet资源配置:
--max-pods=100 \ --kube-reserved=cpu=500m,memory=1Gi \ --system-reserved=cpu=500m,memory=1Gi- 容器日志轮转:
{ "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" } }在实际部署过程中,我发现麒麟V10的某些内核模块需要手动加载才能支持Kubernetes的某些功能。建议在部署前先检查内核模块是否完整,特别是overlay和br_netfilter模块。另外,由于是离线环境,建议提前准备好所有可能的依赖包,避免安装过程中因缺少依赖而中断。