KubeCon+CloudNativeCon NA開催 Kubernetesのクラスター管理を進化させる方法論をKatie Gamanji氏が解説
CNCFが主催するKubeCon/CloudNativeConがバーチャルカンファレンスとして開催された。今回は数多くのセッションの中から、American Expressのエンジニアで過去のKubeConでも印象的なプレゼンテーションを行っていたKatie Gamanji氏のセッションを紹介する。
このセッションのトピックは、クラスター管理のためのコマンドラインインターフェース、デベロッパーエクスペリエンスを拡張するためのツール、DevOpsをさらに発展させたApplicationOpsの例を解説するという内容だ。
最初にクラウドネイティブなシステムの進化を導いた大きな流れはコンテナ化であり、数年前まではDockerが推進するSwarm、Mesos、そしてKubernetesなどのコンテナオーケストレーションツールが存在していた。そして現時点では、Kubernetesがデファクトスタンダードとなっていることを紹介した。特にKubernetesについては「すでに本番システムの50%以上で利用されていること」「2千人を超えるコントリビューターが存在すること」などを挙げて、エコシステムが拡大していることを紹介した。
特にリアルのカンファレンスとして開催されていた当時、参加者は1万人未満だったKubeConが、バーチャルカンファレンスとなった今回は2万3千人を超える参加者を集めていることを紹介。実際にリアルイベントに比べて、現地に行けない参加者がインターネットを使って参加することで情報拡散には大きく役立っているのは確かだろう。ほぼすべてのセッションが動画として再生可能であり、スライドも即時に公開され、質問もできるという点は、リアルのセッションよりも確実に良くなっていることをメディアの立場でも感じることができる。
このスライドではCNCFのランドスケープに掲載されているソフトウェアの一部を紹介したが、実際にはCNCFがクラウドネイティブランドスケープとして掲載しているソフトウェア、サービスは年々拡大しており、今では1枚のPDFですべてを紹介するには限界がある程度まで拡大している。全体の構成は以下のリンクから参照して欲しい。
参考:CNCF Cloud Native Interactive Landscape
ここからは、クラウドネイティブなシステムの中核とも言えるKubernetesに絞ってその進化を解説する内容となった。Gamanji氏がKubernetesに関わるエンジニアを3種類に分けていることは興味深いと言えるだろう。Application Developer、Application Operator、Infrastructure Operatorの3つに分けてそれぞれの役割を考えるのは、MicrosoftのMark Russinovich氏が解説した分散アプリケーションのためのランタイムDaprのセッションでも「Kubernetesはデベロッパーにとっては運用を考慮しなければいけないという状況が難しすぎる。そのためにはデベロッパーとインフラストラクチャー担当の間にアプリケーションオペレーターを置いて、そのエンジニアがアプリとインフラを繋ぐ役割を果たすべきだ」としてその必要性を強調していたメッセージだ。
参考:分散型アプリの開発と運用を分離するOAMとDapr、そしてKubernetes上の実装であるRudrとは?
「アプリケーションオペレーター」という役割がクラウドネイティブなシステムを開発運用するエンジニアに認知されているかどうかは不明だが、少なくともベンダーサイド、ユーザーサイドでその必要性を理解しているという状況にあるのは確かだろう。少なくとも、ベンダーだけが旗を振ってユーザーを取り込もうとしている状況ではなさそうだ。
そしてここからはクラスター管理に的を絞り、Kubernetesを操作するコマンドラインツール、kubectlについて解説を行った。
KubectlをImperative/Declarativeと解説したGamanji氏だが、ここでは「命令的/宣言的」という訳を当てるのが妥当だろう。これは、Manifestを使って宣言的に状態を定義し、それに沿うようにNodeやPodなどが起動されるというKubernetesの作法を表している。
それぞれに良いところも悪いところもあるが、Gamanji氏は、Kubernetesの学習コストが高いという部分を指摘している。これはデベロッパーにとっては発想の転換をする必要があることを示しているとも言える。処理を命令やループ、条件分岐で記述するのがデベロッパーだとすれば、必要な状態を宣言的に記述し、それを運用するのがオペレーターであり、そもそもの発想が違うという主張だ。
次に触れたのは「デベロッパーエクスペリエンスがKubernetesにおいてどのように進化しているのか?」というトピックだ。
DXという略語は往々にして「デジタルトランスフォーメーション」の略として用いられるがこのセッションではあくまでも「デベロッパーエクスペリエンス」の略であることを明記しておきたい。そしてそれには4つの特徴が見られるというのがGamanji氏の説明だ。その4つ、すなわちシンプルさ、最適化、透明化、持続性の高さをKubernetesのCLIに実装する方法として、プラグインによる拡張、グラフィカルなユーザーインターフェースやコマンドツールによるラッパーがあると解説。
プラグインについては簡単なBashのスクリプトを組み込む内容を解説した。
ここからKubectlのプラグインマネージャーとして公開されているKrewを紹介する内容となった。Krewについては以下を参照されたい。KrewはKubernetesのSpecial Interest Group(SIG)、SIG-CLIで開発されているオープンソースソフトウェアだ。
参考:Krew ? kubectl plugin manager
Krewはプラグインを操作するためのツールではあるが、プラグインの実体はそれぞれGitHubのリポジトリーなどに存在するため「どのプラグインを使うのか?」「それにリスクはないのか?」については利用する側が確認する必要があることだけは明記しておきたい。
ここからプラグインの記述の例や利用例を、デモを通じて解説した。
そしてデモのために用意した「Hello, World」を出力するプラグインを紹介。このYAMLファイルでは実体がどこにあるのか、それをどうやって実行するのか、などの記述が後半の部分に書かれていることが分かる。
実際にKrewからプラグインをインストールし、実行してみせた。
次に紹介したのはKubectlにUIを提供するWrapperの概要だ。
特にここでは、オープンソースとして公開されている3つのツールOctant、Lens、K9sが例として紹介された。OctantはVMware、LensはMirantis、K9sはイギリスのBright Boxが開発するツールだ。
参考:
Octant
Lens | The Kubernetes IDE
K9s - Manage Your Kubernetes Clusters In Style
ここからはアプリケーションを運用するフェーズで利用されるツールとして、HelmとKustomizeを紹介した。
HelmはKubernetesのパッケージマネージャー、Kustomizeは開発環境、テスト環境、本番環境などに合わせて構成ファイルを変換するツールであり、それぞれ特徴があることを紹介。特にHelmを命令的、Kustomizeを宣言的と表現している点は興味深い。
ちなみにKustomizeについては、2018年のKubeCon Chinaでのセッションを紹介する記事を参考にされたい。
参考:KubeConChinaで見たKubernetesエコシステムを支えるツールたち
最後の部分はアプリケーションデベロッパーから見て、「Kubernetesのクラスターをどうやって管理するのか?」という視点で3つの方法を紹介した。
ここではClickOps、GitOps、SheetOpsを紹介。ClickOpsは文字通り、グラフィカルなインターフェースをクリックすることで運用を行うスタイルで、デベロッパーとっては利点が多いと解説した。
GitOpsはGitに存在する構成情報を元にすべての運用操作を行うスタイルで、コマンドを直接打つのではなく、Gitの上のコードを変更することでリアルに稼働しているコンピュータ資源と定義情報が常に一致していることを目指すやり方だ。
ここではFluxとArgoという2つのツールを紹介した。実際にはIntuitが開発するArgoとWeaveworks&AWSが開発するFluxはマージされると発表されたが、未だにCNCFの中ではArgoがインキュベーション、Fluxがサンドボックスとしてホストされている。
最後に「SheetOps」としてGoogle Spreadsheetに記述されたNode数などのパラメーターを変更することでKubernetesのクラスターの状態が変更されるという方法論を紹介。
これはあくまでも「ハッカソンの時にやりそうなこと」としてGamanji氏が質問に応えていたように、ジョークとは言わないまでもYAMLに支配されているKubernetesの構成情報を他のモノに置き換えることが目的で、その対象がたまたまGoogle Spreadsheetだったものと認識するべきだろう。
最後に、クラスター構成管理には宣言的な管理方法取り入れることで、デベロッパーにおいても拡張性と最適化が達成できることを解説してセッションを締めくくった。
リアルなセッションでは登壇者に対して直接Face to Faceで質問を行うことができるのが利点だが、質問が他の参加者と共有されない、時間が足らないという欠点がある。その点バーチャルなセッションでは、それらの欠点がないことはもっと評価されるべきだろう。このセッションでもGamanji氏は多くの質問に答えていたことが動画の最後で確認できる。
以前からクラスター管理に非常に熱心に取り組んできたGamanji氏だが、CNCFのアンバサダーとしてこれからの活躍にも期待したい。また動画とスライドによるオンラインセッションという形式についても、主催者、登壇者ともにある程度の経験を積んだことでかなりスムーズに進行されるようになってきたことは喜ばしい。すべてをリアルタイムに行う必要もなく、素材としてデモ動画やエンドユーザーのコメントを差し込んで完成させるというのは、これからのスタンダードになっていくだろう。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- CNDT2021、CNCFの元TOCメンバーがOSSにおける標準の重要性を解説
- KubeCon Europe、2日目のキーノートはSpotifyの失敗事例とIBMのRazeeがポイント
- KubeCon+CloudNativeCon EU 2022、3日間のキーノートを総括
- Kubernetes Forum@ソウル開催。複数のK8sを統合するFederation APIに注目
- CloudNative Days Tokyo 2021が11月に開催 記者会見で見えた「繋げる」の意味
- KubeCon China注目の初日キーノートはプロジェクトアップデート
- Zabbix Summit 2023から、Kubernetes配下でのインフラモニタリングを解説するセッションを紹介
- CNDT2020シリーズ:オススメのGitOpsツールをCAのインフラエンジニアが解説
- KubeCon EUレポート Alibabaが本番環境で使うKubeVelaとDaprのセッションを紹介
- Kubernetesをサービスメッシュ化するIstioとは?