イベントセミナー
2022年12月1日
Kubernetesで時代をリードするクラウドネイティブエンジニアへ

【セミナーレポート】Kubernetesは、クラウドネイティブという「考え方」を実現するために適した技術

株式会社サイバーエージェント
CIU(CyberAgent group Infrastructure Unit)
KaaSプロダクトオーナー・ソフトウェアエンジニア
青山 真也 氏
今や、社会の情報インフラの主役となりつつあるクラウド。そのクラウドを適切に扱うために重要なのが「クラウドネイティブ」という考え方だ。LPI-Japanでは2022年12月1日、オンラインセミナー「Kubernetesで時代をリードするクラウドネイティブエンジニアへ」を開催。本稿では、サイバーエージェントでコンテナ基盤のプロダクトオーナーとして活躍する青山真也氏による基調講演「Why Kubernetes? Why Cloud Native?」の講演内容をダイジェストで紹介する。
YouTube動画はこちら

そもそも、クラウドネイティブって何だろう?

Kubernetesの話に入る前に、前提となる「そもそも、クラウドネイティブって何?」というところに少し触れておきたいと思います。実はクラウドネイティブについては、CNCF(Cloud Native Computing Foundation)という団体が明確な定義を行っています。CNCFは、The Linux Foundationの下部組織で、Kubernetesなどをホストしています。ここではその定義に基づいてクラウドネイティブの技術や考え方を中心に紹介していきたいと思います。

まず「クラウドネイティブ」の特徴を具体的に紹介すると、@疎結合によって、システム変更が容易である A問題が起きたときに元に戻れる復元力がある Bシステムの規模が大きく・複雑になっても、適切な管理ができる C複雑化したシステムでも、それらの状況をメトリクスやログなどで適切に把握できる D自動化により、サービスやアプリケーションの変更が容易かつ迅速に行える といったことが挙げられます。

これらの特徴はクラウドネイティブが注目されている理由であると同時に、目指しているものでもあります。いうなれば、クラウドネイティブとは、これらのメリットを実現するための方法論や組織論なのです。

クラウドネイティブを目指すべき理由は、ユーザーへの価値提供

私たち技術者の使命は、ビジネスの成功や、優れたプロダクトを生み出すために、ユーザーのより良いものを提供することです。では、Webサービスにおける「より良いもの」とは何でしょう。

1つには高性能であることや、停まらないサービスといった安定的に動作する環境です。しかし、ユーザーにとって、安定的に動作するだけでは十分ではありません。ユーザーが求める機能や使いやすいUI/UXを持ったアプリケーションをスピード感をもって開発・提供できることも必要です。

クラウドネイティブでKubernetesを学ぶことには、大きな利点がある

次に、クラウドネイティブを実現するKubernetesというテクノロジーについて、簡単に説明しておきましょう。実はKubernetesというのはパブリッククラウドの環境と非常に似た機能を数多く持っています。例えばAWSとかGCPでもVMのイメージ化、オートスケーリング、データベースの起動、そしてアプリケーション実行の仕組みなどを持っていますが、Kubernetesはこれらのほとんどを行うことができます。

逆に言えば、パブリッククラウドを適切なアーキテクチャで利用することができれば、それはクラウドネイティブと呼べると私は思っています※。そうなればKubernetesを学ぶことによって、仮にパブリッククラウドを使う場合であっても「クラウドネイティブなアーキテクチャ」を実現できる。その意味でも、Kubernetesを学ぶことには大きな利点があると考えています。

※厳密には「オープンソースでベンダー中立プロジェクトのエコシステム」であることも含んでいます

Kubernetes人気の理由は、優れたデベロッパーエクスペリエンス

Kubernetes自体の利点について、もう少し具体的な技術の話を掘り下げてご紹介します。まず押さえておきたいのは、Kubernetesでは、その内部でDockerというコンテナを動かす仕組みを使っていることです。KubernetesとDockerは、アプリケーションを実行する上で、最適なインフラの1つの選択肢となっています。

Dockerが流行した大きな理由の一つに、デベロッパーエクスペリエンスが非常に良い点が挙げられます。例えば、アプリケーションと動作環境を手元でパッケージングできます。イメージをビルドする場合、VM環境では手間がかかりやすいですが、Dockerならば簡単にイメージ化できます。この他にも、高速な起動や省消費リソースによる低オーバーヘッドといった点も、Dockerが人気を集めた点の一つでしょう。

Dockerコンテナを最適な形で動作させるのが、Kubernetesの役割

例えば1000台のサーバーがあって、それらの上で的確にコンテナを動作させようとした場合、何かしらの自動化の仕組みや、オーケストレーション(=協調動作)させる仕組みが必要になってきます。それを担うのがKubernetesです。

言いかえれば、アプリケーションをコンテナ仮想化する仕組みがDockerで、その上で複数のコンテナ(アプリケーション)を、最適な形で協調しながら動作させるオーケストレーションシステムがKubernetesというわけです。Kubernetesは多彩な機能を提供しており、ローリングアップデートやオートスケール、ロードバランサーとの自動連携などが可能です。

さらにKubernetesでは、アプリケーション実行に着目した様々な設定を行うことが可能です。ヘルスチェックの設定をする・アプリケーションに計算リソースを割り当てる・環境変数で環境を切り分ける・アプリケーション実行時のライフサイクルに関する設定を行う・アプリケーションを停止するときの処理をハンドリングする……。こうしたさまざまな設定を、コードとして定義できるようになっています。このためエンジニアはKubernetesを学んでいく過程で、必然的にこういった「アプリケーションを実行するには何を考えるべきか」、つまり「アプリケーション実行におけるベストプラクティス」を理解することができるようになっています。

Kubernetesは、システムの「あるべき状態」を自動で維持できる

Kubernetesには登録されたコンテナを起動させる機能がありますが、単に起動させているだけではありません。Kubernetesの中にはコントローラーと呼ばれる小さなプログラムが動作しており、システムを、あらかじめ設定しておいた「あるべき状態」に収束させるためのループ処理が実行されています。

例えば、常に3つのコンテナが起動している状態を「あるべき状態」として設定しておくと、コントローラーが常に状態を監視しているため、もし2つのコンテナしか起動していない場合には、設定と異なる状態を検知して、自動的に3つの状態に戻してくれるのです。

この機能がもたらす一番のメリットは、運用の自動化です。従来は例えば夜中にシステムが落ちると、人間が起きていって復旧させていたケースもありました。そうした運用のロジックがコントローラー化されていることで、監視から復旧対応までの運用をKubernetesに任せることができます。さらにしかもコントローラーは自分たちのニーズに合わせて拡張できるため、自分たちのユースケースに合わせて作り込むほどに運用を自動化していける点もKubernetesならではです。

クラウドネイティブという「考え方」を学んで、生き残れるエンジニアになる

最後にもう一度、確認しておきたいのは、冒頭でも触れたように「クラウドネイティブというのは、目的やメリットを実現するための方法論や組織論」つまり「考え方そのもの」だということです。例えばトラフィックが増えた時に、自動でスケールできるように設計しようとか、あるいはサービス競争力が維持できるように、頻繁にアプリケーションを更新できる仕組みにしておこうとか。

単に特定の技術やツールを使うことがクラウドネイティブではなく、ビジネスなどの目的の実現を目指しながら、さまざまな技術を用いていくというのが、クラウドネイティブの根本的な考え方なのです。クラウドネイティブやKubernetesを学んでいくことで、「どういうシステムを組むか?」「どんな技術を使って、どのようにアーキテクチャを組むのか?」「どのように自動化を進めるのか?」。そうした考え方や、根本的な仕組みを学んでいくことができます。これが、クラウドネイティブに関心を持つ方々に、ぜひ学んでいただきたいと思う理由です。

また現在は、どんどん新しい技術や考え方が登場し、とどまるところを知りません。クラウドネイティブではそういった変化に対しても、常にアンテナを張り、見つけたものは試して欲しいと思います。そのためにもOSSのコミュニティや、関心を同じくする皆さんと情報共有しながら進んでいくことが、これからの時代を生き抜くエンジニアの姿勢として重要だと考えています。

株式会社サイバーエージェント
CIU(CyberAgent group Infrastructure Unit)
KaaSプロダクトオーナー・ソフトウェアエンジニア
青山真也(アオヤマ・マサヤ)

2016年にCyberAgentに入社し、プライベートクラウド上のKubernetes as a Serviceのプロダクトオーナー、Kubernetes/CloudNative 領域の Developer Expertsとして従事。現在は数社の技術顧問なども務める。著書に『Kubernetes完全ガイド』『みんなのDocker/Kubernetes』。国内カンファレンスでのKeynoteや海外カンファレンス等での登壇、、OSSへのContribute活動をはじめ、CloudNative Days Tokyo のCo-chair、CNCF公認のCloud Native Meetup TokyoやKubernetes Meetup TokyoのOrganizerなどコミュニティ活動にも従事。