1000台規模のKubernetesクラスタを社内構築 サイボウズが明かすインフラ刷新運用を自動で行うツールを内製(2/2 ページ)

» 2019年09月10日 05時00分 公開
[石川俊明@IT]
前のページへ 1|2       

 「自前運用を選んだのは、コストを安く抑えられるのと、自社内にKubernetes構築の知見を蓄積したかったからだ。しかし、自前運用の場合、日常茶飯事となるサーバ故障による障害に対応する必要がある。1000台規模の環境でKubernetesクラスタの構築や運用を手作業で行うのは非現実的だった。こうした背景から構築や運用を自動化するCKEを開発した」

 既存のKubernetesクラスタ構築自動化ツールとして「Rancher Kubernetes Engine」(RKE)がある。RKEの導入も検討したが、対応コンテナランタイムがDockerのみで、サイボウズで利用したかったコンテナランタイムの「containerd」に対応していないなど、一部要件にマッチしなかったため、CKEを開発することにしたという。

CKEによるKubernetesクラスタ構築の仕組み

 池添氏は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クラスタの高可用性を実現するために、以下のような構成でマスターノードを構築している。

  • etcd:複数のメンバー(ノード)でクラスタを構築する
  • kube-apiserver:複数をアクティブな状態にしておき、リクエストを負荷分散させる
  • kube-scheduler、kube-controller-manager:いずれかのプロセスがリーダーとして実行されるよう設定する

 「オンプレ環境で高可用性があるロードバランサーを構築するのは大変だ。そこで、TCPリバースプロキシの『rivers」を開発して、各ノードに配置している。kubeletからkube-apiserverにアクセスする場合は、『localhost』を指定することでriversからアクセスできるようにして、高可用性を実現している」

 Kubernetesクラスタの冗長化に加えて、CKEの冗長化も行っている。3〜5台のサーバをCKEの管理サーバに割り当て、Kubernetesクラスタのマスターノードと同様にetcdクラスタを構築。いずれか1つのプロセスがリーダーとして実行され、障害によりリーダーが落ちても別のプロセスをリーダーとして選出して運用を継続できるような形で高可用性を実現しているという。

Kubernetesクラスタ運用の自動化

 Kubernetesクラスタの運用の自動化では、YAML形式の設定ファイルによる宣言的設定を行い、期待するクラスタの状態を宣言し、その状態に近づくように作業を実施。サーバの状態検知や機材管理にはNecoが開発した「Sabakan」というツールも用いているという。

 例えば、ノード1〜3でプロセスを実行すると宣言していた場合に、ノード2でエラーが発生してプロセスが終了したことをSabakanが検知したら、CKEがプロセスを再起動して修復を試みる。サーバ入れ替え時には、設定から古くなったノードと新しいノードを入れ替え、CKEがクラスタからの削除と、環境構築を実施する。

CKEとSabakanによるオペレーションの例(クリックで拡大)

 しかし、単純に理想と現実の差分を修正するだけでは運用はうまくいかないという。

 「自動的に作業が行われる仕組みを構築したが、現実的にはうまくいかないケースもある。Kubernetesクラスタはステートフルでetcdに情報を保存するため、宣言的な設定に合わせて差分を適当に修正しようとするとクラスタが動作を停止したり、データを失ったりすることがある」

こうした状況にならないよう、CKEでは、可能な限り自動的に修復を試みることを第一にしつつ、以下のような対策を採っているという。

  • 各コンポーネントの再起動順序を考慮する
  • 誤って設定した場合には作業を実施しないようにする
  • 「作業中にCKEが続行できない」と判断した場合は、管理者に通知して手作業で対応する

 池添氏は、Kubernetesクラスタの自前構築のメリットとデメリットを述べて講演を締めくくった。

 「Kubernetesクラスタを自前構築したことで、必要な機能を望むままに実装できた。また、運用コストも想定通り削減できそうだ。一方で、ネットワーク、ストレージ、Linuxカーネルなど周辺領域を深く理解していないとKubernetesクラスタ自前運用や、CKEのような管理ツールを開発するのは大変だ。特に理由がない限り、Kubernetesをマネージドで提供するサービスを活用することを勧める。もし、自前で構築や運用を検討しているのであれば、RKEやCKEの活用を検討してみてほしい。今後も、最高のインフラを目指すため取り組みを続けていきたい」

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

アイティメディアからのお知らせ

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。