• kube-ovn 固定(静态)地址


    Kube-OVN 默认会根据 Pod 所在 Namespace 所属的子网中随机分配 IP 和 Mac。 针对工作负载需要固定地址的情况,Kube-OVN 根据不同的场景,提供了多种固定地址的方法:

    • 单个 Pod 固定 IP/Mac。
    • Workload 通用 IP Pool 方式指定固定地址范围。
    • StatefulSet 固定地址。
    • Kubevirt VM 固定地址。

    1. 单个 Pod 固定 IP 和 Mac

    在创建 Pod 时通过 annotation 来指定 Pod 运行时所需的 IP/Mac, kube-ovn-controller 运行时将会跳过地址随机分配阶段,经过冲突检测后直接使用指定地址,如下所示:

    apiVersion: v1
    kind: Pod
    metadata:
      name: static-ip
      namespace: ls1
      annotations:
        ovn.kubernetes.io/ip_address: 10.16.0.15
        ovn.kubernetes.io/mac_address: 00:00:00:53:6B:B6
    spec:
      containers:
      - name: static-ip
        image: nginx:alpine
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在使用 annotation 定义单个 Pod IP/Mac 时需要注意以下几点:

    1. 所使用的 IP/Mac 不能和已有的 IP/Mac 冲突。
    2. IP 必须在所属子网的 CIDR 内。
    3. 可以只指定 IP 或 Mac,只指定一个时,另一个会随机分配。

    2. Workload 通用 IP Pool 固定地址¶

    Kube-OVN 支持通过 annotation ovn.kubernetes.io/ip_pool 给 Workload(Deployment/StatefulSet/DaemonSet/Job/CronJob)设置固定 IP。 kube-ovn-controllerr 会自动选择 ovn.kubernetes.io/ip_pool 中指定的 IP 并进行冲突检测。

    IP Pool 的 Annotation 需要加在 template 内的 annotation 字段,除了 Kubernetes 内置的 Workload 类型, 其他用户自定义的 Workload 也可以使用同样的方式进行固定地址分配。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: ls1
      name: starter-backend
      labels:
        app: starter-backend
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: starter-backend
      template:
        metadata:
          labels:
            app: starter-backend
          annotations:
            ovn.kubernetes.io/ip_pool: 10.16.0.15,10.16.0.16,10.16.0.17
        spec:
          containers:
          - name: backend
            image: nginx:alpine
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    注意:

    1. ovn.kubernetes.io/ip_pool 中的 IP 应该属于所在子网的 CIDR 内。
    2. ovn.kubernetes.io/ip_pool 中的 IP 不能和已使用的 IP 冲突。
    3. ovn.kubernetes.io/ip_pool 中的 IP 数量小于 replicas 数量时,多出的 Pod 将无法创建。你需要根据 Workload 的更新策略以及扩容规划调整 ovn.kubernetes.io/ip_pool 中 IP 的数量。

    3. StatefulSet 固定地址

    Kube-OVN针对StatefulSet有状态服务,做了特殊强化:

    1. Pod 会按顺序分配 ovn.kubernetes.io/ip_pool 中的 IP。例如 StatefulSet 的名字为 web,则 web-0 会使用 ovn.kubernetes.io/ip_pool 中的第一个 IP, web-1 会使用第二个 IP,以此类推。
    2. StatefulSet Pod 在更新或删除的过程中 OVN 中的 logical_switch_port 不会删除,新生成的 Pod 直接复用旧的 interface 信息。因此 Pod 可以复用 IP/Mac 及其他网络信息,达到和 StatefulSet Volume 类似的状态保留功能。
    3. 基于 2 的能力,对于没有 ovn.kubernetes.io/ip_pool 注解的 StatefulSet,Pod 第一次生成时会随机分配 IP/Mac,之后在整个 StatefulSet 的生命周期内,网络信息都会保持固定。

    4. Kubevirt VM 固定地址

    针对 Kubevirt 创建的 VM 实例,kube-ovn-controller 可以按照类似 StatefulSet Pod 的方式进行 IP 地址分配和管理。 以达到 VM 实例在生命周期内启停,升级,迁移等操作过程中地址固定不变。

  • 相关阅读:
    LeetCode每日一题(985. Sum of Even Numbers After Queries)
    Fleet公测啦!真的轻量?
    Linux中,mysql设置job任务自动启动
    Spring框架漏洞总结
    milvus Upsert api数据结构源码分析
    DHCP概述及原理
    C语言技术, 有云控经验最好
    Linux cp命令使用指南:详细教程及实际应用场景解析
    单片机根据应答发送AT指令控制ESP8266设置为服务器—AP模式
    IO流(二)
  • 原文地址:https://blog.csdn.net/qq_21127151/article/details/128072766