Cloud VM の構成要素

Google Cloud Japan Team
※この投稿は米国時間 2021 年 9 月 24 日に、Google Cloud blog に投稿されたものの抄訳です。
先週、Google は VM エンドツーエンド シリーズのエピソード第 2 弾を公開しました。これは、「VM に懐疑的な人」と「VM ファン」の間で交わされる会話を集めたシリーズです。Brian と Carter の会話を通して、VM が Google の信頼性の高いプロダクトである理由と、VM がクラウドで大規模に事業を展開する企業にもたらすメリットを一緒に探っていきましょう。文字起こしは次の通りです。
Carter Morgan: VM エンドツーエンドにようこそ。このショーでは、VM に懐疑的な人と VM ファンが、「VM は本当に素晴らしいものなのか」というテーマで徹底的に議論します。Brian、今日はありがとうございます。よろしくお願いします。
Brian Dorsey: よろしくお願いします。では早速始めましょう。
Cloud VM とは
Carter: はい、そうしましょう。前回は、Cloud VM は重要なのか、また VM はクラウドネイティブな未来にも重要であり続けるのかについて話し合いました。Brian は「もちろんその通り」と言っていましたね。それで今日はもう少し掘り下げて Cloud VM とはそもそも何なのかについて考えたいと思います。教えていただけますか?
Brian: もちろんです。早速始めましょう。まず、Cloud VM は仮想マシンです。多くの人が仮想マシンについて知っていることのほとんどは、Cloud VM にも当てはまります。今日理解しておきたいのは、おそらくまだ知らないことや、調べようとも思っていないことが他にもたくさんあるということです。
Carter: そうなんですね。普通の VM のようですが、そうではない。普通の VM というと、コンピュータ上のマシンと考えます。クラウド VM はちょっと違うということですね。実際の要素、物理的な要素にはどんな違いがありますか?
Brian: そうですね。結局のところは、どこかの実際のコンピュータで実行されています。それで VM が実行されているなら、本物の CPU があります。物理メモリもあります。そして最も流動的な要素は、おそらくディスクとネットワークです。Google Cloud ではこれらはソフトウェア定義のサービスなので、かなりの柔軟性が提供されます。ここで重要なのは、1 台のコンピュータの一部であるというよりは、複数のコンピュータから成るデータセンターの一部とみなすべきということです。
「データセンターの一部」との相互作用の方法
Carter: なるほど。わかりました。とても興味深いですね。私が知りたいのは、データセンターの一部があるとして、それをどのように管理したり、利用したりできるのですか?例えばビデオゲームを作りたい場合、データセンターの一部で何ができるのでしょうか?
Brian: いい例ですね。何をしたいかで変わってきます。多くの可能な選択肢について検討して、それらをグループ化します。コンピューティング最適化、メモリ最適化、アクセラレータ最適化、汎用にグループ化できます。コンピューティング最適化は、できる限りレイテンシが小さい、シングル スレッド コンピューティングが必要な場合のためのものです。メモリ最適化は、できる限り多くのメモリをマシンに搭載する必要がある場合のためのものです。インメモリ データベースなどを実行するような状況です。アクセラレータ最適化は、GPU か Tensor Processing Unit が必要な場合のためのものです。それ以外のものについては、すべて汎用になります。
Carter: 汎用ですか。ほとんどの人が単にノートパソコンを必要としている、というような感じでしょうか。それで、こうした特定のグループ、つまりマシンのファミリーみたいなものを注文したとします。これらのファミリーの中で、例えばハイエンドのゲーミング ノートパソコンが必要とか、ローエンドのゲーミング ノートパソコンで十分、のように特定のものを選択できるのでしょうか?
Brian: もちろんです。最初に、大きさを決める必要があります。つまり CPU の数やメモリの量です。2 コアのマシン、20 コアのマシン、460 コアのマシンなどを選択できます。
Carter: 本当ですか?
Brian: はい、本当です。現時点では最大で 12 テラバイトのメモリを選択できます。時間が経つにつれて、この数字はもっと大きくなっていきます。この動画をいつ見ているかによって、状況は違うかもしれません。デフォルトでは、これらの割合は事前に決められています。それで両方とも同時に大きくなっていきます。人々がコンテナを使用したかったそもそもの理由の 1 つは、すべてのものが事前に決められた構成にぴったり適合するわけではないからです。それで結局容量の一部が親なし状態になり、お金を無駄にしてしまうのです。そのため、汎用マシンでは自分で割合を決めることもできます。それで例えば「CPU にはかなり負荷がかかるけど、メモリはそんなに必要ない」というような場合、コンピュータをそのような構成にして、実際に必要なものだけにお金をかけることができます。
物理ディスクはデータセンターのどこにあるのか
Carter: 素晴らしいですね。自分で構成を決めることができるのだとしたら、どこかに物理メモリがあるはずですよね。それはクラウド VM のどこにあるのですか?
Brian: そうですね。VM をセットアップする際には、Google がすでにあるマシンからユーザーが必要とする構成のためのスペースがあるマシンを見つけて、そこで起動することになります。このテトリスのような問題は、ユーザーが解く必要はありません。Google は十分に大きいので、ほとんど必ず適合する場所を見つけることができます。
Carter: はい。これらすべては 1 台のマシン上にあるということでしょうか。そんな風に聞こえるのですが。
Brian: ああ、まず、複数のマシンから成るデータセンターがあります。ユーザーが自分のマシンを起動すると、Google はそのためのふさわしい場所、スペースに空きがあるコンピュータを見つけます。
Carter: データセンターの一部にあるディスクについてもう少し教えてください。
Brian: データセンターにあるいずれかのコンピュータ上で電源を入れると、ディスクはどのような動作をするでしょうか?データはどこにあるのでしょうか?デフォルトでは、ほとんどの場合ディスクはネットワーク接続ストレージです。物理ディスクが 1 台のコンピュータに接続されているわけではなく...もちろん、物理ディスクはあるのですが、多数のコンピュータに接続された数百数千のディスクから成る仮想ディスクが提供され、これらのブロックを仮想的に組み合わせることで...通常よりも高いパフォーマンスを得ることができます。スループットがかなり速くなります。そして SAN、つまりストレージ エリア ネットワークで提供される多くの機能が利用できるようになります。
Carter: つまり臨機応変にアタッチしたり切断したりできるわけですね
Brian: ええ。
Carter: 素晴らしいですね。
Brian: こういうことができます。ディスクをサイズ変更して、スナップショットを使ってバックアップを取ることができます。サイズ変更はすごいです。ディスク容量を使い切ってしまったら、コンピュータの実行中にディスクを大きくすることができるんです。
Cloud VM で実行できる OS
Carter: Brian、正直かなり驚いています。私は懐疑的にならないといけないので、つとめてそうしますが、本当に驚きです。知りたいことがあるのですが。コンテナを使う場合、使用するオペレーティング システムを選択できます。そのおかげで、自分が気に入っているオペレーティング システム向けにアプリケーションを作成できます。必要なものだけを使うことができます。VM の世界でもそれは同じですか?それとも...Cloud VM を使うには、特定の種類のオペレーティング システムを使用しなければならないのですか?
Brian: そうですね。考え方は非常に似ています。コンテナでは、ランタイムごとのシステムはほぼ普通のファイルで構成されています。でも VM の場合、オペレーティング システム全体が実行されます。でもそれ以外は、考え方はほとんど同じです。最近のワークロードのほとんどは、Linux か Windows で実行されています。それで、Google では Debian、CentOS、CoreOS、Ubuntu、Red Hat Enterprise、SUSE、Windows Server Datacenter など、多数のバージョンの事前作成されたイメージを提供しています。それで、VM を作成する際に、「この OS を実行させたい」というものがあるなら、そのイメージのコピーをその場で作成して、それを使用してマシンを起動します。
Carter: うん、いいですね。自分独自のものを使うこともできますか?
Brian: はい。2 つの方法があります。1 つ目は、先ほど挙げた OS の 1 つを使って、変更を加えたり、いくつかのツールを加えたり、好みの方法で設定したりしたい場合、その OS を起動して、自分で行った変更に基づいて新しいイメージを作成できます。これが通常の方法です。望む場合は、イメージはブロック デバイスなので、カスタマイズしたバージョンの OS を作成することも、まったく新しい OS を開発することもできます。仮想マシンで実行できるものである限り、それを起動して使用できます。
Cloud VM で実際にできること
Carter: 正直に言いますが、すごく柔軟性がありそうですね。「コンテナではこんなこともできるよ」って私が言うと、全部、「うん、VM でもそれができるよ」っていう感じですね。
Brian: そしてそのほとんどの基になるのが...これは Cloud VM というもののハイレベル バージョンですね。コンピュータで実行できるものは、基本的に何でも実行できます。
Carter: そうなんですね。ここまで短時間で考えてきました。仮想の要素もありますし、物理的な要素もあります。ディスクは広いデータセンターで分散されて、プール化されて信頼性や一貫性が増します。スループットも速いと何度も言っておられましたね。素晴らしいと思います。これも知りたいのですが、Cloud VM を応用して実際に可能なことのうち、一般的にあまり知られていなようなことはありますか?Cloud VM では何ができるのですか?
Brian: 十分に活用されていない、または知られていないことの 1 つは、パターンとして VM ごとに 1 つのコンテナを実行することだと思います。
Carter: はい。どうしてそうするのですか?
Brian: いくつかの理由があります。1 つは、コンテナが配布形式になったことです。多くのソフトウェアは、コンテナで実行できるような形になっています。そして状況によっては、クラスタ全体を設定したり、その他のことを管理したりしたくないこともあります。ただ 1 つのことを実行したいだけです。これがそうする理由です。また、なんらかの制約があることもあります。例えば、その特定のことを、非常に短い時間だけとても大きなマシンで実行したいとか、この方法以外では利用できない特別な設定が必要になる、ということがあります。なので、こういう実行の方法も-
Carter: そうですね。それでコンテナのパッケージを使うわけですね。
Brian: はい。1 対 1 です。
Carter: なるほど。それなら納得がいきますね。わかりました。でも理論的には、この目的のためならやっぱりコンテナで実行できますよね。Brian が気に入っている Cloud VM の他の機能も教えていただけますか?
Brian: もちろん。1 つは、ほとんどすべてのアーキテクチャで一般的に使われていることだと思いますが、複数のマシンがある場合、ほとんどみんなロードバランサを使いますよね。
Carter: そうですね。
Brian: そしてあまり知られていないすごいことは、Cloud VM のロードバランサは、データセンター レベルで提供されるロードバランサ サービスなんです。リクエストをするとすぐに遅くなったり、容量を使いすぎたりするような特定の容量を持つ特定のコンピュータではありません。実際には、Google が YouTube とか Gmail に使うデータセンター レベルのロードバランサを設定して、自分のマシンを実行することになるのです。
開発者が VM / IaaS レベルで運用する理由
Carter: そのコンセプトはとても素晴らしいと思います。でも今考えているのは、私はいつも Kubernetes で複数のサービスを使っているのですが、GKE(Google Kubernetes Engine)を使う場合、提供されるロードバランサは Google のクラウド ロードバランサです。その場合は、Google Cloud のロードバランサを使っているわけですよね。お尋ねしたいのは、このロードバランサは、Kubernetes などを介してすでに自分のために設定されていますよね。さらに低レベルのものを使う理由はありますか?このレベルのものを使う理由はあるのでしょうか?
Brian: すでに Kubernetes を使っているなら、Kubernetes を使ったらいいと思います。このようなパターンは非常に便利ですが、すべてのソフトウェアがコンテナを実行するように設定されているわけではありません。なのでこれと同じパターンを使用したい場合-
Carter: そのパターンというのは、通信可能な単一のエンドポイントを持つということですね。
Brian: そうです。サービスを提供する、既知のエンドポイントを持つという考え方です。通常は Kubernetes にはコンテナのグループがありますが、この場合は、コンピュータのグループになります。この場合は、既知のエンドポイントとコンピュータのグループを持つことになります。そして、Google では Compute Engine のこのグループのことをマネージド インスタンス グループと呼んでいます。そしてそれに対して多くのロジックを適用できます。実際にはそれ自体がサービスということになります。このサービスは必要なときに新しいマシンを起動できます。ダイヤルを回すような感じで、「今 5 台あるけど、10 台欲しいな」という場合には、新しいマシンを起動します。実際の負荷に応じて、自動的に実行されるように設定できます。そしてそれらを世界中に分散することができるんです。そのうちのいくつかをある国で実行して、ほかのいくつかを別の場所で実行することで、トラフィックをユーザーに一番近い場所にルーティングする、というようなことができます。
次回のテーマ
Carter: このことについてはさらに調査してみたいと思います。私は懐疑的でありたいので、もっとこの点について深く掘り下げる必要がありそうです。それに「これは本当にすごそうだ」と感じています。それに...この会話をあまり長くしたくないのですが、やはりこの点についてこのシリーズで深く掘り下げたいと思います。多分次のエピソードでは...次は管理者、インフラストラクチャ、ネットワークでしょうか?何を話し合えばいいでしょうか?
Brian: そうですね。次はネットワークについて話し合うのがいいかもしれません。どのような動作をするのか。1 つのコンピュータ上で実行されていないのだとしたら、「ちょっと待って。1 台のマシンを経由するわけではないのなら、どうやってトラフィックを分散しているんだ」ということになります。なのでネットワークについて考えましょう。もちろんディスクもいいですし、他にもたくさん話し合うことはあります。そうしましょう。他にも知りたいことはありますか?
Carter: もちろんあります。コストについて知りたいですね。マシン ファミリーなどについて聞いたので、自分でも宿題をやってみます。実際に VM を作成してみたいと思います。この会話を見ている人も、同じことをしてもらえたらと思います。ええ。次のエピソードでは私はもっと懐疑的になりますよ。いいですか?もっと深く掘り下げます。でもこのエピソードでは、Cloud VM はかなり魅力的だと感じたことを認めたいと思います。
Brian: 実際にそうなんですよ。試してみてください。
Carter: わかりました。ありがとう、Brian。次もまた話し合いましょう。
Brian: またお会いしましょう。
このような感じです。前回は、Cloud VM とは何かについて学びましたが、今回は Cloud VM の構成要素に注目しました。Cloud VM はデータセンターの一部なので、従来の VM と比べていくつかの利点があります。例えば、ディスクのサイズを実行しようとしているワークロードにぴったり合わせることができる、などです。他のインスタンスでは、Cloud VM は従来の VM と同じように動作し、Brian が言っていたように、「コンピュータで実行できるものは何でも実行できます」
GCE の詳細については、次をご覧ください。https://cloud.google.com/compute
- デベロッパー アドボケイト Carter Morgan
- デベロッパー アドボケイト Brian Dorsey