前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >KubeVirt + Calico 实现  VMI 固定 IP

KubeVirt + Calico 实现  VMI 固定 IP

作者头像
SRE运维进阶之路
发布2025-03-06 23:47:58
发布2025-03-06 23:47:58
7900
代码可运行
举报
运行总次数:0
代码可运行

持久化 Pod 状态系统流程图

以下是 PersistentPodState 系统的调谐逻辑和 webhook 拦截逻辑的流程图:

系统工作流程说明

  1. 控制器逻辑:
    • 当 VMI 创建或更新时,事件处理器检查是否有特定注解
    • 如果满足条件,将请求入队到 Reconcile 函数
    • Reconcile 函数解析请求,调用 VmiAutoGeneratePersistentPodState
    • 检查 VMI 是否有 IP 地址,如果有则创建或更新 PersistentPodState 和 IPReservation 对象
    • 更新 PersistentPodState 的状态,保存 VMI 的节点和 IP 信息
  2. Webhook 拦截逻辑:
    • 当 VMI 创建或更新请求到达 API 服务器时,触发准入 Webhook
    • PodMutatingHandler 处理请求,检查是否为 VMI 资源
    • 根据操作类型调用相应的处理函数
    • 查询对应的 PersistentPodState 对象
    • 如果存在,添加 Calico IP 注解和节点亲和性,确保 VMI 使用固定 IP 并调度到特定节点
  3. 数据流:
    • 控制器将 VMI 的状态信息存储到 PersistentPodState 对象中
    • Webhook 从 PersistentPodState 对象读取信息,应用到新创建的 VMI 上
  4. 触发条件:
    • VMI 必须有特定注解 clay.io/auto-generate-persistent-pod-state: "true"
    • VMI 必须有 clay.io/required-persistent-topology 注解

这个系统确保了 VMI 在重建时能够保持相同的 IP 地址和节点位置,提供了持久化的 Pod 状态。

项目开源地址

https://github.com/clay-wangzhi/persistent-pod-state.git

部署步骤

代码语言:javascript
代码运行次数:0
复制
git clone https://github.com/clay-wangzhi/persistent-pod-state.git
kubectl  apply -f persistent-pod-state/manifests/deploy.yaml
kubectl label ns ${ns} persistentpodstate-injection=enabled
# VM 加注解
      annotations:
        clay.io/auto-generate-persistent-pod-state: "true"
        clay.io/required-persistent-topology: kubernetes.io/hostname

验证方法

重启 VMI ,查看 IP 是否改变

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SRE运维进阶之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 持久化 Pod 状态系统流程图
    • 系统工作流程说明
  • 项目开源地址
  • 部署步骤
  • 验证方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档