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

推薦する

MySQL 演算子の具体的な使用法 (and、or、in、not)

目次1. はじめに2. 本文2.1 および演算子2.2 または演算子2.3 オペレーター2.4 no...

arcgis.js は、マップ本体の表示範囲を制御し、領域を超えた場合に自動的にバウンスするようにします (実装のアイデア)

目次背景効果アイデア背景少し前に、会社のプロジェクトで問題が発生しました。地図のベースマップ領域の範...

CSS スタイルを HTML 外部スタイルシートにインポートする方法

リンクインスタイルとは、すべてのスタイルを 1 つ以上の外部スタイルシート ファイルに配置することで...

MySQL 5.0.96 for Windows x86 32 ビット グリーン簡易版インストール チュートリアル

MySQL 5.0 は、いくつかの「高度な機能」があるため定番となっています。これは、Windows...

シンプルなカルーセルの最も完全なコード分析を実装するJavaScript(ES6オブジェクト指向)

この記事では、シンプルなカルーセルを実装するためのJavaScriptの具体的なコードを参考までに紹...

Docker、プレーヤー機能を備えたCMSオンデマンドシステムを構築

目次文章1. 機械を準備する2. Dockerをインストールする1. 依存パッケージをインストールす...

MySQLの自動増分IDについて知っておくべきこと

はじめに: MySQL を使用してテーブルを作成する場合、通常は自動インクリメント フィールド (A...

MySQL 8.0 のメモリ関連パラメータの概要

理論的には、MySQL によって使用されるメモリ = グローバル共有メモリ + max_connec...

MySQL SQL ステートメントが遅い場合の一般的な原因と解決策

1. インデックス不足または無効なインデックスによるクエリの遅延数千万件のデータを含むテーブルで、イ...

HTML減量 HTMLタグを合理化してWebページを作成する

HTML4 についてHTML (XHTML ではありません)、MIME タイプは text/html...

非常に便利なオープンソース Docker ツール 5 つを強くお勧めします

導入Docker コミュニティは、さまざまなユースケースを処理するのに役立つ多くのオープンソース ツ...

MySQL の結合テーブルにインデックスを作成する方法

この記事では、MySQL で 2 つのテーブルを関連付ける結合テーブルにインデックスを作成する方法を...

MySQL 5.7.16 ZIP パッケージのインストールと設定のチュートリアル

この記事では、MySQL 5.7.16 ZIPパッケージのインストールと設定のチュートリアルを参考ま...

JavaScript におけるブラウザ互換性の問題について簡単に説明します

ブラウザの互換性は、実際の開発では見落とされがちな最も重要な部分です。古いバージョンのブラウザの互換...

VueとElementUIを組み合わせたスキン変更ソリューション

目次前面に書かれた解決策 1: グローバル スタイル オーバーライドを使用する (フロントエンドに共...