다음을 통해 공유


Azure IoT Orchestrator 미리 보기 - 공급자 및 구성 요소

Important

Azure IoT 작업 미리 보기 - Azure Arc에서 지원되는 Azure IoT 작업은 현재 미리 보기로 제공됩니다. 프로덕션 환경에서는 이 미리 보기 소프트웨어를 사용하면 안 됩니다.

베타, 미리 보기로 제공되거나 아직 일반 공급으로 릴리스되지 않은 Azure 기능에 적용되는 약관은 Microsoft Azure 미리 보기에 대한 추가 사용 약관을 참조하세요.

공급자는 광범위한 OS 플랫폼 및 배포 메커니즘에서 배포 및 구성을 지원할 수 있는 Azure IoT Orchestrator 미리 보기 서비스의 확장성 모델입니다. 공급자는 리소스의 원하는 상태를 달성하는 데 필요한 작업을 실행합니다.

공급자는 플랫폼별 지식을 캡슐화하고 특정 기능을 구현합니다. 즉, 공급자는 helm 차트, ARC 확장 등과 같은 개별 대상 리소스 위에 API 계층을 형성하고, 이를 단일 엔터티로 번들링하고, 설치, 삭제, 업데이트와 같은 작업을 수행합니다. 별도의 공급자가 이러한 각 대상 리소스를 처리합니다.

Helm

Helm 공급자는 대상 위치에 Helm 차트를 설치합니다. Helm 공급자는 Helm 차트 이름, 리포지토리, 버전 및 기타 선택적 값을 사용하여 차트를 설치하고 업데이트합니다. 이 공급자는 Helm API에 새 클라이언트를 등록하고, 지정된 리포지토리를 조회하고, 레지스트리를 끌어옵니다.

Helm 공급자 문제를 해결해야 하는 경우 Helm 공급자 오류 코드를 참조하세요.

Helm 공급자 구성

대상에 사용할 수 있는 공급자는 대상 리소스의 '토폴로지' 개체에 정의됩니다. 특정 대상의 공급자를 정의할 때 해당 공급자에 대한 구성 세부 정보를 전달할 수 있습니다.

공급자 구성은 대상 매니페스트의 ‘토폴로지’ 섹션에 있습니다.

구성 매개 변수 설명
name (선택 사항) 구성의 이름입니다.
configType (선택 사항) 구성의 형식입니다. 예를 들어 bytes
configData (선택 사항) 기타 모든 구성 세부 정보입니다.
inCluster 확장이 설치된 클러스터에서 리소스를 만드는 경우 true로 설정된 플래그입니다.

예시:

{ 
  "role": "helm.v3", 
  "provider": "providers.target.helm",  
  "config": { 
    "inCluster": "true"
  } 
}

Helm 구성 요소 매개 변수

Helm 공급자를 사용하여 구성 요소 리소스를 관리하는 경우 리소스는 솔루션 또는 대상 매니페스트구성 요소 섹션에서 다음 매개 변수를 사용합니다.

매개 변수 형식 Description
이름 string Helm 차트의 이름입니다.
type string 구성 요소의 유형입니다(예: helm.v3).
properties.chart 개체 Helm 리포지토리 이름, 차트 이름, 차트 버전을 포함한 Helm 차트 세부 정보입니다.
properties.values 개체 (선택 사항) Helm 차트의 사용자 지정 값입니다.
properties.wait 부울 값 (선택 사항) true로 설정하면 공급자는 모든 Pod, PVC, 서비스, 배포, StatefulSets 또는 ReplicaSets가 준비 상태가 될 때까지 기다렸다가 구성 요소 만들기가 성공인지 판단합니다.

다음 솔루션 코드 조각은 Helm 공급자를 사용하여 Helm 차트를 설치하는 방법을 보여줍니다.

{
  "components": [
    {
      "name": "simple-chart",
      "type": "helm.v3",
      "properties": {
        "chart": {
          "repo": "oci://azureiotoperations.azurecr.io/simple-chart",
          "name": "simple-chart",
          "version": "0.1.0"
        },
        "values": {
          "e4iNamespace": "default",
          "mqttBroker": {
            "name": "aio-mq-dmqtt-frontend",
            "namespace": "default",
            "authenticationMethod": "serviceAccountToken"
          },
          "opcUaConnector": {
            "settings": {
              "discoveryUrl": "opc.tcp://opcplc-000000:50000",
              "authenticationMode": "Anonymous",
              "autoAcceptUnrustedCertificates": "true"
            }
          }
        }
      },
      "dependencies": []
    }
  ]
}

Kubectl

Kubectl 공급자는 YAML 데이터 또는 URL을 통해 에지 클러스터에 사용자 지정 리소스를 적용합니다. 이 공급자는 Kubernetes API를 사용하여 외부 YAML URL 또는 솔루션 구성 요소 속성에서 직접 리소스 정의를 가져옵니다. 그런 다음 Kubernetes API는 Arc 지원 클러스터에 이러한 사용자 지정 리소스 정의를 적용합니다.

Kubectl 공급자 문제를 해결해야 하는 경우 Kubectl 공급자 오류 코드를 참조하세요.

Kubectl 공급자 구성

대상에 사용할 수 있는 공급자는 대상 리소스의 '토폴로지' 개체에 정의됩니다. 특정 대상의 공급자를 정의할 때 해당 공급자에 대한 구성 세부 정보를 전달할 수 있습니다.

공급자 구성은 대상 매니페스트의 ‘토폴로지’ 섹션에 있습니다.

구성 매개 변수 설명
name (선택 사항) 구성의 이름입니다.
configType (선택 사항) 구성의 형식입니다. 리소스 정의 또는 세부 정보가 외부 URL에서 오는 경우 path로 설정됩니다. 리소스 정의 또는 세부 정보가 구성 요소 섹션에 지정된 경우 inline로 설정됩니다.
configData (선택 사항) 기타 모든 구성 세부 정보입니다.
inCluster 확장이 설치된 클러스터에서 리소스를 만드는 경우 true로 설정된 플래그입니다.

예시:

{ 
  "role": "yaml.k8s", 
  "provider": "providers.target.kubectl",  
  "config": { 
    "inCluster": "true"
  } 
}

Kubectl 구성 요소 매개 변수

Kubectl 공급자를 사용하여 구성 요소 리소스를 관리하는 경우 리소스는 솔루션 또는 대상 매니페스트구성 요소 섹션에서 다음 매개 변수를 사용합니다.

매개 변수 형식 Description
이름 string 리소스의 이름입니다.
type string 구성 요소의 유형입니다(예: yaml.k8s).
속성 yaml 또는 resource 매개 변수로 제공되는 리소스의 정의입니다.
properties.yaml string 리소스의 YAML 정의에 대한 외부 URL입니다. resource 매개 변수를 사용하지 ‘않는’ 경우에만 지원됩니다.
properties.resource 개체 리소스의 인라인 정의입니다. yaml 매개 변수를 사용하지 ‘않는’ 경우에만 지원됩니다.
properties.statusProbe 개체 (선택 사항) 리소스 상태 프로브 기능에 대한 인라인 정의입니다. resource 매개 변수를 사용‘하는’ 경우에만 지원됩니다.

다음 솔루션 코드 조각은 외부 URL을 사용하여 사용자 지정 리소스를 적용하는 방법을 보여줍니다. 이 방법의 경우 공급자의 구성 형식을 경로로 설정합니다.

{
  "components": [
    {
      "name": "gatekeeper",
      "type": "kubectl",
      "properties": {
        "yaml": "https://raw.githubusercontent.com/open-policy-agent/gatekeeper/master/deploy/gatekeeper.yaml"
      }
    }
  ]
}

다음 솔루션 코드 조각은 인라인으로 제공되는 속성을 사용하여 사용자 지정 리소스를 적용하는 방법을 보여줍니다. 이 방법의 경우 공급자의 구성 형식을 인라인으로 설정합니다.

{
  "components": [ 
    {
      "name": "my-asset",
      "type": "kubectl",
      "properties": {
        "resource": {
          "apiVersion": "apiextensions.k8s.io/v1",
          "kind": "CustomResourceDefinition",
          "metadata": {
            "annotations": "controller-gen.kubebuilder.io/version: v0.10.0",
            "labels": {
              "gatekeeper.sh/system": "yes"
            },
            "Name": "assign.mutations.gatekeeper.sh"
          },
          "spec": {...}
        }
      },
      "dependencies": []
    }
  ]
}

리소스 상태 프로브

Kubectl 공급자에는 구성 요소의 상태를 확인하는 기능도 있습니다. 이 리소스 상태 프로브를 사용하면 사용자 지정 리소스의 성공적인 생성 및 배포가 어떤 모습인지 정의할 수 있습니다. 상태 프로브 속성을 사용하여 리소스의 상태를 확인할 수도 있습니다.

이 기능은 Kubectl 공급자의 구성 형식이 인라인인 경우에 사용할 수 있습니다. 상태 프로브 속성은 properties.resource와 함께 구성 요소 속성의 일부로 정의됩니다.

Properties.statusProbe 매개 변수 Type 설명
succeededValues List[string] 성공적으로 적용된 리소스를 정의하는 상태 목록입니다.
failedValues List[string] 성공적으로 적용되지 않은 리소스를 정의하는 상태 목록입니다.
statusPath string 리소스의 상태를 확인하는 경로입니다.
errorMessagePath string 리소스 오류 메시지를 확인하는 경로입니다.
시간 제한 string 리소스의 상태 프로빙이 종료되는 시간(초 또는 분)입니다.
interval string 두 개의 연속한 상태 프로브 사이의 시간 간격(초 또는 분)입니다.
initialWait string 첫 번째 상태 프로브를 초기화하기 전의 시간(초 또는 분)입니다.

다음 솔루션은 상태 프로브를 사용하여 사용자 지정 리소스를 적용하는 방법을 보여줍니다.

{
  "solution": {
    "components": {
      "name": "gatekeeper-cr",
      "type": "yaml.k8s",
      "properties": {
        "resource": {
          "apiVersion": "apiextensions.k8s.io/v1",
          "kind": "CustomResourceDefinition",
          "metadata": {
            "annotations": "controller-gen.kubebuilder.io/version: v0.10.0",
            "labels": {
              "gatekeeper.sh/system": "yes"
            },
            "name": "assign.mutations.gatekeeper.sh"
          },
          "spec": {...}
        },
        "statusProbe": {
          "succeededValues": [
            "true",
            "active"
          ],
          "failedValues": [
            "false",
            "fail"
          ],
          "statusPath": "$.status.conditions.status",
          "errorMessagePath": "$.status.conditions.message",
          "timeout": "5m",
          "interval": "2s",
          "initialWait": "10s"
        }
      }
    }
  }
}