企業が「スピード」と「柔軟性」を得るためのアプローチの一つとして注目を集めるようになった「クラウドネイティブ」。「マイクロサービス」や「コンテナ/Kubernetes」などのキーワードは理解されてきてはいるものの、実際に取り組みを進めるとうまく現場に落とし込めず、結果、コンテナベースでマイクロサービスを動的にスケーリングさせられないなど、カベにぶつかることが多い。では、そのカベはどうすれば壊せるのだろうか。
顧客ニーズの変化を素早くとらえ、ビジネス環境、市場をリードするためにどのようにテクノロジーを活用していくかは、ITにとっての永遠の課題だ。特に近年は変化のサイクルが速くなり、先を見通すことがますます難しくなっている。そのような中、強く求められるようになったのが「スピード」と「柔軟性」だ。
スピードや柔軟性を得るためのアプローチの一つとして、注目を集めるようになったのが「クラウドネイティブ」だ。定義はさまざまだが、共通していえるポイントは、企業のITシステムをビジネス上の変化に迅速に追随させるという、クラウドの特性を最大限に活用できることにある。
クラウドネイティブというと、インターネット上でサービスを提供するWeb系企業やEC事業者の取り組みと思われがちだ。しかし、実際には、エンタープライズ企業がビジネスをデジタル化するためにクラウドネイティブを取り入れたり、複数企業がタッグを組んで使うスケーラブルな共通基盤として活用したり、ベンダーがPaaSやSaaSのように「Deep Learning as a Service」として機械学習基盤を提供したり、と業界業種を問わず採用が広がっている。
スピードや柔軟性を得るためには、組織やアプリケーションの設計、そしてサービス基盤の運用、これら全てを回せる必要がある。ここに頭を悩ませるケースが多い。
1つ目の組織面では、ビジネス部門と開発者、そして運用担当者が手を取り合い、アイデアをすぐさま形に変え、今求められているものを今届けるという共通の目的を持ったチームを組むことが重要になる。組織面を再構成する難しさはあるものの、企業内で専門組織を立ち上げて、スピードと柔軟性を持ってスケーラブルに対応できることを目指した取り組みは確実に拡がっている。
2つ目のアプリケーションの設計については、依存関係を極力なくすことで、コード変更や機能追加、新しいテクノロジーを採用できるようにすることが重要になる。最適解はないものの、マイクロサービスの要否を鑑みてコンテナ活用に前進するプロジェクトが増えてきている。
実は、ここまでは今に始まった話ではなく、過去にもDevOps文化やノウハウを取り込む過程でチャレンジしてきているはずだ。
3つ目のサービス基盤の運用について「マイクロサービス基盤をうまく運用していくことに対する解決策が抜け落ちているケースが多い。誰でもすぐに使えるサービス基盤をいかにして構築、運用できるか、これが重要なポイントになります」と話すのは、日本IBMで企業のデジタル変革をクラウドネイティブの観点で支援している斎藤和史氏(クラウド事業本部 Kubernetes Developer Advocate)だ。
「多くの企業が、顧客ニーズに素早く対応するために、これまでさまざまな取り組みを行ってきました。アジャイル開発にも長い歴史がありますし、クラウドサービスの台頭によってインフラの構築、運用において自動化できる部分が出てきました。ただ、アプリケーションの開発から運用まで視野を広げると、実際にはスピードと柔軟性の向上の効果を十分に得られていないケースが数多くあります。これまでの取り組みだけでは、まだ足りない――特にクラウドネイティブを最大限意識したい気持ちはあるものの追い付いていない。企業の間にそんな認識が広がってきています」(斎藤氏)
これまでの取り組みでは何が足りないのか。斎藤氏によると「マイクロサービス」や「コンテナ/Kubernetes」などのキーワードは理解されてきてはいるものの、実際に取り組みを進めるとうまく現場に落とし込めず、結果、コンテナベースでマイクロサービスを動的にスケーリングさせられないなど、カベにぶつかることが多いのだという。
クリスマスなどイベントに影響を受けるサービスをピーク性に合わせてスケールする場合、これまでの仮想マシンに対して行っていたような運用は基本的にできなくなる。最も単純な例では、仮想マシンにSSHでログインしてミドルウェアを導入、構築し、その上にアプリケーションを構築し、高可用に構成するなどだ。これらを手作業で、マイクロサービス化によって数千規模にスケールするコンテナに適用することは現実的ではない。
「いきなり数千規模というのは言い過ぎかもしれませんが、コンテナの数や種類が増えても柔軟に対応できること。そもそも、手作業をなくしリリーススピードを速くできること。バージョン管理を確実に行えること。そのために自動化できる部分は自動化すること。このようにサービス提供のライフサイクルの中で一貫した仕組みで自動化を進めていくことが求められます」(斎藤氏)
では、実際にはどのようなカベがあり、そのカベをどう壊せばいいのか。斎藤氏は、サービス提供のライフサイクルを大きく4つに分け、それぞれのフェーズごとに課題への解消法があると説明する。4つのフェーズとは「開発/デプロイ」「運用」「サポート」「マルチクラウド」だ。これらは、クラウドネイティブを最大限活用してメリットを得るためには避けては通れない道であり、また、これまでにアジャイル開発やCI/CD、DevOpsなどに取り組み、カベにぶつかった企業にも参考になるものだという。なぜなら、CI/CDに取り組んでもうまくいかなかったOpsレイヤーの自動化も、コンテナやKubernetesを活用することで行いやすくなっているからだ。
Dockerコンテナのオーケストレーションツール「Kubernetes」は、オープンソースソフトウェア(OSS)であり、IBMやGoogleが創設に関わったクラウドネイティブの推進団体「CNCF(Cloud Native Computing Foundation)」によって管理されている。CNCFにAWSやMicrosoftといったクラウドサービス事業者が参画し、各社がKubernetesのマネージドサービスを提供し始めたことで、オーケストレーションツールのデファクトスタンダードに位置付けられている。
では、Kubernetesを使えばクラウドネイティブを実現できるのかというと、そうではない。企業がコンテナ/Kubernetesを最大限活用して「スピード」や「柔軟性」を享受するためには、「開発/デプロイ」「運用」「サポート」「マルチクラウド」の課題をクリアする必要がある。
まず、開発/デプロイにおける課題は、大きく分類すると3つある。1つ目はコンテナ動作に適したサービスをどうやって開発するか、2つ目はアプリケーションリリースを自動化する仕組み作り、3つ目は開発およびデプロイといった当たり前に必要となる基盤をいかにして標準化できるかだ。
例えば、Twelve Factor Appや9 Practiceなどを参考にしたアプリケーション設計、CI/CDの仕組み、開発からデプロイまでをアクセス制御などを設けながらセキュアに利用できることなどが求められるという。
「クラウドの利用によってインフラを迅速に構築できるようになっても、サービスのリリース自体は早くならないことも少なくありません。それはアプリケーションのリリースが手作業で行われていることが多いからです。ビジネスの変化に対応するなら、ビルド、テストをサービス単位で自動化するCI(継続的インテグレーション)や、リリース先ごとに変更を適用しながらデプロイを自動化するCD(継続的デプロイ)の取り組みは欠かせません。特にコンテナを用いる場合は、CI/CDによるアプリケーションのリリース自動化は必須だと考えるべきです」(斎藤氏)
CI/CDでパイプラインというと、開発環境に限られてしまうことが多い。ただ、それでは全体としてのスピードが上がらないという。開発環境だけではなく、テスト環境、さらに本番の運用環境までをパイプラインとしてつなげていくことがポイントだ。
「例えばJenkinsによる自動化の中で、Kubernetesのパッケージマネジャーである『Helm』を使って、開発環境におけるCI/CDと同じような仕組みを運用環境にも適用していきます。Kubernetesクラスタの区画を分離して、デプロイやバージョン管理などいろいろな用途でセキュアに利用できます」(斎藤氏)
IBMでは、IBM WebSphere LibertyやIBM Db2などのミドルウェア製品や、Watsonサービスをコンテナ化し、それらとOSSツールをコンテナイメージとしてKubernetes上ですぐに使えるように提供する「アプリケーションカタログ」をHelm Chartで提供している。つまり、まるでPaaSやSaaSを使うかのごとくソフトウェア機能を利用できる。さらに上図のような、開発からデプロイまでを簡単に実現するCI/CDツール「Microclimate」も用意している。
「アジャイルで、開発のスピードを上げることは、ビジネス部門の期待と一致していることもあり、比較的取り組みやすいと思います。しかし、アプリケーションのリリース運用のスピードを上げるというのは、『絶対安定稼働』に重点を置いていた従来とは異なり、特有の難しさがあります。テストやロールバックも可能な限り自動化の中に取り込み、かつ誰が使っても同様の使い方ができるCI/CD基盤を整備することが全体のスピード向上に大きく影響するといわれています」(斎藤氏)
次に、運用で課題になるのは、「複雑なコンテナ管理を、どう効率化、自動化していくか」だ。これを解消するために必要となるのがKubernetesだ。ただKubernetesの活用には、クラスタ構築のためにノウハウも必要となる。また、Kubernetesクラスタをモニタリングしたり、コンテナのセキュリティを担保したりする仕組みが必要だ。
「運用を開始するまでのステップを初期構築のDay1、運用に向けた初期設定やその後の運用をDay2と分けると、Day1ではKubernetesクラスタ構築、Day2ではクラスタ運用やノード拡張、モニタリング、ロギング、利用量計測などを行います。Kubernetesをミドルウェア(あるいはOS)のように見立てて、当たり前に必要になるこれらの仕組みを初期状態で用意できることがポイントです」(斎藤氏)
運用の課題を解決するために、例えばIBMでは、仮想マシンの払い出しやKubernetesクラスタの構築、拡張を自動化する仕組みをソリューションとして提供する。モニタリングやロギングでは「Prometheus」「Grafana」「ELK」などのOSSツールが事前統合され、便利なテンプレートを選んで利用できる。
セキュリティについてはコンテナイメージや動作中のコンテナに含まれる脆弱(ぜいじゃく)性をスキャンする機能やアクセス制御、認証など、組織としてKubernetesクラスタを利用する上で重要な機能もビルトインで提供する。
サポートにおける課題とは、Kubernetesを中心としたOSSや製品のサポートをどうするかということだ。3カ月ごとにアップデートするKubernetesやその周辺ツールは基本的にOSSとして提供されており、自由に利用できる半面、使えば使うほどにアップデートやメンテナンス、障害発生時の対応が課題になる。
例えば、QA対応や障害発生時の問題判別、フィックス提供などのサポートが一体となった動作テスト済みIBMソリューションを採用することで、アップデートやメンテナンスといった運用負荷を下げることができる。
クラウド活用の取り組みの中では、今やマルチクラウド、ハイブリッドクラウドは当然のように検討されている。ここで挙がる課題は、構築したコンテナ群を、複数のクラウドあるいはオンプレミスをまたがって運用管理することだ。
さらに、何らかのサービスを提供する場合に、1つのKubernetesクラスタだけで完結するケースは極めてまれである。例えば、従来通りの考え方で多面環境を用意する場合もあるだろう。開発用を1つ、テスト用を2つ、本番用を2つ、これだけで5つのKubernetesクラスタを持つことになる。従って、単一のKubernetesクラスタの管理だけでなく、多数を管理する方法を考えなければならない。
「クラスタへのアクセス制御やルールなどを一括適用し強制すること」「アプリケーションの正常性を、クラスタまたぎであっても一覧できる状態にすること」「クラウドやオンプレミスをまたがったKubernetesレベルで、高い可用性を担保すること」など運用管理するレベル感も多岐にわたる。
さまざまなクラウドに展開されたKubernetesクラスタを、クラウドをまたがって管理することは容易ではない。
そうしたマルチクラウドにおけるKubernetesクラスタ管理に対応しているのが、IBMの強みの一つである「IBM Multicloud Manager(MCM)」だ。IBM Cloud PrivateのオプションであるMCMは、クラスタをまたがったアプリケーションの定義、デプロイ、モニタリング、ポリシーベースのロール&コンプライアンス管理、クラスタのプロビジョニング、削除、アップデートなどの機能を提供する。
「MCMは、オンプレミス、クラウドベンダーを問わず展開できるため、ベンダーロックインを回避し、さまざまなディストリビューションのKubernetesを管理することをコンセプトとしたツールです。このツール自体がKubernetes上で動作し、マルチクラスタでのワークロードの俯瞰やトポロジー可視化など、一気通貫でアプリケーションの正常性も確認できます」(斎藤氏)
IBMが、これらの課題を解決するために提供しているソリューションをまとめたものが「IBM Cloud Private(ICP)」だ。
ICPは、企業のプライベートクラウド環境にコンテナ/Kubernetes基盤を容易に構築し、運用できるようにするOSSベースのソフトウェアだ。コンテナ/Kubernetes基盤に、分散ストレージ、IBMのミドルウェア、サービスブローカー、マルチクラウドへの環境自動構築機能、DevOpsツールチェーン、サービスメッシュ、運用管理/課金、セキュリティ、マルチKubernetesクラスタ管理といったコンポーネントで構成される。
システム基盤を問わずに稼働できるため、オンプレミスのVMware環境やOpenStack環境の他、AWSを含めたクラウド環境、さらにはIBM ZやIBM Power Systemsまでサポートする。LinuxディストリビューションもRed Hat Enterprise Linux、Ubuntu、SUSEに対応する。例えば、ホスト環境にある金融機関の堅牢な勘定系システムをコンテナ/Kubernetes上で動作させることも可能だ。
「ICPは、既存のインフラやアプリケーションの動作環境を活用できるクラウドネイティブ環境を作り上げ、スピードや柔軟性を享受することに役立てられます。さまざまな機能を、OSSをベースにマイクロサービスとして提供します。IBMは、ICPだけではなく、Kubernetesをサービスとして提供するIBM Cloud Kubernetes Service(IKS)も提供しているので、用途に合わせた選択が可能です。実際には、IBMだけではなく他社クラウドと併せて利用するケースも多いです」(斎藤氏)
こうしたKubernetesやアプリ開発基盤、デリバリーパイプライン、管理監視、インフラ自動構築などの機能を活用している企業はグローバルで400社を超える。金融機関、官公庁、自動車メーカーなど業界業種を問わずミッションクリティカルな仕組みを維持する企業がICPを利用している。中には、複数種類のクラウド環境間でも、シームレスにワークロードを分散させるような、最先端かつ超高可用な構成でKubernetesクラスタを活用しているユーザーもいるという。
「コンテナ/Kubernetesでクラウドネイティブのメリットを最大限享受するには、さまざまな技術を活用することが求められます。まずは試してみることが大事です。そのためにIBMでは、ICPのCommunity Editionの無料提供や、簡単に実施できるハンズオンを実施しています」(斎藤氏)
Copyright © ITmedia, Inc. All Rights Reserved.
提供:日本アイ・ビー・エム株式会社
アイティメディア営業企画/制作:@IT 編集部/掲載内容有効期限:2019年1月21日