跳转至

工作负载使用 IP 池

本章节主要介绍结合 Multus 及 Underlay CNI 插件,为工作负载 Pod 配置多网卡,并通过 Spiderpool 进行 Underlay 网络的 IP 的分配和固定。主要介绍内容如下:

  1. Pod 设置多容器网卡
  2. 工作负载使用 IP 池
  3. 工作负载使用固定 IP 池
  4. 工作负载使用自动创建固定 IP 池

前提条件

  1. SpiderPool 已成功部署
  2. Multus 搭配 Macvlan /SRI-OV 已成功部署
  3. 如使用手动选择 IP 池,请提前完成创建 IP 子网和 IP 池。如使用自动创建固定 IP 池,请提前完成创建 IP 池

界面操作

  1. 登录平台 UI,在左侧导航栏点击容器管理->集群列表,找到对应集群。然后,在左侧导航栏选择无状态负载,点击镜像创建

    镜像创建

  2. 创建无状态负载页面,完成基本信息容器配置服务配置页面的信息输入。然后,进入高级配置,点击配置容器网卡

    容器网卡

  3. 进入容器网卡配置页面,完成以下参数的配置:

    • 网卡信息: 若创建的应用容器需要使用多张网卡(如一张东西向通信,一张南北向通信),可以添加多网卡。

      • eth0(默认网卡):默认为 Overlay CNI,Calico/Cilium。

      • net1: 可选择 Underlay CNI 配置,如 Macvlan/SRI-OV ,本文示例为 Macvlan。

    • IP 池配置:Underlay CNI IP 分配的规则。

      • 创建固定 IP 池: 开启后,只需要为新增的容器网卡(net1、net2、net3)选择对应子网,工作负载在部署时会自动创建固定 IP 池,部署后容器网卡仅能使用此 IP 池中的地址。

      • 弹性 IP: 开启后,IP 池中的 IP 数量会根据设置的弹性 IP 数量变动。最大可用 IP 数等于 Pod 副本数 + 弹性 IP 数量。Pod 扩容时IP 池也随之进行扩容。

      • 自定义路由:当应用创建有特殊路由需求时,可添加自定义路由。

      • 网卡 IP 池:选择对应网卡待使用的子网或对应 IP 池。

    工作负载使用 IP 池有如下两种方式,两种方式的使用场景及流程差异可参考:IP 池的使用说明

    手动选择已有的 IP 池

    手动选择 IP 池需要提前创建 IP 池,可选择 IP 池范围为:共享 IP 池,添加了当前应用亲和性的 IP 池,添加了当前命名空间亲和性的 IP 池

    手动选择

    自动创建固定 IP 池

    仅需要选择对应的子网,即可自动创建固定 IP 池。

    自动创建

    自动创建

  4. 创建完工作负载后,可点击对应工作负载 workload01 查看工作负载 Pod 使用的 IP。

    工作负载 IP

    工作负载 IP

YAML 使用

  1. 使用 Pod 注解 ipam.spidernet.io/ippool 选择从 IP 池 testingippool 分配 IP,创建以下 Deployment:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: workload01
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: workload01
      template:
        metadata:
          annotations:
            ipam.spidernet.io/ippool: |-
              {
                "ipv4": ["testingippool"]
              }
          labels:
            app: workload01
        spec:
          containers:
          - name: workload01
            image: busybox
            imagePullPolicy: IfNotPresent
            command: ["/bin/sh", "-c", "trap : TERM INT; sleep infinity & wait"]
    
  2. 由 Deployment workload01 所控制的 Pod 均从 IP 池 testingippool 分配 IP 地址且成功运行。

    kubectl get se
    NAME                                      INTERFACE   IPV4POOL               IPV4              IPV6POOL   IPV6   NODE            CREATETION TIME
    workload01-6967dcd8df-8b6zp   eth0        standard-ipv4-ippool   172.18.41.47/24                     spider-worker   7s
    standard-ippool-deploy-6967dcd8df-cvq79   eth0        standard-ipv4-ippool   172.18.41.50/24                     spider-worker   7s
    standard-ippool-deploy-6967dcd8df-s58x9   eth0        standard-ipv4-ippool   172.18.41.41/24                     spider-worker   7s
    

评论