この記事では、Azure IoT Operations インスタンスを学習、調査、またはトラブルシューティングするときに一般的に使用されるいくつかのツールの使用方法について説明します。 これらのツールは、Azure portal、Azure CLI、操作エクスペリエンス Web UI、監視リソースによって提供される機能に加えて提供されます。
Kubernetes のツール
Azure IoT Operations のコンポーネントは、標準の Kubernetes クラスターで実行されます。 クラスターの操作や管理を行うには、CLI ツールの kubectl
および k9s
を使用できます。
kubectl
kubectl
は、Kubernetes クラスターを管理するための Kubernetes コマンドライン ツールです。 これには多くの機能があります。詳細については、公式の Kubernetes ドキュメントを参照してください。 この記事では、実行中のポッドの一覧表示やログの表示など、Azure IoT Operations を操作する際の kubectl
の一般的な用途について説明します。
インスタンスに接続するように kubectl
を構成する
記事「Azure Arc 対応 Kubernetes クラスターを準備する」では、Kubernetes クラスターをデプロイしたものと同じマシンで kubectl
コマンドを実行するときに k3s クラスターに接続するように kubectl
を構成する方法について説明しています。
ヒント
新しいターミナル ウィンドウを開くたびに export KUBECONFIG=~/.kube/config
環境変数を設定する必要がないように、.bashrc または .bash_profile ファイルに KUBECONFIG
コマンドを追加します。
Azure IoT Operations インスタンスを Arc 対応 AKS-EE にデプロイした場合、kubectl
構成は自動的に設定されます。
kubectl
コマンドは、クラスターをデプロイしたマシン上でコマンド ラインから直接実行できます。
Arc 対応クラスターをデプロイしたマシンではなく、ローカルのクライアント マシンから kubectl
コマンドを実行することもできます。
1 回限りの手順として、SSH を使用して、クラスターをデプロイしたマシンに接続し、次のコマンドを実行します。 必ず <your-name>
を独自の名前に置き換えてください。
kubectl create serviceaccount <your-name> -n default
kubectl create clusterrolebinding <your-name>-binding --clusterrole cluster-admin --serviceaccount default:<your-name>
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: <your-name>-secret
annotations:
kubernetes.io/service-account.name: <your-name>
type: kubernetes.io/service-account-token
EOF
TOKEN=$(kubectl get secret <your-name>-secret -o jsonpath='{$.data.token}' | base64 -d | sed 's/$/\n/g')
echo $TOKEN
トークンを書き留めておきます。 このトークンは、クライアント マシンで kubectl
コマンドを実行する際、認証を行うために使用します。 これで、Kubernetes クラスターを実行しているマシンから切断できるようになりました。
クライアント マシンで kubectl
を使用してクラスターに接続するには、次の 2 つのターミナルを開きます。
最初のターミナルで、次のコマンドを実行して、クラスターに接続するようにプロキシを構成します。 次の 3 つのプレースホルダーの値を必ず置き換えてください。
az connectedk8s proxy -n <your-arc-enabled-cluster-name> -g <your-arc-enabled-cluster-resource-group> --token <token-from-previous-step>
2 番目のターミナルで
kubectl
コマンドを実行している間、このターミナルを開いたままにしておきます。2 番目のターミナルでは、リモート クラスターに対して
kubectl
コマンドを実行できます。 たとえば、azure-iot-operations
名前空間内のポッドの一覧を表示するには、次のコマンドを実行します。kubectl get pods -n azure-iot-operations
ヒント
このターミナルで
k9s
構成を使用するコマンド (kubectl
など) を実行することもできます。kubectl
コンテキストは、最初のターミナルを閉じるまでリモート クラスターに設定されたままです。
詳細については、「クラスター接続を使用して Azure Arc 対応 Kubernetes クラスターに安全に接続する」を参照してください。
名前空間
既定では、Arc および Azure IoT Operations は、Kubernetes クラスター内の次の名前空間を使用します。
-
azure-iot-operations
(Azure IoT Operations のコンポーネント用)。 -
azure-arc
(Azure Arc 対応 Kubernetes のコンポーネント用)
ヒント
クラスター内のすべての名前空間を表示するには、コマンド kubectl get namespaces
を実行します。
一般的な kubectl
コマンド
azure-iot-operations
名前空間で実行されているすべてのポッドを表示するには、次のコマンドを実行します。
kubectl get pods -n azure-iot-operations
出力は次の例のようになります。
NAME READY STATUS RESTARTS AGE
adr-schema-registry-0 2/2 Running 0 19m
adr-schema-registry-1 2/2 Running 0 19m
aio-akri-agent-777477bc68-72lrg 1/1 Running 7 (83m ago) 21d
aio-broker-authentication-0 1/1 Running 7 (83m ago) 21d
aio-broker-backend-1-0 1/1 Running 11 (82m ago) 21d
aio-broker-backend-1-1 1/1 Running 7 (83m ago) 21d
aio-broker-diagnostics-probe-0 1/1 Running 11 (83m ago) 21d
aio-broker-diagnostics-service-0 1/1 Running 7 (83m ago) 21d
aio-broker-fluent-bit-6bkf2 1/1 Running 0 16m
aio-broker-frontend-0 1/1 Running 12 (83m ago) 21d
aio-broker-health-manager-0 1/1 Running 14 (82m ago) 21d
aio-broker-operator-0 1/1 Running 7 (83m ago) 21d
aio-broker-upgrade-status-job-1.0.4-bwlcc 0/1 Completed 0 77m
aio-broker-webhook-admission-65d67f8ddc-jct9j 1/1 Running 0 82m
aio-dataflow-admission-webhook-84dd44c8bd-6pw58 1/1 Running 7 (83m ago) 21d
aio-dataflow-operator-0 1/1 Running 14 (83m ago) 21d
aio-dataflow-upgrade-status-job-1.0.5-msmf4 0/1 Completed 0 77m
aio-opc-asset-discovery-54649d46cf-kb6qs 1/1 Running 2 (83m ago) 17d
aio-opc-media-1-785748ff6c-qkhgl 1/1 Running 1 (83m ago) 14d
aio-opc-opc.tcp-1-858b9ff67-dxwvb 1/1 Running 4 (80m ago) 17d
aio-opc-supervisor-5d6b9bfc49-fgt7d 1/1 Running 2 (83m ago) 17d
aio-operator-7b9b585dc6-bvfpd 2/2 Running 0 19m
aio-usage-28946280-f42k8 0/1 Completed 0 14d
aio-usage-28946340-45grx 0/1 Completed 0 14d
aio-usage-28946400-znn7v 0/1 Completed 0 13d
aio-usage-28946460-nrw4z 0/1 Completed 0 13d
aio-usage-28966500-mrcmf 0/1 Completed 0 55m
aio-opc-opc.tcp-1-858b9ff67-dxwvb などの特定のポッドのログを表示するには、次のコマンドを実行します。
kubectl logs aio-opc-opc.tcp-1-858b9ff67-dxwvb -n azure-iot-operations
aio-opc-opc.tcp-1-858b9ff67-dxwvb などの特定のポッドの人間が判読できる説明を表示するには、次のコマンドを実行します。
kubectl describe pod aio-opc-opc.tcp-1-858b9ff67-dxwvb -n azure-iot-operations
一部の場所では、Azure IoT Operations のドキュメントで kubectl apply コマンドを使用して Kubernetes マニフェスト ファイルを適用し、クラスターの構成を変更します。
k9s
k9s ユーティリティは、Kubernetes クラスターを管理するためのターミナルベースの UI を提供します。 これは、kubectl
構成を使用してクラスターに接続し、クラスターと対話するための視覚的な方法を提供します。 既定のビューには、クラスター内で現在実行されているすべてのポッドの一覧が表示されます。
Azure IoT Operations を使用している場合、ビューをフィルター処理して、azure-iot-operations
名前空間内のポッドのみを表示できます。
:
を入力してコマンド パネルを開き、「ns
」と入力し、Enter キーを押します。名前空間の一覧で、
azure-iot-operations
を選択し、Enter キーを押します。ポッドの一覧には、azure-iot-operations 名前空間内のポッドのみが表示されるようになりました。
ヒント
これで、数値キーを使用してフィルターを適用できるようになりました。 前のスクリーンショットでは、0 はすべてのポッドを示し、1 は、azure-iot-operations 名前空間内のポッドのみを示します。
ショートカット キーを使用して、ポッドに関する情報を表示できます。 次に例を示します。
ポッドの説明を表示するには、一覧でポッドを選択し、d キーを押します。
ポッドのログを表示するには、一覧でポッドを選択し、l キーを押します。
ヒント
数値キーを使用して、ログ ファイル内を移動できます。
クラスター内のポッド以外のカスタム リソースの種類を表示するには、次の手順を実行します。
Ctrl + a キーを押して、カスタム リソースの種類の一覧を表示します。
カスタム リソースの種類 (たとえば、assetendpointprofiles など) を選択し、Enter キーを押します。
ヒント
カスタム リソースの種類を名前で検索するには、/ を入力し、検索する種類の名前の入力を開始します。
カスタム リソースを選択し、使用可能な操作のいずれかを選択します。 たとえば、資産エンドポイント プロファイルを選択し、y キーを押すと、その YAML 定義を表示できます。 一部のリソースでは、構成を編集できます。
次の表では、Azure IoT Operations で使用できるカスタム リソースの種類の一部について説明します。
カスタム リソースの種類 | 説明 |
---|---|
assetendpointprofiles |
資産エンドポイントの構成を表します。 |
assets |
資産の構成を表します。 |
brokers 、brokerlisters 、brokerauthentications , brokerauthorizations |
MQTT ブローカーの構成を表します。 |
dataflows 、dataflowendpoints 、dataflowprofiles |
データ フローの構成を表します。 |
secrets 、secretsyncs 、secretproviderclasses |
シークレットとシークレット管理の構成を表します。 |
MQTT ツール
MQTT ブローカーについて学習する場合や、Azure IoT Operations インスタンスで MQTT ブローカーをテストする場合は、MQTT クライアント ツールを使用してブローカーを操作できます。 ただし、セキュリティ上の理由から、Azure IoT Operations では、MQTT ブローカーをクラスターの外部に公開しません。 回避策として、次のオプションがあります。
注意事項
これら 3 つのアプローチは、開発およびテスト環境にのみ適しています。 どのような場合でも、運用環境では使用しないでください。
クラスター内の既定のリスナーに接続します。 このオプションでは既定の構成が使用され、追加の更新は必要ありません。 MQTT クライアント ツールの小さなセットに制限されます。
NodePort
サービスを使用して、MQTT ブローカーをクラスターの外部に公開します。 このオプションでは、MQTT ブローカーの構成を更新する必要があります。 特定のポートへの接続をサポートする任意の MQTT クライアント ツールを使用できます。LoadBalancer
サービスを使用して、MQTT ブローカーをクラスターの外部に公開します。 このオプションでは、MQTT ブローカーの構成を更新する必要があります。 特定のポートへの接続をサポートする任意の MQTT クライアント ツールを使用できます。
クラスター内の既定のリスナーに接続する
クラスター内の既定のリスナーに接続するには、CLI ベースの MQTT クライアント ツール (mosquitto_sub
、mosquitto_pub
など) を実行するポッドをデプロイできます。 次のコマンドは、このようなポッドをクラスターにデプロイします。
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml
ポッドが実行されたら、ポッド内のシェルに接続できます。
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
このセルを使用して、MQTT ブローカーを操作する mosquitto_sub
や mosquitto_pub
などのコマンドを実行します。 たとえば、azure-iot-operations/data
トピックの下のすべてのトピックをサブスクライブするには、次のコマンドを実行します。
mosquitto_sub --host aio-broker --port 18883 --topic "azure-iot-operations/data/#" --verbose --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
このコマンドで、証明書ファイルとトークンがポッドのファイル システムからどのように読み込まれるかに注意してください。
mqtt-client.yaml
マニフェスト ファイルは、これらのファイルをポッドにマウントします。
azure-iot-operations/data/thermostat
トピックから単一のメッセージを受信するには、-C 1
オプションを追加します。
mosquitto_sub --host aio-broker --port 18883 --topic "azure-iot-operations/data/thermostat" -C 1 --verbose --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
メッセージ内の MQTT v5 ユーザー プロパティを表示するには、-F %P
オプションを使用します。
mosquitto_sub --host aio-broker --port 18883 --topic "azure-iot-operations/data/thermostat" -V mqttv5 -F %P --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
メッセージを azure-iot-operations/data/valve
トピックに公開するには、次のコマンドを実行します。
mosquitto_pub --host aio-broker --port 18883 --topic "azure-iot-operations/data/valve" --message "open:15%" --id "controller" --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
MQTT クライアント ツール ポッドを使い終えたら、それをクラスターから削除できます。
kubectl delete -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml
この構成の詳細については、「クラスター内の既定のリスナーに接続する」を参照してください。
NodePort
または LoadBalancer
サービスを使用する
MQTT ブローカーをクラスターの外部に公開するようにノード ポートまたはロード バランサー サービスを構成する手順に従う場合、特定のポートへの接続をサポートする任意の MQTT クライアント ツールを使用できます。 以下の例では、サービスが認証、承認、または TLS なしで構成されていることを前提とします。 これで、お気に入りの MQTT クライアント ツールを使用して、ポート 1883 (ロード バランサーを使用している場合)、または構成されたポート (ノード ポートを使用している場合) で MQTT ブローカーに接続できるようになりました。
たとえば、Kubernetes クラスターが実行されているマシンでオープンソースの mqttui ツールを実行するには、次のコマンドを使用します。
mqttui --broker mqtt://localhost:1883
ヒント
ロード バランサーを構成し、ポート 1883 がホスト コンピューターのパブリック IP で開いている場合、コマンド mqttui --broker mqtt://<cluster-machine-public-ip>:1883
を使用して、別のマシンから MQTT ブローカーに接続できます。
mqttui
ツールを使用すると、トピックのサブスクライブ、メッセージの公開、ブローカーを経由しているメッセージの表示を行うことができます。
azure-iot-operations/data/thermostat
などの特定のトピックのメッセージを表示するには、次のコマンドを使用します。
mqttui --broker mqtt://localhost:1883 azure-iot-operations/data/thermostat
メッセージを azure-iot-operations/data/valve
トピックに公開するには、次のコマンドを使用します。
mqttui publish --broker mqtt://localhost:1883 azure-iot-operations/data/valve open:15%
Kubernetes クラスターが実行されているマシンでオープンソースの MQTT Explorer ツールを実行するには、次の構成を使用します。
ローカル コンピューターでオープンソースの MQTT Explorer を実行して、Kubernetes クラスターが実行されているマシンに接続するには、次の構成を使用します。
MQTT Explorer に少なくとも #
トピックが構成されていることを確認します。
接続すると、サブスクライブしたトピックのメッセージを表示したり、メッセージを公開したりすることができます。