当前位置: 首页 > news >正文

Rocky Linux 9.2 Kubernetes 部署完整指南

Rocky Linux 9.2 Kubernetes 部署完整指南

📋 环境信息

  • 操作系统:Rocky Linux 9.2 (Minimal)
  • 网络模式:NAT(访问外网)+ 仅主机(集群内部通信)
  • 节点规划
    • Master:192.168.80.100(主机名 k8s-master)
    • Worker1:192.168.80.110(主机名 k8s-worker1)
    • Worker2:192.168.80.120(主机名 k8s-worker2)
  • Kubernetes版本:v1.28.2
  • 容器运行时:containerd (v2.3.3)
  • 网络插件:Calico v3.28.0
  • Dashboard版本:v2.7.0

一、系统初始化(所有节点执行)

1.1 设置主机名

# Masterhostnamectl set-hostname k8s-master&&bash# Worker1hostnamectl set-hostname k8s-worker1&&bash# Worker2hostnamectl set-hostname k8s-worker2&&bash

1.2 配置 hosts 解析

cat>>/etc/hosts<<EOF 192.168.80.100 k8s-master 192.168.80.110 k8s-worker1 192.168.80.120 k8s-worker2 EOF

1.3 设置免密登录(Master操作)

ssh-ssh-keygen#一路回车ssh-copy-id k8s-master ssh-copy-id k8s-worker1 ssh-copy-id k8s-worker2

1.4 更换国内 YUM 源(阿里云)

sed-e's|^mirrorlist=|#mirrorlist=|g'\-e's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g'\-i.bak/etc/yum.repos.d/[Rr]ocky*.repo dnf makecache

1.5 关闭防火墙与 SELinux

systemctl disable--nowfirewalld setenforce0sed-i's/^SELINUX=enforcing$/SELINUX=disabled/'/etc/selinux/config

1.6 关闭 Swap

swapoff-ased-ri's/.*swap.*/#&/'/etc/fstab

1.7 加载内核模块

cat<<EOF|tee/etc/modules-load.d/k8s.confoverlay br_netfilter EOFmodprobe overlay modprobe br_netfilter

1.8 配置内核参数

cat<<EOF|tee/etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOFsysctl--system

1.9 配置时间同步(Chrony)

dnfinstall-ychronysed-i's/^pool.*/#&/'/etc/chrony.confecho"pool ntp1.aliyun.com iburst">>/etc/chrony.conf systemctl restart chronyd systemctlenablechronyd timedatectl set-timezone Asia/Shanghai

二、安装容器运行时(containerd)所有节点执行

2.1 添加 Docker CE 源(containerd 源自此)

dnfinstall-yyum-utils yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.2 安装 containerd

dnfinstall-ycontainerd.io

2.3 配置 containerd(关键步骤)

# 生成默认配置containerd config default>/etc/containerd/config.toml# 修改 pause 镜像为阿里云镜像(注意:新版配置位置是 pinned_images.sandbox)sed-i"s|sandbox = 'registry.k8s.io/pause:3.*'|sandbox = 'registry.aliyuncs.com/google_containers/pause:3.10'|g"/etc/containerd/config.toml# 启用 SystemdCgroupsed-i's/SystemdCgroup = false/SystemdCgroup = true/'/etc/containerd/config.toml# 重启 containerdsystemctl restart containerd systemctlenablecontainerd

验证配置

containerd config dump|grep-A2pinned_images# 应显示 sandbox = 'registry.aliyuncs.com/google_containers/pause:3.10'

三、安装 Kubernetes 组件(所有节点)

3.1 添加阿里云 Kubernetes YUM 源

cat<<EOF|tee/etc/yum.repos.d/kubernetes.repo[kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 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 安装 kubeadm、kubelet、kubectl

dnfinstall-ykubelet kubeadm kubectl--disableexcludes=kubernetes systemctlenablekubelet

四、初始化集群(仅在 Master 节点)

4.1 预拉取镜像(可选,加速初始化)

kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers

4.2 初始化集群

kubeadm init\--apiserver-advertise-address=192.168.80.100\--image-repository=registry.aliyuncs.com/google_containers\--pod-network-cidr=192.168.0.0/16\--service-cidr=10.96.0.0/12

保存输出中的 join 命令,稍后用于 Worker 节点加入。

4.3 配置 kubectl

mkdir-p$HOME/.kubesudocp/etc/kubernetes/admin.conf$HOME/.kube/configsudochown$(id-u):$(id-g)$HOME/.kube/config

五、安装 Calico 网络插件(Master 节点)

5.1 安装 Tigera Operator

kubectl create-fhttps://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/tigera-operator.yaml

5.2 创建 Installation 自定义资源(指定镜像仓库)

cat<<EOF|kubectl apply-f-apiVersion: operator.tigera.io/v1 kind: Installation metadata: name: default spec: registry: quay.io calicoNetwork: ipPools: - blockSize: 26 cidr: 192.168.0.0/16 encapsulation: VXLANCrossSubnet natOutgoing: Enabled nodeSelector: all() --- apiVersion: operator.tigera.io/v1 kind: APIServer metadata: name: default spec: {} EOF

5.3 如果 quay.io 拉取慢,改为 DaoCloud 加速

kubectl patch installation default--type='json'-p='[{"op": "replace", "path": "/spec/registry", "value": "docker.m.daocloud.io"}]'

5.4 验证 Calico Pod 运行

kubectl get pods-ncalico-system-w# 等待所有 Pod 变为 Running

六、加入 Worker 节点

在 Worker 节点执行之前保存的 join 命令,例如:

kubeadmjoin192.168.80.100:6443--token<token>--discovery-token-ca-cert-hash sha256:<hash>

如果 token 过期,在 Master 上重新生成:

kubeadm token create --print-join-command

七、验证集群

kubectl get nodes-owide kubectl get pods-A

所有节点状态应为Ready


八、部署 Kubernetes Dashboard(Master 节点)

8.1 安装 Dashboard(官方 YAML)

kubectl apply-fhttps://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

8.2 修改镜像为国内源(如果 Pod 出现 ImagePullBackOff)

kubectlsetimage deployment/kubernetes-dashboard-nkubernetes-dashboard\kubernetes-dashboard=docker.m.daocloud.io/kubernetesui/dashboard:v2.7.0 kubectlsetimage deployment/dashboard-metrics-scraper-nkubernetes-dashboard\dashboard-metrics-scraper=docker.m.daocloud.io/kubernetesui/metrics-scraper:v1.0.8

8.3 创建管理员用户并获取 Token

cat<<EOF|kubectl apply-f-apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: dashboard-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: dashboard-admin namespace: kubernetes-dashboard EOF#执行以下命令生成一个永不过期(或长期有效)的 Token:(--duration=87600h 表示 10 年有效期,按需调整)kubectl create token-nkubernetes-dashboard dashboard-admin--duration=87600h

8.4 访问 Dashboard

方式一:临时端口转发(仅限本机)

kubectl-nkubernetes-dashboard port-forward svc/kubernetes-dashboard8443:443# 浏览器访问 https://localhost:8443

方式二:NodePort(允许外部访问)

kubectl patch svc kubernetes-dashboard-nkubernetes-dashboard-p'{"spec": {"type": "NodePort"}}'kubectl get svc-nkubernetes-dashboard kubernetes-dashboard# 获取 NodePort 端口(如 3xxxx),访问 https://<任意节点IP>:3xxxx

登录时选择 Token,粘贴上一步生成的 Token。


九、常见问题及解决方案

9.1 containerd 拉取 pause 镜像失败

  • 原因:新版 containerd 配置中 pause 镜像定义在pinned_images.sandbox而非sandbox_image
  • 解决:使用sed -i "s|sandbox = 'registry.k8s.io/pause:3.*'|sandbox = 'registry.aliyuncs.com/google_containers/pause:3.10'|g" /etc/containerd/config.toml修改,并重启 containerd。

9.2 Calico 镜像拉取失败

  • 解决:使用kubectl patch installation default --type='json' -p='[{"op": "replace", "path": "/spec/registry", "value": "docker.m.daocloud.io"}]'切换到 DaoCloud 镜像仓库。

9.3 Dashboard Pod ImagePullBackOff

  • 解决:使用kubectl set image指定国内镜像(如 DaoCloud 或阿里云镜像)。

9.4 端口 6443 被占用导致初始化失败

  • 解决kill -9 <进程PID>杀掉占用进程,然后kubeadm reset -f清理后重新初始化。

9.5 Worker 节点 NotReady

  • 原因:Calico 网络插件未成功部署或镜像拉取慢。
  • 解决:检查calico-nodePod 状态,如果镜像拉取失败,按 9.2 处理;如果卡在 Init,可删除 Pod 重建。
http://www.jsqmd.com/news/1370687/

相关文章:

  • 2026年外贸建站平台推荐哪家?中小企业做海外官网和独立站怎么选
  • 高级开放API接口部署与测试全指南:从环境准备到生产集成
  • Unity游戏实时翻译插件XUA:原理、部署与高级应用指南
  • 8月10日AI格局日报:宇树科技科创板申购 + AI从零设计功能性病毒 + DeepSeek涨价与8月第三周前瞻
  • AI全栈开发入门:FastAPI与Vue3构建前后端分离应用
  • VMware桥接网络故障排查:解决VMnet0网桥未运行问题
  • Windows双架构虚拟化实战:基于VMware与QEMU运行X86与ARM虚拟机
  • 2026天津市热门的装配电工培训公司怎么选天津鹏成职业培训学校有限公司天津市销售部 - 品牌优推
  • 网站域名查询-域名资产管理API-域名Whois查询API接口介绍
  • RAG系统LLM幻觉治理:四道防线构建可靠问答系统
  • STEM概念解释工具:部署、测试与集成实践指南
  • 深度学习模型优化全攻略:从数据预处理到部署的24个核心策略
  • Android性能优化实战:从UI渲染到内存管理
  • Windows 10 Git安装配置全攻略:从基础安装到高效工作流
  • CPT Markets:把市场覆盖做扎实 新手更关注哪些维度
  • PUBG罗技鼠标宏脚本:从新手到高手的压枪训练指南
  • C++ TCP网络编程入门:从Socket API到客户端/服务器模型实战
  • JavaScript字符串保存为本地文件:Blob与File System API实战指南
  • 论文AI味太重被警告?我用这几款神器逆袭过关!
  • VRM4U插件:在UE5中高效导入与优化VRM角色模型
  • AI编程助手高效使用指南:从Prompt Engineering到代码生成实战
  • Claude Code记忆系统深度解析:AI编程助手的长期记忆机制与应用实践
  • Parquet列式存储索引机制与性能优化实战
  • SSM框架开发高校环保网站的技术实践与优化
  • 抖音下载工具:打造个人专属内容库的完整指南
  • CSAIDE国际会议投稿指南:网络安全与AI技术前沿
  • DeepSeek+知网:AI辅助学术写作的高效协同工作流实践
  • 3个步骤让旧电脑变身高性能游戏串流主机:Sunshine完全指南
  • Claude Code Harness架构解析:从规则引擎到MCP协议的五层工程化实践
  • Unity战争迷雾系统:三脚本极简实现与GPU优化方案