はじめに
KubernetesをHA(High Availability)構成とする場合、コントロールプレーン(etcd含む)、ワーカーに対して、ホストとなるマシンはどれだけ必要なのか?という話題です。
内容
etcd
下記は、Kubernetesからは独立して開発されているetcdについての公式ドキュメントです。
etcd is written in Go and uses the Raft consensus algorithm to manage a highly-available replicated log.
Raft consensus algorithmを使用しているので、奇数個でクラスタ化する必要があります。
コントロールプレーン
まず、Kubernetesの公式ドキュメントにHA構成の選択肢の説明があります。
ここでは、コントロールプレーン全体を冗長化することで、etcdも同時に冗長化することに対してのリスクについて説明しており、できればetcdは独立してクラスタ化した方がよい、ということを説明しています。
Stacked etcd topology の項には下記の記載があります。 コントロールプレーンは最低3台必要とのことです。
You should therefore run a minimum of three stacked control plane nodes for an HA cluster.
また、External etcd topology の項には下記の記載があります。 これは、コントロールプレーンは最低マシンが3台必要であることに加え、etcdは独立してクラスタ化する場合、更に3台マシンが必要(!)という説明になっています。
A minimum of three hosts for control plane nodes and three hosts for etcd nodes are required for an HA cluster with this topology.
etcdは奇数個でクラスタ化が必要であるという制約があるため、まとめると下記が要件となると考えられます。
- Stacked etcd topology
- コントロールプレーンは3台以上、奇数個(3,5,7…)
- External etcd topology
- コントロールプレーンは3台以上(3,4,5…)
- etcdは3台以上、奇数個(3,5,7…)
- 上記を合わせて6台以上
ワーカー
ワーカーのHA構成についての説明は下記にあります。
You need:
- Three or more machines that meet kubeadm’s minimum requirements for the control-plane nodes. Having an odd number of control plane nodes can help with leader selection in the case of machine or zone failure.
- Three or more machines that meet kubeadm’s minimum requirements for the workers
ワーカーについても最低3台必要とのことです。 また、結局コントロールプレーンについてもマシンまたはゾーンの障害時のリーダー選出には、奇数台が望ましいとのこと。。
AKS(Azure Kubernetes Service)におけるetcd
AKSのpodを見ると、(Kubernetesの根幹であるはずの)etcdのpodが存在しない為、不思議に思っていたのですが、下記ドキュメントを読んで理由を理解しました。
コンポーネント | 説明 |
etcd | お使いの Kubernetes クラスターと構成の状態を維持するために、高可用性を備えた etcd が Kubernetes 内のキー値ストアとなります。 |
このマネージド コントロール プレーンによって、コンポーネント (高可用性を備えた etcd ストアなど) を構成する必要はなくなりますが、コントロール プレーンには直接アクセスできません。
AKSでは、高可用性を備えたetcdが使用されているということですので、前述の説明で言うところの External etcd topology を採用していることになります。
一方で、前述の通り、Kubernetesの公式ドキュメントでは、HAトポロジーに関係なく、コントロールプレーンには最低3台のマシンを用意すべきとありますので、いずれにしてもコントロールプレーンには3台必要となります。
ただし、AKS上のマシンは独立したVMとして管理されているはずですので、2台でもよいのかもしれません。Production向けにAKSクラスタを構成する際の規定は2台だった気がします。
参考
おわりに
以上です。