はじめに
このチュートリアルでは、Kubernetes ノードラベルの基本について解説します。構造、一般的なユースケース、適用方法と管理方法などを含みます。ノードラベルを活用して、ワークロードのスケジューリング対象とする特定のノードを指定する方法を学び、Kubernetes クラスターのパフォーマンスとリソース利用率を最適化することができるようになります。
このチュートリアルでは、Kubernetes ノードラベルの基本について解説します。構造、一般的なユースケース、適用方法と管理方法などを含みます。ノードラベルを活用して、ワークロードのスケジューリング対象とする特定のノードを指定する方法を学び、Kubernetes クラスターのパフォーマンスとリソース利用率を最適化することができるようになります。
Kubernetes のノードラベルは、クラスター内のノードにメタデータを付与できる強力な機能です。これらのラベルは、ノードをグループ化したり、ワークロードのスケジューリング対象とする特定のノードを指定したりするなどの用途に使用できます。このセクションでは、Kubernetes ノードラベルの基本、構造、一般的なユースケースについて説明します。
Kubernetes のノードは、クラスターを構成する物理マシンまたは仮想マシンを表し、キーと値のペアの形式でラベルを割り当てることができます。これらのラベルは、ノードのハードウェア構成、場所、またはその他の関連するメタデータなど、さまざまな属性を表すことができます。
たとえば、高性能な CPU を持つことを示すために hardware=highcpu というラベルを付けたノードや、地理的な場所を指定するために region=us-east というラベルを付けたノードがあるかもしれません。
Kubernetes のノードラベルは、特定の構造に従います。
key=value
key はラベルを識別する文字列で、value はそのラベルに関連付けられた値です。ラベルには、次のようなさまざまな種類があります。
app=frontend や env=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 コマンドを新しい値で再度実行します。たとえば、node1 の hardware ラベルを 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 は、ワークロードスケジューリングのためにノードラベルを使用するいくつかの方法を提供しています。
nodeSelector: ポッドまたはデプロイメントの仕様にあるこのフィールドを使用すると、ラベルのキーと値のペアのセットを指定できます。Kubernetes は、指定されたすべてのラベルに一致するノードにのみポッドをスケジューリングします。
apiVersion: v1
kind: Pod
spec:
nodeSelector:
hardware: highcpu
region: us-east
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 ノードに効果的にラベルを付けるための知識とツールを提供しました。これにより、ワークロードをより適切に管理およびスケジューリングし、パフォーマンスとリソース効率を向上させることができます。