---
title: StatefulSet固定IP地址
description: "StatefulSet和其他Workload相同，可以使用ovn.kubernetes.io/ip_pool来指定Pod使用的IP地址。由于StatefulSet多用于有状态服务，对网络固定有个更高的要求，Kube-OVN做了特殊的强化："
url: https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/ecosystemEnable/Kubernetes/kunpengkubeovn_06_0021.html
sourcePath: /source/zh/kunpengcpfs/ecosystemEnable/Kubernetes/kunpengkubeovn_06_0021.html
indexId: 77d41abd60ea30682bf87b5f17b217a875b7eda57564a24994ccf2a76aa8a9f077
---
# StatefulSet固定IP地址

StatefulSet和其他Workload相同，可以使用ovn.kubernetes.io/ip_pool来指定Pod使用的IP地址。由于StatefulSet多用于有状态服务，对网络固定有个更高的要求，Kube-OVN做了特殊的强化：

1. Pod按顺序分配ovn.kubernetes.io/ip_pool中的IP地址。
2. StatefulSet Pod在更新或删除过程中，OVN中保存的Logical_switch_port不会删除，新生成的Pod直接复用旧的Interface信息；因此Pod可以复用IP地址/MAC地址及其他网络信息，达到和StatefulSet Volume类似的状态保留功能。
3. StatefulSet Pod在更新或删除过程中，对于没有ovn.kubernetes.io/ip_pool注解的StatefulSet，Pod第一次生成时会随机分配IP地址/MAC地址，之后在整个StatefulSet的生命周期内，网络信息都会保持固定。

示例：

```
vim StatefulSet.yaml
```

```
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: web
  namespace: product
spec:
  serviceName: "nginx"
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
```

```
kubectl create -f StatefulSet.yaml
```

使用annotation定义StatefulSet固定IP地址时需要注意以下几点：

- IP地址必须在所属子网的CIDR内。
- 所使用的IP地址不能和已有的IP地址冲突。
- IP地址数量小于replicas数量时，多出的Pod将无法创建，需要根据StatefulSet的更新策略以及扩容规划调整ovn.kubernetes.io/ip_pool中的IP地址数量。
