image.png

    • StatefulSet为每个Pod副本创建了一个DNS域名,这个域名的格式为: $(podname).(headless server name),也就意味着服务间是通过Pod域名来通信而非Pod IP,因为当Pod所在Node发生故障时,Pod会被飘移到其它Node上,Pod IP会发生变化,但是Pod域名不会有变化。
    • StatefulSet使用Headless服务来控制Pod的域名,这个域名的FQDN为:$(service name).$(namespace).svc.cluster.local,其中,“cluster.local”指的是集群的域名。
    • 根据volumeClaimTemplates,为每个Pod创建一个pvc,pvc的命名规则匹配模式:(volumeClaimTemplates.name)-(pod_name),比如上面的volumeMounts.name=www, Pod name=web-[0-2],因此创建出来的PVC是www-web-0、www-web-1、www-web-2。

    针对statefulset进行通信是以域名为地址进行通信,pod的增删不会影响服务访问。

    通过使用coreDNS地址解析无头服务域名,可以看到无头服务所对应的pod地址。
    ![_K@46}Z`}[TX$H8A1RUNYY.png
    5RYBFAQ1@A2RCNKQ2R$DXOO.png