なぜKubernetesを利用するのか

インフラ技術者の雑記

本ブログでは、Kubernetesとその周辺技術についてご紹介します。

今回は技術的な内容は深追いせず、「どうしてKubernetesを使うのか」という背景をご説明します。
ご覧いただき、Kubernetesを自社の環境で使用するべきかどうか、ご検討いただければと思います。

1. Kubernetesとは何か

Kubernetesとは、「宣言的な構成管理と自動化を促進し、コンテナ化されたワークロードやサービスを管理するための、ポータブルで拡張性のあるオープンソースのプラットフォーム」と公式ドキュメントに説明があります。
参考:Kubernetesとは何か? | Kubernetes

つまり、システムのあるべき状態をあらかじめ決めておいて、あるべき状態の実現と維持を自動的に行う機能を提供するプラットフォームになります。

2. なぜKubernetesを使用するのか

ゲームやECサイト運営といった一般消費者をターゲットとする業界や、会計・労務など法改正や制度変更の影響を受けるビジネス領域は、変化のスピードが速いです。

そうした環境でビジネスの目的を達成するためには、手段となるアプリケーションにも素早い変化が求められます。
アプリケーションを素早く変更し公開していくためには、コードの頻繁な変更に加え、実行環境となるインフラストラクチャの整備も必要です。
そのため、インフラストラクチャを抽象化し、アプリケーションとインフラストラクチャの依存度を下げていく必要があります。

クラウドベンダーが提供するサービスを利用することは良い選択肢ですが、OSS(オープンソースソフトウェア)も合わせて検討しましょう。

Kubernetesであれば、インフラストラクチャを抽象化し、アプリケーションとインフラストラクチャの依存度を下げることでスピード感のあるシステム変更が可能になります。

3. Kubernetesのデメリット

Kubernetesの運用には、メリットもありますがデメリットも存在します。
デメリットとしては以下のようなものが挙げられます。

●更新対応が多い
ベンダーにより差異はありますが、おおよそ3カ月ごとに Kubernetesのバージョンがリリースされるため、使用環境のバージョンアップを行う必要があります。
そのため、バージョンアップの対応を検討しなければならず、運用上の負担となります。

●学習コストが高い
Kubernetesは独自のリソースが多く存在し、使いこなすまでに学習コストがかかります。
Kubernetesのバージョンが更新された場合、仕様変更が発生するため、仕様の理解が必要となります。

4. Kubernetesのメリット

頻繁に変化する システムにとって、アプリケーションとインフラストラクチャの構成管理は大切です。
システムの構成を把握していない状態では 、安全にアプリケーションを変更・公開できません。
Kubernetesは、どのバージョンで、どのインフラストラクチャを使ってアプリケーションが公開されているのかを管理することができます。

●段階を踏んだ公開方法
管理者は、システムの頻繁な変更によるユーザーへの影響を最小限にしたいはずです。
そのため、例えば第1段階として新しいバージョンと古いバージョンを混在させて公開を行い、問題なければ第2段階ですべてのアプリケーションを新しいものにする、という方法を取ります。
予期せぬ障害が発生した時には、安定していた前のバージョンへ戻すことが可能です。

●運用作業の簡略化
Kubernetesは、何らかの原因で発生した障害の復旧対応や、ユーザー増加に伴うリソース拡張といった作業を自動化することができます。
そのため、システム運用に関する負担が軽減し、アプリケーションの変更に集中することが可能です。

5. Kubernetesによる管理

小さなアプリケーションは機能追加などの変更がしやすいです。
小さければ変更によって発生する影響範囲が限定されます。
小さなアプリケーションはコンテナという技術と相性が良いです。
アプリケーションの実行環境とインフラストラクチャを分離するためにコンテナが使われます。
コンテナ技術を利用することで、インフラストラクチャに依存せずにアプリケーションを公開できます。

小さなアプリケーションは、それ一つでユーザーからの要求に応えるわけではありません。
多数のアプリケーションが連携し、ユーザーからの要求に応えます。
アプリケーションが多いほどに相互の連携は難しく、構成管理も大変です。

これを解消するためにKubernetesが用いられます。
コンテナを連携させる機能を提供し、コンテナおよび抽象化されたインフラストラクチャの構成管理も行います。
アプリケーション・インフラストラクチャの状態をあらかじめ定義することで、それぞれの状態を自動で調整します。


infraexpt03_01.png

6. まとめ

Kubernetesはすべての状況に対応できるわけではありません。
小さなアプリケーションが分散している(あるいはビジネス速度に合わせるため、これから分散させていく)状況で、もっと運用を楽にしたいという目的には適しています。

Kubernetesを利用する際にはクラウドベンダーが提供するサービスを活用することが多いですが、サービスごとに操作が異なります。
そのため、Rancherというアプリケーションを導入することで、運用者はより楽にKubernetesを操作できるようになります。
Rancherはクラウドサービスに依存しないWeb UIを提供し、様々な環境にあるKubernetesの操作を統一します。

最後になりますが、今回は導入として技術的な内容は深追いせず、「どうしてKubernetesを使うのか」という理由を中心にご紹介しました。
今後のブログでは、自動復旧やKubernetesのバージョンアップなど、より技術的な内容をご紹介していく予定です。
Kubernetesの周辺技術には、IstioなどのService Mesh(サービスメッシュ)や、NginxなどのService Proxy(サービスプロキシ)と呼ばれるものなどが存在します。
今回の記事で触れたRancherを使用した運用についてもご紹介します。

システムエグゼは、「自社の環境でKubernetesを導入したほうがよいのか」を含め、最適な方法をご提案します。
ご興味がございましたら、ぜひお気軽にお問い合わせください。