Rocky 9 如何用 Podman 无守护进程部署 Kubernetes 节点:从零搭建高可用边缘集群

边缘服务器资源有限,运行 Docker 守护进程会增加开销。本文演示在 Rocky 9 上直接用 Podman 作为容器运行时,集成 kubeadm 或 k3s 初始化 Kubernetes 节点,解决网络和存储兼容问题,并验证集群高可用性。
Rocky 9 终端与 Kubernetes 集群拓扑图封面

核心要点

  • Podman 无守护进程模式在 Rocky 9 上可替代 Docker,减少边缘节点资源开销。
  • k3s 更适合边缘集群,因其轻量且内置网络插件;kubeadm 需手动配置 Podman 运行时。
  • 网络插件兼容性通过调整 CNI 配置和持久化卷解决,确保边缘场景稳定。
  • Prometheus 和 Grafana 监控可验证集群高可用性,模拟故障测试自愈能力。

在 Rocky 9 上配置 Podman 无守护进程模式并验证 Kubernetes 兼容性

在 Rocky 9 上安装 Podman 并启用无守护进程模式,即可绕过 Docker 依赖。首先更新系统并安装 Podman:sudo dnf update -y && sudo dnf install -y podman。编辑配置文件:/etc/containers/registries.conf 添加镜像源(如 registry.fedoraproject.org),/etc/containers/storage.conf 确保使用 overlay 存储驱动。运行 podman info 检查 CRI 兼容性,输出中应包含 RuntimeName: podman 和 CRI 版本信息。对比 Docker,Podman 无需后台服务,减少资源占用,但 SELinux 可能阻止卷挂载,建议先设为 permissive 模式测试:sudo setenforce 0。风险提醒:如果系统有旧 Docker 安装,先卸载避免冲突;rootless 模式下,非特权用户可能无法绑定 80 端口,需调整 sysctl 设置。

  1. 先判断“在 Rocky 9 上配置 Podman 无守护进程模式并验证 Kubernetes 兼容性”这一节真正要解决的核心问题是什么。
  2. 执行时优先补齐这些关键信息:必须包含 Podman 安装命令、配置文件修改步骤、podman info 验证输出示例,以及与 Docker 的对比点,提醒权限和 SELinux 风险。。
  3. 同时补充这部分内容的适用条件、常见误区或风险提醒,避免只讲结论不讲边界。

使用 kubeadm 或 k3s 集成 Podman 初始化 Kubernetes 节点

对于边缘集群,推荐 k3s 因其轻量且内置网络插件;kubeadm 更灵活但需更多配置。前提条件是 Podman 已验证兼容性,且节点网络互通。

选择 k3s:运行安装脚本 curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--container-runtime-endpoint unix:///run/podman/podman.sock" sh -。验证服务状态:systemctl status k3s。对于 kubeadm,修改 kubelet 配置:在 /etc/kubernetes/kubelet.conf 中添加 --container-runtime=remote --container-runtime-endpoint=unix:///run/podman/podman.sock,然后执行 kubeadm init --pod-network-cidr=10.244.0.0/16。加入工作节点时,使用 kubeadm join :6443 --token --discovery-token-ca-cert-hash 。常见误区:k3s 默认用 containerd,切换 Podman 后需测试 pod 运行;kubeadm 版本需与 Podman 兼容,建议 Rocky 9 用最新稳定版。

  • 先判断“使用 kubeadm 或 k3s 集成 Podman 初始化 Kubernetes 节点”这一节真正要解决的核心问题是什么。
  • 执行时优先补齐这些关键信息:必须包含 kubeadm init 和 kubeadm join 的具体命令、Podman 运行时配置示例,以及 k3s 与 kubeadm 的选择对比,提醒版本兼容性风险。。
  • 同时补充这部分内容的适用条件、常见误区或风险提醒,避免只讲结论不讲边界。

解决 Calico/Cilium 网络插件与 Podman 的兼容问题并实现持久化卷挂载

部署 Calico 或 Cilium 时,需调整 Podman 网络命名空间以匹配 CNI 接口。适用条件是集群节点已初始化,且存储路径可访问。

部署 Calico:kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml。检查 Podman 网络:podman network inspect bridge,确保与 Calico 的 IP 池不冲突。调整 iptables 规则:sudo iptables -P FORWARD ACCEPT。对于持久化卷,使用本地存储:创建 PV YAML 指定 hostPath,然后 podman volume create myvol 并挂载到 Pod。测试网络:运行 kubectl run test-pod --image=nginx --restart=Never,验证跨节点通信。风险提醒:网络策略可能冲突,例如 Calico 的默认 deny-all 需手动允许;持久化卷在边缘节点需确保磁盘空间,避免单点故障。

对比参考

工具 适用场景 前提条件 预期结果
k3s 边缘集群,轻量部署 Podman 已配置无守护进程 快速初始化,内置网络插件
kubeadm 灵活控制平面,自定义配置 修改 kubelet 参数指定 Podman 标准 Kubernetes 集群,需手动网络设置
Calico 网络策略严格场景 节点网络互通,调整 iptables 稳定网络通信,但需处理策略冲突
Cilium 服务网格集成场景 Podman 网络命名空间兼容 高级网络功能,资源占用稍高

使用 kubeadm 或 k3s 集成 Podman 初始化 Kubernetes 节点

对于边缘集群,推荐 k3s 因其轻量且内置网络插件;kubeadm 更灵活但需更多配置。前提条件是 Podman 已验证兼容性,且节点网络互通。

选择 k3s:运行安装脚本 curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--container-runtime-endpoint unix:///run/podman/podman.sock" sh -。验证服务状态:systemctl status k3s。对于 kubeadm,修改 kubelet 配置:在 /etc/kubernetes/kubelet.conf 中添加 --container-runtime=remote --container-runtime-endpoint=unix:///run/podman/podman.sock,然后执行 kubeadm init --pod-network-cidr=10.244.0.0/16。加入工作节点时,使用 kubeadm join :6443 --token --discovery-token-ca-cert-hash 。常见误区:k3s 默认用 containerd,切换 Podman 后需测试 pod 运行;kubeadm 版本需与 Podman 兼容,建议 Rocky 9 用最新稳定版。

  • 先判断“使用 kubeadm 或 k3s 集成 Podman 初始化 Kubernetes 节点”这一节真正要解决的核心问题是什么。
  • 执行时优先补齐这些关键信息:必须包含 kubeadm init 和 kubeadm join 的具体命令、Podman 运行时配置示例,以及 k3s 与 kubeadm 的选择对比,提醒版本兼容性风险。。
  • 同时补充这部分内容的适用条件、常见误区或风险提醒,避免只讲结论不讲边界。

解决 Calico/Cilium 网络插件与 Podman 的兼容问题并实现持久化卷挂载

部署 Calico 或 Cilium 时,需调整 Podman 网络命名空间以匹配 CNI 接口。适用条件是集群节点已初始化,且存储路径可访问。

部署 Calico:kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml。检查 Podman 网络:podman network inspect bridge,确保与 Calico 的 IP 池不冲突。调整 iptables 规则:sudo iptables -P FORWARD ACCEPT。对于持久化卷,使用本地存储:创建 PV YAML 指定 hostPath,然后 podman volume create myvol 并挂载到 Pod。测试网络:运行 kubectl run test-pod --image=nginx --restart=Never,验证跨节点通信。风险提醒:网络策略可能冲突,例如 Calico 的默认 deny-all 需手动允许;持久化卷在边缘节点需确保磁盘空间,避免单点故障。

常见问题

Rocky 9 上 Podman 无守护进程模式是否支持 Kubernetes 的所有功能?

支持大多数功能,但需验证 CRI 兼容性;建议先测试基本 Pod 调度。

kubeadm 和 k3s 哪个更适合边缘集群部署?

k3s 更适合边缘,因其轻量且内置网络插件;kubeadm 更灵活但配置复杂。

如何解决 Podman 与 Calico 网络插件的兼容问题?

调整 Podman 网络命名空间和 Calico CNI 配置,验证 iptables 规则。

部署后如何验证集群的高可用性?

模拟节点故障,使用 Prometheus 监控指标,检查自愈和负载均衡。

部署测试工作负载并使用 Prometheus 与 Grafana 监控集群健康

通过部署简单 Nginx Pod 验证 Podman 运行时,再集成 Prometheus 和 Grafana 实现持续监控。前提是集群已就绪,且节点资源足够。

部署 Nginx:kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml。集成 Prometheus:用 Podman 运行 prometheus 容器,podman run -d --name prometheus -p 9090:9090 -v /prometheus:/prometheus prom/prometheus。配置 Grafana:podman run -d --name grafana -p 3000:3000 grafana/grafana,导入 Kubernetes 监控模板。验证高可用:模拟节点故障,kubectl drain --ignore-daemonsets,检查集群自愈和 Pod 重新调度。注意事项:监控资源占用,设置阈值如 CPU >80% 告警;Prometheus 配置需抓取 Kubernetes 指标端点。

分享你的部署经验

如果你在 Rocky 9 上用 Podman 部署过 Kubernetes,欢迎在评论区留言,讨论遇到的问题或优化技巧。订阅 newsletter 获取更多边缘计算教程。

提交经验

阅读剩余
THE END