【クラウドネイティブ】コンテナオーケストレーションツール Kubernetes

目次

1. K8S の概要

公式サイトアドレス:

1.1 Docker オーケストレーションと k8s オーケストレーションの比較

1.2 特徴

1.3 機能

2. K8Sの重要なコンポーネント

2.1 コアコンポーネント

(1)APIサーバーでした

(2)Kubeコントローラーマネージャー

(3)Kubeスケジューラ

(4)ノード

①クベレット

②kubeプロキシ

③ドッカー

(5)etcd

2.2 Kubernetesの動作原理

3. ポッド

3.1 ポッドコントローラー

(1)展開

(2) レプリカセット

(3)ステートフルセット

(4)デーモンSe

(5)ジョブとCronジョブ

4 つまたは 5 つのメジャー レーベル セレクター

4.1 ラベル(ラベル)

4.2サービス

(1) 3つのトラフィックスケジューリングモード

4.3 イングレス

4.4名前

(1) リソース

4.5Namespace (名前空間セレクター)


1. K8S の概要

Kubernetes は 2014 年 6 月にリリースされ、ギリシャ語で「操舵手」や「航海士」を意味し、k から s までの 8 文字であるため、k8s と略されます。

Google は 10 年前にインフラストラクチャとしてコンテナ化を採用しました。Borg は Google 社内の大規模クラスタ管理システムです。borg システムはオープンソースではありません。Docker の大規模なコンテナ化後、Google は Docker コンテナ化の管理を迅速に占領するために、borg の設計思想に基づいて Go 言語を使用した新しいコンポーネント システム Kubernetes を開発し、CNCF にオープンソース化しました。

公式サイトアドレス:

k8s 公式 Web サイトのアドレス: Kubernetes Documentation | Kubernetes

中国語版: https://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/

1.1 Docker オーケストレーションと k8s オーケストレーションの比較

  • スタンドアロンで使用すると効果的にクラスタリングできない
  • コンテナ数が増えると管理コストが増加する
  • 効果的な災害復旧および自己修復メカニズムがない
  • 事前に設定されたオーケストレーション テンプレートがなければ、高速かつ大規模なコンテナ スケジューリングを実現できません
  • 統合された構成管理センター ツールはありません
  • コンテナのライフサイクルを管理するツールがない
  • グラフィカルな運用および保守管理ツールがない

1.2 特徴

 最小限のコストでサービスを実行するための柔軟なスケーリング

 自己修復および 
 自動リリース (デフォルトのロールバック リリース モード)
 集中構成管理およびキー管理 (キーは暗号化されます)
 ストレージの配置、プラグイン ストレージのサポート、および外部ストレージ リソースのオーケストレーション バッチ処理操作により、
 ワン
 タイム タスク、スケジュールされたタスクが提供されます。バッチデータの処理と分析のシナリオを満たします。

1.3 機能

クラスタ内でクロスマシンコンテナを実行および管理し、
Docker クロスマシンコンテナ間の通信問題を解決します。
K8S の自己修復メカニズムにより、コンテナクラスタは常にユーザーが期待する状態で実行されます。

2. K8Sの重要なコンポーネント

2.1 コアコンポーネント

(1)APIサーバーでした

(2)Kubeコントローラーマネージャー

さまざまなコントローラーの管理、クラスターのステータスの監視、および対応するアクションの自動実行を担当します。

 

(3)Kubeスケジューラ

リソース要件とスケジューリング ポリシーに従って、適切なノードで実行されるように Pod をスケジュールします。

述語戦略(述語)

好ましい戦略 (優先順位)

(4)ノード

①クベレット

各ノードで実行され、コンテナとポッドのライフサイクルの管理を担当し、API サーバーと通信します。

②kubeプロキシ

Pod にネットワーク プロキシとロード バランシング機能を提供する責任を負います。

③ドッカー

コンテナ エンジン、コンテナの実行、ネイティブ コンテナの作成と削除を担当します。

(5)etcd

構成データとクラスターの状態を保存するための分散キー/値ストレージ システム。

これらのコアコンポーネントは連携して、コンテナの配置、自動拡張、サービスの検出、負荷分散などの k8s の主要な機能を実現します。さらに、DNS サービス (CoreDNS)、ログ収集 (Fluentd)、モニタリング (Prometheus) など、特定のニーズに応じて導入できるその他の補助コンポーネントもあります。

2.2 Kubernetesの動作原理

ユーザーはkubectl ツールを介してリクエストを送信し、ポッド リクエストを作成するためにkube apiserver に認証します。apiserver は関連情報を etcd に書き込み、次に apiserver はkube コントローラー マネージャーを見つけて対応するポッドを作成します。コントローラーマネージャーは apiserver を通じて etcd でそれを読み取ります データは対応する pod 情報を探します、そしてapiserver は pod をスケジュールするスケジューラーを見つけますポッドの転送先に関して、apiserver は etcd のデータを読み取り、関連するポッド情報を取得します最後に、スケジューラは、アルゴリズムストラテジおよび最適化ストラテジを通じて事前選択をスケジュールし、ポッドの実行をスケジュールする必要があるノードを計算し、次にスケジューラは、 apiserver を介して対応するノードノード上の kubelet コンポーネントがこのコンポーネントを介してポッドを作成および維持し、関連するコンテナが docker を介して作成されます。次に、これらのポッドはkube プロキシを通過しますクラスターの形成に関連付けられた kube プロキシは、サービス リソースを使用して、統合 IP アドレスを使用してサービス リソースを公開し、外部ユーザーはこの IP アドレスを使用してポッド内で実行されているサービスをポーリングできます。Kubelet はノード上で実行されているリソースの数、ポッド関連のステータスと情報を監視して API サーバーに送信し、API サーバーはその情報を etcd に書き込んで保存します。ポッドのメンテナンスはコントローラーマネージャーによって行われ、ポッドの数がプリセット数に満たない場合は、対応するプリセット数を作成してポッドの総数を確保します。

3. ポッド

Pid は複数のコンテナーを保持でき、Pid 内のコンテナーはリソースを共有できますが、異なる Pid 内のコンテナーは相互にアクセスできません (デフォルト)。

 

3.1 ポッドコントローラー

(1)展開

ReplicaSet 上に構築されており、より高レベルのアプリケーション展開機能を提供します。ローリングアップデートやバージョンのロールバックなどの操作が簡単に行えます。

(2) レプリカセット

ポッド レプリカの数を管理するために使用され、指定された数のポッドが常に実行されるようにします。アプリケーションのローリングアップデートのサポート。

(3)ステートフルセット

ステートフル アプリケーションの管理に使用される各ポッドは、一意の ID と安​​定したネットワーク ID を持ちます。永続的なストレージと順序付けられた展開を必要とするアプリケーションに適しています。

(4)デーモンSe

各ノードでポッド コントローラーが実行されていることを確認してください。各ノードでシステムレベルのデーモンを実行するのに適しています。

(5)ジョブとCronジョブ

バッチまたは cron ジョブのコントローラー。タスクが実行されると、ポッドは自動的に停止します。

これらのコントローラーは、ユーザー定義のルールとポリシーに従ってポッドのライフサイクルを自動的に管理し、クラスター内のアプリケーションの通常の動作とスケーリングを保証します。これらのコントローラーにより、柔軟なアプリケーション管理と自動操作が可能になります。

4 つまたは 5 つのメジャー レーベル セレクター

4.1 ラベル(ラベル)

ラベル セレクターは、ラベルに基づいてリソースを選択およびフィルターします。ラベルはキーと値のペアの形式であり、ポッド、サービス、デプロイメントなどのさまざまな Kubernetes リソースに添付できます。ラベル セレクターを使用すると、ラベル マッチング ルールに従って特定のリソースを選択できます。

4.2サービス

サービスは、アプリケーション内のポッドを公開する Kubernetes リソースです。論理的に関連する一連の Pod を定義し、それらの安定したネットワーク エンドポイント (エンドポイント) を作成します。Service を通じて、アプリケーションに統一された入り口を提供できるため、クライアントはバックエンド Pod のサービスにアクセスできます。サービスは、さまざまなネットワーク アクセス方法に応じて、ClusterIP、NodePort、LoadBalancer、または ExternalName タイプにすることができます。

(1) 3つのトラフィックスケジューリングモード

ユーザースペース (廃止)

ipvs (推奨、最高のパフォーマンス)

IPアドレスによる直接転送

IP テーブル (廃止寸前) (デフォルト)

上から下へ進む

4.3 イングレス

Ingress は、外部トラフィックをクラスター内のサービスに転送するために使用される Kubernetes リソースです。これはトラフィック エントリとして機能し、バックエンド サービスのポッドにリクエストを転送する方法を決定するルールとルートを定義します。Ingress は、ロード バランシング、HTTPS/TLS 暗号化、URL ルーティング、その他の機能を実装し、より高いレベルのトラフィック制御と管理を提供します。

4.4名前

Name は Kubernetes リソースの属性であり、リソースの名前を識別するために使用されます。各リソースには一意の名前が必要です。たとえば、クラスター内で参照および操作するには、ポッド、デプロイメント、サービスなどのすべてのリソースに名前を割り当てる必要があります。

(1) リソース

    API バージョン
    種類 カテゴリ
    メタデータ メタデータ情報
    仕様
    リスト ステータス ステータス

4.5Namespace (名前空間セレクター)

名前空間セレクターは、特定の名前空間 (名前空間) を選択するために使用されます。名前空間は、Kubernetes でリソースを整理および分離するためのメカニズムであり、必要な名前空間内のリソースは、名前空間セレクターを通じて選択できます。

おすすめ

転載: blog.csdn.net/m0_71888825/article/details/132595655