DUICUO

Docker とは何ですか? Kubernetes (K8S) とは何ですか?

[[351255]]

この記事は、WeChat公式アカウント「Fresh Dates Classroom」(小盒君著)からの転載です。転載の許可については、Fresh Dates Classroom公式アカウントまでお問い合わせください。

2010年、若いITプロフェッショナルのグループが米国サンフランシスコで「dotCloud」という会社を設立しました。

この企業は、主にPaaSベースのクラウドコンピューティング技術サービスを提供しています。特に、LXC関連のコンテナ技術を提供しています。

LXC は Linux コンテナ仮想化テクノロジーの略です。

その後、dotCloud はコンテナ テクノロジーを簡素化および標準化し、Docker と名付けました。

Dockerテクノロジーは誕生当初、業界から大きな注目を集めませんでした。一方、小規模なスタートアップ企業であるdotCloudは、激しい競争の中で生き残るために苦戦していました。

諦めかけていたとき、「オープンソース」というアイデアが頭に浮かんだのです。

「オープンソース」とは何でしょうか?オープンソースとは、ソースコードを公開することを意味します。以前は機密扱いだったプログラムのソースコードをすべての人に公開し、誰もが参加してコードやフィードバックを提供できるようにすることです。

オープンソース

ソフトウェアの中には、最初からオープンソースであるものもあります。また、自力では生き残れないものの、開発者が諦めたくないためにオープンソースになっているものもあります。彼らは他者のサポートに依存しています。

2013 年 3 月、dotCloud の創設者の 1 人であり Docker の父である Solomon Hykes 氏が、Docker プロジェクトを正式にオープン ソース化することを決定しました。

[[351259]]

ソロモン・ハイクス

全然開かないけど、開いたらびっくりするほど。

ますます多くの IT エンジニアが Docker の利点に気づき、Docker オープンソース コミュニティに参加するようになっています。

Docker の人気は驚くべきスピードで急上昇しました。

オープンソース化された同月に、Docker バージョン 0.1 がリリースされました。その後、毎月新しいバージョンがリリースされ、最終的に 2014 年 6 月 9 日に Docker バージョン 1.0 が正式にリリースされました。

この時点で、Dockerは業界で間違いなく最も人気のあるオープンソース技術となっていました。Google、Microsoft、Amazon、VMwareといった大企業でさえ、Dockerに大きな支持を示し、全面的な支援を表明しました。

Docker が普及した後、dotCloud は社名を Docker Inc. に変更しました。

コンテナと仮想マシン

Docker やコンテナ技術がなぜこれほど人気が​​あるのでしょうか? 簡単に言えば、「軽量」だからです。

コンテナ技術が登場する前は、仮想マシンが業界で最もホットな話題でした。VMwareとOpenStackは、仮想マシン技術の代表的な例でした。

多くの人が仮想マシンを使ったことがあるでしょう。仮想マシンとは、オペレーティングシステム内にインストールされ、1台以上の「サブコンピュータ」をシミュレートするソフトウェアです。

仮想マシンは「サブコンピュータ」に似ています。

「サブコンピュータ」内では、通常のコンピュータと同じようにプログラムを実行できます(例えば、QQを起動するなど)。必要に応じて、複数の「サブコンピュータ」を作成し、それぞれでQQを実行することもできます。各「サブコンピュータ」は互いに独立しており、干渉することはありません。

仮想マシンは仮想化技術の一種です。Dockerなどのコンテナ技術も仮想化技術ですが、軽量仮想化のカテゴリーに分類されます。

仮想マシンは多数の「サブコンピュータ」を分離できますが、占有するスペースが多くなり、起動が遅くなり、仮想マシン ソフトウェア (VMware など) にコストがかかる場合があります。

一方、コンテナ技術にはこれらの欠点はありません。オペレーティングシステム全体を仮想化する必要はなく、小規模な環境(「サンドボックス」のようなもの)のみを仮想化すれば済みます。

[[351262]]

サンドボックス

起動はわずか数秒と非常に高速です。さらに、リソース利用率も高く(単一のホストで数千のDockerコンテナを同時に実行できます)、さらに、占有スペースも非常に小さく、仮想マシンは通常数GBから数十GBのスペースを必要としますが、コンテナは数MB、あるいは数KBしか必要としません。

コンテナと仮想マシンの比較

そのため、コンテナ技術は温かく歓迎され、非常に求められ、急速に発展してきました。

Dockerとは何ですか?

Docker を詳しく見てみましょう。

Docker 自体はコンテナではなく、コンテナを作成するツール、つまりアプリケーション コンテナ エンジンであることに注意することが重要です。

Docker を理解するには、その 2 つのスローガンを見るだけで十分です。

最初の文は「構築、出荷、実行」です。

言い換えれば、それは「構築、送信、実行」という 3 つのアプローチです。

例えば:

広い場所に来たので、家を建てたいと思い、石を運び、木を切り、設計図を描きました。たくさんの作業を経て、ついに家を建てることができました。

結果、しばらくそこに住んだ後、別の空き地に移りたいと思いました。この時点では、いつものように石を運び、木を切り、設計図を描き、また家を建てることしかできませんでした。

しかし、その後、年老いた魔女が現れて、私に一種の魔法を教えてくれました。

この魔法は、私が建てた家のコピーを作成し、バックパックに入れることができる「鏡像」を作成します。

別の空きスペースに着いたら、この「鏡像」を使って家をコピーし、そこに配置してすぐに移動します。

それはすごいことじゃないですか?

したがって、Docker の 2 番目のスローガンは、「一度ビルドすれば、どこでも実行できる」です。

Docker テクノロジーの 3 つのコア概念は次のとおりです。

  • 画像
  • 容器
  • リポジトリ

先ほどの例では、バッグの中の「イメージ」はDockerイメージです。バックパックはDockerリポジトリです。空き地に魔法のように建てた家はDockerコンテナです。

簡単に言えば、Dockerイメージとは特殊なファイルシステムです。コンテナの実行に必要なプログラム、ライブラリ、リソース、設定ファイルに加え、実行時に用意されたいくつかの設定パラメータ(環境変数など)も含まれています。イメージには動的なデータは含まれておらず、ビルド後に内容が変更されることはありません。

つまり、家は毎回同じものになりますが、家そのものは変わりません。家財道具などは用意されていません。そこに住む人がそれらを提供する責任を負います。

それぞれの鏡像で違うタイプの家が作れるので、鏡像を複数作れるんです!

つまり、私はヨーロッパ風の別荘を建て、それが鏡像を生み出したのです。別の人は中国風の中庭のある家を建て、これもまた鏡像を生み出したかもしれません。そしてまた別の人はアフリカ風の茅葺き小屋を建て、これもまた鏡像を生み出したのです…

そうすれば、私たちは鏡を交換できます。あなたは私のものを使い、私はあなたのものを使います。素晴らしいことじゃないですか。

そして大きな公共倉庫になりました。

Docker レジストリ サービス (リポジトリ マネージャーに似ています) は、Docker イメージの管理を担当します。

誰かが作成したミラーサイトは、必ずしも正当なものではありません。問題のあるサイトが構築された場合はどうなりますか?

そのため、Docker Registry サービスはイメージを非常に厳密に管理します。

最も一般的に使用されているパブリック レジストリ サービスは公式の Docker Hub です。これはデフォルトのレジストリでもあり、多数の高品質の公式イメージがあります。

K8Sとは何ですか?

さて、Docker について説明したので、次は Kubernetes に注目しましょう。

Dockerコンテナ技術が大きな話題を呼ぶ一方で、Dockerを特定の業務実装に適用することが困難であることが明らかになりました。オーケストレーション、管理、スケジューリングのすべてが課題でした。そのため、Dockerとそのコンテナをより高度かつ柔軟に管理できる管理システムが緊急に必要とされていました。

ちょうどその時、Kubernetes(K8S)が登場しました。

K8S はコンテナベースのクラスター管理プラットフォームであり、正式名称は Kubernetes です。

Kubernetesという単語はギリシャ語に由来し、「操舵手」または「航海士」を意味します。K8Sはその略称で、「ubernete」の8文字を数字の「8」に置き換えたものです。

Docker とは異なり、Kubernetes の作成者は、業界の巨人として知られる Google です。

しかし、Kubernetes(K8S)は全く新しい発明ではありません。その前身は、Google自身も10年以上開発を続けてきたBorgシステムでした。

Kubernetes (K8S) は、2014 年 6 月に Google によって正式に発表され、オープンソース化されました。

同年 7 月には、Microsoft、Red Hat、IBM、Docker、CoreOS、Mesosphere、Saltstack などの企業が Kubernetes に参加しました。

翌年には、VMware、HP、Intel などの企業も参加しました。

2015年7月、GoogleはOpenStack Foundationに正式に加盟しました。同時に、Kubernetes v1.0が正式にリリースされました。

K8Sアーキテクチャ

Kubernetes のアーキテクチャは少し複雑なので、簡単に見てみましょう。

Kubernetes (K8S) システムは通常、K8S クラスターと呼ばれます。

このクラスターは主に 2 つの部分で構成されます。

  • マスターノード1つ
  • ノードノード(コンピューティングノード)のグループ

マスターノードは主に管理と制御を担います。ノードノードはワークロードノードであり、実際のコンテナを含んでいます。

これら 2 種類のノードを詳しく見てみましょう。

まず最初はマスターノードです。

マスター ノードには、API サーバー、スケジューラ、コントローラ マネージャー、etcd が含まれます。

API サーバーはシステム全体の外部インターフェースであり、「サービス ホール」のようにクライアントや他のコンポーネントから呼び出されます。

スケジューラは、クラスター内のリソースのスケジュールを担当し、基本的に「スケジュール ルーム」として機能します。

コントローラ マネージャーは、コントローラの管理を担当し、「ゼネラル マネージャー」のような役割を担います。

次に、Node ノードがあります。

ノードには、Docker、kubelet、kube-proxy、Fluentd、kube-dns (オプション)、および Pod が含まれます。

PodはKubernetesにおける最も基本的な操作単位です。Podはクラスター内で実行されるプロセスを表し、1つ以上の密接に関連するコンテナをカプセル化します。Kubernetesには、Podに加えてServiceという概念もあります。Serviceは、同じサービスを提供する複数のPodグループへの外部アクセスインターフェースと捉えることができます。(この部分は少し分かりにくいので、ここでは省略します。)

言うまでもなく、Docker はコンテナを作成するためのものです。

Kubelet は主に、ノードに割り当てられた Pod の監視(作成、変更、監視、削除など)を担当します。

Kube-proxy は主に、Pod オブジェクトのプロキシを提供する役割を担います。

Fluentd は主に、ログの収集、保存、およびクエリを担当します。

ちょっと混乱してきましたか?ああ、一言で説明するのは本当に難しいので、先に進みましょう。

通信エンジニア必読

DockerとKubernetesについて紹介しましたが、記事はまだ終わりません。

次のセクションは、コア ネットワーク エンジニア、さらにはすべての通信エンジニア向けに書かれています。

数十年前の 1G から今日の 4G、そして将来の 5G に至るまで、モバイル通信は大きな変化を遂げており、コア ネットワークも同様に変化しています。

しかし、これらの変更を詳しく調べてみると、いわゆるコアネットワークは本質的には全く変わっていないことがわかります。それは単なるサーバーの集合体です。コアネットワークの各要素は、単に異なるサーバー、異なるコンピューティングノードに過ぎません。

変わったのは、これらの「サーバー」の形状とインターフェースです。形状は、ラックマウント型のシングルボードからラックマウント型のブレード サーバーに、ラックマウント型のブレード サーバーから x86 ユニバーサル ブレード サーバーに変わりました。インターフェースは、トランク ケーブルからネットワーク ケーブルに、ネットワーク ケーブルから光ファイバーに変わりました。

たとえ変化したとしても、それは依然としてサーバーであり、コンピューティングノードであり、CPU です。

サーバーである以上、ITクラウドコンピューティングと同様に、必然的に仮想化の道を辿ることになります。仮想化には、前述の通り、低コスト、高い稼働率、完全な柔軟性、動的なスケジューリングなど、多くの利点があります。

数年前までは、仮想マシンこそがコアネットワークの究極の形だと思われていました。しかし現在では、コンテナ化が主流になる可能性が高いようです。よく話題になるNFV(ネットワーク機能仮想化)も、NFC(ネットワーク機能コンテナ化)に改名されるかもしれません。

VoLTE を例にとると、従来の 2G/3G アプローチに従うと、EPC と IMS の異なるネットワーク要素として機能する専用デバイスが多数必要になります。

VoLTE関連のネットワーク要素

コンテナを使用すると、サーバーを 1 台だけ用意して 12 個程度のコンテナを作成し、異なるコンテナを使用して異なるネットワーク要素のサービス プログラムを実行できるようになります。

これらのコンテナはいつでも作成・破棄できます。また、システムをシャットダウンすることなく、動的にサイズを拡大・縮小したり、強化・弱化したりできるため、パフォーマンスと消費電力のバランスを維持できます。

本当に完璧です!

5G時代のコアネットワークは、コンテナにも最適なマイクロサービスアーキテクチャを採用しています。モノリシックアーキテクチャはマイクロサービスアーキテクチャへと進化し、1つの万能型サービスがN個の特化型サービスに進化するのと同じです。それぞれの特化型サービスは独立したコンテナに割り当てられ、最大限の柔軟性を実現します。

洗練された分業

この傾向に倣い、モバイル通信システムでは、アンテナを除くすべてが仮想化される可能性があります。コアネットワークは最初の例ですが、最後ではありません。仮想化されたコアネットワークは、通信分野ではなく、IT分野に分類されるべきです。コアネットワークの機能は、コンテナ内の通常のソフトウェア機能に過ぎません。

コアネットワークエンジニアの皆さん、おめでとうございます!移行はもうすぐ成功です!

[[351272]]