Skip to content

StatefulSet 固定 IP

oilbeater edited this page Jun 27, 2022 · 4 revisions

Wiki 下的中文文档将不在维护,请访问我们最新的中文文档网站,获取最新的文档更新。

StatefulSet 和其他 Workload 相同可以使用 ovn.kubernetes.io/ip_pool 来指定 Pod 使用的 IP。

由于 StatefulSet 多用于有状态服务,对网络标示的固定有更高的要求,Kube-OVN 做了特殊的强化:

  1. Pod 会按顺序分配 ovn.kubernetes.io/ip_pool 中的 IP。例如 StatefulSet 的名字为 web,则 web-1 会使用 ovn.kubernetes.io/ip_pool 中的第一个 IP, web-2 会使用第二个 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 的生命周期内,网络信息都会保持固定。

StatefulSet 样例

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
          name: web

可以尝试删除 StatefulSet 下 Pod 观察 Pod IP 变化信息

Clone this wiki locally