クラウドネイティブテクノロジー Kubernetes (K8S) の紹介

クラウドネイティブテクノロジー Kubernetes (K8S) の紹介

今日はKubernetesテクノロジーの紹介を見ていきます。最近、Geek TimeでZhang Lei先生のKubernetesテクノロジーに関する詳細なプレゼンテーションを見ました。とてもよくまとめられていました。興味のある学生は聞いてみてください。Kubernetesテクノロジーを理解するのにとても役立ちます。ここでは、自分の進歩に合わせて学習ノートを共有します。

今日は、私たちはより高い角度に立っており、より概念的なものがあります。

01 Kubernetes とは何ですか?

以前はこの質問に答えるのは簡単だと思っていましたが、Kubernetes を理解してさらに深く調べていくうちに、この質問に包括的に答えるのは難しいことがわかりました。

この問題を理解するには、まずコンテナとは何かを知る必要があります。前回の記事では、コンテナは特別なプロセスであり、実際には Namespace、Cgroup、rootfs の 3 つのテクノロジーによって構築された特別なプロセス分離環境であると述べました。 この分離された環境の主な目的は、独自のアプリケーションを実行することです。

クラウドベンダーにとって、ユーザーが提出したDockerイメージを自社プラットフォームのコンテナ環境で実行し、適切に管理できれば、このクラウドプラットフォームは商業的価値を持つことになります。実際、これは確かに達成されています。

ただし、ユーザーの認知度を高めたい場合、1 つのコンテナや 1 人のユーザーの Docker イメージをサポートするだけでなく、無数の開発者と大規模なコンテナ クラスターをサポートして、プラットフォームがクラウド ネイティブ エコシステム全体で認知されるようにすることが重要です。この現実に基づくと、コンテナ クラスターの管理をより適切に整理、スケジュール、オーケストレーション、標準化できる人がコンテナ分野で優遇されることは容易に想像できます。

ここでは、スケジュールと振り付けという 2 つの単語を赤でマークしました。この 2 つの単語について説明する必要があります。

スケジューリング: 特定のルールに従ってコンテナを最適なノードに配置して実行する

オーケストレーション: ユーザーの希望とシステム全体のルールに従って、コンテナ間の関係を完全に自動的に処理します。

このような背景から、Docker のネイティブ Compose+Swarm の組み合わせと Google の Kubernetes プロジェクトが誕生しました。最終的に Kubernetes が勝利したのはなぜでしょうか?ゆっくり見ていきましょう。

Kubernetes プロジェクトの理論的基礎は、そのエンジニアリング実践よりも先進的です。Kubernetes プロジェクトは、Google のインフラストラクチャの中核システムである Borg から生まれました。他のコンテナ オーケストレーション プロジェクトと比較して、一連の「先進性」と「完全性」を体現しており、これらの特徴は Kubernetes プロジェクトが依拠する中核的な価値となっています。

Kubernetes の登場により、コンテナ オーケストレーション、スケジューリング、およびクラスター管理のボトルネックが解消されました。また、ユーザーの悩みの種である「アプリケーションのコンテナ イメージがあります。このアプリケーションをクラスターで実行できるようにしてください。」も解決されました。ただし、これは Compose+Swarm アーキテクチャを置き換えるには不十分です。Docker のネイティブ Compose+Swarm アーキテクチャは、コンテナの操作と基本的な運用保守管理機能も解決できるためです。

Kubernetes がさらに価値あるものとなるのは、最初から特定のコンテナ Docker に合わせて設計されていないことです。Kubernetes は Docker を基盤となるコンテナ実装としてのみ扱います。Kubernetes が解決することに重点を置いている問題は、大規模に実行されるタスク間には実際にはさまざまな関係があるということです。これらの関係の処理は、タスク オーケストレーションとシステム管理の最も難しい部分です。

これらのタスク間には、Web アプリケーションと MySQL データベースの関係、ロード プロキシとバックエンド サービスの関係など、さまざまな種類の関係があります。

従来の仮想マシンでは、タスク間で TCP または HTTP 要求が発生するため、通常、これらのタスクを一緒に展開してこのタイプのタスクを処理します。しかし、コンテナ技術の登場以降、ミラーリングによって各タスクを異なるコンテナにカプセル化できるようになりました。タスクは互いに干渉せず、独自のリソース構成を持ち、クラスターによって異なるマシンにスケジュールすることもできます。次のように:

02 KubernetesとCompost+Swarmの違い

タスク間のこのような関係処理は、Kubernetes プロジェクトと Compost+Swarm アーキテクチャの最も明らかな違いでもあります。

Web アプリケーションと MySQL サービスを例にとると、Compost+Swarm アーキテクチャでは、2 つのサービス間に「リンク」が定義され、Docker プロジェクトがこの「リンク」を維持する責任を負います。 Docker は、アプリケーション プロセスで使用する環境変数として、DB コンテナの IP とポートをこの Web アプリケーションのコンテナに挿入します。DB コンテナの接続情報が変更されると、環境変数が更新されます。

Compost+Swarm 設計パターンは、Web アプリケーションと MySQL サービス間の接続をより適切にサポートできますが、将来的にはより多くの種類のタスク間の接続が存在する可能性があり、依存関係を処理するこの単純な機能では確実にボトルネックが発生します。

Kubernetes プロジェクトの主な設計思想は、タスク間のさまざまな関係をよりマクロな観点から統一的に定義し、将来的にさらに多くの種類の関係をサポートする余地を残すことです。

たとえば、Kubernetes はコンテナ間の相互呼び出しを分類して、どの相互作用が頻繁な TCP 相互作用であるか、どの相互作用が単なるディスク ファイル相互作用であるかなどを区別します。相互作用を必要とするこれらのタスクの場合、従来の方法では、さまざまなタスクを同じマシンにデプロイし、Localhost を介して通信します。Kubernetes では、サービスの概念が導入され、本来は相互に依存している 2 つのサービスを異なるマシンにデプロイできるようになりました。各サービスの背後には複数のポッドがあります。サービスの機能は、ポッドに固定のプロキシ エントリを提供することであり、ポッドの分散は完全にランダムです。

このように、Web アプリケーション Pod にとって、考慮する必要があるのは、データベース Pod のサービス情報だけです。サービス バックエンドが実際にプロキシする Pod の IP アドレス、ポート、およびその他の情報の自動更新とメンテナンスが Kubernetes プロジェクトの責任であることは想像に難くありません。

03 まとめ

今日は、コンテナの最も基本的な概念から始めて、k8sの背景を説明しました。また、WebアプリケーションとMySQLサービス間の「緊密な連携」を通じて、これをPodに拡張しました。Podでは、一度に複数のアプリケーションインスタンスを起動したいので、PodのマルチインスタンスマネージャーであるDeploymentが必要です(後述)。また、このような同一のPodのグループには、固定IPアドレスとポートを介して負荷分散された方法でアクセスする必要があるので、Serviceが必要です。WebアプリケーションがMySQLにアクセスするためにアカウントとパスワードが必要な場合は、Secretを導入します...最後に、次の図が表示されます。

具体的な内容については後ほど分析します。 。 。

私がここまで長々と述べてきたのは、Kubernetes プロジェクトが、管理機能ごとに指示を作成してからプロジェクト内でロジックを実装する他のプロジェクトとは異なることを主に表現するためです。
対照的に、Kubernetes プロジェクトでは、次のアプローチを推奨します。
1. まず、Pod、Job、CronJob などの「オーケストレーション オブジェクト」を通じて管理しようとしているアプリケーションについて説明します。
2. 次に、Service、Secret、Horizo​​ntal Pod Autoscaler などのいくつかの「サービス オブジェクト」を定義します。これらのオブジェクトは、特定のプラットフォーム レベルの機能を担当します。
この使用方法は、いわゆる「宣言型 API」です。この API に対応する「オーケストレーション オブジェクト」と「サービス オブジェクト」は、どちらも Kubernetes プロジェクト内の API オブジェクトです。
これが Kubernetes のコアとなる設計コンセプトです。

今日はこれで終わりです。

以上がクラウドネイティブテクノロジー kubernetes (K8S) の詳しい紹介です。クラウドネイティブテクノロジー kubernetes (K8S) の詳細については、123WORDPRESS.COM の他の関連記事もご覧ください。

以下もご興味があるかもしれません:
  • Kubernetes でのトラブルシューティングに一時コンテナを使用する方法
  • クラウドネイティブ Kubernetes 初期化コンテナで Init を使用するチュートリアル
  • Kubernetes プローブの紹介
  • クラウドネイティブテクノロジーKubernetesにおけるボリュームコンテナの使用
  • Kubernetes のデプロイメントを視覚化する 10 のステップ

<<:  MySQL レプリケーション問題の 3 つのパラメータの分析

>>:  HTML でのアンカーポイントの適用

推薦する

CentOS 8 インストール図 (超詳細なチュートリアル)

CentOS 8 が正式にリリースされました! CentOS は Red Hat の再配布ポリシー...

mysql5.7 の新しい json フィールド タイプの使用例の分析

この記事では、MySQL 5.7 で追加された json フィールド タイプの使用方法を例を使って説...

Linux で PCIe のバージョンと速度を確認する方法

PCIE には 4 つの異なる仕様があります。下の図でそのうちの 2 つを見てみましょう。マザーボー...

Vue+js はビデオのフェードインとフェードアウト効果を実現します

Vue+jsはビデオのフェードインとフェードアウトを実現します。参考までに、具体的な内容は次のとおり...

MySQL のソートとページング (order by と limit) と既存の落とし穴

並べ替えクエリ (order by)電子商取引の場合: 今日完了したすべての注文を表示し、取引金額に...

モバイル Web WAP には Bootstrap と jQuery Mobile のどちらを使用すべきか

問題を解決するBootstrap は、次の問題を解決する CSS フレームワークです。デバイス間での...

CentOS 7 に PHP5 用の suPHP をインストールする方法 (Peng Ge)

デフォルトでは、CentOS 7 上の PHP は apache または nobody として実行さ...

HTML テーブル マークアップ チュートリアル (9): セル間隔属性 CELLSPACING

テーブルがコンパクトになりすぎないように、テーブル内のセル間に一定の距離を設定できます。基本的な構文...

docker+devpi を使用してローカル pypi ソースをビルドする方法

以前、開発で頻繁に pip ダウンロードを使用する必要がありました。pip ソースを国産ソースに変更...

Alibaba Cloud イメージリポジトリの Docker 構成変更の実装

docker リポジトリ自体は非常に遅いですが、中国の Alibaba Cloud ミラー リポジト...

NginxはLua+Redisを使用してIPを動的にブロックします

1. 背景日常的なウェブサイトのメンテナンスでは、このような要件に頻繁に遭遇します。特定のクローラー...

完璧なアロエベラジェルを選ぶには?完璧なアロエベラジェルの本物と偽物の見分け方

最新のパーフェクト アロエ ベラ ジェルのパッケージ ボックスには、赤いフォントで完璧な英語の文字が...

MySQL 集計関数のネストされた使用操作

目的: MySQL 集計関数のネストされた使用集計関数は直接ネストできません。例: max(coun...

WindowsシステムでPhPStudy MySQLの起動に失敗する問題を解決する

エラーを報告するApache\Nginx サービスは正常に起動しましたが、MySQL は起動に失敗し...

Web開発でボックスを中央に配置するいくつかの方法

1. ボックスを中央に配置するいくつかの方法を記録します。 1.0、マージン幅固定、高さ中央配置。 ...