はじめに
Kubernetesの以下のドキュメントを読んだ時に湧いた疑問。
このドキュメントではMaster/Slave構成のMySQLに対して、書き込み用のHeadless Serviceと、読み込み用の普通のServiceの両方を定義している。 Headless ServiceでもDNSラウンドロビンの負荷分散はできそうなのに、あえてそれを避けているのは何故だろうと思った。
DNSラウンドロビン
以下の説明が分かりやすかった。
要するに、DNSラウンドロビンは、クライアント側の挙動に依存したり、障害検知のようなきめ細かい制御ができなかったりするので、避けているのだと分かった。
考察のようなもの
Podを特定したアクセス(Masterへの書き込み)と、Podを特定しないアクセス(Master/Slaveからの読み込み)の、両方がある場合はHeadless Serviceと普通のServiceを併用する。
以下でGalera clusterの例があって、Headless Serviceのみを利用しているが、Peer同士でクラスタを組むためにはHeadless Serviceが必要だが、クライアントがアクセスするためには普通のServiceが実はあったほうがいいように思えた。