保姆级避坑指南:在openEuler 22.03 LTS上用kubeadm 1.32.2部署K8s集群(含阿里云镜像加速)
保姆级避坑指南在openEuler 22.03 LTS上用kubeadm 1.32.2部署K8s集群含阿里云镜像加速如果你正在openEuler系统上尝试部署Kubernetes集群很可能已经踩过不少坑。不同于常见的CentOS或UbuntuopenEuler作为国产操作系统在软件源、内核模块和容器运行时支持上都有其特殊性。本文将带你完整走一遍从系统准备到集群初始化的全流程重点解决以下典型问题为什么常规教程在openEuler上总是失败如何正确配置cri-dockerd以兼容kubeadm 1.32.2阿里云镜像加速的最佳实践是什么哪些内核参数必须调整才能确保集群稳定1. 系统准备openEuler专属配置1.1 软件源与基础环境openEuler的默认软件源可能不包含Kubernetes所需的所有依赖首先需要配置EPEL和Kubernetes专用源# 备份原有repo文件 cp /etc/yum.repos.d/openEuler.repo /etc/yum.repos.d/openEuler.repo.bak # 添加阿里云openEuler镜像源 cat /etc/yum.repos.d/openEuler.repo EOF [openEuler] nameopenEuler baseurlhttps://mirrors.aliyun.com/openeuler/openEuler-22.03-LTS/everything/x86_64/ enabled1 gpgcheck0 EOF # 添加Kubernetes源注意与常规CentOS源不同 cat /etc/yum.repos.d/kubernetes.repo EOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled1 gpgcheck0 EOF关键点说明必须禁用gpgcheck以避免签名验证失败openEuler 22.03的软件包命名规则与CentOS不同阿里云镜像源能显著提升下载速度1.2 内核参数调优openEuler默认的内核参数需要针对K8s进行优化# 加载必要内核模块 modprobe br_netfilter modprobe ip_vs modprobe ip_vs_rr modprobe ip_vs_wrr # 持久化模块加载 cat /etc/modules-load.d/k8s.conf EOF br_netfilter ip_vs ip_vs_rr ip_vs_wrr EOF # 关键网络参数 cat /etc/sysctl.d/k8s.conf EOF net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 vm.swappiness 0 EOF sysctl -p /etc/sysctl.d/k8s.conf常见问题排查如果modprobe报错可能需要先安装ipvsadmdnf install -y ipvsadm ipsetsysctl参数必须立即生效否则kubelet启动会失败2. 容器运行时cri-dockerd深度适配2.1 Docker安装与配置openEuler上的Docker安装需要特别注意版本兼容性# 安装指定版本Docker dnf install -y docker-ce-20.10.23 docker-ce-cli-20.10.23 # 配置阿里云镜像加速和cgroup驱动 mkdir -p /etc/docker cat /etc/docker/daemon.json EOF { registry-mirrors: [https://your-aliyun-mirror.mirror.aliyuncs.com], exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m } } EOF systemctl enable --now docker注意不要使用openEuler默认提供的docker版本可能与kubeadm 1.32.2存在兼容性问题2.2 cri-dockerd编译安装由于官方仓库可能没有openEuler的预编译包推荐从源码构建# 安装依赖 dnf install -y make golang git # 编译cri-dockerd git clone https://github.com/Mirantis/cri-dockerd.git cd cri-dockerd make cri-dockerd cp cri-dockerd /usr/local/bin/ # 创建systemd服务 cat /usr/lib/systemd/system/cri-docker.service EOF [Unit] DescriptionCRI Interface for Docker Afternetwork.target docker.service Requiresdocker.service [Service] ExecStart/usr/local/bin/cri-dockerd \ --network-plugincni \ --pod-infra-container-imageregistry.aliyuncs.com/google_containers/pause:3.9 Restartalways RestartSec2s [Install] WantedBymulti-user.target EOF systemctl enable --now cri-docker关键参数说明--pod-infra-container-image必须指定阿里云镜像地址必须确保docker.service先于cri-docker启动3. kubeadm定制化配置3.1 组件安装与版本锁定# 安装指定版本组件 dnf install -y kubelet-1.32.2 kubeadm-1.32.2 kubectl-1.32.2 --disableexcludeskubernetes # 防止自动更新 dnf versionlock add kubelet kubeadm kubectl3.2 初始化配置文件优化生成并修改初始化配置文件kubeadm config print init-defaults kubeadm-init.yaml需要修改的关键字段apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration localAPIEndpoint: advertiseAddress: 192.168.1.100 # 改为本机IP bindPort: 6443 nodeRegistration: criSocket: unix:///var/run/cri-dockerd.sock # 关键修改 name: k8s-master01 --- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration imageRepository: registry.aliyuncs.com/google_containers # 镜像加速 kubernetesVersion: 1.32.2 networking: podSubnet: 10.244.0.0/16 # 为Flannel网络插件准备 --- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: ipvs # 启用IPVS模式3.3 集群初始化与问题排查执行初始化命令kubeadm init --configkubeadm-init.yaml --upload-certs --v5常见错误及解决方案镜像拉取失败kubeadm config images pull --config kubeadm-init.yamlcri-dockerd连接超时journalctl -u cri-docker -f # 查看实时日志kubelet启动报错systemctl restart kubelet journalctl -xeu kubelet成功初始化后按照提示配置kubectlmkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config4. 工作节点加入与网络部署4.1 节点加入命令定制在master节点上生成加入命令kubeadm token create --print-join-command得到的命令需要添加cri-socket参数kubeadm join master-ip:6443 \ --token token \ --discovery-token-ca-cert-hash hash \ --cri-socket unix:///var/run/cri-dockerd.sock # 必须添加4.2 Flannel网络插件安装openEuler需要特殊配置的Flannel# 下载修改后的Flannel manifest wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml # 修改image地址为国内源 sed -i s|docker.io/rancher/mirrored-flannelcni-flannel|registry.aliyuncs.com/google_containers/flannel|g kube-flannel.yml # 部署 kubectl apply -f kube-flannel.yml验证网络状态kubectl get pods -n kube-system -l appflannel kubectl get nodes -o wide4.3 最终验证运行以下命令确认集群健康状态kubectl get componentstatus kubectl get pods -A kubectl describe nodes | grep -i taint # 应无不可调度污点如果遇到节点NotReady状态典型排查步骤检查kubelet日志journalctl -u kubelet -n 50 --no-pager验证网络连通性kubectl run test-nginx --imagenginx kubectl expose pod test-nginx --port80 kubectl run test-curl --imagecurlimages/curl -- sleep 3600 kubectl exec test-curl -- curl http://test-nginx检查IPVS规则ipvsadm -Ln记住在openEuler上部署K8s最大的不同在于软件源需要特别配置cri-dockerd必须从源码编译所有镜像地址需要替换为国内源内核模块需要手动加载经过这些调整后你应该能得到一个稳定的生产级Kubernetes集群。如果某个步骤失败建议先检查对应服务的日志大多数问题都能通过日志找到根源。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2458907.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!