news 2026/8/25 21:38:46

【Kubernetes 实战】(一)部署 Ruoyi-Cloud —— 环境准备

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Kubernetes 实战】(一)部署 Ruoyi-Cloud —— 环境准备

Kubernetes v1.28.2 集群安装文档(CentOS 7)

目录

  • 一、环境准备
  • 二、安装容器运行时(containerd)
  • 三、安装 kubeadm、kubelet、kubectl
  • 四、初始化控制平面节点(Master)
  • 五、安装 Calico 网络插件
  • 六、配置 kubectl
  • 七、加入工作节点(Worker)
  • 八、验证集群
  • 九、常见问题及解决方案

一、环境准备

1.1 节点规划

角色主机名CPU内存数量
控制平面节点k8s-master≥2核≥2GB1台
工作节点k8s-worker-1≥2核≥2GB≥1台

1.2 操作系统要求

  • CentOS 7.x
  • 所有节点网络互通
  • 确保时间同步

1.3 基础配置(所有节点执行)

设置主机名
# Master 节点执行hostnamectl set-hostname k8s-master# Worker 节点执行(如有多个,依次设置)hostnamectl set-hostname k8s-worker-1
配置 hosts 解析
cat>>/etc/hosts<<EOF <MASTER_IP> k8s-master <WORKER1_IP> k8s-worker-1 EOF

<MASTER_IP><WORKER1_IP>替换为实际 IP 地址。

关闭防火墙(测试环境)
systemctl stop firewalld systemctl disable firewalld

生产环境建议:放通必要端口而非直接关闭,详见第九节。

关闭 SELinux
setenforce0sed-i's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config
关闭 Swap
swapoff-ased-ri's/.*swap.*/#&/'/etc/fstab
配置内核参数
cat>/etc/modules-load.d/k8s.conf<<EOF overlay br_netfilter EOFmodprobe overlay modprobe br_netfiltercat>/etc/sysctl.d/k8s.conf<<EOF net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOFsysctl--system
配置国内 YUM 源(可选)
mv/etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bakcurl-o/etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum makecache

二、安装容器运行时(containerd)

2.1 安装 containerd

# 添加 Docker 官方源yuminstall-yyum-utils yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装 containerd(注意包名是 containerd.io)yuminstall-ycontainerd.io

2.2 配置 containerd

# 生成默认配置mkdir-p/etc/containerd containerd config default>/etc/containerd/config.toml# 启用 SystemdCgroup(K8s 要求)sed-i's/SystemdCgroup = false/SystemdCgroup = true/'/etc/containerd/config.toml# 配置镜像加速器(解决国内网络问题)cat>>/etc/containerd/config.toml<<EOF [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com"] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"] endpoint = ["https://registry.aliyuncs.com/google_containers"] EOF

2.3 启动 containerd

systemctl restart containerd systemctlenablecontainerd systemctl status containerd

2.4 安装 crictl(可选,用于调试)

VERSION="v1.28.0"wgethttps://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gztarzxvf crictl-$VERSION-linux-amd64.tar.gz-C/usr/local/binrm-fcrictl-$VERSION-linux-amd64.tar.gz# 配置 crictlcat>/etc/crictl.yaml<<EOF runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 EOF

三、安装 kubeadm、kubelet、kubectl

3.1 配置 Kubernetes YUM 源

cat>/etc/yum.repos.d/kubernetes.repo<<EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF

3.2 安装指定版本

yuminstall-ykubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2# 锁定版本防止自动更新yuminstall-yyum-plugin-versionlock yum versionlock kubelet kubeadm kubectl# 启动 kubelet(此时会循环重启,等待 kubeadm 初始化)systemctlenablekubelet systemctl start kubelet

四、初始化控制平面节点(Master)

4.1 执行初始化

kubeadm init\--apiserver-advertise-address=<MASTER_IP>\--image-repository=registry.aliyuncs.com/google_containers\--pod-network-cidr=10.244.0.0/16\--kubernetes-version=v1.28.2

<MASTER_IP>替换为 Master 节点的实际 IP 地址。

4.2 配置 kubectl

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

4.3 保存 Join 命令

初始化成功后,会输出类似以下命令,请务必保存

kubeadmjoin<MASTER_IP>:6443--token<token>--discovery-token-ca-cert-hash sha256:<hash>

如忘记,可执行kubeadm token create --print-join-command重新生成。


五、安装 Calico 网络插件

5.1 安装 Calico

kubectl apply-fhttps://docs.projectcalico.org/v3.25/manifests/calico.yaml

5.2 等待 Calico 启动

# 监控 Pod 状态,等待所有 Pod 变为 Runningwatch-n2kubectl get pods-nkube-system

Ctrl+C退出监控。

5.3 如果只有单节点,允许 Master 调度 Pod

kubectl taint nodes--allnode-role.kubernetes.io/control-plane-

六、验证集群

# 查看节点状态kubectl get nodes# 预期输出:# NAME STATUS ROLES AGE VERSION# k8s-master Ready control-plane 10m v1.28.2# 查看所有系统 Podkubectl get pods-nkube-system

所有节点状态为Ready、系统 Pod 均为Running即表示集群搭建成功。


七、加入工作节点(Worker)

在每个 Worker 节点上执行之前保存的kubeadm join命令:

kubeadmjoin<MASTER_IP>:6443--token<token>--discovery-token-ca-cert-hash sha256:<hash>

在 Master 节点验证:

kubectl get nodes# NAME STATUS ROLES AGE VERSION# k8s-master Ready control-plane 20m v1.28.2# k8s-worker-1 Ready <none> 2m v1.28.2

八、集群测试

8.1 部署测试 Pod

kubectl create deployment nginx-test--image=nginx kubectl expose deployment nginx-test--port=80--type=NodePort kubectl get svc nginx-test

8.2 清理测试资源

kubectl delete deployment nginx-test kubectl delete svc nginx-test

九、常见问题及解决方案

9.1 镜像拉取失败

问题failed to pull image "registry.k8s.io/pause:3.6"

解决方案:配置 containerd 镜像加速(已在第二章配置),或手动拉取镜像:

kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.28.2

9.2 节点一直是 NotReady

原因:网络插件未安装或未启动

解决方案

# 确认 Calico 是否正常运行kubectl get pods-nkube-system|grepcalico# 查看节点详细信息kubectl describenodek8s-master

9.3 cgroup 驱动不一致

解决方案:确保 containerd 配置了SystemdCgroup = true

grepSystemdCgroup /etc/containerd/config.toml# 应该显示 SystemdCgroup = true

9.4 生产环境防火墙配置

Master 节点需要开放的端口

firewall-cmd--permanent--add-port=6443/tcp# Kubernetes API Serverfirewall-cmd--permanent--add-port=2379-2380/tcp# etcdfirewall-cmd--permanent--add-port=10250/tcp# Kubelet APIfirewall-cmd--reload

Worker 节点需要开放的端口

firewall-cmd--permanent--add-port=10250/tcp# Kubelet APIfirewall-cmd--permanent--add-port=30000-32767/tcp# NodePortfirewall-cmd--reload

十、集群信息摘要

项目信息
Kubernetes 版本v1.28.2
容器运行时containerd
网络插件Calico v3.25
Pod 网段10.244.0.0/16
Service 网段10.96.0.0/12
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 21:34:47

Celery系列-05-生产实践与源码阅读

文章目录从“能运行”到“能生产”还差什么&#xff1f;使用 Celery Beat 执行周期任务为什么同一套计划通常只能运行一个 Beat&#xff1f;为什么需要多个队列&#xff1f;Worker 并发池怎么选择&#xff1f;PreforkEventlet / GeventSoloThreads并发数不是越大越好理解 Prefe…

作者头像 李华
网站建设 2026/8/25 21:31:02

企微SCRM怎么选:别只看大厂标签,先核这5项

先别急着问大厂还是小厂企微SCRM选型最容易被一个外壳带偏&#xff1a;看品牌体量&#xff0c;而不是看系统能不能进业务现场。对多数企业来说&#xff0c;真正难的不是拿到一份功能清单&#xff0c;而是把客户承接、标签分层、群发触达、客服协同、订单会员打通、数据复盘&…

作者头像 李华
网站建设 2026/8/25 21:28:58

UE5.8程序化植被编辑器(PVE)实战:3分钟快速生成自然森林场景

大家好&#xff0c;我是专注于游戏开发技术分享的博主。在虚幻引擎5&#xff08;UE5&#xff09;的生态中&#xff0c;程序化内容生成&#xff08;PCG&#xff09;正成为提升开发效率、丰富场景细节的利器。特别是对于开放世界、大型场景中的植被布置&#xff0c;手动摆放不仅耗…

作者头像 李华
网站建设 2026/8/25 21:28:55

拒绝无效内耗:程序员冒名顶替综合征自救指南,精准提问少走90%弯路

程序员职场内耗的核心根源&#xff0c;大多不是技术能力不足&#xff0c;而是冒名顶替综合征引发的不敢求助、自我否定。多数开发者深陷“万事不求人”的误区&#xff0c;独自死磕技术问题浪费大量时间&#xff0c;同时陷入“成功靠运气、失败是自己无能”的自我怀疑。想要快速…

作者头像 李华
网站建设 2026/8/25 21:24:37

CorelDraw中*.cpg文件的加密实战指南

简介&#xff1a; CorelDraw 软件是一款使用非常广泛的矢量图形设计软件。为了满足个性化设计和流程自动化需求&#xff0c;该软件支持开发者制作并加载扩展名为 .cpg 的插件。实际上&#xff0c;CorelDraw 的 .cpg 插件在底层是标准的 Windows 动态链接库&#xff08;DLL&…

作者头像 李华
网站建设 2026/8/25 21:22:18

开源免费PDF论文翻译全流程:从OCR识别到AI翻译的工程化实践

上周帮一个研究生朋友处理论文&#xff0c;他发来一篇 PDF 格式的英文文献&#xff0c;问我有没有什么好办法能快速看懂。我随口说&#xff1a;“用翻译软件啊&#xff0c;现在不都支持 PDF 上传了吗&#xff1f;”他回了我一个苦笑的表情&#xff1a;“试了&#xff0c;要么是…

作者头像 李华