ITエンジニアが語る、Kubernetesの可能性
近年の仮想化技術の進化により、システムは "コンテナ" という仮想環境にアプリケーションを載せて稼働することが多くなりましたが、パブリッククラウドで "コンテナ" を用いたシステムを構築すると、例えばダウンタイムを発生させないように多重化するなどの "コンテナ" の管理が必要不可欠になってしまいます。
これでは、システムの利便性向上や運用保守の低減を目的に仮想化したのに、かえって "コンテナ" の運用管理が大変になりかねません。
この "コンテナ" の運用管理を手助けしてくれるプラットフォームが "Kubernetes" です。読み方は、クーベネティス、クバネティスなどと呼ばれています。
"Kubernetes" は、構成管理と自動化を促進するためにコンテナに配置されたワークロードやサービスを管理するための仕組みになります。ポータブルで拡張性のあるオープンソースのプラットフォームで幅広いサービスやサポート、ツールを利用することができます。
Kubernetesについては、多くの書籍、ホームページで解説されていますが、わかりにくい表現が多く、いまひとつピンと来ていない方は多いのではないでしょうか。
そこで、日頃からKubernetesを活用してシステム構築している立場から、Kubernetesの特長やメリット・デメリットを紐解いてわかりやすく解説したいと思います。
1. Kubernetesの主な機能とその特長
Kubernetesは、Google社が主導して開発したオープンソースです。Kubernetesのホームページにも主要機能が掲載されていますが、少しわかりにくい記載になっています。Kubernetes独自の用語(Pod(ポッド)※1、Node(ノード)※2、Cluster(クラスター)※3)が多用されていること、コンテナのさまざまなコントロールマネジメント機能が多数提供されていること、コンテナ以外(例えば、VMWare)のコントロール機能が増えていることがその理由だと考えられます。今回はこの中でもコンテナのコントロールマネジメント機能に絞って主要機能の紹介を行います。
-
- ① コンテナの名前解決
- Kubernetesは、コンテナの名前解決ができるように Cluster内にDNSサーバーを持っているため、独自のIPアドレスとサービス名の組み合わせを定義して公開することができます。
-
- ② 負荷分散
- 起動中のコンテナへのトラフィックが多い場合は、Kubernetesがトラフィックを監視し負荷の少ないNodeへ次に立ち上げるコンテナを振り分けることでデプロイ※4 を安定させることができます。
-
- ③ 外部ストレージへのマウント
- Kubernetesは、自分達で用意したストレージやAWSなどのクラウドプロバイダーが提供しているストレージサービスを指定してマウントすることができます。コンテナを削除するとコンテナ内データが消失してしまう課題を、外部ストレージへ書き込みすることで解決することができます。
-
- ④ コンテナの自動デプロイ
- Kubernetesを使うと実行コンテナのコンテナイメージの場所などの情報を記述することができ、実施したいタイミングで新コンテナへの入替変更をすることができます。例えば、新規アプリケーション機能をデプロイするために、新しいコンテナへの新規機能の適用作業と新しいコンテナの作成、さらに既存コンテナの削除を自動化できます。特にマイクロサービスを使ったアプリケーションの頻繁なデプロイの実現には、Kubernetesによるコンテナの統合管理は最適な方法となります。例えば、インターネットモールの販促用のイベント開催にあたり、「(1) イベント開始に合わせてイベント機能コンテナのデプロイ」「(2) イベント終了したらイベント機能コンテナ削除」といった柔軟な運用に使えます。
-
- ⑤ コンテナリソース指定とリソースコントロール
- 各コンテナがどれくらいCPUやメモリ(RAM)を必要とするのかをKubernetesに宣言することができます。KubernetesはNodeにあわせてコンテナの配置調整することができ、CPUやメモリのリソースを最大限に活用できます。
-
- ⑥ コンテナ自己修復
- Kubernetesは、応答しなくなったコンテナが見つかった場合、応答しないコンテナと同等の新コンテナを再起動します。新コンテナが動作したら、応答しないコンテナを強制終了することで自己修復を行います。
-
- ⑦ 機密情報と構成管理
- Kubernetesは、パスワードやSSHキーなどの機密情報をアプリケーションプログラムとは別に保持する仕組みを持っています。たとえばパスワードの変更が発生した場合でも、Kubernetesの機密情報を更新するだけで済み、コンテナイメージを再作成することなくアプリケーションプログラムを更新することができます。
2. Kubernetesのメリット・デメリット
Kubernetesの公式ページでは、おもに以下のメリットがあると言われています。
-
- ① サービスディスカバリー
- サービスディスカバリーによって、サーバーにあるアプリケーションのポート番号やIPアドレスなどを知ることができます。また、どのようなアプリケーションが動いているのかを知ることもできるため、運用監視が容易になります。
-
- ② 自己修復機能
- 自己修復機能により、コンテナがダウンしてしまった場合も自動で修復させることができます。つまり、Kubernetesは障害に強いといえます。
-
- ③ オンプレミスとクラウドで利用できる
- Kubernetesは、オンプレミスとクラウドで運用できる点もメリットです。自社サーバーでもクラウドでも使えるので、利用する場所を選びません。
3つのメリットのなかで、私が最も大きなメリットだと感じるのは "③オンプレミスとクラウドで利用できる" です。
なぜならば、クラウド化して使わなくなった既存オンプレ環境を再活用できることと、オンプレミスとクラウドの環境の違いをKubernetesが吸収することによって両環境の切り替えが容易になり、結果として冗長性が高い運用の実現が可能だからです。例えば、クラウドサービスも稀にサービス不安定になることがありますが、切り替えが容易であればオンプレミスのみの片面運用が状況によっては可能になります。
また、デメリットについても触れてみたいと思います。
語弊が無いように最初に申し上げますが、デメリットがあったとしても、私自身、Kubernetesはデメリットを補って余りある大変素晴らしいプラットフォームだと感じています。
しかし、あえてデメリットをあげるなら "Kubernetesの拡張性が高すぎること" だと考えています。場合によっては、拡張性が高すぎてどの機能を使うべきか判断に迷うため、それぞれの機能を使った場合のお客様へのメリットの説明が大変なこともあります。お客様へ最適なシステム構成の要件をまとめ、"Kubernetesサーバー構成の定義"、"Kubernetesがどのような役割を果たすのか" といった内容をお客様に分かりやすく説明できるように、私たち技術者も腐心しています。
3. Kubernetes 導入におけるチェックポイント
このように、Kubernetesは素晴らしいプラットフォームで、複数システムの運用管理に必要な管理業務を大幅に節減できる可能性を持っています。
ただし、Kubernetesの導入に際しては、下記の利点を意識した上で、しっかりと検討、実証検証、システム構成設計をして導入することを強くオススメしたいと思います。
-
- ビジネス面での利点
- スピード感のあるサービスリリースが可能となりお客様のビジネス拡大に寄与できる
-
- 運用面での利点
- 繁忙期、閑散期など、システム負荷が一定でない運用の自動コントロールが可能
-
- 技術面での利点
- コミュニティーが盛んなOSSであるので各種ドキュメントが揃っている、軽量高効率なコンテナ技術である
-
- クラウド活用時の利点
- クラウドでKubernetesを利用する場合は、AWSやAzureなどのクラウドプロバイダーが提供するKubernetesサービスを利用することもできます。クラウドプロバイダーが提供するサービスを使うと、自前でKubernetesを構成したときと比較すると運用監視を容易化できますが、追加でサービス利用コストがかかるため、運用と費用のトレードオフで考える必要があります。
4. さいごに
いかがでしたでしょうか。
このコラムを読まれたということは、コンテナを使った仮想化の運用に課題があったり、Kubernetesの活用を検討しているのではないかと思います。Kubernetesのメリットを最大限に引き出し、皆様におけるITシステムのさらなる価値向上に繋がれば、これ以上の喜びはありません。
当社では、私をはじめ、仮想化やKubernetes 、AWSやAzureなどのクラウドサービスに詳しいITエンジニアが多数、在籍しています。ITシステムの導入や運用保守に関するご相談がありましたら、遠慮なくお問い合わせいただければ幸いです。