更新时间:2021-10-15 GMT+08:00
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 Volumn类似的状态保留功能。
- StatefulSet Pod在更新或删除过程中,对于没有ovn.kubernetes.io/ip_pool注解的StatefulSet,Pod第一次生成时会随机分配IP/MAC,之后在整个StatefulSet的生命周期内,网络信息都会保持固定。
示例:
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
|
kubectl create -f StatefulSet.yaml

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