统信国产UOS v20-1070E 系统环境安装 Kubernetes v1.26.9集群
前言:
为推进软硬件国产化工作,我在统信UOS v20-1070E系统实验环境中,部署了k8s v1.26.9集群。现将完整安装过程整理记录,仅供自己后续参考使用(注:相关软件安装包下载链接未附,请自行获取)。
一、基础环境准备(所有节点)UOS v20-1070E 系统环境优化
在 UOS v20-1070E 上安装 Kubernetes v1.26.9集群时,操作系统必须完成:关闭防火墙 / SELinux、禁用 Swap、内核网络参数、
加载网桥模块、文件句柄 / 进程数限制、主机名与 hosts、时间同步、内核版本建议。以下为可直接复制的操作步骤
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
- 关闭 SELinux
UOS 默认可能已关闭,建议强制禁用:
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
[root@UoSv20-WorkerIP100 ~]# getenforce
Disabled
- 禁用 Swap(K8s 强制要求)
# 临时关闭
swapoff -a
# 永久关闭(注释 fstab 中 swap 行)
sed -i '/swap/s/^/#/' /etc/fstab
- 设置主机名与 hosts 解析
hostnamectl set-hostname UoSv20-WorkerIP100 --static
cat >> /etc/hosts << EOF
10.x.x.252 docker.harbor.com
10.x.x.228 UoSv20-MasterIP228
10.x.x.100 UoSv20-WorkerIP100
10.x.x.227 UoSv20-WorkerIP227
10.x.x.229 UoSv20-WorkerIP229
EOF
vim /etc/hosts
- 时间同步(集群一致性必需)
# 安装 chrony(UOS 官方源)
yum update
yum install -y chrony
systemctl enable chronyd
systemctl start chronyd
# 验证
chronyc sources
二、内核模块与网络参数(所有节点,关键!)
1.加载内核模块(网桥、IPVS)
# 一次性加载
modprobe overlay
modprobe br_netfilter
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack
# 如何永久生效开机自动加载
cat > /etc/modules-load.d/k8s.conf << EOF
overlay
br_netfilter
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
#立即重新加载并应用系统配置的内核模块列表,
#使新添加或修改的内核模块在当前会话中生效,而无需重启整个操作系统
sudo systemctl restart systemd-modules-load.service
验证模块是否已成功加载
使用 lsmod | grep ip_vs
2.内核 sysctl 参数(必须)
cat > /etc/sysctl.d/k8s.conf << EOF
# 网桥转发
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
# IPv4 转发
net.ipv4.ip_forward = 1
# 关闭 IPv6(可选,环境无 IPv6 时建议)
net.ipv6.conf.all.disable_ipv6 = 1
# 内存与 OOM
vm.swappiness = 0
vm.overcommit_memory = 1
vm.panic_on_oom = 0
# 文件句柄与 inotify
fs.file-max = 1048576
fs.nr_open = 1048576
fs.inotify.max_user_watches = 1048576
fs.inotify.max_user_instances = 8192
# 网络连接跟踪
net.netfilter.nf_conntrack_max = 262144
EOF
# 生效
sysctl -p /etc/sysctl.d/k8s.conf
# 验证
sysctl net.bridge.bridge-nf-call-iptables net.ipv4.ip_forward
三、系统资源限制(所有节点)
cat > /etc/security/limits.d/k8s.conf << EOF
* soft nofile 1048576
* hard nofile 1048576
* soft nproc 65535
* hard nproc 65535
EOF
立即生效(当前会话)
ulimit -n 1048576
ulimit -u 65535
四、内核版本建议(UOS v20-1070E)
UOS v20-1070E 默认内核:4.19.x,可运行 K8s 1.26,但建议升级到 5.4+
以支持更好的网络 / 存储特性(如 Calico eBPF、CSI 驱动)
1.查看当前内核:uname -r
2.升级内核(UOS 官方源):yum install -y linux-image-5.4.0-125-generic && reboot
五、容器运行时前提(所有节点)
K8s 1.26 默认推荐 containerd(1.6.x+),需确保:
containerd 已安装并配置 cgroup 驱动为 systemd
CNI 目录 /opt/cni/bin 存在并包含必要插件
六、验证清单(执行后检查)
# 1. Swap 已关闭
cat /etc/fstab | grep swap
free -h
# 2. 内核模块已加载
lsmod | grep br_netfilter
lsmod | grep ip_vs
# 3. 网络参数正确
sysctl net.bridge.bridge-nf-call-iptables net.ipv4.ip_forward
# 4. 文件限制生效
ulimit -n
ulimit -u
七、安装 containerd 运行时和runc 到/usr/local/bin下
1.安装containerd 运行时 到/usr/local/bin下
ll /usr/local/bin 查看目录内文件情况
tar -zxvf containerd-1.6.22-linux-amd64.tar.gz && mv bin/* /usr/local/bin/
2.拷贝containerd.service 到/usr/lib/systemd/system/containerd.service
cp containerd.service /usr/lib/systemd/system/
cp runc.amd64 /usr/local/bin/runc
chmod +x /usr/local/bin/runc
ll /usr/lib/systemd/system/containerd.service
-rw-r--r-- 1 root root 1308 4月 18 15:58 /usr/lib/systemd/system/containerd.service
3.创建/etc/containerd/certs.d目录,config.toml、hosts.toml文件
mkdir -p /etc/containerd/certs.d
mkdir -p /etc/containerd/certs.d/registry.k8s.io
cat > /etc/containerd/certs.d/registry.k8s.io/hosts.toml << 'EOF'
server = "https://registry.k8s.io"
# 这里使用阿里云镜像加速源,和你之前的配置保持一致
[host."https://registry.aliyuncs.com/google_containers"]
capabilities = ["pull", "resolve"]
skip_verify = false
EOF
sudo containerd config default > /etc/containerd/config.toml
cd /etc/containerd/
(rsync -azuP config.toml certs.d/* 10.x.x.100:/etc/containerd/)
vim config.toml 确保一下几项配置正确即可
root = "/DataDir/containerd" #images 存储目录
state = "/run/containerd"
temp = ""
version = 2
# --- 镜像与存储配置 ---
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = "/etc/containerd/certs.d"
# --- 镜像与存储配置 ---
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
BinaryName = "/usr/local/bin/runc"
SystemdCgroup = true
sudo systemctl daemon-reload
sudo systemctl enable containerd --now
#确保/run/containerd/containerd.sock存在
ll /run/containerd/containerd.sock确保存在
4.安装 nerdctl
wget https://github.com/containerd/nerdctl/releases/download/v2.2.2/nerdctl-2.2.2-linux-amd64.tar.gz
tar -zxvf nerdctl-2.2.2-linux-amd64.tar.gz -C /usr/local/bin/
chmod +x /usr/local/bin/nerdctl
# 验证
nerdctl --version
nerdctl images
八、安装k8sv1.26.9 相关组件(kubeadm kubelet kubectl cri-tools)
1.看k8s集群组件镜像版本
yum list kubelet --showduplicates|egrep 1.2[5-8].*|sort -r
2.安装k8s集群组件
K8S_VERSION="1.26.9"
yum install -y kubelet-${K8S_VERSION} kubeadm-${K8S_VERSION} kubectl-${K8S_VERSION} --disableexcludes=kubernetes
#配置kubelet开机自启,在初始化前需要stop kubelet.service
sudo systemctl enable kubelet.service
3.查看k8s集群组件镜像
kubeadm config images list --kubernetes-version v1.26.9
4.拉取k8s集群组件镜像
k8sImagesForNerdctl.sh (kubeadm config images pull --kubernetes-version v1.26.9 #官方源拉取镜像)
cat k8sImagesForNerdctl.sh
#!/bin/bash
url=registry.aliyuncs.com/google_containers
version=v1.26.9
kubeadm_images=$(kubeadm config images list --kubernetes-version=$version)
for full_image in $kubeadm_images ; do
# 处理镜像名,兼容 coredns 的三层路径
image_name=$(echo $full_image | awk -F '/' '{if(NF==3) print $3; else print $2}')
ali_image="$url/$image_name"
k8s_image="registry.k8s.io/$image_name"
echo "===== 拉取镜像:$ali_image ====="
nerdctl --namespace k8s.io pull $ali_image
echo "===== 打标签:$ali_image → $k8s_image ====="
nerdctl --namespace k8s.io tag $ali_image $k8s_image
echo "===== 删除阿里云镜像:$ali_image ====="
nerdctl --namespace k8s.io rmi $ali_image
done
echo "===== 所有镜像处理完成,查看结果 ====="
nerdctl --namespace k8s.io images | grep -E "kube|etcd|pause|coredns"
5.创建crictl.yaml配置文件并写入 crictl.yaml
cat > /etc/crictl.yaml << 'EOF'
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
验证配置是否生效 crictl info
6.初始化k8s集群(Master 节点初始化,worker节点不用初始化)
kubeadm init --config /home/Resource/kubeadm-config.yaml --ignore-preflight-errors=all
cat kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.26.9
imageRepository: registry.k8s.io
advertiseAddress: 10.x.x.100
networking:
serviceSubnet: 10.96.0.0/12
podSubnet: 192.168.0.0/16
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
#查看k8s集群初始化状况
kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
etcd-0 Healthy
controller-manager Healthy ok
scheduler Healthy ok
kubectl get pods -A 
7.控制平面安装calico CNI插件
导入images
ctr -n k8s.io images import calico-kube-controllersv3.25.0.tar
ctr -n k8s.io images import calico-cniv3.25.0.tar
ctr -n k8s.io images import calico-nodev3.25.0.tar
创建Calico 网络插件POD
kubectl apply -f calico.yaml
8.Worker节点加入k8s集群
更多推荐




所有评论(0)