コンテナを管理・自動化する「Kubernetes」とは?
コンテナやコンテナが稼働するマシンが増えると、管理や運用が煩雑になってしまいます。そうした場合に利用したいのが、コンテナの管理・運用を自動化するオーケストレーションツールです。そのデファクトスタンダードとなっているKubernetesについて解説します。
複数のコンテナ環境をまとめて管理・運用するKubernetes
コンテナやコンテナが稼働するマシンが増えると、当然のことながら管理が煩雑になってきます。具体的には、「負荷分散をどうするか」「コンテナが壊れたから復活させたい」「どのホストにどのコンテナを置こうか」「オートスケールする仕組みをつくりたい」といったことです。
そうしたときに利用するのが、コンテナオーケストレーションツールのKubernetesで、「K8s」と表記することもあります。Kubernetesは米グーグルが自社サービスの基盤向けに開発した「Borg」が基になっていると言われています。GoogleがBorgをベースにしたKubernetesを公開後、現在は非営利団体のCNCF(Cloud Native Computing Foundation)の下で開発が進められています。
Kubernetesの主な機能
Kubernetesは、コンテナ単体ではできなかった以下の機能を提供します。これにより、コンテナを活用したアプリケーションの運用負荷を大幅に軽減できます。
〇複数ホストでコンテナイメージを展開
複数のコンテナをデプロイします。
〇負荷分散機能の提供
ロードバランサーを自動配備して負荷分散や機能を提供します。
〇オートスケーリング
負荷に応じて自動的にスケーリングします。
〇障害時にコンテナを自動復旧
コンテナの死活管理を行い、障害時に自動復旧します。
Kubernetesの仕組み
ここで、Kubernetes の仕組みについて解説しておきましょう。
Kubernetesがコンテナを管理するときの最小単位が「ポッド(Pod)」です。1つ以上のコンテナで構成され、複数のコンテナを組み合わせることで、複雑な機能を持つアプリケーションでも容易に構築できます。同一Pod内にあるコンテナは、ストレージやネットワークを共有します。
Kubernetesクラスターを構成する各マシンは「ノード」と呼ばれます。ノードにはマスターノード(Master)とワーカーノード(Worker)の2種類があり、Workerが実際のコンテナの稼働環境で、Workerを指揮するのがMasterです。ユーザーは、Masterにkubectlコマンドを送ることで、Workerを操作します。
マニフェストは、Kubernetesの動かし方やリソース設定をYAML形式で定義したファイルで、いわば「あるべき姿」を定義したもです。例えば、コンテナをいくつ動かすのか、またトラフィックが増えた際のオートスケールの設定や、リソースの使用量などです。「あるべき姿」からはずれたときに「あるべき姿」に自動復旧するのがするというのが、Kubernetesの基本的な考え方です。
Kubernetesの課題と解決のアプローチ
さまざまなメリットのあるKubernetesですが、利用に際しての懸念点もいくつかあります。「既存のサーバー仮想化環境と別に環境が必要か」「用途に応じたクラスターの用意する必要があるか」「コンテナのネットワークが複雑」「遍在するKubernetesクラスターのライフサイクル管理」といったことです。
こうした懸念を解決するのが、vSphereで構築した仮想化システムを含めて一元管理できるプラットフォーム製品「VMware Tanzu」です。これにより、コンテナによる新たなアプリケーションに加えて、従来蓄積してきた企業の資産である仮想システムをクラウド統合できます。次回からは、VMware Tanzuについて紹介します。