クラウドネイティブテクノロジー 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 でのアンカーポイントの適用

推薦する

フロントエンドのパフォーマンス最適化を学ぶ準備として、HTMLページのレンダリングプロセスを理解する

現在、フロントエンドのパフォーマンス最適化について学んでいます。適切な解決策を見つけ、パフォーマンス...

Vue ルーティング this.route.push ジャンプ ページが更新されない場合の解決策

Vue ルーティング this.route.push ジャンプ ページが更新されない1. 背景概要:...

MySQL ツリー構造テーブルの設計と最適化に関する簡単な説明

序文多くの管理・オフィスシステムでは、ツリー構造がいたるところで見られます。たとえば、「部門」や「機...

docker での psql データベースのバックアップとリカバリの詳細な説明

1. DockerでのPostgresデータベースのバックアップ注文: docker exec it...

CSS3 メディアクエリにおけるデバイス幅と幅の違いの詳細な説明

1.デバイス幅定義: 出力デバイスの画面表示幅を定義します。 Web ページが Safari で開か...

CentOSはexpectを使用してスクリプトやコマンドをバッチでリモート実行します

サーバーへのファイルのアップロード、ソフトウェアのインストール、コマンドやスクリプトの実行、サービス...

Docker-compose を使用して ELK をデプロイするためのサンプル コード

環境ホストIP 192.168.0.9 Docker バージョン 19.03.2 docker-co...

プライベートDockerリポジトリであるHarborをインストールするための詳細な手順

Harborのインストールは非常に簡単ですが、Dockerログインで行き詰まってしまいました。このブ...

JavaScriptの厳密モードが8進数をサポートしていない問題の説明

JavaScript厳密モードが 8 進数をサポートしていないという問題に関して、まず、 Java...

MySQLの基本操作を詳しく解説(第2部)

序文この記事には1. データベースのいくつかの主要な制約2. テーブル間の関係制約:主キー制約: 機...

MySQL count(1)、count(*)、count(field)の違い

目次1. COUNTの初見2. COUNT(フィールド)、COUNT(定数)、COUNT(*)の違い...

HTML のフォームフォームのメソッド属性の紹介

1 メソッドは、データをサーバーに送信する方法を指定するプロパティです。 2 post と get ...

VirtualBox を使用して Mac 上にローカル仮想マシン環境を構築する方法

1. ビッグデータとHadoopビッグデータについて研究し学ぶには、当然 Hadoop から始める必...

HTMLページでチェックボックスを操作する方法

チェックボックスは Web ページで非常によく使用されます。e コマースの Web サイトでもプラッ...

Windows 10 での mysql5.5 データベース コマンドラインの中国語文字化け問題を解決する

システムをリセットした後、かなり前にインストールした MySQL データベースのコンソール クエリで...