Kubernets のラベル

1.ラベルの機能

 ラベルは kubernets のリソース オブジェクトではありません。さまざまなリソース オブジェクトに添付するために使用されるラベルです。これらのリソース オブジェクトには、ノード、ポッド、サービス、RC などが含まれます。多次元のリソース グループ化管理機能は、1 つ以上の異なるラベルを指定したリソース オブジェクトにバンドルすることで実現できるため、リソースの割り当て、スケジューリング、構成、展開、およびその他の管理タスクを柔軟かつ便利に実行できます。

2. ラベルの定義

 ラベルは、key=value のキーと値のペアであり、キーと値はユーザーによって指定されます。リソース オブジェクトは任意の数のラベルを定義でき、同じラベルを任意の数のリソース オブジェクトに追加できます。ラベルは通常、リソース オブジェクトの定義時に決定され、オブジェクトの作成後に動的に追加または削除することもできます。

3. ラベルの使い方

 リソース オブジェクトのラベルを定義することは、ラベルを与えることと同じです。その後、**ラベル セレクター** を使用して、特定のラベルを持つリソース オブジェクトをクエリおよびフィルターできます。

3.1 kubernets での LabelSelector の使用シナリオ

  • kube-controller プロセスは、リソース オブジェクト RC で定義されたラベル セレクターを介して監視対象の Pod コピーの数をフィルター処理するため、Pod のコピーの数は、期待どおりに設定された完全自動制御プロセスに常に準拠します。
  • kube-proxy プロセスは、サービスのラベル セレクターを通じて対応するポッドを選択し、各サービスのリクエスト転送ルーティング テーブルを対応するポッドに自動的に確立することで、サービスのインテリジェントな負荷分散メカニズムを実現します。
  • 特定のノードに特定のラベルを定義し、ポッド定義ファイルでラベル スケジューリング戦略 NodeSelector を使用することにより、kube-scheduler プロセスはポッド主導のスケジューリングの機能を実装できます。

3.2 LabelSelector 式

 ラベル セレクターは、SQL ステートメントの where クエリ条件と比較できます (name=nginx など)。このラベル セレクターがポッドに適用されると、select * from pod where pod's name =' などのステートメントと比較できます。 nginx」。現在、ラベル セレクター式には、等価ベースとセット ベースの 2 種類があります。

  1. 等価式を使用してタグを一致させます。具体的な例をいくつか示します。
  • name=redis-slave: ラベル name=redis-slave を持つすべてのリソース オブジェクトと一致します。
  • env!=production: ラベル env=production を持たないすべてのリソース オブジェクトに一致します。たとえば、env=test は、この条件を満たすラベルの 1 つです。
  1. セット操作クラス式を使用してタグを照合します。具体的な例をいくつか示します。
  • name in (redis-master, redis-slave): ラベル name=redis-master または name=redis-slave を持つすべてのリソース オブジェクトと一致します
  • name not in (php-frontend): name=php-frontend というラベルを持たないすべてのリソース オブジェクトと一致します。
    複数のラベル セレクター式を組み合わせることで、複雑な条件選択を実現できます。複数の式は「,」で区切ることができます。複数の条件の間には「AND」関係があります。つまり、複数の条件が同時に満たされます。

4. ラベル使用例

  1. Pod オブジェクトの場合、Label はそのメタデータで定義されます。
apiVersion: v1
kind: Pod
metadata: 
  name: myweb
  labels:
    app: myweb
  1. Deployment、StatefulSet、DaemonSet、Job などの他の管理オブジェクトは、セレクターでラベルを定義し、テンプレートでポッドを関連付けることができます。
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql 
spec:
  replicas: 1
  serviceName: mysql
  selector:
    matchLabels:
      app: mysql #符合目标的Pod拥有此标签
  template: #此模板创建pod的副本
    metadata:
      labels:
        app: mysql #pod副本拥有的标签,对应selector
  1. Deployment、StatefulSet、DaemonSet、および Service を管理するには、Selector フィールドを通じて Pod に関連付ける必要があるラベルを設定します。
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  selector:
    app: mysql
    ports:
    ......  
  1. matchLabels は、ラベルのセットを定義するために使用されます。これは、セレクターに直接書き込むのと同じ効果があります。matchExpressions は、そのセットに基づいてフィルター条件のセットを定義するために使用されます。使用可能な条件演算子には、In、NotIn、Exists、および DoesNotExist が含まれます。matchLabels と matchExpressions が同時に設定されている場合、2 つの条件セットは AND 関係になります。つまり、セレクターのフィルター処理を完了するには、すべての条件が同時に満たされる必要があります。
selector:
  matchLabels:
    app: myweb
  matchExpressions:
    - {
    
    key: tier,operation: In,values:{
    
    frontend}}
    - {
    
    key: environment,operation: NotIn,values:{
    
    dev}}

おすすめ

転載: blog.csdn.net/Ethin_l/article/details/131732695