统信uos部署kubernetes需系统级调优、内核参数配置、容器运行时适配、离线镜像支持及网络插件定制:一、禁用firewalld/ufw、swap、selinux,调高文件描述符;二、启用bridge-nf-call-iptables、ip转发及br_netfilter、ipvs模块;三、推荐docker二进制或containerd;四、使用uos官方apt源或离线导入镜像;五、kubeadm init指定cgroup驱动与国内镜像仓库,部署flannel/calico;六、统一主机名与hosts解析。

如果您在统信UOS系统上尝试部署Kubernetes集群,但遭遇初始化失败、组件无法拉取或网络插件不生效等问题,则很可能是由于基础环境未按K8s硬性要求调优所致。以下是针对UOS平台的高级部署方法,覆盖多源适配、离线支持与内核级兼容性处理:
一、系统级强制调优:关闭干扰服务与资源限制
UOS默认启用的防火墙(firewalld或ufw)、Swap分区及SELinux策略会直接导致kubelet启动异常或Pod调度失败,必须彻底禁用并持久化。
1、执行命令停用并禁用防火墙服务:
systemctl disable --now firewalld
若系统使用ufw,则运行:ufw disable
2、临时关闭Swap并注释其挂载项:
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
3、永久禁用SELinux(适用于UOS Server版):
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
4、配置系统资源上限,避免节点因文件描述符不足拒绝Pod调度:
cat > /etc/security/limits.conf
* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited
EOF
二、内核参数与模块加载:满足K8s网络与调度底层依赖
Kubernetes依赖bridge-nf-call-iptables、IP转发及IPVS内核模块实现Service流量转发与负载均衡,UOS默认未启用这些功能,需手动加载并持久化。
1、创建内核参数配置文件:
cat > /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
2、应用配置并验证:
sudo sysctl --system
sysctl net.bridge.bridge-nf-call-iptables
3、若提示cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables,则加载br_netfilter模块:
modprobe br_netfilter
echo "br_netfilter" >> /etc/modules-load.d/k8s.conf
4、为支持IPVS模式,预加载必要内核模块:
cat > /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
systemctl enable --now systemd-modules-load.service
三、容器运行时部署:Docker二进制安装与Containerd双轨方案
UOS官方源中Docker版本陈旧且缺乏对cgroup v2的完整支持,推荐采用高稳定性的Docker二进制安装;同时提供Containerd作为替代方案,适配kubeadm 1.27+对CRI的强制要求。
1、下载并解压Docker静态二进制包:
wget https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/docker-20.10.9.tgz
tar xf docker-20.10.9.tgz
cp docker/* /usr/bin/
2、创建Docker systemd服务单元:
cat > /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
After=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP \$MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
[Install]
WantedBy=multi-user.target
EOF
3、启用Docker服务:
systemctl daemon-reload
systemctl enable --now docker
4、若选用Containerd(推荐用于K8s 1.27+):
apt install -y containerd runc cri-tools containernetworking-plugins
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
systemctl enable --now containerd
四、Kubernetes组件安装:APT源+离线镜像双路径保障
国内网络环境下,直接访问kubernetes.io APT源常超时或证书校验失败,需切换至UOS官方Kubernetes仓库或使用离线镜像包,确保kubeadm、kubelet等核心组件可稳定获取。
1、启用UOS官方Kubernetes仓库:
apt-add-repository "deb [arch=amd64] https://mirrors.uniontech.com/k8s/ uos-server main"
2、安装核心组件并锁定版本防止意外升级:
apt update
apt install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
3、若网络不可达,使用离线镜像包部署:
ctr -n k8s.io images import /usr/share/k8s-container-images/kube-apiserver.tar
ctr -n k8s.io images import /usr/share/k8s-container-images/kube-controller-manager.tar
ctr -n k8s.io images import /usr/share/k8s-container-images/kube-scheduler.tar
ctr -n k8s.io images import /usr/share/k8s-container-images/kube-proxy.tar
ctr -n k8s.io images import /usr/share/k8s-container-images/coredns.tar
ctr -n k8s.io images import /usr/share/k8s-container-images/pause.tar
ctr -n k8s.io images import /usr/share/k8s-container-images/etcd.tar
五、集群初始化与网络插件注入:支持Flannel与Calico双栈选择
kubeadm init默认无法自动识别UOS内核特性,需显式指定cgroup驱动与Pod CIDR,并在初始化后立即注入CNI插件,否则节点将长期处于NotReady状态。
1、配置kubelet使用systemd cgroup驱动:
echo "KUBELET_EXTRA_ARGS=--cgroup-driver=systemd" > /etc/default/kubelet
systemctl daemon-reload
systemctl restart kubelet
2、执行带CIDR与镜像仓库前缀的初始化:
kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--image-repository registry.uniontech.com/k8s
若使用社区镜像,替换为:--image-repository registry.k8s.io
3、配置kubectl访问权限:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
4、部署Flannel网络插件(轻量级,适配UOS内核):
curl -sSL https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml | sed 's/quay.io\/flannel/registry.uniontech.com\/flannel/g' | kubectl apply -f -
5、或部署Calico(需先启用IPVS模块):
curl -sSL https://raw.githubusercontent.com/projectcalico/calico/v3.26/manifests/calico.yaml | sed 's/image: quay.io\/calico/image: registry.uniontech.com\/calico/g' | kubectl apply -f -
六、节点加入与主机名一致性校验:规避DNS与证书绑定故障
UOS节点若未正确配置hostname与/etc/hosts映射,会导致kubeadm join阶段证书校验失败或API Server连接超时,必须在所有节点执行统一命名与静态解析。
1、设置唯一主机名(主节点设为control,工作节点设为node1、node2等):
hostnamectl set-hostname control
2、编辑全局hosts文件,确保所有节点能互相解析:
cat > /etc/hosts
192.168.15.58 control
192.168.15.59 node1
192.168.15.60 node2
EOF
3、重启network服务或执行systemctl restart systemd-hostnamed确保生效
4、在工作节点执行join命令前,确认已同步上述全部基础配置(含内核参数、swap关闭、模块加载)










