银河麒麟v11部署kubernetes 1.35.0需重点适配selinux上下文、br_netfilter模块加载顺序、containerd 1.6+版本及keepalived内核模块;仅setenforce 0或kubeadm默认流程无法通过。

国产操作系统(如银河麒麟v11、统信UOS、麒麟V10)上安装Kubernetes,不是“换个系统装一遍kubeadm”就能跑通的事。核心障碍不在Kubernetes本身,而在系统级安全机制、内核模块支持、容器运行时兼容性这三层——跳过任一层适配,kubeadm init大概率卡在waiting for the control plane to become ready或直接报failed to run Kubelet。
为什么setenforce 0不够用:SELinux与/var/lib/kubelet上下文冲突
银河麒麟v11默认启用SELinux且策略更严格,仅执行setenforce 0是临时放行,重启后失效;更关键的是,kubelet启动时会尝试写入/var/lib/kubelet,而该目录的SELinux上下文默认为system_u:object_r:var_lib_t:s0,不匹配kubelet所需的system_u:object_r:container_file_t:s0。
- 必须手动重标上下文:
sudo semanage fcontext -a -t container_file_t "/var/lib/kubelet(/.*)?",再执行sudo restorecon -Rv /var/lib/kubelet - 检查是否生效:
ls -Z /var/lib/kubelet,输出中应含container_file_t - 统信UOS虽默认禁用SELinux,但若启用了,同样需此步骤;麒麟V10部分SP版本则需额外加载
container-selinux包
br_netfilter模块加载失败:内核参数与模块依赖的隐性耦合
常见错误是sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables,表面看是参数未生效,实则是br_netfilter模块根本没加载成功——麒麟v11内核对overlay和br_netfilter模块有加载顺序要求,先modprobe overlay再modprobe br_netfilter才稳定。
针对 Kubernetes 仪表板和 Web UI 的浏览器自动化。适用于与 Kubernetes Dashboard、Grafana、ArgoCD UI 或其他 Web 界面交互。需要设置 MCP_BROWSER_ENABLED=true。
- 验证模块状态:
lsmod | grep -E '^(br_netfilter|overlay)',两模块都必须存在 - 持久化加载:写入
/etc/modules-load.d/k8s.conf,内容为overlay换行br_netfilter,而非只写一个 - 内核参数必须配套:除
net.bridge.bridge-nf-call-iptables = 1外,net.bridge.bridge-nf-call-ip6tables = 1在IPv6环境或某些CNI插件下是刚需
containerd版本与CRI规范不匹配:麒麟v11默认源的坑
Kubernetes 1.35.0要求CRI至少为v1alpha2,而银河麒麟v11官方源中的containerd多为1.4.x或1.5.x,调用kubelet --version时可能显示FATA[0000] failed to run Kubelet: unsupported CRI version。
- 必须离线升级:从GitHub下载
containerd-1.6.21-linux-arm64.tar.gz(飞腾平台)或-amd64.tar.gz(海光/兆芯),解压到/usr/local - 关键配置项:在
/etc/containerd/config.toml中确认[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]段存在,且cgroup_driver = "systemd"(与kubelet保持一致) - 验证CRI版本:
crictl version输出中RuntimeName应为containerd,RuntimeVersion不低于v1.6.21
高可用组件选型绕不开keepalived内核模块限制
在麒麟v11上部署keepalived + haproxy做API Server负载均衡时,keepalived进程常因无法绑定VRRP socket而反复崩溃,日志报Kernel is not configured for IPVS or VRRP。
- 需手动加载内核模块:
sudo modprobe ip_vs、sudo modprobe ip_vs_rr、sudo modprobe vrrp - 持久化:将三者写入
/etc/modules-load.d/keepalived.conf - 注意
ip_vs模块依赖nf_conntrack,若lsmod | grep nf_conntrack为空,需先modprobe nf_conntrack
国产系统部署Kubernetes最易被忽略的点,是把“系统初始化”当成一次性动作——实际上,semange上下文、modprobe模块、containerd配置这三者任意一个在系统更新或内核升级后都可能回退,必须纳入集群生命周期管理脚本中定期校验。










