TOP>コラム一覧>【初心者必見】クラウドネイティブとは②―これだけはおさえよう、実現のためのアーキテクチャー「コンテナ」と「Kubernetes」とは?

【初心者必見】クラウドネイティブとは②―これだけはおさえよう、実現のためのアーキテクチャー「コンテナ」と「Kubernetes」とは?

はじめに

こんにちは。CTCの朴木です。
前回①では、そもそもクラウドネイティブとは?実現することでどんなメリットがある?という基礎知識から、実践のためのプロセスの概要を解説しました。

【初心者必見】クラウドネイティブとは①―なぜ必要?メリットは?実現へのプロセスは?

②の今回は、クラウドネイティブ実現のためのアーキテクチャー解説として、

  • 「コンテナ」とは何か?
  • コンテナ化することで得られるメリットとは?

についての詳細を解説。加えて、

  • コンテナ化を構成する技術要素「Kubernetes」とは?
  • 「Kubernetes」の導入メリット

を初心者の方にもわかりやすく、解説します。

コンテナとは?

コンテナとは、仮想化技術の一つです。「アプリケーションの実行環境をパッケージ化し、ホストOSからプロセスやネットワークなどのリソースを隔離する」という点が、特長です。

コンテナという概念を理解するためには、従来の「サーバー仮想化」と「コンテナ型仮想化」を比較すると、分かりやすいです。コンテナ技術の代表的な実装方法の1つである「Docker」を例に、解説します。

従来の一般的なサーバー仮想化は、物理サーバー上にハードウェアの機能をすべてソフトウェアで実装する「仮想サーバー」を複数作り、実現します。近年は仮想化機能を支援する機能がサーバーに組み込まれてきているとはいえ、その実装はいまだ複雑です。また、従来のサーバー仮想化技術は、1つのOS上にゲストOSを複数配置します。

仮想環境上にOSが必要なため、その分起動が遅くなります。また、OS分のリソースも必要なため、サーバーに配置できる仮想環境は少なくなります。

一方、コンテナ型仮想化はOSの上に“コンテナ”と呼ばれる仮想的なユーザー空間を提供します。ユーザー空間とは、ユーザーがアプリケーションを実行するための、ひと揃いのリソースが提供される空間です。コンテナ型仮想化では1つのOSの上で、仮想的なユーザー空間であるコンテナを複数提供できます。

OSはコンテナを配置するサーバーのものを使うため、実行環境上にOSが不要となり、その分起動が早くなります。また、OS分のリソースも不要ですので、その分サーバーに配置できる実行環境も多くできます。

わかりやすい例を挙げると、コンテナ技術を使うことで同じホストOS上で、バージョンの異なるPHPを同時に動かすことができます。アプリケーション側から見ると、各コンテナはそれぞれ別のコンピューター上で稼働しているように扱えます。

このコンテナ技術の中核となるのが、ホストOS上で稼働するコンテナランタイムと呼ばれるソフトウェアです。Namespace(名前空間)などのOSの機能を使い、アプリケーションやリソースを分離し、コンテナを動かす役割を担っています。コンテナランタイムの上では、複数のコンテナを稼働させることができます。

コンテナ化のメリットとは?

コンテナ化の技術的な効果は、大きく2点あります。

1点目は、同一のOS内の異なる空間で、複数のアプリケーションが実行しやすいこと。

通常、OS内で複数のアプリケーションを動かす場合、CPU、メモリの配分やファイルシステムの利用などが相互に影響してしまうリスクがあります。コンテナ化ではOSの持つ名前空間分離機能を活用することにより、互いの影響リスクを最小限にできます。コンピューティングリソースそのものを仮想化、分離するVM(Virtual Machine:仮想マシン)とは異なり、アプリケーションを立ち上げるパラメータを変えるだけなので、高速な立ち上げが可能。まさにクラウドネイティブです。

2点目は、アプリケーションとその実行環境をイメージにまとめられること。

通常、アプリケーションにはアプリケーション本体だけでなく各種ミドルウェアが必要です。このアプリケーションとミドルウェアの配置作業はサーバーエンジニアが行いますが、非常に手間がかかり、サーバーが複数の場合はそれぞれに対し、同じ作業を行う必要がありました。

コンテナ化であればあらかじめ「コンテナイメージ」にひとまとめにしておいて、1点目で述べた空間分離環境で展開して実行できます。これによりさまざまな環境で同じ構成のアプリケーションを簡単に実行できるようになる、アプリケーションのポータビリティ(可搬性)が大きく向上します。

これを踏まえて、コンテナ化による具体的なメリットを見ていきましょう。

コンテナ化のメリット① コスト削減

1つ目のメリットはコスト削減効果です。現行サーバーの仮想環境をコンテナ化することで、構成がシンプル化。さまざまなコスト削減が見込めます。

  • コンテナ化によりVMwareの購入は不要
  • 高負荷によって拡張されたコンテナアプリは、負荷低減にあわせて停止。
  • OSのリソースが削減できるコンテナは集約率が向上し、物理サーバーが削減
  • ただし、OpenShiftのコントロールプレーンのサーバー追加は必要

例えば・・・80Coreの3層システムが本番/検証/開発ある場合、Total 240Coreのうち、40Coreがコンテナ化で削減とすると、VMware 240Core分と、M/W 40Core分が削減できます。MWを1Core 50万円として計算すると、年間で2,000万円以上のコスト削減につながります。

※上記はあくまでもシミュレーションです。コンテナ化に伴いアプリケーションの改修が必要になるなど条件があります。

コンテナ化のメリット② 基盤の効率化/スピード化

2つ目のメリットは基盤の効率化とスピード化です。コンテナ化により、開発者による直接環境変更が実現。リードタイム、工数面での効率化と対応の迅速化が可能となります。

当社のお客様事例では、OpenShift基盤導入により対応の迅速化が実現したことに加え、インフラ構築コストが従来の1/3に低減しました。

コンテナ化のメリット③ 委託開発・リリース効率化

3つ目のメリットは委託開発を実施する際の、開発とリリースの効率化です。アプリケーションを含めたコンテナイメージを作成し、納品することで、さまざまな効率化が実現します。

コンテナ化されていれば・・・

委託開発業者は委託元からベースの開発コンテナイメージを入手し、慣れた自社の環境で開発できます。さらに納品時も、アプリケーションを含めたコンテナイメージとして納品が可能となります。

委託元側も、運用部門ではなく開発(業務)部門で受け入れてデプロイ、リリースすることができます。従来のデプロイまでのさまざまな作業や、運用部門との調整の工数が削減でき、委託開発~リリースまでの大幅な効率化が実現します。

コンテナを構成する技術要素「Kubernetes」とは?

コンテナ化のメリットを理解いただいたところで、次にコンテナを構成する注目の技術要素「Kubernetes」について、解説します。

「Kubernetes」とは、Dockerに代表されるコンテナ仮想化ソフトウェアを効率的に運用管理・自動化するためのオープンソースソフトウェア(OSS)です。

語源は操縦士や船長、道しるべなどを意味するギリシア語で、読み方は「クバーネティス(クーべネティス)」。「K8s (ケーエイツ)」「kube」と略されることもあります。

前述の通り多くのメリットをもたらすコンテナですが、コンテナは各種アプリケーションを実行するものの、それ自体を管理したり、別サーバーと連携したりはできません。そのため、複数ホストでコンテナを運用したい場合などで、管理が煩雑になってしまう課題があります。

Kubernetes は、まさにこの課題を解決する「コンテナオーケストレーションツール」です。

コンテナオーケストレーションとは、複数あるコンテナを管理する技術のこと。複数のコンテナを運用する場合、ネットワークやストレージなどの連携管理を行う必要があります。コンテナオーケストレーションツールは、これらの管理を行ってくれるため、コンテナがダウンしたり、アプリケーションに高負荷がかかったりした場合にも、スムーズな運用を実現します。

KubernetesとDockerは何が違う?~「クラスター」と「Node」

Kubernetes を理解しようとする中で、多くの人が「Dockerと何が違う?」という疑問にぶち当たります。確かに Docker も Kubernetes 同様に、コンテナを用いてアプリケーションを実行するソフトウェアのひとつですが、この2つは、実行場所と利用目的が以下のように異なります。

実行場所は、Dockerは単一ノードで実行されるのに対し、Kubernetes はクラスターで実行されます。Kubernetesには、複数のコンテナを管理するKubernetes Podがあり、さらに複数のPodがノード(Node)にまとめられています。そして、Nodeが集まったものが「クラスター(まとまり)」です。

また、利用目的は、Kubernetes が「各コンテナを管理すること」なのに対し、Dockerは「アプリケーションを各コンテナに分離すること」です。

クラスターは、Kubernetes全体構造の最上位に位置するものですので、もう少し解説します。Kubernetesがコンテナの配置や削除を行うとき、直接指示を出すのが、このクラスターです。これにより、システム効率がよくなり、リソースを最大限活用できる、機密情報の管理なども容易に行えるといったメリットをもたらします。

クラウドオーケストレーション「Kubernetes」の6つの導入メリット

それでは、Kubernetesを利用するメリットを見ていきましょう。

①アプリケーションの効率的なリリースが可能

Kubernetes を使えば、効率的かつ柔軟なアプリケーションの公開や新機能のリリースが可能。万一、アプリケーションに不具合があった場合も、修正後のバージョンへの入れ替え、ロールバックなども自動化可能です。

②自己回復機能で障害に強い

Kubernetesは自己回復機能が備わっており、障害に強い特長があります。コンテナがダウンしたり、操作ミスで削除してしまったりした場合も、自動回復が可能です。

③高速・軽量な起動で開発スピードを加速

Kubernetes は従来の仮想ソフトウェアよりも動作が軽量化されており、起動も高速です。そのため、アプリケーション開発の効率化に貢献します。

④柔軟なスケーリング

Kubernetesは、搭載するPodの「水平オートスケーリング機能」により、柔軟なスケーリングが可能です。これにより、規模や状況に応じたリソースの最適化、余剰コストの削減や生産性向上にもつながります。

⑤高いセキュリティ性

Kubernetesには、パスワードや SSH キーなどの情報を保全する機能が備わっています。さらに、Kubernetesではコンテナを再構築せずに、アプリケーションの構成情報を更新することも可能。情報管理面でのセキュリティ強化に貢献します。

⑥サービスディスカバリーによる可視化

Kubernetes は、デフォルトで利用できるサービスディスカバリーによって、サーバー上のアプリケーションのポート番号や IP アドレスを把握可能です。

まとめ

いかがでしょうか。今回は、クラウドネイティブ実現のためのアーキテクチャー解説として、「コンテナ」およびコンテナ化を構成する技術要素「Kubernetes」の基礎知識とメリットを解説しました。

次回、シリーズ③では、クラウドネイティブをAWSで始める場合の基礎知識について、ECSとEKSの違いなども交えて解説します。

CTCは、AWSのビジネス利活用に向けて、お客様のステージに合わせた幅広い構築・運用支援サービスを提供しています。
経験豊富なエンジニアが、ワンストップかつ柔軟にご支援します。
ぜひ、お気軽にお問い合わせください。

お問い合わせ

関連コラム

【著者プロフィール】

朴木 瞳(ほうのき ひとみ)

伊藤忠テクノソリューションズ株式会社 クラウドエンジニア

AWSのインフラ構築や技術QAを経験し、現在はアカウント管理に従事。従量削減のためのRIのコストシミュレーションにおいてお客様を支援中。

TOP>コラム一覧>【初心者必見】クラウドネイティブとは②―これだけはおさえよう、実現のためのアーキテクチャー「コンテナ」と「Kubernetes」とは?

pagetop