Docker
kubernetes
k8s

良い子のためのKubernetesガイド

page1 (1).jpg


この記事について

Kubernetesの良さをたくさんの人に知って貰いたいと思い、

The Illustrated Children’s Guide to Kubernetes

https://www.cncf.io/phippy/

を日本語に翻訳してみました。

Kubernetesの主要サービスを絵本の物語を通して理解できる構成になっています。

Kubernetesでできることがザックリと分かって頂けると嬉しいです

かなり意訳している部分もあり、不適切な表現あった場合ご指摘頂けると助かります。


まず初めに

page1.jpg

ある日、オフィスで娘とこんなやりとりがありました。

娘「Kubernetesってなにー?」

父「Kubernetesは、Dockerコンテナ群をオーケストレーションするためのオープンソースのシステムだよ。クラスタリングされたコンピューター内のノード群のスケジューリング、ワークロードの動的管理、ユーザーが定義した状態の共有と管理などをLabelやPodといった概念によって論理的なグループを構成することで、管理や発見を容易に実現しているんだ」

娘「(゚Д゚)ハァ??????」

それでは良い子のためのKubernetesガイドの始まりです:clap:


The Environment

page3.jpg

むかーしむかし、あるところにフィッピーという名前のアプリケーションがいました。

フィッピーはとてもシンプルなアプリケーションでした。

PHPで書かれた、たった1ページだけのファイルです。

フィッピーはホスティングプロバイダーに住んでいて、周りには恐ろしいアプリケーション達がたくさんいました。

得体も知れず、仲良く出来そうにもありません。

フィッピーはいつの日か、自分自身の環境を手に入れたいと願っていました。

自分の家だと言えるようなwebサーバーを。。。

diagram2.jpg

アプリケーションには実行するための環境が必要です。

PHPアプリケーションの場合、webサーバー、読み取り可能なファイルシステム、そしてPHPエンジン自身が含まれるでしょう。


The Containers

page4.jpg

ある日、親切なクジラさんがやって来て言いました。

「小さなフィッピーはコンテナの中に住む方が幸せになれるよ!」

フィッピーは早速引越しました。

確かにコンテナはとても素敵でした。

ですが、それは大海原にリビングルームが浮いてるようなことでもあるのです。

diagram3.jpg

コンテナはアプリケーションにその環境と一緒に実行できる独立した環境を提供します。

しかしこれらの独立したコンテナは管理が必要で、外の世界との接続も必要になります。

他にも共有ファイルシステム、ネットワーキング、ロードバランシング、ディストリビューションなどやることが山のようにあるのです。

(Dockerコンテナはホスト間でのコンテナのやりとりは出来ますが、外部とのやりとりにはNATが必要だったりします。連携の管理が大変で、スケールしにくいところがあります。)


Kubernetes

page5.jpg

クジラさんは肩をすくめました。

「ごめんね、おちびさん」と言って

海の中へと消えて行ってしまいました。。。

ですが、フィッピーはがっかりする間もありませんでした。

水平線の向こうから大きな船がやって来たのです。

船はたくさんのボートが紐で結ばれてできていましたが、とても大きな一隻の船に見えました。

「こんにちは!僕の名前はキャプテンクビィーだよ!」

賢いお爺さんキャプテンは言いました。

diagram4.jpg

“Kubernetes” はギリシャ語で船の船長という意味があります。

"Cybernetic(人工頭脳の〜)"や"Gubernatorial(知事)"もKubernetesに由来しています。

Googleを筆頭に、Kubernetesプロジェクトは数千ものコンテナを本番環境で運用するための堅牢なプラットフォームの構築に重きを置いています。


Kubernetes Uses Labels

page6.jpg

「私はフィッピー」小さなアプリケーションは言いました。

「お近づきのしるしに、」と言って、キャプテンはフィッピーにネームタグをピタリ、と付けてあげました。

diagram5.jpg

Kubernetesでは"ネームタグ"のようなラベルを、識別のために使用することが出来ます。

また、それらのラベルに基づきクエリーを発行することも出来ます。

ラベルは変更可能で自由に使え、役割や安定性、その他の重要な特性などを表すことが出来ます。


Pods

page7.jpg

クビィー船長はフィッピーにコンテナを船内のポッド(Pod)に引っ越した方がいいかも知れないと提案しました。

フィッピーは喜んでコンテナを大きな船内のポッドの中に引っ越しました。

そこはまるで家のようでした。

diagram6.jpg

Kubernetesでは、Podは実行可能な作業単位を表します。

通常は、Pod内のコンテナは1つですが、密接に紐付いたコンテナ群がある場合、複数のコンテナを同じPod内で実行することも出来ます。

KubernetesはPodとネットワークの接続を行ったり、環境の停止も行えます。

(KubernetesではコンテナではなくPodが最小のデプロイ単位です。

Podはクジラの群という意味があるそうです。)


ReplicaSets

page8.jpg

フィッピーにはちょっと変わった趣味がありました。

遺伝子学や羊がとても大好きだったのです。

フィッピーは船長にこんなことを頼んでみました。

「もしも自分自身のクローンが作れたら、、、欲しい時に、、、何回でも、、、」

「あー、、、、、簡単なことだよ!」と言って船長はフィッピーにレプリカセット(ReplicaSets)の説明をしてあげました。

diagram7.jpg

ReplicaSetsは任意の数のPodを管理します。

ReplicaSetsには何度でも複製可能なPodテンプレートが含まれ、

スケールアップ、スケールダウン、継続的デプロイ、監視などのPodのライフサイクルを管理することが出来ます。

(この物語では登場しませんが、KubernetesにはReplicaSetsを管理するためのDeploymentという機能が存在します。具体的にはDeploymentはReplicaSetsのバージョンを管理することが出来ます。これによって簡単に環境のロールバックが出来たりします。)


Services

page9.jpg

来る日も来る日もフィッピーはPodの中で自身のレプリカ達と幸せな日々をおくりました。

ですが、例えどんなに自分自身のコピーが沢山いたとしても、自分自身しかいない集団は大したものではありません。

クビィー船長は微笑みながら言いました。「いいものがあるよ。」

クビィー船長が言い終わらないうちに、フィッピーのレプリケーションコントローラーと他の部屋を繋ぐ通路が現れました。

クビィー船長は大きな声で笑いながら、「フィッピーのクローンが出入りしてもこの通路は無くならないから君は他のPodを探しに行くことができるし、他のPodからも君を見つけることができるよ」と言いました。

diagram8.jpg

Serviceは、そのアプリケーションがどんなサービスを提供してるか他のKubernetes環境(ポッドやレプリケーションコントローラを含む)に教えることが出来ます。

Podが行ったり来たりしても、サービスのIPアドレスとポート番号は同じままです。

そして他のアプリケーションはservice discoveryを通してそのサービスを探すことが出来ます。

(名前でアクセスできるエンドポイントです。Kubernetesは同時に沢山のサービスを提供することが可能ですが、特定のサービスを見つけるのが大変です。それを解決するのがこのServiceという機能です。)


Volumes

page10.jpg

Servicesのおかげで、フィッピーは船内を探検し始めました。

まもなくしてフィッピーはゴールディに出会い、二人は友達になりました。

ある日、ゴールディは特別なことをしました。

ゴールディがフィッピーにプレゼントをあげたのです。ですがフィッピーはそれを見て悲しくなり泣き出してしまいました。

「どうしてそんなに悲しんでいるの?」とゴールディはフィッピーに尋ねました。

「プレゼントはとっても嬉しいんだけど、保管しておく場所がないの」と泣きながらフィッピーは答えました。

ですがゴールディはこんな時にどうしたらいいのか知っていたのです。

「どうしてボリューム(Volume)に保存しておかないの?」

diagram9.jpg

Volumeはコンテナがアクセス出来て情報を保存しておくことができる場所を提供します。

アプリケーションからは、Volumeはローカルファイルシステムの一部の様に見えますが、

ローカルストレージ、Ceph、Gluster、Elastic Block Storage、などのバックエンドストレージサービスの支援もしています。


Namespaces

page11.jpg

フィッピーはクビィー船長の船での人生にとても満足し、仲間達と楽しく暮らしていました。

(ゴールディのクローン達も同じ様に大切でした。)

ですが、恐ろしかったホスティングプロバイダーでの日々を思い返してみると、

あの時の様に少しだけのプライバシーなら持てるのではないだろうかと思いました。

「フィッピーに必要なのこと」とクビィー船長は言いながら「それはネームスペースだ」と続けました。

diagram10.jpg

ネームスペースはKubernetes内の環境をグルーピングするための機能です。

Services、pods、replication controllers、volumesはネームスペース内で簡単に連携することが出来ますが、しかし、ネームスペースはクラスタの他の部分からある程度の分離させることが出来ます。


End

page12 (1).jpg

フィッピーは新しい仲間達やクビィー船長と共に大海原を航海しました。

フィッピーは大冒険をたくさんしましたが、一番大切なことは、フィッピーは安心できる場所を見つけた。という事です。

めでたしーめでたしー:clap:


最後に、、、

twitterやってます!

もしよろしければ見て下さい!!


追記

絵本だけでの説明だと不足しているので、さかもとなりの解説を入れてみました。。。

かっこで括ってあるやつがそうです。