빠른 시작: K3s를 사용하여 GitHub Codespaces에서 Azure IoT 작업 실행
이 빠른 시작에서는 디바이스 및 워크로드를 원격으로 관리할 수 있도록 Azure Arc 지원 Kubernetes 클러스터에 Azure IoT Operations를 배포합니다. 빠른 시작이 끝나면 클라우드에서 관리할 수 있는 클러스터가 있습니다. 이 엔드투엔드 시리즈의 나머지 빠른 시작은 샘플 자산, 데이터 처리 파이프라인 및 시각화를 정의하기 위해 빌드됩니다.
시작하기 전에
이 빠른 시작 시리즈는 Azure IoT 작업을 최대한 빨리 시작하여 엔드투엔드 시나리오를 평가할 수 있도록 돕기 위해 작성되었습니다. 진정한 개발 또는 프로덕션 환경에서 여러 팀이 함께 작업하는 경우 이러한 작업을 수행하고 일부 작업에는 상승된 권한이 필요할 수 있습니다.
최상의 새 사용자 환경을 위해 이러한 빠른 시작에서 리소스에 대한 소유자 권한이 있도록 Azure 체험 계정을 사용하는 것이 좋습니다.
또한 이 빠른 시작의 가상 환경으로 GitHub Codespaces를 사용하여 사용자 고유의 컴퓨터에 새 도구를 설치하지 않고 시나리오를 테스트할 수 있습니다. 그러나 Ubuntu 또는 AKS(Azure Kubernetes Service)의 로컬 클러스터에 Azure IoT 작업을 배포하려면 Azure Arc 지원 Kubernetes 클러스터 준비를 참조하세요.
필수 조건
시작하기 전에 다음 필수 조건을 준비합니다.
Azure 구독 Azure 구독이 아직 없는 경우 시작하기 전에 무료 구독을 만듭니다.
GitHub 계정
개발 컴퓨터에 Visual Studio Code를 설치했습니다. 자세한 내용은 Visual Studio Code 다운로드를 참조하세요.
리소스 그룹 수준에서 Microsoft.Authorization/roleAssignments/쓰기 권한입니다.
어떤 문제를 해결할 수 있나요?
Azure IoT 작업은 Kubernetes 클러스터에서 실행되는 데이터 서비스 모음입니다. 이러한 클러스터는 클라우드에서 원격으로 관리하고, 클라우드 리소스 및 엔드포인트와 안전하게 통신할 수 있습니다. 이 빠른 시작에서는 다음 작업을 통해 이러한 문제를 해결합니다.
- GitHub Codespaces에서 Kubernetes 클러스터를 만듭니다.
- 원격 관리를 위해 클러스터를 Azure Arc에 연결합니다.
- 스키마 레지스트리를 만듭니다.
- Azure IoT 작업을 클러스터에 배포합니다.
클러스터 만들기
Azure IoT Operations는 Ubuntu의 K3s, AKS(Azure Kubernetes Service) Edge Essentials 및 Azure Local의 AKS에 배포할 수 있습니다. 그러나 속도와 편의를 위해 이 빠른 시작에서는 GitHub Codespaces를 사용하여 클러스터를 호스트합니다. 대신 Windows 또는 Ubuntu의 클러스터에 Azure IoT 작업을 배포하는 방법을 알아보려면 Azure Arc 지원 Kubernetes 클러스터 준비를 참조하세요.
참고 항목
Codespace는 빠르게 설정하고 나중에 쉽게 분해할 수 있지만, 성능 평가 또는 크기 조정 테스트에는 적합하지 않습니다. GitHub Codespaces는 탐색 용도로만 사용해야 합니다.
Codespaces 환경은 빠른 시작 단계를 완료하기에 충분하지만 고급 구성은 지원하지 않습니다.
이 섹션에서는 새 클러스터를 만듭니다. 이전에 Azure IoT Operations를 배포한 클러스터를 다시 사용하려면 계속하기 전에 Azure IoT 작업을 제거하는 리소스 정리 단계를 참조하세요.
Azure-Samples/explore-iot-operations 코드스페이스는 다음으로 미리 구성됩니다.
- 경량 Kubernetes 클러스터를 위해 K3d에서 실행 중인 K3s
- Azure CLI
- Kubernetes 리소스 관리를 위한 Kubectl
- Helm과 k9s 같은 다른 유용한 도구
codespace와 클러스터를 만들려면 다음 단계를 따릅니다.
GitHub Codespace에서 코드스페이스를 만듭니다.
코드 공간에 대해 다음 권장 비밀을 제공합니다.
매개 변수 값 SUBSCRIPTION_ID Azure 구독 ID. RESOURCE_GROUP 클러스터를 생성할 새 Azure 리소스 그룹의 이름입니다. 위치 가까운 Azure 지역입니다. 현재 지원되는 지역 목록은 지원되는 지역을 참조하세요. 팁
이 단계에서 비밀로 제공하는 값은 이 코드 공간과 향후 코드 공간에서 사용할 수 있도록 GitHub 계정에 저장됩니다. 코드스페이스 터미널에서 환경 변수로 추가되며, 다음 섹션의 CLI 명령에서 이러한 환경 변수를 사용할 수 있습니다.
또한 이 코드스페이스는 코드스페이스 이름으로 설정된 환경 변수를 만듭니다
CLUSTER_NAME
.새 codespace 만들기를 선택합니다.
Codespace가 준비되면 왼쪽 위에 있는 메뉴 단추를 선택한 다음 VS Code 데스크톱에서 열기를 선택합니다.
메시지가 표시되면 Visual Studio Code용 GitHub Codespaces 확장을 설치하고 GitHub에 로그인합니다.
Visual Studio Code에서 보기>터미널을 차례로 선택합니다.
이 터미널을 사용하여 클러스터를 관리하기 위한 모든 CLI 명령을 실행합니다.
Azure Arc에 클러스터 연결
클러스터를 Azure Arc에 연결하는 방법:
codespace 터미널에서 Azure CLI에 로그인합니다.
az login
팁
VS Code 데스크톱이 아닌 브라우저에서 GitHub codespace 환경을 사용하는 경우
az login
을 실행하면 localhost 오류가 반환됩니다. 오류를 수정하려면 다음 중 하나를 수행합니다.- VS Code 데스크톱에서 코드스페이스를 연 다음 브라우저 터미널로 돌아가
az login
을(를) 다시 실행합니다. - 또는 브라우저에서 localhost 오류가 발생하면 브라우저에서 URL을 복사하고 새 터미널 탭에서
curl "<URL>"
을(를) 실행합니다. JSON 응답과 "Microsoft Azure에 로그인했습니다!"라는 메시지가 표시됩니다.
- VS Code 데스크톱에서 코드스페이스를 연 다음 브라우저 터미널로 돌아가
로그인한 후 Azure CLI는 모든 구독을 표시하고 별표
*
가 있는 기본 구독을 나타냅니다. 기본 구독을 계속하려면 .를 선택합니다Enter
. 그렇지 않은 경우 사용하려는 Azure 구독 수를 입력합니다.구독에 필요한 리소스 공급자를 등록합니다.
참고 항목
이 단계는 구독당 한 번만 실행하면 됩니다. 리소스 공급자를 등록하려면 구독 기여자 및 소유자 역할에 포함된
/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"
az group create 명령을 사용하여 Azure 구독에 리소스 그룹을 만들어 모든 리소스를 저장합니다.
az group create --location $LOCATION --resource-group $RESOURCE_GROUP
az connectedk8s connect 명령을 사용하여 Kubernetes 클러스터를 Arc로 사용하도록 설정하고 Azure 리소스 그룹의 일부로 관리합니다.
az connectedk8s connect --name $CLUSTER_NAME --location $LOCATION --resource-group $RESOURCE_GROUP
팁
$CLUSTER_NAME
값은 자동으로 codespace의 이름으로 설정됩니다. 다른 이름을 사용하려면 환경 변수를 바꿉니다.objectId
Azure Arc 서비스가 테넌트에서 사용하는 Microsoft Entra ID 애플리케이션을 가져와서 환경 변수로 저장합니다. GUID 값을 변경하지 않고 기록된 대로 정확하게 다음 명령을 실행합니다.export OBJECT_ID=$(az ad sp show --id bc313c14-388c-4e7d-a58e-70017303ee3b --query id -o tsv)
az connectedk8s enable-features 명령을 사용하여 클러스터에서 사용자 지정 위치 지원을 사용하도록 설정합니다. 이 명령은 Azure Arc 서비스에서 사용하는 Microsoft Entra ID 애플리케이션의
objectId
를 사용합니다. Kubernetes 클러스터를 배포한 컴퓨터에서 이 명령을 실행하세요.az connectedk8s enable-features -n $CLUSTER_NAME -g $RESOURCE_GROUP --custom-locations-oid $OBJECT_ID --features cluster-connect custom-locations
스토리지 계정 및 스키마 레지스트리 만들기
스키마 레지스트리는 클라우드와 에지 모두에서 메시지 정의를 저장하는 동기화된 리포지토리입니다. Azure IoT Operations에는 클러스터에 스키마 레지스트리가 필요합니다. 스키마 레지스트리에는 클라우드에 저장된 스키마 정보에 대한 Azure Storage 계정이 필요합니다.
이 섹션에서 스키마 레지스트리를 만드는 명령에는 리소스 그룹 수준에서 Microsoft.Authorization/roleAssignments/write 권한이 필요합니다. 이 권한은 스토리지 계정에 쓸 수 있도록 스키마 레지스트리에 기여자 역할을 부여하는 데 사용됩니다.
Codespaces 터미널에서 다음 CLI 명령을 실행합니다.
이 섹션에서 만드는 리소스에 대한 환경 변수를 설정합니다.
자리 표시자 값 <STORAGE_ACCOUNT_NAME> 스토리지 계정의 이름입니다. 스토리지 계정 이름은 길이가 3자에서 24자 사이여야 하며 숫자와 소문자만 포함해야 합니다. <SCHEMA_REGISTRY_NAME> 스키마 레지스트리의 이름입니다. <SCHEMA_REGISTRY_NAMESPACE> 스키마 레지스트리 네임스페이스의 이름입니다. 네임스페이스는 테넌트 내에서 스키마 레지스트리를 고유하게 식별합니다. STORAGE_ACCOUNT=<STORAGE_ACCOUNT_NAME> SCHEMA_REGISTRY=<SCHEMA_REGISTRY_NAME> SCHEMA_REGISTRY_NAMESPACE=<SCHEMA_REGISTRY_NAMESPACE>
계층 구조 네임스페이스를 사용하도록 설정된 스토리지 계정을 만듭니다.
az storage account create --name $STORAGE_ACCOUNT --location $LOCATION --resource-group $RESOURCE_GROUP --enable-hierarchical-namespace
스토리지 계정에 연결하는 스키마 레지스트리를 만듭니다. 또한 이 명령은 스토리지 계정에 스키마라는 Blob 컨테이너를 만듭니다.
az iot ops schema registry create --name $SCHEMA_REGISTRY --resource-group $RESOURCE_GROUP --registry-namespace $SCHEMA_REGISTRY_NAMESPACE --sa-resource-id $(az storage account show --name $STORAGE_ACCOUNT -o tsv --query id)
Azure IoT 작업 배포
이 섹션에서는 Azure IoT Operations 구성 요소에 대한 종속성을 사용하여 클러스터를 구성한 다음, Azure IoT Operations를 배포합니다.
Codespaces 터미널에서 다음 CLI 명령을 실행합니다.
Azure IoT Operations에 대한 클러스터를 초기화합니다.
팁
이
init
명령은 클러스터당 한 번만 실행하면 됩니다. 이미 최신 Azure IoT Operations 버전이 배포된 클러스터를 다시 사용하는 경우 이 단계를 건너뛸 수 있습니다.az iot ops init --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP
이 명령은 완료하는 데 몇 분 정도 걸릴 수 있습니다. 터미널에서 배포 진행률 표시의 진행률을 볼 수 있습니다.
Azure IoT 작업을 배포합니다.
az iot ops create --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name ${CLUSTER_NAME}-instance --sr-resource-id $(az iot ops schema registry show --name $SCHEMA_REGISTRY --resource-group $RESOURCE_GROUP -o tsv --query id) --broker-frontend-replicas 1 --broker-frontend-workers 1 --broker-backend-part 1 --broker-backend-workers 1 --broker-backend-rf 2 --broker-mem-profile Low
이 명령은 완료하는 데 몇 분 정도 걸릴 수 있습니다. 터미널에서 배포 진행률 표시의 진행률을 볼 수 있습니다.
리소스에 액세스하려면 디바이스를 관리해야 함 오류가 발생하면
az login
을(를) 다시 실행하고 브라우저를 사용하여 대화형으로 로그인해야 합니다.
클러스터에서 리소스 보기
배포가 완료되면 kubectl 명령을 사용하여 클러스터의 변경 내용을 관찰하거나 클러스터가 Arc 사용이므로 Azure Portal을 사용할 수 있습니다.
클러스터에서 Pod를 보려면 다음 명령을 실행합니다.
kubectl get pods -n azure-iot-operations
Azure Portal에서 리소스를 보려면 다음 단계를 사용합니다.
Azure Portal에서 Azure IoT Operations 인스턴스가 포함된 리소스 그룹으로 이동하거나 Azure IoT Operations를 검색하여 선택합니다.
Azure IoT 작업 인스턴스의 이름을 선택합니다.
인스턴스의 개요 페이지에서 리소스 요약 탭을 선택하여 클러스터에 배포된 리소스의 프로비전 상태를 확인합니다.
문제를 어떻게 해결했나요?
이 빠른 시작에서는 Azure IoT 작업 구성 요소와 안전하게 통신할 수 있도록 Arc 지원 Kubernetes 클러스터를 구성했습니다. 그런 다음 이러한 구성 요소를 클러스터에 배포했습니다. 이 테스트 시나리오의 경우 Codespaces에서 실행되는 단일 Kubernetes 클러스터가 있습니다. 그러나 프로덕션 시나리오에서는 동일한 단계를 사용하여, 여러 사이트에서 많은 클러스터에 워크로드를 배포할 수 있습니다.
리소스 정리
다음 빠른 시작을 진행하는 경우에는 모든 리소스를 유지해야 합니다.
Azure IoT Operations 배포를 제거하지만 클러스터를 유지하려면 az iot ops delete 명령을 사용합니다.
az iot ops delete --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP
이 빠른 시작을 위해 만든 모든 리소스를 삭제하려면 Azure IoT 작업을 배포한 Kubernetes 클러스터를 삭제한 다음 클러스터가 포함된 Azure 리소스 그룹을 제거합니다.
이러한 빠른 시작에서 Codespaces를 사용한 경우 GitHub에서 Codespace를 삭제합니다.