【サルでも分かる】Kubernetesの概念を理解する
私の会社はざっと1500人程度のソフトウェアエンジニアが一つの製品を作っているのだが、大規模すぎるが故に細分化が進み、大枠を見通せないことは良くある。
情報感度が低くなり、ソフトウェア業界の全体の流れが分かりにくくなるのである。Kubernetesもその一つである。後輩から「Kubernetes使えますよ」と言われても「おっおう!」としか答えられないようではまずい。
ということで知ったかぶりぐらいはできるように動画を探していたところ分かりやすい動画を発見した。
Kubernetesを一言でいうと次のようである。
Kubernetes is an open source orchestration system for docker containers. It handles scheduling onto nodes in a compute cluster and actively manages workloads to ensure that their state matches the user's declared intentions. Using the concept of labels and pods it groups the containers which make up an application into logical units for easy management and discovery
Kubernetestは、Dockerコンテナー用のオープンソースのオーケストレーションシステムです。コンピュータクラスタ内のノードへのスケジューリングを処理し、ワークロードをアクティブに管理して、その状態がユーザーの宣言された意図と確実に一致するようにします。
簡単に管理/検索できるようアプリケーションを構成するコンテナを論理ユニットにグループ化するラベルとポッドという概念を使用します。
訳してみたがまあ何のことやら分からん。あと何に使えるのやら??ともあれ動画を見ながらかみ砕いていく必要がありそうである。
アプリ作成時に他のアプリの影響を受ける可能性がある
例えばLinuxのレンタルサーバを借りて、その上にPHPのページを構築するとする。レンタルサーバを使う目的はPHPページの公開だけであれば問題はないが、メールサーバーを立てる、ファイルのマウントを行う、クーロンを回す、他のアプリケーションと共存させるなど多目的で活用される。
この時他のアプリケーションの設定変更により、自分のアプリの動作が影響してしまう可能性がある。例えばあるアプリを動かすためにnodeのversionを上げると、他のアプリが動かなくなったり、CPUをあるアプリが大きく占有して、自分のアプリに回ってこないなどいろいろ考えられる。
Dockerは海の真ん中に浮かぶ部屋のようなもの
そこで、Dockerコンテナが登場する。コンテナは独立したプログラムの実行環境を提供し、コンテナ内に限れば環境を固定できるため他のアプリ動作の影響を受ける事が無い。
ただし、コンテナ以外と連携してアプリケーションを動作させようとすると難しい。共有ファイルシステム、ネットワーク、スケジューリング、ロードバランス、分散システムなどなど、大規模なアプリでは必ず必要となるものをDockerだけで実現することは難しい。
まあポートを空けてそこにアクセスするぐらいはできるのだろうけど、本格的に連携しようとすると難しいのだろう。
Kubernetesはゴムボードでできた巨大船のようなもの
ゴムボードとはDocker Containerのことである。コンテナを束ねて一つの大きなアプリケーションを作れるようにしたものがKubernetesという訳である。
Kubernetesはギリシャ語でキャプテンだそう。英語のcybernetic(人工脳科学)やgubernatorial(知事)の語源にもなっている。グーグルの主導により数千ものコンテナをプロダクト環境で走らせることができる頑強なプラットフォームを目指している。
Kubernetesの機能
巨大船のKubernetesは複数の機能/管理システムを持っている
- ラベルが名札として使われる。ラベルは検索可能でかつ、一意に定まりさえすればどんな名前でも良い
- podというコンテナを納める箱がKubernetesが管理する最小構成、podの中に一つのコンテナがあるのが普通であるが、複数のコンテナが強く結合している場合にはpodの中に複数のコンテナを入れることもできる。
- Kubernatesはpodをネットワークや他のKubernetesのエコシステムと繋げる役割を担う。
- replication controllerでpodのライフサイクルを管理可能である。podの複製、スケールアップ/ダウン、ローリングデプロイ(複数モジュールを順にデプロイする手法)など様々な使われ方をする。
- podはserviceとしてその機能を公開することが可能。公開されたServiceはKubernetes Service Discoveryにより検索が可能である。
- containerはvolumeと呼ばれる領域にアクセスが可能
- namespaceにより公開範囲を絞り、セキュリティを確保することが可能。
Kubernetesとは
複数のコンテナが提供する機能をネットワークを超えて連携させ、一つのサービスとして成り立たせるためのフレームワークという事ができそうである。
コンテナの再利用化を促進できるため、必要なコンテナ同士を組み合わせてサクッとアプリを作るということが今後主流になってくるかもしれない。そう考えるとクライアント側の人間にとっても重要な技術であるといえる。
ところで子供用に説明された単語が分からんので苦労した。漫画でわかるシリーズ英語版は平易な英語であるにもかかわらずエンジニアにとってはなじみが無いものが多いため辛い。まあどうでもよいが。
英単語メモ
- sidle into the office オフィスにコソコソ歩きで入ってくる
- you get the idea 大体どういうことかお分かりでしょう
- shrug 肩をすくめる
- raft ゴムボード、ラフティングから想像できる
- lash むち、~を固定する、rafts all lashed togetherはゴムボード同士が繋ぎ合わされたという意味
- hello there こんにちは
- cybernetic 人工脳科学の
- gubernatorial 知事の(gùbərnətɔ́riəl)
- open-ended 自由回答方式
- opt to ~することを選ぶ
- all it's cracked up to be 期待通りである
- benevolently 情け深く
- I have just the thing ちょうど良いものがあります
- sniffle 鼻をすする