はじめまして。VMwareの伊藤です。Tanzu製品のプラットフォームアーキテクトとして働いており、開発と運用双方の経験があります。この記事ではVMware Tanzuを深く知らないかた向けに紹介をしたいと思います。 この記事を執筆した2020年11月時点ではTanzuは比較的新しい製品ですが、新規開発された製品に加えてVMwareが買収して取り込まれた様々な会社の製品が含まれるため製品数が多いです。Tanzuの完全なポートフォリを細かく説明すると複雑になるので、この記事ではTanzu及びKubernetes(K8s)のキーコンセプトの解説をします。
おそらくこの記事を読まれている多くのかたはTanzuはVMwareのK8s製品であると知っているかもしれません。たしかにTanzuの中心にK8sがいることは間違いがありませんが、TanzuはたんにK8sをVMwareのオンプレミスやパブリッククラウドで使うことを目標としているわけではありません。その後ろにある「アプリケーションの開発と運用をよりモダンにする」ことで「開発と運用を効率化する」ことを目標としており、K8sはそれを実現するための適した手段という扱いです。
この記事では以下の内容を解説をします。
- K8sを導入する背景: 現状の開発/運用の問題点
- DockerやK8sの強み: アプリケーションのポータビリティ
- VMwareからのモダンアプリの開発/運用の提案: Tanzuが実現したいこと
開発/運用手法の簡易図でいうと、以下の左から右に順に紹介していきます。
K8sの経験が浅いかたは道具ありきの「どの技術や製品がなにをどう実現できるか」ということに着目しがちですが、そのような学び方をするとK8sのエコシステムの物量に圧倒されてしまうかと思います。むしろ着目するポイントを逆にして「そもそもなにを実現したくて、それをサポートするにはどの技術や製品を使えばよいか」ということを意識するのがよいかもしれません。自分たちの組織にあった適切な開発/運用のゴールを設定すれば、それにあったモダンな開発/運用手法が決まり、膨大な数の技術からどういったものを選択すればよいかが見えてきます。様々な手法や製品を使っていくなかで新しい気付きもあるでしょうから、最初は簡単なゴールから始めて、それに慣れてきたらより洗練させていくのがよいと思います。
なお、VMwareは仮想マシンベースの開発/運用に大きな知見を持っていて、現在はK8sに非常に力をいれています。そのため、新規にK8s向けのモダンなアプリケーション開発をできるだけではなく、従来型のアプリケーションをK8sベースのアプリケーションに変更したり、仮想マシンの管理者が学習しやすいK8sの管理機能設計がされています。Tanzuを「数多くある新しい種類のK8sの開発/運用プラットフォームのひとつ」として捉えるだけではなく、「現在使われている自社の基盤からサービスを移行させやすい包括的なK8sのプラットフォーム」として認識していただけると幸いです。
現状の開発/運用の問題点
現場で開発/運用の経験が長いかたは知っているかもしれませんが、VMwareはベアメタル(ハードに直接OSをインストール)中心の運用に仮想マシンを導入しました。そうすることで「ハードウェアのリソースをプール化して切り出す」ことにより環境構築にかかる時間を数ヶ月単位(計画から購入,設置まで)から数日/数週間単位(マシンの作成からネットワークやセキュリティの設定まで)に縮めました。それほど更新頻度が高くない環境であればこれでも構いません。ただ、みなさんがご存知のように様々なIT企業が高いクオリティのウェブサービスをどんどん出したり、自動車といった昔からある産業にITテクノロジーを武器に戦う会社が現れたりしています。新参者として新しい領域や既存領域に切り込むにせよ、それを向かい受ける立場であるにせよ、競争力を持つにはそれ相応の体制で自社のサービスや製品の質を向上させたり、コスト及び品質やスピードに関わる社内オペレーションの効率化が求められるようになってきています。
このような状況下で従来から用いられている「運用者が作成した仮想マシンに開発コードを移して動かす」というスタイルで毎週毎日のように既存サービスを更新したり、新しい機能やサービスの開発にも迅速に着手することは難しいです。なぜなら昔ながらの手法では複雑化した開発環境を構築することは難しく、開発者の開発環境で書いたアプリケーションを本番環境で安全に動かせるか簡単には分からないですし、ネットワークやデータベースなどのアプリが外部に依存する箇所にいたってはテストすら難しいです。つまり、アプリケーションを書くのも運用するのも大変なので、アプリケーションを日々進化させることが困難だということです。
こういった状況を改善するために様々な技術が開発され、Ansibleのような構成管理ツールや、Jenkinsのようなビルド/パイプラインの自動化ツールなどはその代表的な技術です。また、アプリケーションのフレームワークやデータベースなどのミドルウェアも新しい種類のものが利用されるようになってきています。Tanzuの基盤テクノロジーであるDockerコンテナやそのオーケストレーターであるKubernetesもそれらの新しい技術の一部です。
アプリケーションのポータビリティ
DockerやKubernetesが開発コミュニティに喜んで迎えられたのは、多くのアプリケーション開発者/運用者が悩んでいた開発/運用コストの増大化を解決する有力なツールとして使えるためです。たとえばさきほど説明した本番環境に新しいバージョンのアプリケーションを更新する難易度が高いという問題ですが、適切にコンテナ技術を使えば従来の原始的な更新手法(たとえばシェルスクリプト)よりも安全に簡単に解決することができます。
DockerはアプリケーションをOS(表層)ごとパッケージング化し、それをどこでも動かせるようにする技術です。浅いパッケージングのJVM(Java Virtual Machine)よりパッケージなどの環境依存が少なく、OS全てをパッケージングする仮想マシンより素早くデプロイして変更を加えることも容易です。たとえば、JavaだけでなくPythonやNode.jsなど様々な技術を用途ごとに使い分けて、開発環境でも本番環境でも変更少なく使えることを目標とするのであれば、JVMは前者の要件を満たせませんし、仮想マシンのクローンやテンプレートでは変更コストが大きくやイメージング及びデプロイに時間がかかるため後者を満たすことが難しいです。ちょうどいい塩梅でどこでも使える点からDockerはバランスに優れており、また「複数のコンテナを同一ホストで同時に動かせる」という理由で開発/運用環境の構築/更新コストが少ないのも好まれたひとつの理由でしょう。従来の手法であれば仮想マシンを何個もたてて構築していたアプリケーションを、1つの環境に簡単に複数コンテナを展開して連携させることで実現できます。
このDockerの新しい開発手法ですが、私のなかで思い出深い出来事があります。それは普段一緒に開発作業をしていないインフラよりの人とアメリカのハッカソンで同じ日本人チームになった際に「正直、Dockerなんて仮想マシンに比べたらコンテナごとの独立性も低いし使えないと思っていました。ただ、Dockerは仮想マシンに比べて複数のサービス構成のアプリを書いて動かす効率が段違いにいいから、これからはDockerなしの開発に戻るのは厳しいですね」とコメントをもらったことです。それほどまでにコンテナベースの開発は従来の開発手法とは一線を画すものです。
このようにDockerはアプリ開発で非常に便利な存在なのですが、Docker単独では1ホスト上でのコンテナ稼働となるので、冗長性が求められる本番環境での運用となると少し役不足になります。仮想マシンでDockerを動かしていれば、ホスト障害などで仮想マシンが停止してしまえば仮想マシンの再起動が完了するまでサービス断となってしまいます。これは小規模サービスなので仮想マシンのHAで十分というシナリオ以外では問題でしょう。こういった状況を解決するのがコンテナのオーケストレーション技術であり、Kubernetesです(ちなみに、2017年あたりまでは様々なコンテナオーケストレーション製品が群雄割拠していましたが、今はほぼK8s 1強となっています)。K8sを使うことで複数のDockerコンテナ基盤ホスト(ノード)を束ねてクラスタ化し、そのクラスタ上でコンテナを動かします。クラスタのノードの一部に障害が発生しても、その他のノードが迅速に障害発生ノードのワークロードをリカバリするため障害復旧時間が非常に短いです。仮想マシンであれば復旧に数分かかるでしょうが、コンテナであれば1,2秒で戻ることも多く、最初から同一コンテナを冗長化していればもっと短いです。
以上の話をまとめると、K8sベースで開発すれば開発環境でも本番環境でも同一コードで動かせ、それに加えてオンプレミスとパブリッククラウドの間で移行させやすい環境依存の少ないアプリケーションを作成できます。また、障害などが発生した際も管理者なしでK8sが自分自身で復旧作業をしてくれます。
Tanzuが実現したいこと
話が長くなりましたが、VMware TanzuはK8sを通してアプリケーションの開発と運用をよりモダンにすることを目標としています。アプリケーションのモダン化はたんにK8sを導入すれば勝手に実現されるものではなく、開発者と運用者が正しくK8sを使うことで実現できます。
K8sを正しく利用するポイントには以下のような事項があげられるでしょう。
- 利用するK8sがK8sに求められる基本的な機能 + αを提供
- 開発/運用の重荷になるような複雑さを持たない
- セキュリティなどの管理はしっかり実現
これらの機能を果たせるK8sを採用し、開発者と運用者は正しく使えるだけのスキルが必要です。スキルについては習得する必要がありますが、TanzuはK8sとして以下の基本機能を提供しています。
- DIYで作成するK8s(バニラ)と異なりロードバランサーやレジストリなどを最初から組み込み
- セルフマネージドなK8sクラスタ(クラスタを必要とする人が自分で作成できる)
- 作成/破棄などに加えてアップグレードなどの包括的ライフサイクル管理ができる
- オンプレミスだけでなく、パブリッククラウドでも利用できる
- クラスタのリソース(CPU, メモリ, ネットワーク, ストレージなど)提供/管理も基盤がカバー
- 強すぎるK8s操作のクセを持たないため、「K8s一般の知識+少しのTanzuの知識」で使える
- 管理者は複数のクラスタをまとめて監視/管理できる
ようするにTanzuではオープンソースとして利用できるK8sを「TKG: Tanzu Kubernetes Grid」という製品としてきれいにパッケージングしています。そうすることでK8s導入の敷居を下げて、オープンソース版よりも効率よく開発/運用ができるように整えられています。TKGの特徴を1枚絵にまとめると以下のようなものとなります。
仮想マシンを動かせるVMware vSphereはサーバ仮想化、ネットワーク仮想化、ストレージ仮想化の機能をもとから持っています。VMwareのK8sであるTKGはそれらを利用できます。そしてvSphereの管理者である運用者は従来のリソースプールに近い「ネームスペース」という枠をvSphere上に作成し、それに複数のK8s利用者を結びつけます。結び付けられた開発者や運用者はそのネームスペース内のクオータ(CPU/メモリ/ストレージ)にしたがって、自分たちで利用するワークロード用のクラスタを払い出して利用します。この払い出し作業や払い出されたクラスタの操作は開発者が直接できるので、運用者にいちいちお願いをしなくても自分でアプリケーションの構築を迅速に実施できます。もちろん開発環境クラスタは開発者が直接操作し、本番環境クラスタはアプリの運用チームが操作するといった使い分けをすることもできます。
ご存知のようにVMwareは従来の仮想マシンベースのインフラを熟知している企業です。その企業が大きな力を注いでK8sのプラットフォームを開発しているので、すでに動いているアプリケーションを大きな設計変更なくコンテナ化することを想定していたり、従来の運用方式をおこなってきた運用チームが比較的受け入れやすい管理方法が実現されています。そのため「新しいスキルセットをもったエンジニアたちが新しいK8sアプリを開発する」場合だけでなく、「従来方式からK8sへの移行」というシナリオにもTanzuは適しているとも言えます。
また、Tanzuには上記のK8sとしての機能に加えて歴史あるPivotal CloudFoundry(HerokuやGoogle App Engineに似たPaaS製品)をTanzu Application Service(TAS)としてK8s上(仮想マシン版の製品もあります)で提供していることも重要です。TASは純粋なK8sに比べて「開発者にK8sの知識がない場合でも、K8sの強みを持つアプリケーション開発をできる」という強みがあるので、より開発の敷居が下がります。また、運用者視点でもアプリケーションの構成をTASというプラットフォームのフレームワークに統一できるのでアプリケーションごとの差異を少なくできるという利点があります。つまり、運用負荷が減るので1人の運用者が管理できるアプリケーション数が増加します。
TASの構成は以下の図のようなものとなります。
さきほどのTKGを直接利用する手法に比べると開発者の作業からK8s操作がなくなっているぶんだけ、開発(コードを書く)ことに集中できるようになります。
Tanzuはこれら2つのTKGとTASを中心として、他のTanzu製品が存在していると分かりやすいです。たとえば「多数のK8sの監視/管理基盤であるTMC(Tanzu Mission Control)というSaaS製品」や「アプリケーションと基盤のメトリック監視のTO(Tanzu Obervability)というSaaS製品」、「コンテナイメージをDockerfileよりセキュアに労力なくビルドするTBS(Tanzu Build Service)」などを提供しています。そして、K8s以外にも開発者向けの「サポート付きのJava Spring Framework」や「Tanzu PostgreSQL」などのミドルウェア製品も存在しています。さらにはこれらをより迅速に導入してナレッジを蓄積するための開発者や運用者向けのコンサルサービスもあります。
本記事ではTanzu登場の背景とゴールを簡単に紹介しました。Tanzu各製品の技術的詳細や利用方法、モダンな開発/運用手法の実例などについては今後の記事で紹介していきたいと思います。ご拝読ありがとうございました。