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