统信UOS环境下Kubernetes 1.23.1国内镜像源高效部署指南

对于国内开发者而言,在统信UOS操作系统上部署Kubernetes集群常面临镜像拉取困难、依赖配置复杂等痛点。本文将详细介绍如何利用阿里云等国内镜像源,在完全本地化环境中完成kubeadm、kubelet等核心组件的安装与配置,实现高效稳定的集群部署。

1. 环境准备与系统配置

在开始Kubernetes部署前,需要确保统信UOS系统已完成基础环境调优。不同于常规Linux发行版,UOS作为国产操作系统有其特定的配置要求。

首先需要启用开发者模式并获取root权限:

sudo passwd root
su -

关键系统配置步骤:

  1. 关闭防火墙避免端口冲突
systemctl stop firewalld
systemctl disable firewalld
  1. 禁用swap分区确保kubelet正常运行
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
  1. 配置网络桥接参数
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

注意:UOS默认使用network-manager管理网络,若遇到网络异常可尝试重启服务:

systemctl restart NetworkManager

2. 容器运行时与Kubernetes组件安装

2.1 Docker安装与配置

推荐使用二进制方式安装Docker以避免兼容性问题:

wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz
tar xf docker-20.10.9.tgz
cp docker/* /usr/bin/

配置systemd服务单元:

cat > /usr/lib/systemd/system/docker.service <<'EOF'
[Unit]
Description=Docker Application Container Engine
After=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

配置国内镜像加速:

{
  "registry-mirrors": [
    "https://b9pmyelo.mirror.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}

2.2 Kubernetes组件安装

配置阿里云Kubernetes源:

apt-get install -y apt-transport-https ca-certificates curl
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
apt-get update

安装指定版本组件:

apt-get install -y kubelet=1.23.1-00 kubeadm=1.23.1-00 kubectl=1.23.1-00
apt-mark hold kubelet kubeadm kubectl

3. 集群初始化与镜像处理

3.1 镜像预处理方案

由于无法直接访问k8s.gcr.io,需通过阿里云镜像仓库获取所需镜像:

  1. 查询所需镜像列表:
kubeadm config images list --kubernetes-version v1.23.1
  1. 从阿里云拉取并重命名镜像:
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}
done

3.2 集群初始化配置

创建kubeadm配置文件:

apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: <MASTER_IP>
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: 1.23.1
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
networking:
  podSubnet: 192.168.0.0/16

初始化主节点:

kubeadm init --config=kubeadm-config.yaml

配置kubectl:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

4. 网络插件部署与节点加入

4.1 Calico网络部署

使用国内镜像源安装Calico:

curl -O https://docs.projectcalico.org/v3.21/manifests/calico.yaml
sed -i 's|docker.io/calico/|registry.cn-shanghai.aliyuncs.com/calico/|g' calico.yaml
kubectl apply -f calico.yaml

4.2 工作节点加入

在工作节点执行主节点初始化后提供的join命令:

kubeadm join <MASTER_IP>:6443 --token <TOKEN> \
    --discovery-token-ca-cert-hash sha256:<HASH>

验证节点状态:

kubectl get nodes -w

5. 常见问题排查与优化

镜像拉取失败处理:

  • 检查Docker镜像加速配置
  • 手动拉取缺失镜像并重命名
  • 验证镜像tag与Kubernetes版本匹配

节点NotReady状态排查:

  1. 检查kubelet服务状态:
systemctl status kubelet
journalctl -xeu kubelet
  1. 验证网络插件日志:
kubectl logs -n kube-system <calico-pod-name>

性能优化建议:

  • 调整kubelet最大pod数量:
echo "KUBELET_EXTRA_ARGS=--max-pods=100" > /etc/default/kubelet
systemctl restart kubelet
  • 配置Docker日志轮转:
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

更多推荐