Jaybanuan's Blog

どうせまた調べるハメになることをメモしていくブログ

KubernetesでのHeadless Serviceと普通のServiceの併用について

はじめに

Kubernetesの以下のドキュメントを読んだ時に湧いた疑問。

kubernetes.io

このドキュメントではMaster/Slave構成のMySQLに対して、書き込み用のHeadless Serviceと、読み込み用の普通のServiceの両方を定義している。 Headless ServiceでもDNSラウンドロビンの負荷分散はできそうなのに、あえてそれを避けているのは何故だろうと思った。

DNSラウンドロビン

以下の説明が分かりやすかった。

qiita.com

要するに、DNSラウンドロビンは、クライアント側の挙動に依存したり、障害検知のようなきめ細かい制御ができなかったりするので、避けているのだと分かった。

考察のようなもの

Podを特定したアクセス(Masterへの書き込み)と、Podを特定しないアクセス(Master/Slaveからの読み込み)の、両方がある場合はHeadless Serviceと普通のServiceを併用する。

以下でGalera clusterの例があって、Headless Serviceのみを利用しているが、Peer同士でクラスタを組むためにはHeadless Serviceが必要だが、クライアントがアクセスするためには普通のServiceが実はあったほうがいいように思えた。

qiita.com