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 でパブリッシュ サブスクライブ モデルを作成する

推薦する

Vue が学ぶべき知識ポイント: forEach() の使用

序文フロントエンド開発では、目的のコンテンツを取得するためにループをトラバースする必要がある状況に頻...

ウェブページ経由で jar パッケージを Nexus にアップロードする方法

Maven を使用してプロジェクトを管理する場合、jar パッケージをプライベート ウェアハウスにア...

Windows 2016 Server セキュリティ設定

目次システムアップデート構成Windows Update サーバーの変更自動更新を有効にして許可する...

MySQLクエリステートメントの簡単な操作例

この記事では、例を使用して、MySQL クエリ ステートメントの簡単な操作を説明します。ご参考までに...

Linux でファイルをあいまい検索するのに適したコマンドは何ですか?

1. はじめにこの記事では、主に Linux システムでコマンドライン ツールを使用してファイルを...

MySQL における IF()、IFNULL()、NULLIF()、および ISNULL() 関数の使用に関する詳細な説明

MySQL では、IF()、IFNULL()、NULLIF()、および ISNULL() 関数を使用...

Doubanウェブサイトのウェブサイトコンテンツに小さな変更を加える方法

<br />読みやすさはウェブサイトにとって非常に重要な部分であり、ウェブサイトの核心と...

MySQL 5.7.18 MSI インストール グラフィック チュートリアル

この記事では、参考までにMySQL 5.7.18 MSIインストールチュートリアルを紹介します。具体...

マージントップ崩壊現象とその具体的解決策

マージントップの崩壊とはmargin-top の崩壊は、CSS ボックス モデルで発生する現象です。...

div を下から上にスライドさせる CSS3 の例

1. まず、CSS3 のターゲット セレクターを使用し、a タグを使用して id セレクターを指定し...

JSON.parse と JSON.stringify の使い方の詳細な説明

目次JSON.パースJSON.parse 構文リバイバーパラメータJSON.parse の機能その他...

Linux で特定のユーザーまたはユーザー グループに対して SSH を有効または無効にする方法

会社の基準により、特定のユーザーだけに Linux システムへのアクセスを許可することができます。あ...

MySQLの3値ロジックとNULLの詳細な説明

目次NULLとは何か2種類のNULLなぜ「= NULL」ではなく「IS NULL」と書く必要があるの...

ネイティブJSが様々なスポーツの均一な動きを実現

この記事では、ネイティブ JS で実装された均一なモーションを紹介します。その効果は次のとおりです。...

フロントエンドインタビューに必要なホモロジーとクロスドメインの詳細な説明

序文ご存知のとおり、ブラウザの相同性戦略とクロスドメイン方式も、フロントエンド面接で頻繁に遭遇する問...