Azure Kubernetes Service (AKS) クラスターでラベルを使用する

複数のノード プールがある場合、ノード プールの作成時にラベルを追加することができます。 Kubernetes ラベルによって、ノードのスケジュール ルールが処理されます。 いつでもノード プールにラベルを追加し、ノード プールのすべてのノードにそれらを適用できます。

この攻略ガイドでは、Azure Kubernetes Service (AKS) クラスターでラベルを使用する方法について説明します。

前提条件

Azure CLI バージョン 2.2.0 以降がインストールされて構成されている必要があります。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

ラベルを使用する AKS クラスターを作成する

  1. az aks create コマンドを使用してラベルを使用する AKS クラスターを作成し、--node-labels パラメーターを指定してラベルを設定します。 ラベルはキーと値のペアであり、有効な構文で指定されている必要があります。

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-count 2 \
        --nodepool-labels dept=IT costcenter=9000
    
  2. kubectl get nodes --show-labels コマンドを使用して、ラベルが設定されたことを確認します。

    kubectl get nodes --show-labels | grep -e "costcenter=9000" -e "dept=IT"
    

ラベルを使用するノード プールを作成する

  1. az aks nodepool add コマンドを使用してラベルを使用するノード プールを作成し、--name パラメーターの名前と --labels パラメーターのラベルを指定します。 ラベルはキーと値のペアであり、有効な構文で指定されている必要があります

    次のコマンド例では、ラベル dept=HRcostcenter=5000 を使用して labelnp という名前のノード プールを作成します。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name labelnp \
        --node-count 1 \
        --labels dept=HR costcenter=5000 \
        --no-wait
    

    az aks nodepool list コマンドからの次の出力例では、labelnp ノード プールによって、指定した nodeLabels でノードが "作成されている" ことが示されています。

    [
      {
        ...
        "count": 1,
        ...
        "name": "labelnp",
        "orchestratorVersion": "1.15.7",
        ...
        "provisioningState": "Creating",
        ...
        "nodeLabels":  {
          "costcenter": "5000",
          "dept": "HR"
        },
        ...
      },
     ...
    ]
    
  2. kubectl get nodes --show-labels コマンドを使用して、ラベルが設定されたことを確認します。

    kubectl get nodes --show-labels | grep -e "costcenter=5000" -e "dept=HR"
    

既存のノード プールでのラベルの更新

  1. az aks nodepool update コマンドを使用して、既存のノード プールのラベルを更新します。 既存のノード プールでラベルを更新すると、古いラベルが新しいラベルで上書きされます。 ラベルはキーと値のペアであり、有効な構文で指定されている必要があります。

    az aks nodepool update \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name labelnp \
        --labels dept=ACCT costcenter=6000 \
        --no-wait
    
  2. kubectl get nodes --show-labels コマンドを使用して、ラベルが設定されたことを確認します。

    kubectl get nodes --show-labels | grep -e "costcenter=6000" -e "dept=ACCT"
    

使用できないラベル

予約済みのシステム ラベル

2021-08-19 AKS リリース以降、AKS で AKS の予約済みラベルを変更することはできなくなりました。 これらのラベルを変更しようとすると、エラー メッセージが表示されます。

次のラベルは AKS 予約ラベルです。 "仮想ノードの使用" では、これらのラベルが仮想ノードでサポートされるシステム機能かどうかが示されています。 これらのシステム機能で変更される一部のプロパティは、ホストを変更する必要があるため、仮想ノードでは使用できません。

Label 例/オプション 仮想ノードの使用
kubernetes.azure.com/agentpool <エージェント プール名> nodepool1 同じ
kubernetes.io/arch amd64 runtime.GOARCH 該当なし
kubernetes.io/os <[OS Type](OS の種類)> Linux/Windows 同じ
node.kubernetes.io/instance-type <VM サイズ> Standard_NC6s_v3 仮想
topology.kubernetes.io/region <[Azure region](Azure リージョン)> westus2 同じ
topology.kubernetes.io/zone <Azure ゾーン> 0 同じ
kubernetes.azure.com/cluster <MC_RgName> MC_aks_myAKSCluster_westus2 同じ
kubernetes.azure.com/mode <mode> User または system User
kubernetes.azure.com/role エージェント エージェント 同じ
kubernetes.azure.com/scalesetpriority <VMSS 優先度> Spot または regular 該当なし
kubernetes.io/hostname <hostname> aks-nodepool-00000000-vmss000000 同じ
kubernetes.azure.com/storageprofile <OS ディスク ストレージ プロファイル> マネージド 該当なし
kubernetes.azure.com/storagetier <OS ディスク ストレージ レベル> Premium_LRS 該当なし
kubernetes.azure.com/instance-sku <SKU ファミリ> Standard_N 仮想
kubernetes.azure.com/node-image-version <VHD バージョン> AKSUbuntu-1804-2020.03.05 仮想ノードのバージョン
kubernetes.azure.com/subnet <ノードプール サブネット名> subnetName 仮想ノードのサブネット名
kubernetes.azure.com/vnet <ノードプールの VNet 名> vnetName 仮想ノード仮想ネットワーク
kubernetes.azure.com/ppg <ノードプールの PPG 名> ppgName 該当なし
kubernetes.azure.com/encrypted-set <ノードプールの encrypted-set 名> encrypted-set-name 該当なし
kubernetes.azure.com/accelerator <アクセラレータ> nvidia 該当なし
kubernetes.azure.com/fips_enabled <FIPS が有効かどうか> true 該当なし
kubernetes.azure.com/os-sku <os/sku> OS SKU の作成または更新 Linux
  • "同じ" は、ラベルの予想される値が標準ノード プールと仮想ノード プールで異ならないことを示しています。 仮想ノード ポッドでは基になる仮想マシン (VM) は公開されず、VM SKU の値は SKU Virtual に置き換えられます。
  • "仮想ノードのバージョン" とは、仮想 Kubelet-ACI コネクタ リリースの現在のバージョンを指します。
  • "仮想ノードのサブネット名" は、仮想ノード ポッドが Azure Container Instances (ACI) にデプロイされるサブネットの名前です。
  • "仮想ノード仮想ネットワーク" は、仮想ノード ポッドが ACI にデプロイされるサブネットを含む仮想ネットワークの名前です。

予約済みプレフィックス

次のプレフィックスは、AKS 予約済みのプレフィックスであり、どのノードにも使用できません。

  • kubernetes.azure.com/
  • kubernetes.io/

その他の予約済みプレフィックスの詳細については、Kubernetes の既知のラベル、注釈、テイントに関するページを参照してください。

非推奨のラベル

次のラベルは、Kubernetes v1.24 のリリースで非推奨になる予定です。 ラベル参照を推奨される代わりのものに変更する必要があります。

Label 推奨される代わりのもの メンテナ
failure-domain.beta.kubernetes.io/region topology.kubernetes.io/region Kubernetes
failure-domain.beta.kubernetes.io/zone topology.kubernetes.io/zone Kubernetes
beta.kubernetes.io/arch kubernetes.io/arch Kubernetes
beta.kubernetes.io/instance-type node.kubernetes.io/instance-type Kubernetes
beta.kubernetes.io/os kubernetes.io/os Kubernetes
node-role.kubernetes.io/agent* kubernetes.azure.com/role=agent Azure Kubernetes Service
kubernetes.io/role* kubernetes.azure.com/role=agent Azure Kubernetes Service
Agentpool* kubernetes.azure.com/agentpool Azure Kubernetes Service
Storageprofile* kubernetes.azure.com/storageprofile Azure Kubernetes Service
Storagetier* kubernetes.azure.com/storagetier Azure Kubernetes Service
Accelerator* kubernetes.azure.com/accelerator Azure Kubernetes Service

*新しく非推奨になりました。 詳しくは、リリース ノートのページをご覧ください。

次のステップ

Kubernetes のラベルのドキュメントで Kubernetes のラベルについて理解する。