CNDO 2021、Kubernetesとコンテナの基本的構造をNTTの徳永航平氏が解説
CloudNative Days ONLINE 2021において、クラウドネイティブの基礎となるコンテナとKubernetesのランタイム関連の解説を日本電信電話株式会社の徳永航平氏が講演した。これは「DockerとKubernetesをかけめぐる」と題されたセッションで、コンテナの概要から始まり、Docker、Kubernetesの特徴とランタイムに関する解説を交えて行ったものだ。containerdのメインテナーでもあり、これまでもランタイム関連のセッションを行ってきた徳永氏らしい選択と言えるだろう。徳永氏は、ThinkITで実施したKubeCon 2019バルセロナの座談会にも参加している。
参考:KubeCon Europeに参加した日本人エンジニアとの座談会で見えてきたKubernetesの次の方向性とは
盛りだくさんの内容となったセッション
セッションはコンテナの技術的な解説、代表的な実装としてのDockerの解説、さらにコンテナオーケストレーションのデファクトスタンダードであるKubernetesの解説、そして最後にPodの仕組みとランタイムを解説するというものだ。この盛りだくさんの内容を20分で行うという文字通り「かけめぐる」感じのセッションとなった。
まずは、コンテナの特徴として仮想マシンと比較して「軽量な実行単位」という日本語で解説を開始する。ここではハードウェアの上にハイパーバイザーを載せて複数のOS、アプリケーションを実行する形態の仮想マシンとコンテナとを比較して、アプリケーションとその実行に必要なファイルをまとめることでシステムを実行するコンテナは、OS部分を含まないことで仮想マシンに比べて軽量であることを説明した。
次のスライドでは、コンテナは単に軽量であるだけではなく、Build-Ship-Runというサイクルを、コンテナをベースに実装できることで高いポータビリティ(相互運用性)を実現できることが重要だと解説した。これはデベロッパーのノートPCからオンプレミス、さらにパブリッククラウドまで運用が可能であることを意味しており、そのために業界標準の仕様が定まっていることがポイントであるとして、次のエコシステムのスライドにも繋がる解説を行った。
Docker
2013年にdotCloud(現Docker)社が発表したDockerについて解説を行った。技術としてはすでに存在していたLinuxコンテナを、開発者が使いやすいようにパッケージしたのがDockerだが、徳永氏はBuild-Ship-Runのワークフローを広めたことを評価しているのがポイントだろう。またコメントにはなかったが、Dockerが開発したSwarmというコンテナオーケストレーションツールも記載され、Kubernetesがデファクトスタンダードとなる前の、コンテナ黎明期の歴史を知るエンジニアとしての目配りが感じられた。
このスライドではDockerが実行される仕組みを解説している、プロセスだけではなくルートファイルシステムに注目しているのは、後段のPodが利用するストレージの話題への伏線と言ったところだろう。
ここではDockerfileによって階層的に生成されるコンテナイメージを解説している。イメージの作成手順書としてDockerfileを紹介し、下から重なるようにイメージが生成されるようすを説明した。
Kubernetes
次のトピックはKubernetesだ。徳永氏はKubernetesのクラスターの中にNodeが存在し、それに対してコントロールプレーンが制御のための仕組みとして稼働し、Podを実行し指令を与えるのはKubectlコマンドというかなり簡素化した図版を用いて解説を行った。ここではレジストリ(Docker Hub)がイメージの格納庫としてShipの役割を果たしていること、イメージをPullする場所として記述されている。CNCF配下のプロジェクトとしてGraduateしたHarborやRed HatがプッシュするQuayは割愛された形になった。
ここでは手続き的ではなく宣言的に構成を記述し、その記述と実際のノードの状況を比較しながらKubernetesが自律的に配置する仕組みを解説している。
徳永氏はKubernetesの管理の単位としてのPodを紹介し、複数のコンテナが一つのPodに格納されて実行されることで、仮想的なホストマシンとして実装されることを解説した。ここで仮想NICやIPアドレスなどにも言及し、仮想マシンとの比較を意識しながらの解説であることが感じられる。
徳永氏はこのセッションにおいて、なるべく平易な日本語での解説に挑戦していると思われるが、Podの解説において「デプロイ」というカタカナを使用しているのは興味深い。DeploymentがKubernetesでのコントローラーであり、Kubernetesにおいてはデプロイという単語が頻繁に出てくることから、敢えてそのままの単語を使っているのだろう。またStatefulsetもデータベースなどに使うデプロイ方式と敢えて簡易に説明し、Kubernetes自体がステートレスなアプリケーションの実装から始まっていることを説明せずに、今やデータベースの実装も可能になったことを解説した。
このスライドではコンテナオーケストレーションとしてのKubernetesの特徴の一つを解説した。ローリングアップデートはPodに新旧のバージョンが存在する時に、旧バージョンのPodの一つを停止させ、新バージョンを起動、旧バージョンを削除というプロセスを実行できることを解説した。これによって、複数のPodが徐々に新バージョンに置き換えられる仕組みを、デベロッパーや運用担当者が手動でやらなくてもKubernetesの設定で行えることを紹介し、自律的なシステムであることを説明した。
ここではサービスディスカバリーについて、Podに付加されたIPアドレスを用いて解説した。これまでのネットワークアプリケーションであれば、固定的にIPを割り振ることでシステムの管理単位としていたものが、Kubernetesにおいては自動的にIPが割り振られることでそれができなくなっている。そして、それを抽象的に行うために導入されたのがServiceというコンセプトであることを説明した。「サービスディスカバリーでPodを公開する」というタイトルは、このコンセプトを頭に入っていないと理解しづらいかもしれない。
このスライドでは、サービスにさまざまな使われ方があることを解説している。Ingressという単語も厳密にはKubernetesのAPIオブジェクトだが、サービスとして利用することもできるためロードバランサーなどと一緒に解説することで、Podへのアクセスの種類としての概念をまとめていると言える。
Kubernetesが持つ管理運用機能は多く存在する上に、日夜進化しているために全容を理解するのは困難だ。ここではConfigMapやPersistentVolume、Kubernetesを拡張するCRD(Custom Resource Definition)だけを挙げているが、20分ではこれで限界だろう。
ここからKubernetesにおけるPodの実行管理について解説を始めた徳永氏は、Kubeletが各ノードで実行されるPodを管理していることを解説した後で、このスライドからランタイムの解説を始めた。ここでは高レベルランタイムであるCRIを紹介している。また複数のランタイムを選択できるとして、containerd、CRI-Oを説明した。さらにKubernetes 1.20で非推奨となったKubeletからDockerを呼び出すDockersimについても記載されているのは、ランタイムに詳しいエンジニアとしての心遣いだろうか。
CRIランタイムから呼び出される低レベルランタイムであるCRIについても解説を行い、このレイヤーにおいても複数のランタイムを利用可能であるとして、runc、Kata Containers、gVisorなどを紹介した。
この後、OCIのリファレンス実装であるruncの解説、Linux由来の技術であるnamespace、cgroupなどについて解説を行った。
最後にコンテナ技術、Docker、Kubernetes、ランタイムの概要など今回の発表をまとめて紹介してセッションを終えた。シンプルな発想のコンテナ技術が、自律的、宣言的でクラウドネイティブなプラットフォームとして進化した形であるKubernetesに至った経路を、文字通り速足でかけめぐった感のある内容となった。コアのテクノロジーが綿々と引き継がれていることを知るには、必要充分だったのではないだろうか。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- CNDO 2021、サイバーエージェントのテックリードがコンテナランタイムの最新情報を解説
- Kubernetes 1.20から始まるDockerランタイムの非推奨化に備えよう!我々が知っておくべきこと・すべきこと
- runC vs. cc-runtime vs. kata-runtime?コンテナランタイムの内部構造と性能比較
- Oracle Cloud Hangout Cafe Season7 #1「Kubnernetes 超入門」(2023年6月7日開催)
- コンテナを使いこなすための心強い味方!「Kubernetes」(前編)
- KubeCon報告からKubernetes対応版Dockerまで、Docker Meetup Tokyo #20開催
- コンテナ関連技術の現状を確認しておく
- Intelが中国のベンチャーHyperと共同で開発を進める新しいコンテナランタイムKataを公開
- RancherとCI/CD
- CNDT2021、CNCFの元TOCメンバーがOSSにおける標準の重要性を解説