StatefulSet固定IP地址
StatefulSet和其他Workload相同,可以使用ovn.kubernetes.io/ip_pool来指定Pod使用的IP地址。由于StatefulSet多用于有状态服务,对网络固定有个更高的要求,Kube-OVN做了特殊的强化:
- Pod按顺序分配ovn.kubernetes.io/ip_pool中的IP地址。
- StatefulSet Pod在更新或删除过程中,OVN中保存的Logical_switch_port不会删除,新生成的Pod直接复用旧的Interface信息;因此Pod可以复用IP地址/MAC地址及其他网络信息,达到和StatefulSet Volume类似的状态保留功能。
- StatefulSet Pod在更新或删除过程中,对于没有ovn.kubernetes.io/ip_pool注解的StatefulSet,Pod第一次生成时会随机分配IP地址/MAC地址,之后在整个StatefulSet的生命周期内,网络信息都会保持固定。
示例:
1 | vim StatefulSet.yaml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 |
1 | kubectl create -f StatefulSet.yaml |

使用annotation定义StatefulSet固定IP地址时需要注意以下几点:
- IP地址必须在所属子网的CIDR内。
- 所使用的IP地址不能和已有的IP地址冲突。
- IP地址数量小于replicas数量时,多出的Pod将无法创建,需要根据StatefulSet的更新策略以及扩容规划调整ovn.kubernetes.io/ip_pool中的IP地址数量。
父主题: 业务部署