‫Kubernetesはいろいろなものがあります｡
‫Kubernetesへのアプリインストールに入る前に､ 基本的なトポロジーやパーツをぜひ分解しておきたいですね｡
‫まずはKubernetesそのものです｡
‫本来はそういうことです｡
‫システム全体｡
‫アプリケーションを実行するために必要なすべてのパーツが一緒になったシングルサーバーまたはマルチサーバーのセットアップのどちらかです｡
‫それをK8sと略すこともあります｡
‫通常､ Kubernetesの話をするときは､ Kubernetesとだけ言いますが､
‫よく文章や､ ドキュメントで､ K8sというのを見かけますが､ これは本来､ Kubernetesを短く省略したものなんですね｡
‫実際に見てみると､
‫8はKとSの間の8文字を意味しています｡
‫だから､ やったんでしょう｡ K､ 8文字､ そしてS｡
‫それが彼らの略称です｡
‫Kubeと呼ぶ人もいるかもしれませんね｡
‫しかし､ 本質的にはここでKubernetesとK8sと言った場合､
‫同じことを話していることになります｡
‫kubectlは､ Kubernetes APIと対話するために使用するコマンドラインツールです｡
‫Kubernetesと会話する主な方法は､ そのAPIを介することです｡
‫それができるツールが複数出ているんです｡
‫実際､ APIと対話できるツールはたくさんあります｡
‫このプロジェクトから公式に提供され､ 私たちが最も頻繁に使用するのはkubectlです｡
‫他の動画や講演では､ キューブカドル､ キューブカドル､
‫キューブコントロール､ その他いろいろなタイプ､
‫あるいはキューベクトルと呼ばれているかもしれませんが､
‫これらはすべて同じものです｡
‫本来は違う人が違う言い方をするものなんです｡
‫実は､
‫ちょうど1年ほど前に､ このツールをドキュメントで正式に「kubectl」と呼ぶことにしたんです｡
‫でも､ 本当に間違った言い方をすることはありません｡
‫Swarmで､ そのクラスタの中にあるサーバーをノードと呼ぶように､
‫Kubernetesでも同様に､ モノをノードと呼びます｡
‫だから､ その用語は少なくとも両者で同じである｡
‫Kubeletは､ 各ノードで小さな小さなエージェントを実行し､
‫そのノードがKubernetesマスターとトークバックできるようにするためのコンテナです｡
‫DockerにはSwarmが組み込まれているので､ 別にエージェントは必要なかったことを思い出してください｡
‫それがすべてDocker Engineに組み込まれたのです｡
‫その上でKubernetesを走らせると､
‫ローカルのDockerやランタイムと対話する独自のエンジンAPIが必要になります｡
‫そして､ Kubernetesクラスターの運用を担当するコントロールプレーン､
‫つまりマスターにトークアップするのです｡
‫コントロールプレーンは､ マスターと呼ばれることもあり､ クラスタを統括しているものです｡
‫Swarmをご存知の方｡
‫Swarmでは､ マネージャーがいました｡
‫マネージャーは1人または複数人いる可能性があります｡
‫奇数名のマネージャーが欲しかったのです｡
‫そして､ すべての作業を行う作業員がいた｡
‫Swarmを思い出すと､ マネージャーは自らコンテナを動かすこともできるため､
‫ワーカーにもなり得ます｡
‫だから､
‫技術的には1台のサーバーで済ませることもできる｡ サーバーをたくさん用意して､ 2つの役割を分担させることもできます｡
‫その多くは､ Kubernetesでも非常によく似ています｡
‫ただ､ 呼び名が微妙に違うだけなんです｡
‫コントロールプレーンは､
‫Swarmでも走らせた部分ですが､
‫基本的にサーバーがすべてを担当する部分です｡
‫1つの容器だけではありません｡ コンテナ群です｡
‫個々のものを動かすのです｡
‫一つのことをしっかりやるというLinuxの原則を､ そのまま持ってきて､
‫すべてを分割してしまうのです｡
‫ですから､
‫基本的にはそれぞれのパーツが一つのことをしっかりやっていて､ 開発の面でも設計がシンプルになります｡
‫でも､ これを作って走らせるとなると､ いろいろと大変なので､
‫セットアップが少し難しくなりますね｡
‫このコントロールプレーンには､
‫APIを実行するコンテナ､ スケジューラ､ 実際にはデータベースバックエンドが必要で､
‫etcdと呼ばれるものがあります｡
‫そして､ コントローラー・マネージャーです｡
‫DNSを処理するためにcoreDNSというものが必要になったりするでしょうね｡
‫たくさんの部品がありますが､ 図に書いてみて､
‫これが役に立つかどうか､ 意味を考えてみましょう｡
‫この講座ですでに学んだことなので､ Swarmと比較してみますね｡
‫もし､ これから行う学習用のように､
‫1台しかマシンがなかったら､ 前回紹介したものはすべて同じサーバーにあるはずです｡
‫走るコンテナがたくさんあるだろう｡ シングルノードのKubernetesを動かしているときに､
‫minikubeやDocker Desktopなどに表示されるのがそれです｡
‫現実の世界ではサーバーに乗ると､ このようなものを壊してしまうのです｡
‫そこで､
‫ネットワーク図を使って､ どのように見えるか､ また､ それぞれのパーツを説明します｡
‫まず､ マスターがあると仮定します｡
‫マルチマスターの場合､ それが3つあることになります｡
‫Swarmと同じように､
‫RAFTプロトコルを使ってコンセンサスを保つため､ 奇数が必要なのです｡
‫ドキュメントでは､ これらはすべてマスターと呼ばれています｡
‫しかし､ マスターが複数ある場合､ 本当にetcdを書く仕事をしているのは1つだけという同じ設定になるので､
‫少し混乱します｡
‫これらは､ コントロールプレーンとも呼ばれます｡
‫この言葉はSwarmでおなじみですが､ Swarmでは特に､
‫マスターとノードが命令を出すために安全に会話するためのネットワーク上のプロトコルのことを指していました｡
‫でも､ ここではちょっと違う｡
‫コントロールプレーンは､ すべての意思決定を行うマスターノードのことを指しています｡
‫Swarmと同じように､ ワーカーノードがあります｡
‫ドキュメントでは､ 単にノードと呼ぶことにします｡
‫時々､ ワーカーという言葉が出てきますね｡
‫ここでは､ 一貫性を持たせるために､ これらのノードをノードと呼ぶことにします｡
‫前述したように､ これらすべてでコンテナを実行できますが､
‫一般的には､ アプリはノードに､ Kubernetes管理システムはマスターにとどめておくことになるでしょう｡
‫これらはすべて､ Dockerや､
‫containerd､ crioといったコンテナランタイムの上で動いている｡
‫各マスターの内部では､ 複数のコンテナを動かしてシステムを制御していくことになります｡
‫その第一弾がetcdです｡
‫Etcdは､ キーバリューの分散ストレージシステムである｡
‫これは､ SwarmのRAFTアルゴリズムシステムの仕組みと非常によく似ています｡
‫etcdと似ていますが､ etcdは別製品で､ 設定データを保存するだけならKubernetesでなくても導入できるものです｡
‫同じRAFTプロトコルを使っているので､ 同じルールがたくさん適用されます｡
‫奇数が必要です｡
‫1つでも始められますが､ 真のフォールトトレランスを求めるなら､
‫3つ必要です｡
‫といった具合に｡ その上で､ etcd内部にデータを格納し､
‫クラスタを管理するKubernetesコンテナを複数稼働させる必要があります｡
‫まず最初に､ このクラスタと会話し､
‫命令を出す方法となるAPIです｡
‫次はスケジューラコンテナです｡ これは､ コンテナをノード上のポッドと呼ばれるオブジェクトにどのように､
‫どこに配置するかを制御するものです｡
‫次にコントローラ・マネージャですが､ これはクラスタ全体とその中で動作しているすべてのものの状態を見るもので､
‫そのためにAPIを使っています｡
‫与えている命令､ つまりスペックを受け取って､
‫要求していることと実際に起きていることの違いを判断するのです｡
‫基本的には､ システム全体を見て､ 現在起こっているすべてのことを､
‫あなたが頼んだことと同じにする方法を見つけ出すループです｡
‫そうすると､
‫内蔵されていないDNSを制御するものが必要になりますが､ デフォルトではcoreDNSがそれにあたります｡
‫ネットワークやストレージ､ Webなど､ 後から手に入れる他のアドオンによっては､ ここでもさらに多くのコンテナが稼働することになります｡
‫すべてのノードで､ エージェントを実行する必要があります｡
‫それがkubeletと呼ばれるものです｡
‫まず始めに､ ネットワークを制御するためにkube-proxyが必要です｡
‫Dockerと同じように､ これらはすべて役割分担して繰り返されます｡
‫マスターは､
‫マルチマスターにするのであれば､ 同じコンテナがすべてセットされているはずです｡
‫ワーカーノードに設定した各ノードには､ 管理用にそれらの少なくとも2つのコンテナも置かれます｡
‫Kubernetesは､
‫多くの問題を多くの方法で解決するために設計されています｡
‫ネットワークなど､ マスターやノードに追加するものがあるかもしれませんね｡
‫マスター側では､ そのほかにもたくさんのオプションツールを追加することができます｡
‫早速､ 学習のためにローカルシステムにインストールしてみましょう｡