「自前運用を選んだのは、コストを安く抑えられるのと、自社内にKubernetes構築の知見を蓄積したかったからだ。しかし、自前運用の場合、日常茶飯事となるサーバ故障による障害に対応する必要がある。1000台規模の環境でKubernetesクラスタの構築や運用を手作業で行うのは非現実的だった。こうした背景から構築や運用を自動化するCKEを開発した」
既存のKubernetesクラスタ構築自動化ツールとして「Rancher Kubernetes Engine」(RKE)がある。RKEの導入も検討したが、対応コンテナランタイムがDockerのみで、サイボウズで利用したかったコンテナランタイムの「containerd」に対応していないなど、一部要件にマッチしなかったため、CKEを開発することにしたという。
池添氏はCKEと、Kubernetesクラスタの構築方法について説明した。
CKEは、CKEの管理サーバを中心にクラスタを構築、運用するツールだ。具体的には、Dockerに特化したLinuxディストリビューションの「CoreOS」をインストールした各サーバを対象に、Kubernetesクラスタを管理するマスターノードと、アプリケーションコンテナを実行するワーカーノードを構築する。CKEの管理サーバはSSHを通じて証明書や秘密情報を配布し、各コンポーネントをインストールさせる。例えば、マスターノードの役割を担うサーバには、Kubernetesの各コンポーネントを操作する「kube-apiserver」や、分散KVS(Key-Value Store)の「etcd」などをインストールし、ワーカーノードの役割を担うサーバにはPodを管理する「kubelet」や、ネットワークプロキシの「kube-proxy」などをインストールする。
「Kubernetesクラスタ構築時には10種類以上の証明書が必要だが、安全に管理するため、Vaultを採用した。Kubernetesが扱う秘匿データを暗号化する際に必要な鍵を保存する場所にもVaultを活用して対応している」
そしてKubernetesクラスタの高可用性を実現するために、以下のような構成でマスターノードを構築している。
「オンプレ環境で高可用性があるロードバランサーを構築するのは大変だ。そこで、TCPリバースプロキシの『rivers」を開発して、各ノードに配置している。kubeletからkube-apiserverにアクセスする場合は、『localhost』を指定することでriversからアクセスできるようにして、高可用性を実現している」
Kubernetesクラスタの冗長化に加えて、CKEの冗長化も行っている。3〜5台のサーバをCKEの管理サーバに割り当て、Kubernetesクラスタのマスターノードと同様にetcdクラスタを構築。いずれか1つのプロセスがリーダーとして実行され、障害によりリーダーが落ちても別のプロセスをリーダーとして選出して運用を継続できるような形で高可用性を実現しているという。
Kubernetesクラスタの運用の自動化では、YAML形式の設定ファイルによる宣言的設定を行い、期待するクラスタの状態を宣言し、その状態に近づくように作業を実施。サーバの状態検知や機材管理にはNecoが開発した「Sabakan」というツールも用いているという。
例えば、ノード1〜3でプロセスを実行すると宣言していた場合に、ノード2でエラーが発生してプロセスが終了したことをSabakanが検知したら、CKEがプロセスを再起動して修復を試みる。サーバ入れ替え時には、設定から古くなったノードと新しいノードを入れ替え、CKEがクラスタからの削除と、環境構築を実施する。
しかし、単純に理想と現実の差分を修正するだけでは運用はうまくいかないという。
「自動的に作業が行われる仕組みを構築したが、現実的にはうまくいかないケースもある。Kubernetesクラスタはステートフルでetcdに情報を保存するため、宣言的な設定に合わせて差分を適当に修正しようとするとクラスタが動作を停止したり、データを失ったりすることがある」
こうした状況にならないよう、CKEでは、可能な限り自動的に修復を試みることを第一にしつつ、以下のような対策を採っているという。
池添氏は、Kubernetesクラスタの自前構築のメリットとデメリットを述べて講演を締めくくった。
「Kubernetesクラスタを自前構築したことで、必要な機能を望むままに実装できた。また、運用コストも想定通り削減できそうだ。一方で、ネットワーク、ストレージ、Linuxカーネルなど周辺領域を深く理解していないとKubernetesクラスタ自前運用や、CKEのような管理ツールを開発するのは大変だ。特に理由がない限り、Kubernetesをマネージドで提供するサービスを活用することを勧める。もし、自前で構築や運用を検討しているのであれば、RKEやCKEの活用を検討してみてほしい。今後も、最高のインフラを目指すため取り組みを続けていきたい」
Copyright © ITmedia, Inc. All Rights Reserved.