统信UOS环境下高效部署Kubernetes集群的实战指南对于需要在国产操作系统环境中构建容器化平台的开发者而言统信UOS与Kubernetes的组合正成为企业级应用部署的新选择。不同于常见的Linux发行版UOS作为国产操作系统的代表在软件源管理、系统配置等方面有其特殊性而国内网络环境又给Kubernetes组件的获取带来了额外挑战。本文将分享一套经过实战验证的部署方案帮助开发者绕过常见陷阱快速搭建生产可用的K8s集群。1. 系统准备与环境调优在开始安装Kubernetes之前需要对UOS系统进行必要的配置调整。这些步骤看似基础却直接影响后续集群的稳定性和性能表现。1.1 系统基础配置首先确保系统已完成开发者模式切换并启用root账户。UOS默认采用图形化安装建议通过以下命令验证网络连通性ping -c 4 www.baidu.com接下来关闭可能影响Kubernetes运行的系统服务# 停用并禁用防火墙 sudo systemctl stop ufw sudo systemctl disable ufw # 临时关闭swap sudo swapoff -a为使swap设置永久生效需要编辑/etc/fstab文件注释掉所有包含swap的行。完成后执行reboot重启系统。1.2 内核参数调整Kubernetes对Linux内核参数有特定要求特别是网络相关的配置。创建/etc/sysctl.d/k8s.conf文件并写入以下内容net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1应用配置并验证sudo sysctl --system sysctl net.bridge.bridge-nf-call-iptables注意若提示sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables需先加载br_netfilter模块sudo modprobe br_netfilter2. 容器运行时部署与优化2.1 Docker安装与配置UOS官方源中的Docker版本可能较旧建议采用二进制安装方式获取稳定版本# 下载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 sudo cp docker/* /usr/bin/创建systemd服务单元文件/usr/lib/systemd/system/docker.service[Unit] DescriptionDocker Application Container Engine Afternetwork-online.target [Service] Typenotify ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock ExecReload/bin/kill -s HUP $MAINPID LimitNOFILEinfinity LimitNPROCinfinity [Install] WantedBymulti-user.target2.2 镜像加速配置为加速容器镜像拉取配置国内镜像源至关重要。创建/etc/docker/daemon.json{ registry-mirrors: [ https://b9pmyelo.mirror.aliyuncs.com, https://hub-mirror.c.163.com, https://mirror.baidubce.com ], exec-opts: [native.cgroupdriversystemd] }重启Docker服务使配置生效sudo systemctl daemon-reload sudo systemctl enable --now docker验证配置docker info | grep -A 5 Registry Mirrors3. Kubernetes组件安装与初始化3.1 配置Kubernetes国内源UOS使用apt作为包管理器需添加阿里云Kubernetes源sudo apt-get install -y apt-transport-https ca-certificates curl curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - echo deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main | sudo tee /etc/apt/sources.list.d/kubernetes.list更新源并安装指定版本组件sudo apt-get update sudo apt-get install -y kubelet1.23.1-00 kubeadm1.23.1-00 kubectl1.23.1-00 # 锁定版本防止意外升级 sudo apt-mark hold kubelet kubeadm kubectl3.2 集群初始化准备创建kubeadm配置文件kubeadm-config.yaml关键参数说明apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration localAPIEndpoint: advertiseAddress: MASTER_IP # 替换为实际IP bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock --- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers kubernetesVersion: 1.23.1 networking: podSubnet: 192.168.0.0/16 # 为Calico网络插件预留3.3 镜像预拉取技巧由于国内访问k8s.gcr.io受限可手动拉取阿里云镜像并重命名images( kube-apiserver:v1.23.1 kube-controller-manager:v1.23.1 kube-scheduler:v1.23.1 kube-proxy:v1.23.1 pause:3.6 etcd:3.5.1-0 coredns:v1.8.6 ) for image in ${images[]}; do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${image} docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${image} k8s.gcr.io/${image} done4. 集群启动与网络插件部署4.1 初始化控制平面执行集群初始化命令sudo kubeadm init --configkubeadm-config.yaml成功后将输出加入集群的指令形如kubeadm join control-plane-host:control-plane-port --token token \ --discovery-token-ca-cert-hash sha256:hash配置kubectl访问权限mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config4.2 网络插件选型与部署在UOS环境下Calico网络插件表现稳定。使用以下命令部署kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calico.yaml验证节点状态watch kubectl get nodes # 等待状态变为Ready4.3 工作节点加入集群在所有工作节点上重复环境准备步骤后执行master节点提供的join命令。加入成功后在master节点验证kubectl get nodes -o wide常见问题处理若节点卡在NotReady状态检查calico-node容器日志kubectl logs -n kube-system -l k8s-appcalico-node证书过期问题可通过重新生成join token解决kubeadm token create --print-join-command5. 集群验证与优化建议部署完成后运行以下测试验证集群功能kubectl create deployment nginx --imagenginx:alpine kubectl expose deployment nginx --port80 --typeNodePort kubectl get svc nginx访问测试服务验证网络连通性。为提高集群稳定性建议配置kubelet日志轮转sudo tee /etc/logrotate.d/kubelet EOF /var/log/kubelet.log { rotate 7 daily missingok compress delaycompress copytruncate } EOF设置系统预留资源sudo tee /etc/default/kubelet EOF KUBELET_EXTRA_ARGS--system-reservedcpu500m,memory1Gi EOF sudo systemctl restart kubelet定期维护操作清理未使用镜像docker image prune -a检查证书有效期kubeadm certs check-expiration备份etcd数据etcdctl snapshot save
统信UOS上快速搭建K8s集群:避开国内网络问题的完整指南
统信UOS环境下高效部署Kubernetes集群的实战指南对于需要在国产操作系统环境中构建容器化平台的开发者而言统信UOS与Kubernetes的组合正成为企业级应用部署的新选择。不同于常见的Linux发行版UOS作为国产操作系统的代表在软件源管理、系统配置等方面有其特殊性而国内网络环境又给Kubernetes组件的获取带来了额外挑战。本文将分享一套经过实战验证的部署方案帮助开发者绕过常见陷阱快速搭建生产可用的K8s集群。1. 系统准备与环境调优在开始安装Kubernetes之前需要对UOS系统进行必要的配置调整。这些步骤看似基础却直接影响后续集群的稳定性和性能表现。1.1 系统基础配置首先确保系统已完成开发者模式切换并启用root账户。UOS默认采用图形化安装建议通过以下命令验证网络连通性ping -c 4 www.baidu.com接下来关闭可能影响Kubernetes运行的系统服务# 停用并禁用防火墙 sudo systemctl stop ufw sudo systemctl disable ufw # 临时关闭swap sudo swapoff -a为使swap设置永久生效需要编辑/etc/fstab文件注释掉所有包含swap的行。完成后执行reboot重启系统。1.2 内核参数调整Kubernetes对Linux内核参数有特定要求特别是网络相关的配置。创建/etc/sysctl.d/k8s.conf文件并写入以下内容net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1应用配置并验证sudo sysctl --system sysctl net.bridge.bridge-nf-call-iptables注意若提示sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables需先加载br_netfilter模块sudo modprobe br_netfilter2. 容器运行时部署与优化2.1 Docker安装与配置UOS官方源中的Docker版本可能较旧建议采用二进制安装方式获取稳定版本# 下载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 sudo cp docker/* /usr/bin/创建systemd服务单元文件/usr/lib/systemd/system/docker.service[Unit] DescriptionDocker Application Container Engine Afternetwork-online.target [Service] Typenotify ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock ExecReload/bin/kill -s HUP $MAINPID LimitNOFILEinfinity LimitNPROCinfinity [Install] WantedBymulti-user.target2.2 镜像加速配置为加速容器镜像拉取配置国内镜像源至关重要。创建/etc/docker/daemon.json{ registry-mirrors: [ https://b9pmyelo.mirror.aliyuncs.com, https://hub-mirror.c.163.com, https://mirror.baidubce.com ], exec-opts: [native.cgroupdriversystemd] }重启Docker服务使配置生效sudo systemctl daemon-reload sudo systemctl enable --now docker验证配置docker info | grep -A 5 Registry Mirrors3. Kubernetes组件安装与初始化3.1 配置Kubernetes国内源UOS使用apt作为包管理器需添加阿里云Kubernetes源sudo apt-get install -y apt-transport-https ca-certificates curl curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - echo deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main | sudo tee /etc/apt/sources.list.d/kubernetes.list更新源并安装指定版本组件sudo apt-get update sudo apt-get install -y kubelet1.23.1-00 kubeadm1.23.1-00 kubectl1.23.1-00 # 锁定版本防止意外升级 sudo apt-mark hold kubelet kubeadm kubectl3.2 集群初始化准备创建kubeadm配置文件kubeadm-config.yaml关键参数说明apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration localAPIEndpoint: advertiseAddress: MASTER_IP # 替换为实际IP bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock --- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers kubernetesVersion: 1.23.1 networking: podSubnet: 192.168.0.0/16 # 为Calico网络插件预留3.3 镜像预拉取技巧由于国内访问k8s.gcr.io受限可手动拉取阿里云镜像并重命名images( kube-apiserver:v1.23.1 kube-controller-manager:v1.23.1 kube-scheduler:v1.23.1 kube-proxy:v1.23.1 pause:3.6 etcd:3.5.1-0 coredns:v1.8.6 ) for image in ${images[]}; do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${image} docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${image} k8s.gcr.io/${image} done4. 集群启动与网络插件部署4.1 初始化控制平面执行集群初始化命令sudo kubeadm init --configkubeadm-config.yaml成功后将输出加入集群的指令形如kubeadm join control-plane-host:control-plane-port --token token \ --discovery-token-ca-cert-hash sha256:hash配置kubectl访问权限mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config4.2 网络插件选型与部署在UOS环境下Calico网络插件表现稳定。使用以下命令部署kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calico.yaml验证节点状态watch kubectl get nodes # 等待状态变为Ready4.3 工作节点加入集群在所有工作节点上重复环境准备步骤后执行master节点提供的join命令。加入成功后在master节点验证kubectl get nodes -o wide常见问题处理若节点卡在NotReady状态检查calico-node容器日志kubectl logs -n kube-system -l k8s-appcalico-node证书过期问题可通过重新生成join token解决kubeadm token create --print-join-command5. 集群验证与优化建议部署完成后运行以下测试验证集群功能kubectl create deployment nginx --imagenginx:alpine kubectl expose deployment nginx --port80 --typeNodePort kubectl get svc nginx访问测试服务验证网络连通性。为提高集群稳定性建议配置kubelet日志轮转sudo tee /etc/logrotate.d/kubelet EOF /var/log/kubelet.log { rotate 7 daily missingok compress delaycompress copytruncate } EOF设置系统预留资源sudo tee /etc/default/kubelet EOF KUBELET_EXTRA_ARGS--system-reservedcpu500m,memory1Gi EOF sudo systemctl restart kubelet定期维护操作清理未使用镜像docker image prune -a检查证书有效期kubeadm certs check-expiration备份etcd数据etcdctl snapshot save