Azure IoT Operations 用のクラスターを準備する

Azure Arc対応 Kubernetes クラスターは、Azure IoT Operationsをデプロイするための前提条件です。 この記事では、そのクラスタの準備方法を説明し、Ubuntu、Windows、Azure Local、vSphere Kubernetes Service(VKS)に関するガイダンスも紹介します。

Azure IoT Operationsをすばやくデプロイし、テスト環境でサンプル ワークロードを実行する場合は、「Quickstart: GitHub Codespaces で K3s を使用してAzure IoT Operationsを実行する」を参照してください。

前提条件

マルチノード展開には、UbuntuのK3s、Azure LocalのAKS、またはvSphere Kubernetes Service(VKS)を使いましょう。 Windows版AKS Edge Essentialsはシングルノード展開のみをサポートします。

Azure Arc対応 Kubernetes クラスターを準備するには、次のものが必要です。

  • Owner ロール、または Contributor ロールと User Access Administrator ロールを組み合わせたAzure サブスクリプション。 アクセス レベルを確認するには、サブスクリプションに移動し、Azure ポータルの左側にある Access control (IAM) を選択し、 [マイ アクセスの表示を選択します。 Azureサブスクリプションをお持ちでない場合は、開始する前に無料を作成してください。

  • 開発用コンピューターにインストールされているAzure CLI。 connectedk8s拡張の最低必要バージョンについては、Available Azure CLI extensionsを確認してください。 az --version を使用してバージョンを確認し、必要に応じて az upgrade を使用して更新します。 詳細については、「 Azure CLI のインストール」を参照してください。

  • Azure CLI 用の connectedk8s 拡張機能。 次のコマンドを使用して、拡張機能を追加するか、それを最新バージョンに更新します。

    az extension add --upgrade --name connectedk8s
    
  • Azure リソース グループ。 リソース グループごとにサポートされているAzure IoT Operations インスタンスは 1 つだけです。 新しいリソース グループを作成するには、az group create コマンドを使用します。 現在サポートされているAzureリージョンの一覧については、「Supported リージョン」を参照してください。

    az group create --location $LOCATION --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID
    

この記事のAzure CLI例は環境変数を使っており、各値を一度設定してからコマンドをコピー&ペーストできます as-is。 クイックスタートのAzure IoT Operations Codespaces環境を使っている場合、これらの変数はすでに設定済みなので、このステップを省略できます。 そうでなければ、コマンドを実行する前にシェル内で以下の環境変数を設定してください。

以下のスクリプトは、最も一般的に使われる環境変数を設定します。

環境変数 Description
SUBSCRIPTION_ID Azure IoT Operationsインスタンスを含むサブスクリプションのIDです。
RESOURCE_GROUP あなたのAzure IoT Operationsインスタンスを含むリソースグループの名前です。
AIO_INSTANCE_NAME あなたのAzure IoT Operationsインスタンスの名前です。 インスタンスを挙げるには、 az iot ops list -o tableを実行してください。
CLUSTER_NAME あなたのインスタンスをホストしているAzure Arc対応のKubernetesクラスターの名前です。
LOCATION 例えばeastusなど、新しい資源を活用するためのAzure地域。
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>

この記事で使っている変数を設定するだけで十分です。 この記事では、選択したリソース名に追加の環境変数を使う場合があります。 記事では、導入された場所の位置をどう設定するか説明しています。

クラスターを作成して Arc 対応にする

このセクションでは、Ubuntu、Windows、Azure Local、vSphere Kubernetes Service(VKS)の検証済み環境でクラスタを作成する手順を提供します。

Ubuntu 上で K3s Kubernetes クラスターを準備するには:

  1. 単一ノードまたはマルチノード K3s クラスターを作成します。 例については、K3s クイックスタート ガイドまたは K3s 関連プロジェクトを参照してください。

  2. K3sが kubectlインストールされているか確認してください。 そうでない場合は、手順に従って Linux に kubectl をインストールします

    kubectl version --client
    
  3. 手順に従って Helm をインストールします

  4. .kube/configでK3s設定YAMLファイルを作成します:

    mkdir ~/.kube
    sudo KUBECONFIG=~/.kube/config:/etc/rancher/k3s/k3s.yaml kubectl config view --flatten > ~/.kube/merged
    mv ~/.kube/merged ~/.kube/config
    chmod  0600 ~/.kube/config
    export KUBECONFIG=~/.kube/config
    #switch to k3s context
    kubectl config use-context default
    sudo chmod 644 /etc/rancher/k3s/k3s.yaml
    
  5. 次のコマンドを実行して、ユーザー ウォッチ/インスタンスの制限を増やします。

    echo fs.inotify.max_user_instances=8192 | sudo tee -a /etc/sysctl.conf
    echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
    
    sudo sysctl -p
    
  6. パフォーマンスを向上させるために、ファイル記述子の制限を増やします。

    echo fs.file-max = 100000 | sudo tee -a /etc/sysctl.conf
    
    sudo sysctl -p
    

K3sクラスターのArc有効化

クラスターをAzure Arcに接続して、リモートで管理できるようにしましょう。

  1. クラスタにkubectlアクセスできるマシンから、Azureサブスクリプションに必要な役割を持つMicrosoft EntraユーザーアカウントでサインインしてAzure CLIしてください:

    az login
    

    もし「 あなたのデバイスはリソースにアクセスするために管理が必要」というエラーが出たら、もう一度 az login を実行し、ブラウザを使ってインタラクティブにサインインするようにしてください。

  2. サインイン後、Azure CLIにはすべてのサブスクリプションが表示され、アスタリスク*でデフォルトのサブスクリプションが表示されます。 既定のサブスクリプションで続行するには、Enter を選択します。 それ以外の場合は、使用するAzureサブスクリプションの番号を入力します。

  3. サブスクリプションに必要なリソース プロバイダーを登録します。

    このステップはサブスクリプションごとに一度だけ実行すればいいです。 リソース提供者を登録するには、 /register/action 操作を行う許可が必要であり、サブスクリプションの貢献者および所有者の役割にはその権限が含まれます。 詳細については、「Azure リソース プロバイダーと種類を参照してください。

    az provider register -n "Microsoft.ExtendedLocation"
    az provider register -n "Microsoft.Kubernetes"
    az provider register -n "Microsoft.KubernetesConfiguration"
    az provider register -n "Microsoft.IoTOperations"
    az provider register -n "Microsoft.DeviceRegistry"
    az provider register -n "Microsoft.SecretSyncController"
    
  4. az connectedk8s connect コマンドを使用して、Kubernetes クラスターを Arc 対応にし、Azure リソース グループの一部として管理します。

    az connectedk8s connect --name $CLUSTER_NAME -l $LOCATION --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID --enable-oidc-issuer --enable-workload-identity --disable-auto-upgrade
    

    依存関係として使用Azure IoT Operations Azure Arcおよびシステム Arc 拡張機能に対する計画外の更新を防ぐために、このコマンドは自動アップグレードを無効にします。 代わりに、必要に応じてエージェントを手動でアップグレードします。

    重要

    環境でプロキシ サーバーまたは Azure Arc ゲートウェイを使用している場合は、プロキシ情報を使用して az connectedk8s connect コマンドを変更します。

    1. 送信プロキシ サーバーを使用して接続するか、Azure Arc ゲートウェイを使用して Kubernetes クラスターを Azure Arc にオンボードするの指示に従ってください。
    2. 169.254.169.254 コマンドの --proxy-skip-range パラメーターに az connectedk8s connect を追加します。 Azure Device Registry は、このローカル エンドポイントを使用して、承認用のアクセス トークンを取得します。

    Azure IoT Operationsは、信頼された証明書を必要とするプロキシ サーバーをサポートしていません。

  5. クラスターの発行者の URL を取得します。

    az connectedk8s show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query oidcIssuerProfile.issuerUrl --output tsv
    

    このコマンドの出力を保存して、次の手順で使用します。

  6. K3sの設定ファイルを作成します。

    sudo nano /etc/rancher/k3s/config.yaml
    
  7. config.yaml ファイルに次の内容を追加し、<SERVICE_ACCOUNT_ISSUER> プレースホルダーをクラスターの発行者の URL で置き換えます。

    kube-apiserver-arg:
     - service-account-issuer=<SERVICE_ACCOUNT_ISSUER>
     - service-account-max-token-expiration=24h
    
  8. ファイルを保存し、nano エディターを終了します。

  9. Arc クラスターで Azure Arc サービスのカスタムロケーションを有効にする準備として、まずカスタムロケーションオブジェクトのIDを取得し、環境変数OBJECT_IDとして保存します。 コマンドを正常に実行するには、Microsoft Entraのユーザーアカウント(サービスプリンシパルではなく)でAzure CLIにサインインする必要があります。 GUID 値を変更せずに、記述されているとおりに次のコマンドを実行します。

    export OBJECT_ID=$(az ad sp show --id bc313c14-388c-4e7d-a58e-70017303ee3b --query id -o tsv)
    

    "'custom-locations' アプリの oid をフェッチできません。 機能を有効にせずに続行します。 操作を完了するための特権が不十分です。サービス プリンシパルには、カスタムの場所のオブジェクト ID を取得するために必要なアクセス許可がない可能性があります。 前提条件を満たすMicrosoft EntraユーザーアカウントでAzure CLIにサインインしてください。 詳細については、カスタムロケーションの作成と管理に関するページを参照してください。

  10. az connectedk8s enable-features コマンドを使用して、Arc クラスターでカスタムの場所フィーチャを有効にします。 このコマンドは、前のステップで保存したOBJECT_ID環境変数を使ってcustom-locations-oidパラメータの値を設定します。 Kubernetes クラスターをデプロイしたマシン上で次のコマンドを実行します。

    az connectedk8s enable-features -n $CLUSTER_NAME -g $RESOURCE_GROUP --custom-locations-oid $OBJECT_ID --features cluster-connect custom-locations
    
  11. K3s を再起動します。

    systemctl restart k3s
    

Azure Arc によって有効化された Azure Container Storage を構成する

データ フロー ローカル ストレージ エンドポイントやメディア コネクタなどの機能では、必要に応じて、Azure Arc (ACSA) によって有効にされた Azure Container Storage を使用して、ローカル データをクラウドに同期します。 ACSAはAzure IoT Operationsの一部としてインストールされていないため、別途インストールする必要があります。

KubernetesクラスタにACSAをインストールする方法を学びたい方:

次のステップ

Azure Arc対応の Kubernetes クラスターが作成されたので、Azure IoT Operationsデプロイできます。