银河麒麟部署Kubernetes需绕过防火墙、卸载Podman、匹配架构镜像与cgroup驱动,并完成Swap关闭、主机名/hosts配置、内核模块加载、containerd安装与kubelet锁定等系统级前置;高可用初始化须配置controlPlaneEndpoint并及时使用证书密钥加入master节点,Calico需调参适配麒麟内核rp_filter严格性。

在银河麒麟操作系统上安装Kubernetes集群环境,需绕过默认防火墙策略、规避预装Podman冲突、匹配ARM/x86架构镜像与cgroup驱动,并确保内核模块与参数满足kubeadm硬性要求,否则初始化必然失败。
系统级前置准备
在所有节点执行:关闭Swap并永久注释fstab条目,否则kubeadm init会直接报错退出;执行swapoff -a后立即运行sed -i '/ swap / s/^/#/' /etc/fstab,漏掉这步重启后Swap自动启用,集群后续会不可控飘移。
配置主机名与hosts解析:用hostnamectl set-hostname master1设置唯一主机名,再向/etc/hosts追加全部节点IP与主机名映射,【必须使用全限定域名或纯主机名,禁止混用IP与别名】,否则etcd成员发现失败。
加载必要内核模块:创建/etc/modules-load.d/k8s.conf写入br_netfilter overlay ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack,然后执行modprobe -a br_netfilter overlay——ARM架构的麒麟V10/V11必须显式加载overlay,x86可略过但加上无害。
容器运行时安装(containerd)
方法一:麒麟官方源安装(推荐x86_64)
执行yum install -y containerd.io-1.7.20-3.1.ky10,版本号必须与麒麟V11 SP1仓库中实际提供的包严格一致,【切勿用通用Docker CE包,会导致cgroup驱动不匹配】。
方法二:ARM架构离线部署
下载对应containerd-1.7.20-linux-arm64.tar.gz,解压至/usr/local/bin,手动创建/etc/containerd/config.toml,关键项设为systemd_cgroup = true——麒麟V10 SP2默认cgroup v1,此配置强制走systemd路径,避免kubelet反复报cgroup driver mismatch错误。
启动服务:systemctl daemon-reload && systemctl enable --now containerd,验证用crictl ps应返回空列表而非报错。
kubeadm与K8s组件安装
第一步:配置麒麟V11专用YUM源
备份原repo:cp /etc/yum.repos.d/kylin_x86_64.repo /etc/yum.repos.d/kylin_x86_64.repo.bak,再根据CPU类型写入适配源——飞腾平台用http://archive.kylinos.cn/kylin/KYLIN-ALL/10.1/adv/lic/base/adv/,海光平台则换为http://archive.kylinos.cn/kylin/KYLIN-ALL/10.1/adv/lic/base/hygon/。
第二步:安装kubeadm、kubelet、kubectl
执行yum install -y kubelet-1.35.0-0 kubeadm-1.35.0-0 kubectl-1.35.0-0,版本号必须三位精确匹配,麒麟V11 2503补丁版已内置1.35.0适配包,若yum提示找不到请检查源是否启用正确。
第三步:锁定kubelet并启动systemctl enable --now kubelet,立即执行systemctl daemon-reload,否则kubelet因cgroup未就绪持续报错退出。
高可用集群初始化
先在master1节点生成初始化配置:kubeadm config print init-defaults > kubeadm-init.yaml,手动修改三处:
① criSocket: unix:///run/containerd/containerd.sock(containerd路径)
② imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers(国内镜像加速)
③ 在clusterConfiguration下添加controlPlaneEndpoint: "lb.kylin.local:6443",该域名需提前在所有节点/etc/hosts中解析到HA负载均衡VIP。
执行kubeadm init --config kubeadm-init.yaml,成功后按提示执行mkdir -p $HOME/.kube && cp -i /etc/kubernetes/admin.conf $HOME/.kube/config,这一步漏掉将导致kubectl命令全部失效。
在master2、master3节点执行kubeadm join命令时,务必添加--control-plane --certificate-key参数,证书密钥从master1的init输出末尾复制,【该密钥15分钟后自动失效,超时需重新生成】。
网络插件部署(Calico)
下载适配麒麟的Calico清单:wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/calico.yaml,编辑文件,将typha_service_name值改为calico-typha,并在spec.containers[0].env中增加- name: FELIX_IGNORELOOSERPF value: "true"——麒麟内核对反向路径过滤(rp_filter)更严格,不加此参数Pod间跨节点通信会断连。
执行kubectl apply -f calico.yaml,等待kubectl get pods -n kube-system中所有calico-*状态变为Running,此时kubectl get nodes应显示全部master节点Ready。
Worker节点加入集群
在worker节点执行master1输出的kubeadm join命令,去掉--control-plane和--certificate-key参数,仅保留--token与--discovery-token-ca-cert-hash两段。
加入后立即验证:kubectl get nodes -o wide,若新节点状态为NotReady,90%概率是containerd未正确配置cgroup driver,检查cat /var/lib/kubelet/config.yaml | grep cgroupDriver是否为systemd,不是则手工修改并重启kubelet。


















