ある職場の人が、構築中の Raspberry Pi Kubernetes クラスターに関する最近のブログ投稿にコメントして、「なぜ Kubernetes や Docker などを気にする必要があるのか」と疑問に思いました。
素晴らしい質問です。私は自分でそれを理解しています。そこにはたくさんのリソースがありますが、私の言語を話すものはありませんでした. <ブロック引用>
「ねえ、私はこの素晴らしい新しいブログ アプリを持っています!」
「ファブ、ちょうだい!」
「もちろん、まず、このバージョンの Windows/Linux、このバージョンの .NET/Python/Node、およびこれらの前提条件があることを確認してください。」
「待ってください。来週、それが処理されたら電話します。」
これは、ソフトウェアが何年にもわたって構築されてきた方法です。それではデプロイしましょう。
<ブロック引用>「コード/DLL/アプリケーションを圧縮したものです。」
"Lemme FTP/SFTP/これを 1 つの Explorer ウィンドウから別の Explorer ウィンドウにドラッグしてください。"
「そのファイルのこのバージョンはこれに設定されていますか?」
「待って、なに?」
"system/boss/dll/nounjs がバージョン 4.5.4.1 であることを確認してください。パッチが適用されています。"
「わかりました、Imma shush* をプロダクションに入れます。」
繰り返しますが、私たちは皆そこにいました。今は 2018 年ですが、あなたが認めるよりも多くの人がこれを行っています。
仮想マシンを入力してください!ずっといいですよね?必要なものがすべて入ったファイルが入った USB キーです。処理済み。
<ブロック引用>「そんなことは忘れて、これを使ってください。コンピューターよりも優れています。これは仮想マシンです。ただし、注意してください。仮想であることを認識していないため、嘘を尊重してください。」
「わかりました、メールで送ってください。」
「まあ、それは 32 ギガです。Lemme UPS にしましょう。」
アプリはわずか 100 MB ですが、この VM は数十ギガです。 150 ポンドの人が 6000 ポンドのハマーを必要とするのはなぜですか?孤立かな。
<ブロック引用>「アプリはますます複雑になっていますが、すばらしいです。現在 4 つの VM があります。DB 用に 1 つ、Redis 用に 1 つ、フロント エンド用に 1 つ、そしてショッピング カートに 1 つ。マイクロサービスです!」
「大好きです。」
「これは 2 TB のドライブです。」
分割しているのはいいことですが、肥大化するほどいいことではありません。ここで、これらすべてに対して apt upgrade/windows update を実行し、それらを維持する必要があります。 Lyft を手に入れることができるのに、なぜハマーを運転するのですか?
<ブロック引用>「よし、机の下にあるこの強力なマシンでそれらをすべて実行しました。」
「いいですね、私たちはクラウドに移行しています。」
「はあ。これらすべての接続文字列を更新して、VM のアップロードを開始する必要があります。」
「素晴らしいでしょう。机が雲の中にあることを除けば、机の下にある機械のようなものです。」
「雲って何?」
「見えないサーバー ルームです。基本的には、机の下にあるコンピューターですが、見えません。」
ほとんどの VM インフラストラクチャはかなりずさんです。それはハードコードされた IP アドレスであり、同じサブネットに存在する不適切な名前の VM であり、それらをクラウドに移動します (リフト アンド シフト!)。 /P> <ブロック引用>
「ご存じのように、これらの VM はすべて重いです。アプリではないものの束を維持および移動する必要があります。コンテナーがその方法です。アプリの基本要件を定義し、他のすべてを共有するだけです。」
「これについて聞いたことがあります。「docker run hello-world」と入力すると、どのマシンでも中央ハブから hello world イメージ (Ubuntu ベース) が読み込まれ、ほぼ分離された方法で実行されます。保証されています。時が経っても働き、走ること。」
「いいですね。私たちのアプリの多くの部分が Linux 上の .NET Core にありますが、Python とノードもあります。」
「はい、前提条件がコンテナーに明確にリストされているため、すべて実行されます...実際、前提条件は他のコンテナー イメージへの参照です。」
「ずっとコンテナです。」
これで、DB、Redis、フロント エンド、およびショッピング カートをいくつかの単純なテキスト ファイルで定義できるようになりました。ホスト OS (メイン コンピューター... 金属) が多数のゲスト OS (文字通りコピー!) をロードしてから、すべてのアプリと前提条件をロードするのではなく、OS を共有し、必要に応じてバイナリとライブラリを共有します。 .
<ブロック引用>「OK、Docker で多数のコンテナを実行していますが、時々ダウンしたり停止したりします。」
「もう一度実行しますか?」
「それだけでなく、3 つのショッピング カート コンテナーが必要な場合もあれば、2 つ以上の DB コンテナーが必要な場合もあります。さらに、それらの IP は時々変更されます」
「そのため、それらを実行し続け、スケーリングまたは自動スケーリングし、ネットワークとネーミング/DNS を管理するための何かが必要です。」
コンテナー オーケストレーターを入力します。 Docker Swarm、Mesos/Marathon、Azure Service Fabric などがありますが、この投稿では Kubernetes を使用します。
<ブロック引用>「では、Kubernetes は私のコンテナーを実行し、それらを実行し続け、ネットワークの管理を支援しますか?」
「はい、いいえ。Kubernetes の一部、または 3 時間近く使用している私のようなクールな人々が言うように、k8s は、キー値ストレージの etcd や選択用の kube-scheduler などのマスター コンポーネントの一部です。 「ポッド」を実行するノード (ポッドはコンテナーよりもクールですが、ポッドが複数のコンテナーである場合もあります。それでも、非常にクールです。)
「用語集を作る必要があります。」
「くそったれよ」
Kubernetes は基本的にすべてプラグイン可能です。彼らのネットワーク設定が好きではありませんか?文字通りダース以上のオプションがあります。より良いチャートやグラフが必要ですか?オプションの全世界。
1 つの Dockerfile で説明できるように アプリを実行するために必要なものを宣言します。Kubernetes YAML ファイルには、コンテナーだけでなく、必要なポート、それぞれのレプリカの数 (Web ファームを考えてください)、名前、環境変数なども記述されています。フロント エンド、バック エンド、およびロード バランサーを示すファイルを次に示します。すべてがそこにあり、接続文字列は内部 DNS ルックアップになり、すべてのサービスには (必要に応じて) ロード バランサーがあり、手動または自動スケーリングできます。
「わかりました。なぜ気にする必要があるのですか?」
「いくつかの理由があります。以前は、アプリをインストールするには、Word 文書と週末を提供する必要がありました。今では kubectl apply theapp.yaml と入力します。 1 分もかからずに実行されます。"
「週末の請求はまだです。」
簡単に言えば、私たちは DevOps の新しいフェーズの始まりにいます。プログラム的で、弾力的で、宣言的なものです。一貫性があり、明確で、モジュール化されています。
Julia Evans の「Kubernetes がクールな理由」と、Azure で Kubernetes クラスターを作成する方法 (および管理 VMS は無料) を読むことをお勧めします。
* 私は黙ることを試みています。私たちはマシンに Es Es Eaytch しません!しっかし! shush と shoosh の間のどこかで発音されます。言うときは、プチジュテを少し入れるようにしてください。
* CC の下で使用される画像
スポンサー: より高速な Python を解き放つ The Intel® Distribution for Python を使用して、将来のインテル® プラットフォームでアプリケーションのパフォーマンスをスーパーチャージします。 Windows、Linux、および macOS で利用できます。 Intel® Distribution for Python* を今すぐ入手してください!