Kubernetes ノードに効果的にラベルを付ける方法

KubernetesBeginner
オンラインで実践に進む

はじめに

このチュートリアルでは、Kubernetes ノードラベルの基本について解説します。構造、一般的なユースケース、適用方法と管理方法などを含みます。ノードラベルを活用して、ワークロードのスケジューリング対象とする特定のノードを指定する方法を学び、Kubernetes クラスターのパフォーマンスとリソース利用率を最適化することができるようになります。

Kubernetes ノードラベルの理解

Kubernetes のノードラベルは、クラスター内のノードにメタデータを付与できる強力な機能です。これらのラベルは、ノードをグループ化したり、ワークロードのスケジューリング対象とする特定のノードを指定したりするなどの用途に使用できます。このセクションでは、Kubernetes ノードラベルの基本、構造、一般的なユースケースについて説明します。

Kubernetes ノードラベルの基本

Kubernetes のノードは、クラスターを構成する物理マシンまたは仮想マシンを表し、キーと値のペアの形式でラベルを割り当てることができます。これらのラベルは、ノードのハードウェア構成、場所、またはその他の関連するメタデータなど、さまざまな属性を表すことができます。

たとえば、高性能な CPU を持つことを示すために hardware=highcpu というラベルを付けたノードや、地理的な場所を指定するために region=us-east というラベルを付けたノードがあるかもしれません。

ラベルの構造と種類

Kubernetes のノードラベルは、特定の構造に従います。

key=value

key はラベルを識別する文字列で、value はそのラベルに関連付けられた値です。ラベルには、次のようなさまざまな種類があります。

  • ノード属性: ハードウェア、ソフトウェア、または場所など、物理的または仮想的なノードの特性を表すラベル。
  • アプリケーション固有のラベル: app=frontendenv=production など、実行するワークロードに基づいてノードをグループ化するラベル。
  • メタデータラベル: ノードの所有者やコストセンターなど、ノードに関する追加情報を提供するラベル。

ノードラベルの適用

Kubernetes API または kubectl コマンドラインツールを使用して、ノードにラベルを適用できます。たとえば、ノードに hardware=highcpu というラベルを追加するには、次のコマンドを実行します。

kubectl label nodes < node-name > hardware=highcpu

ラベルが適用されると、次のセクションで説明するように、ワークロードのスケジューリング対象とする特定のノードを指定するために使用できます。

ノードラベルの適用と管理

ここでは、Kubernetes ノードラベルの基本を理解したので、クラスター内でこれらのラベルを適用、更新、管理する方法を見ていきましょう。

ノードラベルの適用

kubectl label コマンドを使用して、ノードにラベルを適用できます。たとえば、node1 という名前のノードに hardware=highcpu というラベルを追加するには、次のコマンドを実行します。

kubectl label nodes node1 hardware=highcpu

このコマンドは、ノードのメタデータを更新して新しいラベルを含めます。

ノードラベルの更新

既存のラベルを更新するには、単に kubectl label コマンドを新しい値で再度実行します。たとえば、node1hardware ラベルを highcpu から highram に変更するには、次のコマンドを実行します。

kubectl label nodes node1 hardware=highram --overwrite

--overwrite フラグは、既存のラベルが更新されるようにし、新しいラベルが作成されないようにします。

ノードラベルの表示

-L フラグを付けた kubectl get nodes コマンドを使用して、ノードに適用されているラベルを表示できます。これにより、各ノードのラベルのキーと値のペアが表示されます。

kubectl get nodes -L hardware,region

これにより、クラスター内の各ノードの hardware および region ラベルを示すテーブルが出力されます。

ラベルの規約

ラベルを適用する際には、いくつかのベストプラクティスと規約に従うことが重要です。

  • ラベルの目的を反映する説明的なラベルキーを使用します。
  • ラベルの値に個人情報などの機密情報を使用しないようにします。
  • app.kubernetes.io/name のようなプレフィックスベースの命名規則をラベルに使用することを検討します。
  • パフォーマンスの問題を避けるために、ノードごとのラベルの数を制限します。

これらのガイドラインに従うことで、ノードラベルが整理され、意味があり、管理しやすくなります。

ワークロードスケジューリングでのノードラベルの活用

Kubernetes ノードラベルの主なユースケースの 1 つは、ラベルベースのワークロードスケジューリングを可能にすることです。ノードにラベルを関連付け、それらのラベルをポッドまたはデプロイメントの構成で使用することで、アプリケーションを最適なノードにデプロイできます。

ラベルによるノード選択

Kubernetes は、ワークロードスケジューリングのためにノードラベルを使用するいくつかの方法を提供しています。

  1. nodeSelector: ポッドまたはデプロイメントの仕様にあるこのフィールドを使用すると、ラベルのキーと値のペアのセットを指定できます。Kubernetes は、指定されたすべてのラベルに一致するノードにのみポッドをスケジューリングします。

    apiVersion: v1
    kind: Pod
    spec:
      nodeSelector:
        hardware: highcpu
        region: us-east
  2. nodeAffinity: このより高度な機能を使用すると、「必須」および「推奨」の条件を含む、より複雑なノード選択ルールを指定できます。

    apiVersion: v1
    kind: Pod
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: hardware
                    operator: In
                    values:
                      - highcpu
                      - highram
          preferredDuringSchedulingIgnoredDuringExecution:
            - weight: 1
              preference:
                matchExpressions:
                  - key: region
                    operator: In
                    values:
                      - us-east
                      - us-west

ラベル駆動型のデプロイメント

ノードラベルを活用することで、特定のノードグループを対象とした、より洗練されたデプロイメント戦略を作成できます。たとえば、「本番」ワークロード用にラベル付けされたノードのセットと、「開発」ワークロード用の別のセットがある場合があります。その後、ノードラベルに基づいて各環境を対象とする別々のデプロイメントを作成できます。

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: production-app
spec:
  selector:
    matchLabels:
      app: my-app
      env: production
  template:
    metadata:
      labels:
        app: my-app
        env: production
    spec:
      nodeSelector:
        env: production
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dev-app
spec:
  selector:
    matchLabels:
      app: my-app
      env: dev
  template:
    metadata:
      labels:
        app: my-app
        env: dev
    spec:
      nodeSelector:
        env: dev

ノードラベル管理のベストプラクティスに従い、ラベルベースのスケジューリングを活用することで、より柔軟で効率的な Kubernetes デプロイメント環境を構築できます。

まとめ

Kubernetes のノードラベルは、クラスター内のノードにメタデータを付与できる強力な機能です。ノードラベルの基本、適用と管理方法、およびワークロードスケジューリングでの活用方法を理解することで、Kubernetes インフラストラクチャを効果的に整理し、最適化することができます。このチュートリアルでは、Kubernetes ノードに効果的にラベルを付けるための知識とツールを提供しました。これにより、ワークロードをより適切に管理およびスケジューリングし、パフォーマンスとリソース効率を向上させることができます。