Azure IoT İşlemleri örneğinizle ilgili sorunları gidermeye yönelik ipuçları ve araçlar

Bu makalede, Azure IoT İşlemleri örneklerinizi öğrenirken, keşfederken veya sorun giderirken bazı yaygın araçların nasıl kullanılacağı açıklanır. Bu araçlar Azure portalı, Azure CLI, işlem deneyimi web kullanıcı arabirimi ve observability kaynakları tarafından sağlanan özelliklere ek olarak sunulur.

Kubernetes araçları

Azure IoT İşlemleri bileşenleri standart bir Kubernetes kümesinde çalışır. Kümenizle etkileşime geçmek ve yönetmek için kubectl ve k9s CLI araçlarını kullanabilirsiniz.

Kubernetes dağıtım bildirimlerini kullanarak bileşenleri yönetme

Önemli

Kubernetes dağıtım bildirimlerinin kullanımı üretim ortamlarında desteklenmez ve yalnızca hata ayıklama ve test için kullanılmalıdır.

Genel olarak, Azure IoT İşlemleri, Azure Arc platformunu kullanarak yapılandırmayı Azure Resource Manager (ARM) ve Azure portalı, Bicep ve Azure CLI gibi ön uç araçlar aracılığıyla yönetebileceğiniz hibrit bir bulut deneyimi sağlar.

Ancak, bir hata ayıklama veya test ortamında YAML Kubernetes dağıtım bildirimlerini kullanarak Azure IoT İşlemleri bileşenlerini yönetebilirsiniz. Bu, Azure IoT İşlemleri bileşenlerini yönetmek için kubectl gibi araçları kullanabileceğiniz anlamına gelir. Bu özelliğin bazı sınırlamaları vardır:

  • az iot ops enable-rsync komutunu kullanarak Azure IoT İşlemleri kaynak eşitlemeyi etkinleştirmediğiniz sürece, Kubernetes dağıtım bildirimleri kullanılarak kaynaklarda yapılan değişiklikler Azure ile eşitlenmez. Kaynak eşitleme hakkında daha fazla bilgi edinmek için bkz. Kaynak eşitleme.
  • Kaynak eşitleme etkinleştirilse bile, Kubernetes dağıtım bildirimleri kullanılarak oluşturulan yepyeni kaynaklar Azure eşitlenmez. Yalnızca mevcut kaynaklarda yapılan değişiklikler eşitlenir.

Önemli

Üretimde bulut her zaman gerçeğin kaynağıdır. İşlem deneyimini, Azure portalını, Azure CLI veya ARM/Bicep şablonlarını kullanarak her zaman Azure aracılığıyla kaynak oluşturun ve değiştirin. Kümede doğrudan kaynak oluşturmak veya mevcut Kubernetes özel kaynaklarını düzenlemek, bulut ile kenar arasında senkronizasyon bozukluğuna yol açabilir ve üretim ortamlarında desteklenmez.

kubectl

kubectl , kümenizi yönetmeye yönelik Kubernetes komut satırı aracıdır. Resmi kubernetes belgelerinde öğrenebileceğiniz birçok özelliğe sahiptir. Bu makalede, Azure IoT Operasyonları ile çalışırken, çalışan podları listeleme ve günlükleri görüntüleme gibi kubectl'nin yaygın kullanımları açıklanmaktadır.

Örneğinize bağlanmak için kubectl özelleştirin

Prep Azure Arc etkinleştirilmiş Kubernetes kümenizi makalesinde, Kubernetes kümenizi dağıttığınız makinede kubectl komutlarını çalıştırdığınızda k3s kümenize bağlanmak için kubectl yapılandırma işlemi açıklanır.

İpucu

Yeni bir terminal penceresi açtığınızda ortam değişkenini ayarlamak zorunda kalmamak için export KUBECONFIG=~/.kube/config komutunu .bashrc veya .bash_profile dosyasına ekleyin.

Azure IoT İşlemleri örneğinizi Arc özellikli bir AKS-EE'ye dağıttıysanız kubectl yapılandırması sizin için otomatik olarak ayarlanır. Komutları doğrudan kümenizi dağıttığınız makinedeki komut satırından çalıştırabilirsiniz kubectl .

Arc özellikli kümenizi dağıttığınız makine yerine yerel istemci makinenizden komut çalıştırmak kubectl da mümkündür:

Tek seferlik bir adım olarak SSH kullanarak kümenizi dağıttığınız makineye bağlanın ve aşağıdaki komutları çalıştırın. <your-name> yerine adınızı yazdığınızdan emin olun.

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

Belirteci not edin. İstemci makinenizde komut çalıştırdığınızda kubectl kimlik doğrulaması yapmak için bu belirteci kullanırsınız. Artık Kubernetes kümenizi çalıştıran makineyle bağlantınızı kesebilirsiniz.

kubectl İstemci makinenizde kullanarak kümeye bağlanmak için iki terminal açın:

  1. İlk terminalde aşağıdaki komutu çalıştırarak kümenize bağlanacak bir ara sunucu yapılandırın. Üç yer tutucunun değerlerini değiştirmeyi unutmayın:

    az connectedk8s proxy -n <your-arc-enabled-cluster-name> -g <your-arc-enabled-cluster-resource-group> --token <token-from-previous-step>
    

    İkinci terminalde komut çalıştırırken kubectl bu terminali açık bırakın.

  2. İkinci terminalde komutlarınızı uzak kümenizde kubectl çalıştırabilirsiniz. Örneğin, azure-iot-operations ad alanındaki podları listelemek için:

    kubectl get pods -n azure-iot-operations
    

    İpucu

    k9s yapılandırmasını kullanan kubectl gibi komutları bu terminalde çalıştırabilirsiniz.

    Terminalinizi ilk kapatana kadar kubectl bağlamı, uzak kümeye ayarlanmış olarak kalır.

Daha fazla bilgi edinmek için bkz. Azure Arc etkin Kubernetes kümelerine güvenli bir şekilde bağlanmak için küme bağlanmayı kullanma.

Ad alanları

Arc ve Azure IoT İşlemleri varsayılan olarak Kubernetes kümesinde aşağıdaki ad alanlarını kullanır:

  • Azure IoT İşlemleri bileşenleri için azure-iot-operations.
  • Azure Arc etkinleştirilmiş Kubernetes bileşenleri için azure-arc.

İpucu

Kümenizdeki tüm ad alanlarını görüntülemek için şu komutu çalıştırın: kubectl get namespaces.

Yaygın kubectl komutlar

Ad alanında azure-iot-operations çalışan tüm podları görüntülemek için aşağıdaki komutu çalıştırın:

kubectl get pods -n azure-iot-operations

Çıktı aşağıdaki örneğe benzer:

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

Belirli bir pod, örneğin aio-opc-opc.tcp-1-858b9ff67-dxwvb podu için günlükleri görüntülemek amacıyla aşağıdaki komutu çalıştırın:

kubectl logs aio-opc-opc.tcp-1-858b9ff67-dxwvb -n azure-iot-operations

Belirli bir podun, örneğin aio-opc-opc.tcp-1-858b9ff67-dxwvb podunun okunabilir bir açıklamasını görüntülemek için aşağıdaki komutu çalıştırın:

kubectl describe pod aio-opc-opc.tcp-1-858b9ff67-dxwvb -n azure-iot-operations

Bazı yerlerde Azure IoT İşlemleri belgelerinde, bir yapılandırma değişikliği yapmak için Kubernetes manifest dosyasını uygulamak amacıyla kubectl apply komutu kullanılır.

k9s

k9s yardımcı programı, Kubernetes kümenizi yönetmek için terminal tabanlı bir kullanıcı arabirimi sunar. Kümenize bağlanmak için yapılandırmanızı kubectl kullanır ve kümenizle etkileşim kurmak için görsel bir yol sağlar. Varsayılan görünümü, kümenizde çalışmakta olan tüm podları listeler:

Varsayılan k9s görünümünü gösteren ekran görüntüsü.

Azure IoT İşlemleri ile çalışırken, görünümü yalnızca azure-iot-operations ad alanında podları gösterecek şekilde filtreleyebilirsiniz.

  1. Komut panelini açmak için yazın:, ardından yazın ns ve Enter tuşuna basın.

  2. Ad alanları listesinden seçin azure-iot-operations ve Enter tuşuna basın.

  3. Artık yalnızca azure-iot-operations ad alanındaki podları gösteren pod listesi:

    azure-iot-operations ad alanına filtrelenmiş k9s pod listesini gösteren ekran görüntüsü.

İpucu

Artık filtre uygulamak için sayı tuşlarını kullanabilirsiniz. Önceki ekran görüntüsü 0'ın tüm podları gösterdiğini ve 1'in yalnızca azure-iot-operations ad alanındaki podları gösterdiğini belirtir.

Podlarınız hakkındaki bilgileri görüntülemek için kısayol tuşlarını kullanabilirsiniz. Örneğin:

  • Bir podu açıklamak için listeden seçin ve d tuşuna basın.

    Çalışan podun k9s içindeki açıklamayı gösteren ekran görüntüsü.

  • Pod günlüklerini görüntülemek için, podu listeden seçin ve l tuşuna basın.

    K9s'de çalışan bir podun günlüğünü gösteren ekran görüntüsü.

    İpucu

    Günlük dosyasında gezinmek için sayı tuşlarını kullanabilirsiniz.

Kümede podlar dışındaki özel kaynak türlerini görüntülemek için:

  1. Özel kaynak türlerinin listesini görüntülemek için Ctrl-a tuşlarına basın.

  2. Cihazlar gibi özel kaynak türünü seçin ve Enter tuşuna basın.

    İpucu

    Özel kaynak türünü ada göre aramak için yazın / ve aradığınız türün adını yazmaya başlayın.

  3. Özel bir kaynak seçin ve kullanılabilir işlemlerden birini seçin. Örneğin, bir cihaz uç noktası profilini seçip y tuşuna basarak YAML tanımını görüntüleyebilirsiniz. Bazı kaynaklar için yapılandırmayı düzenleyebilirsiniz.

Aşağıdaki tabloda, Azure IoT İşlemleri çalışabileceğiniz bazı özel kaynak türleri açıklanmaktadır:

Özel kaynak türü Açıklama
devices Bir cihazın yapılandırmasını temsil eder.
assets Bir varlığın yapılandırmasını temsil eder.
brokers, brokerlisters, brokerauthentications, brokerauthorizations Bir MQTT aracısının yapılandırmasını temsil edin.
dataflows, dataflowendpoints, dataflowprofiles Veri akışının yapılandırmasını temsil edin.
secrets, secretsyncs, secretproviderclasses Sır ve sır yönetimi yapılandırmasını temsil edin.

MQTT araçları

öğrenme, test veya sorun giderme için Azure IoT İşlemleri örneğinizdeki MQTT aracısı ile etkileşim kurmak için, önce MQTT istemcileri ile MQTT aracısına bağlantıyı test etme: kümenin içinden bağlanma veya aracıyı bir NodePort veya LoadBalancer hizmetle kümenin dışında kullanıma sunma başlığı altında açıklanan üretim dışı yaklaşımlardan birini kullanarak aracıyı kullanıma sunun. Bu bölümün geri kalanında, bu test dinleyicilerine karşı çalıştırabileceğiniz sorun giderme araçları gösterilir.

Dikkat

Bu yaklaşımlar yalnızca geliştirme ve test ortamları için uygundur. Bunları asla üretimde kullanmayın.

Küme içindeki varsayılan dinleyiciye bağlanma

Küme içindeki varsayılan dinleyiciye bağlanma bölümünde açıklandığı gibi mqtt-client podunu dağıtın ve içinde bir kabuk açın. Ardından, kabukta Azure IoT İşlemleri veri konu başlıklarındaki iletileri incelemek ve yayımlamak için mosquitto_sub ve mosquitto_pub kullanın.

Örneğin, altındaki azure-iot-operations/datatüm konulara abone olmak için:

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)

Tek bir ileti almak için azure-iot-operations/data/thermostat konusuna aşağıdaki -C 1 seçeneğini ekleyin:

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)

İletilerdeki MQTT v5 kullanıcı özelliklerini görüntülemek için şu -F %P seçeneği kullanın:

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)

Mesaj yayımlamak için azure-iot-operations/data/valve konusuna:

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)

İşiniz bittiğinde istemci podunu silin:

kubectl delete pod mqtt-client -n azure-iot-operations

NodePort Veya LoadBalancer hizmeti kullanma

Düğüm bağlantı noktası veya Yük dengeleyici hizmetini, MQTT aracısını kümenin dışında kullanıma sunma amacıyla yapılandırma adımlarını izlerseniz, belirli bir bağlantı noktasına bağlanmayı destekleyen tüm MQTT istemci araçlarını kullanabilirsiniz. Aşağıdaki örneklerde, hizmeti kimlik doğrulaması, yetkilendirme veya TLS olmadan yapılandırdığınız varsayılır. Artık, yük dengeleyici kullanıyorsanız 1883 numaralı bağlantı noktasını ya da düğüm bağlantı noktası kullanıyorsanız yapılandırılmış bağlantı noktasını kullanarak MQTT aracısına bağlanmak için sık kullandığınız MQTT istemci araçlarını kullanabilirsiniz.

Örneğin, Kubernetes kümenizin çalıştığı makinede açık kaynak mqttui aracını çalıştırmak için aşağıdaki komutu kullanın:

mqttui --broker mqtt://localhost:1883

İpucu

Bir yük dengeleyici yapılandırdıysanız ve ana makinenin genel IP adresinde 1883 numaralı bağlantı noktası açıksa, farklı bir makineden MQTT aracısına bağlanmak için aşağıdaki komutu kullanabilirsiniz: mqttui --broker mqtt://<cluster-machine-public-ip>:1883

Aracı kullanarak mqttui konulara abone olabilir, iletileri yayımlayabilir ve aracıdan akan iletileri görüntüleyebilirsiniz:

Tüm konuları görüntüleyen MQTTUI aracını gösteren ekran görüntüsü.

Belirli bir konu, örneğin azure-iot-operations/data/thermostat, üzerindeki iletileri görüntülemek için aşağıdaki komutu kullanın:

mqttui --broker mqtt://localhost:1883 azure-iot-operations/data/thermostat

Konuya ileti yayımlamak için azure-iot-operations/data/valve aşağıdaki komutu kullanın:

mqttui publish --broker mqtt://localhost:1883 azure-iot-operations/data/valve open:15%

Kubernetes kümenizin çalıştığı makinede açık kaynak MQTT Gezgini aracını çalıştırmak için aşağıdaki yapılandırmayı kullanın:

MQTT Gezgini localhost yapılandırmasını gösteren ekran görüntüsü.

Kubernetes kümenizin çalıştığı makineye bağlanmak üzere yerel makinenizde açık kaynak MQTT Gezgini aracını çalıştırmak için aşağıdaki yapılandırmayı kullanın:

MQTT Gezgini uzaktan ana bilgisayar ayarlarını gösteren ekran görüntüsü.

MQTT Gezgini'nde en azından # yapılandırılmış bir konu olduğundan emin olun:

MQTT Gezgini varsayılan konu yapılandırmasını gösteren ekran görüntüsü.

Bağlandıktan sonra abone olduğunuz konularda iletileri görebilir ve iletileri yayımlayabilirsiniz:

 MQTT Gezgini'nin Azure IoT İşlemleri konulara abone olduğunu gösteren ekran görüntüsü.

İpuçları

Azure IoT İşlemleri örneğinle çalışmanıza yardımcı olacak bazı ek ipuçları aşağıdadır:

Azure IoT İşlemleri örneğinizin özel konumunu bulma

Azure IoT İşlemleri örneğinle ilişkili özel konumu bulmak için aşağıdaki komutu kullanın:

az iot ops show --name <YOUR_INSTANCE_NAME> --resource-group <YOUR_RESOURCE_GROUP> --query "extendedLocation.name" --output tsv

Özel konumu Azure portalında Extended location alanındaki örneğe genel bakış sayfasında da bulabilirsiniz.