Kubernetes コントローラーとラベルの簡単な分析

Kubernetes コントローラーとラベルの簡単な分析

01 k8sの一般的なコントローラー

以前、Pod は k8s クラスター内の最小のスケジューリング単位であることを学びました。Pod は、一時停止コンテナ + アプリケーション コンテナで構成されます。

k8s では、1 つのリソース オブジェクトが別のリソース オブジェクトを管理することがよくあります。このタイプのリソース オブジェクトを「コントローラー」と呼びます。

コントローラーの種類とその機能について簡単に見てみましょう。実際、各コントローラーには独自の特徴があります。後で 1 つずつ分析します。今は、一般的なアイデアを持っているだけで十分です。

RCコントローラー

これは、特定のポッドのレプリカの数がいつでも特定の期待値を満たすという、予想されるシナリオを定義します。たとえば、MySQL の 1 マスター 2 スレーブ構造では、常に 2 つのスレーブ データベースが存在することが想定されます。それでも不十分な場合は、スレーブ データベースを拡張する必要があります。

その定義には、次の 3 つの主要なパラメータが必要です。

1. 予想されるポッド数

2. ポッドラベル(タイプ識別子)

3. 新しいポッド用のポッドテンプレートを作成する

その一般的な構造は次のとおりです。

APIバージョン: vl
種類: レプリケーションコントローラ
メタデータ:
    名前: rc-mysql-slave
仕様:
    レプリカ: 2 # 期待値 セレクタ: # タグ アプリ: mysql
    テンプレート: # テンプレート xxx: xxx

上記のテキストを比較すると、RC の基本的な YAML ファイル テンプレートがわかります。

RC が定義され、k8s マスターに送信されると、コントローラー マネージャーは現在存続しているターゲット Pod を検査し、現在存続している Pod が予想される Pod と等しいことを確認します。予想される Pod の数より多い場合は削除され、少ない場合は作成されます。

デプロイメント コントローラー

これは、k8s バージョン 1.2 で導入された新しい概念です。このコントローラーは、RC コントローラーと 90% 類似しています。RC との違いは、現在の Pod の「デプロイメントの進行状況」をいつでも取得できることです。 yaml ファイルの定義は次のとおりです。

apiバージョン: extensions/vlbetal
種類: デプロイメント
メタデータ:
    名前: dep-mysql-slave
仕様:
    レプリカ: 2
    セレクタ:
       xxx:xxxx
    テンプレート:
       xxx:xxxx

Deployment を使用すると、RC が使用されるほぼすべてのシナリオを Deployment に置き換えることができます。

ステートフルセットコントローラ

このコントローラーは特定の Pod の期待値も生成しますが、生成する Pod がステートフルであるという点で RC や Deployment とは異なります。

RC と Deployment によって生成される Pod では、1 マスター 2 スレーブ アーキテクチャの MySQL の 2 つのスレーブ ライブラリと同様に、予想される数の Pod のみを生成する必要があります。彼らには秩序や重さの概念がありません。 Statefulset コントローラーによって制御される Pod は、生成順序または重みにおいて一定の論理関係を持ちます。たとえば、MySQL マスタースレーブアーキテクチャでは、最初にマスターノードを生成し、次にスレーブノードを生成する必要があります。この場合、statefulset を使用する方が適切です。

よく使用されるコントローラーの種類は他にもいくつかありますが、これについては次回詳しく説明します。ここでは、「コントローラー」の概念だけを知っておく必要があります。

02 ラベルのコンセプト

前回の記事では、k8s の Pod の yaml ファイル内のいくつかの重要なフィールドについて説明しました。今日は、Pod の別の属性である Label について見ていきます。

ラベルはラベルを意味し、その形式もキーと値の形式です。Pod、Node、RC などを含むがこれらに限定されない、k8s クラスター内のオブジェクトに添付できます。リソース オブジェクトとラベル間のバインディング関係は、1 対 1 または多対 1 にすることができます。異なるラベルを使用して、リソースをグループで管理できます。

リソースにラベルを付けた後、次のようにラベル セレクターを使用してスケジュールするリソースを選択できます。

apiバージョン: vl
種類: ポッド
メタデータ:
    名前: myweb
    ラベル:
       アプリ: MySQL

上記の例では Pod を定義しており、そのラベルは app=mysql です。

次に、「コントローラー」を定義し、コントローラー内のラベル セレクターを使用して app=mysql の Pod を選択し、次のようにこの Pod のコピーを 2 つクラスター内に保持します。

apiバージョン: vl
種類: レプリケーションコントローラ
メタデータ:
    名前: myweb
仕様:
    レプリカ:2
    セレクタ:
        アプリ: MySQL
    テンプレート:
        xxxx さん

Selector の新しいバージョンでは、主に次のパラメータに基づいて、より詳細なフィルタリング条件を指定することもできます。

apiバージョン: vl
種類: レプリケーションコントローラ
メタデータ:
    名前: myweb
仕様:
    レプリカ:1
    セレクタ:
       マッチラベル:
         アプリ: myweb
       一致表現:
        - {キー: aaa、パラメータ: In、値: [mysql-slave]}
        - {キー: bbb、演算子: Notin、値: [mysql-master)}
    テンプレート:
        xxxx さん

1 つのパラメータは matchLabels であり、その後にキーと値の形式で複数のラベル条件を続けることができます。

もう 1 つのパラメータは matchExpression で、配列を指定して条件演算と組み合わせることができます。上記の例では、aaa パラメータを持つポッドは mysql-slave にありますが、bbb パラメータは mysql-master にないことを意味します。

これら2つのパラメータが同時に出現した場合、それらは自動的にAND演算され、その共通部分がポッドをフィルタリングするための最終的なフィルタ条件として使用されます。

タグを使用すると、「コントローラ」が制御対象オブジェクトを選択する際の柔軟性と利便性が向上することがわかります。

上記はKubernetesコントローラーとラベルの詳細についての簡単な分析です。Kubernetesコントローラーとラベルの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • K8Sの5つのコントローラーの紹介と使用
  • Pandas 時系列リサンプリング法におけるクローズドとラベルの役割の詳細な説明
  • Kubernetes の特殊属性ラベルの威力

<<:  CSSメディアクエリのアスペクト比を小さくする方法

>>:  JS でパブリッシュ サブスクライブ モデルを作成する

推薦する

デザインのヒント: きっと気に入っていただけると思います

<br />このタイトルを見ると、見覚えがあるかもしれません。多くのウェブサイトが同様の...

スタイルを書く際の背景色宣言の重要性

タイトルの通り、ページを修正すると以下のような状況が発生する可能性があります。現在、古いページを改修...

MySQL ステートメントを使用した簡単な追加、削除、変更、クエリ操作の例

この記事では、例を使用して、MySQL ステートメントを使用して、単純な追加、削除、変更、およびクエ...

クラウド決済を実装するWeChatミニプログラムについて

目次1. はじめに2. 思考分析3. クラウド決済のケーススタディ1. クラウド機能1-1. 認証不...

Linux環境でOpenSSL証明書を生成する

1. 環境: CentOS7、OpenSSL1.1.1k。 2. コンセプト:ルート証明書: サーバ...

クリックイメージ反転効果を実現するJavaScript

最近、顔コレクションに関するプロジェクトに取り組んでいましたが、フロントエンドモジュールを書いている...

3次元画像配置効果を実現する純粋なCSSのサンプルコード

1. 要素の幅/高さ/パディング/マージンのパーセンテージ基準要素の幅/高さ/パディング/マージンの...

SQL 結合クエリの内部結合、外部結合、クロス結合の違いの詳細な説明

データベースを使用するアプリケーションを開発する場合、必然的にユニオンクエリを使用する必要があります...

Dockerコンテナのいくつかの保存方法の詳細な説明

目次前面に書かれた複数のストレージマウント方法1.バインドマウント2. 巻数3.tmpfsマウントス...

ネイティブ JavaScript でショッピングカートを実装する

この記事では、ショッピングカートを実装するためのJavaScriptの具体的なコードを参考までに紹介...

CentOS 6.8 に MySQL 8.0.18 をインストールするチュートリアルの簡単な分析 (RPM 方式)

今日は、CentOS 6.8 サーバーに MySQL 8.0.18 をインストールする方法を記録しま...

docker compose を使用して FastDfs ファイル サーバーをインストールする詳細な例

ドッカーの作成 バージョン: '2' サービス: fastdfsトラッカー: ホスト...

フレームセットを使用して複雑なページレイアウトを実装するためのテクニックの概要

コードをコピーコードは次のとおりです。 <html> <!--混合フレームレイアウ...