最近ふと気づいたネタです。
Googleのmanaged Kubernetes環境であるGKEで、新しく作るkubernetesクラスタには名前をつけます。まあGKEでなくても大抵はそうですが。利用者の識別のために何らかの名前をつけるわけです。識別のための名前なので、名前は重複しないように選ばないといけません。ではどのレベルでの重複が問題なんでしょうか?
例えばs3のbucketの名前とかは世界全体で重複しちゃダメですね。GCPのプロジェクトIDも同様です。一方、GKEのようなリソースの名前では、当然ながらプロジェクトIDが異なれば同じ名前のものを使えます。利用者側としても自分が指定したものがわかればいいので(ユニークなIDは内部的には付番されているはずですがこれを使うことはありません)。つまり自分用に気軽にmyclusterみたいな名前のクラスタを作ってもよい。当たり前のことですね。複数のプロジェクトが同じ組織に属している場合などで考えると当たり前とは言い難いかもしれませんが、まあそれでも大丈夫ということになっています。単にややこしくなるだけのことです。
さらにいうとGKEのクラスタの名前はもっと細かい範囲でも識別可能なら同じ名前でも大丈夫なようになっています。例えばリージョンが異なれば大丈夫。例えばus-central1にmyclusterを作ったら、もうus-central1にはmyclusterという名前の別なクラスタは作れないけれど、違うリージョンであるus-west2には作っても問題ありません。
さらにややこしいことに、GKEのクラスタはリージョン全体にまたがるregionalなクラスタと、単独のゾーン(availability zone)だけに存在できるzonalなクラスタがあります。そしてzonalなクラスタであれば、同じリージョン内でも違うゾーンなら同じ名前でも良いようです。つまり同じus-central1内でもus-central1-aのmyclusterと、us-central1-bのmyclusterが別個に存在しても良いのですね。
さらにさらに。regionalなクラスタとzonalなクラスタも共存できます。というか疑問に思ったのでやってみたらできました。つまり、us-central1-aのmyclusterとus-central1-bのmyclusterがあり、同時にus-central1に存在するmyclusterが存在しても良いわけです。この時、regionalなクラスタのノードはzonalなクラスタのノードと同じゾーン内に共存しています。していてもまぁ問題ないわけです。
まぁだからどうかというと、現実的にはこんなややこしいことをする利点は一切ないのであんまりやられていないと思いますが、やろうと思えばできるんだなあということでした。