Kubernetes ツールを使用して Azure Arc 対応データ コントローラーを作成する

データ コントローラーは、Kubernetes クラスターの Azure Arc 対応データ サービスを管理します。 この記事では、Kubernetes ツールを使用してデータ コントローラーを作成する方法について説明します。

データ コントローラーを作成するステップの概要は、次のとおりです。

  1. 名前空間とブートストラップ サービスを作成する
  2. データ コントローラーを作成する

Note

わかりやすくするために、次の手順では、自分が Kubernetes クラスター管理者であることを前提としています。 運用環境デプロイまたはより安全な環境の場合は、デプロイ プロセスに関連するユーザーとサービス アカウントに特定のアクセス許可のみを付与することでデータ コントローラーをデプロイする時は、"最小限の特権" のセキュリティのベスト プラクティスに従うことをお勧めします。

詳細な手順については、最小限の特権での Arc 対応データ サービスの操作に関するページを参照してください。

前提条件

概要情報については、「Azure Arc 対応データ サービスのデプロイを計画する」のトピックを参照してください。

Kubernetes ツールを使用してデータ コントローラーを作成するには、Kubernetes ツールがインストールされている必要があります。 この記事の例では kubectl を使用しますが、Kubernetes ダッシュボード、ochelm などの Kubernetes の他のツールや Kubernetes yaml/json を使い慣れている場合は、それらのツールでも同様のアプローチを使用できます。

kubectl ツールをインストールする

名前空間とブートストラップ サービスを作成する

ブートストラップ サービスでは、データ コントローラーなどのカスタム リソースの作成、編集、削除を行う受信要求が処理されます。

bootstrapper-unified.yaml のコピーを保存し、ファイル内のすべての場所にあるプレースホルダー {{NAMESPACE}}arc などの別の名前空間名に置き換えます。

重要

ブートストラップの unified.yaml テンプレート ファイルにより、既定で Microsoft Container Registry (MCR) からブートストラップのコンテナー イメージがプルされます。 お使いの環境で Microsoft Container Registry に直接アクセスできない場合は、次の操作を実行します。

次のコマンドを実行して、編集したファイルで名前空間とブートストラップ サービスを作成します。

kubectl apply --namespace arc -f bootstrapper-unified.yaml

次のコマンドを使用して、ブートストラップ ポッドが実行されていることを確認します。

kubectl get pod --namespace arc -l app=bootstrapper

状態が [実行中] でない場合は、状態が [実行中] になるまでコマンドを数回実行します。

データ コントローラーを作成する

これで、データ コントローラー自体を作成する準備が整いました。

まず、テンプレート ファイルのコピーをコンピューターのローカルに作成し、設定の一部を変更できるようにします。

メトリックとログ ダッシュボードのユーザー名とパスワードを作成する

ファイルの上部で、メトリックとログのダッシュボードに対する認証に使用するユーザー名とパスワードを管理者として指定できます。 安全なパスワードを選択し、これらの特権を必要とするユーザーとのみ共有します。

Kubernetes シークレットは base64 でエンコードされた文字列として格納されます。1 つはユーザー名、1 つはパスワード用です。

オンライン ツールを使用して、希望するユーザー名とパスワードを base64 でエンコードできます。また、プラットフォームに応じて組み込みの CLI ツールを使用することもできます。

PowerShell

[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('<your string to encode here>'))

#Example
#[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('example'))

Linux/macOS

echo -n '<your string to encode here>' | base64

#Example
# echo -n 'example' | base64

ログとメトリック ダッシュボードの証明書を作成する

必要に応じて、ログとメトリック ダッシュボードの SSL/TLS 証明書を作成できます。 「Kubernetes ネイティブ ツールのデプロイ時の SSL/TLS 証明書の指定」の手順に従ってください。

データ コントローラーの構成を編集する

必要に応じて、データ コントローラーの構成を編集します。

必須

  • location: データ コントローラーに関する "メタデータ" が格納される Azure の場所に変更してください。 利用可能なリージョンの一覧を参照してください。
  • resourceGroup: Azure Resource Manager でデータ コントローラーの Azure リソースを作成する Azure リソース グループ。 通常、このリソース グループは既に存在しているはずですが、データを Azure にアップロードするときまでは必要ありません。
  • subscription: Azure リソースを作成するサブスクリプションの Azure サブスクリプション GUID。

見直してできれば既定値を変更することを推奨

  • storage..className: データ コントローラーのデータ ファイルとログ ファイルに使用するストレージ クラス。 Kubernetes クラスターで使用できるストレージ クラスがわからない場合は、次のコマンドを実行します。kubectl get storageclass 既定値は default で、既定のストレージ クラスではなく、default という名前の既存のストレージ クラスがあることを前提としています。 注: 目的のストレージ クラスに設定する className 設定は 2 つあります - 1 つはデータ用、1 つはログ用です。
  • serviceType: LoadBalancer を使用していない場合は、サービスの種類を NodePort に変更します。
  • Security: Azure Red Hat OpenShift または Red Hat OpenShift コンテナー プラットフォームの場合は、データ コントローラーの yaml ファイルで、security: 設定を下記の値に置き換えます。
  security:
    allowDumps: false
    allowNodeMetricsCollection: false
    allowPodMetricsCollection: false

省略可能

  • name: データ コントローラーの既定の名前は arc ですが、必要に応じて変更できます。
  • displayName: ファイルの先頭にある name 属性と同じ値に設定してください。
  • logsui-certificate-secret: Kubernetes クラスターでログ UI 証明書用に作成されたシークレットの名前。
  • metricsui-certificate-secret: Kubernetes クラスターでメトリック UI 証明書用に作成されたシークレットの名前。

次の例は、完成したデータ コントローラーの yaml を示しています。

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: metricsui-admin-secret
type: Opaque

---

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: logsui-admin-secret
type: Opaque

---

apiVersion: arcdata.microsoft.com/v5
kind: DataController
metadata:
  name: arc-dc
spec:
  credentials:
    dockerRegistry: arc-private-registry # Create a registry secret named 'arc-private-registry' if you are going to pull from a private registry instead of MCR.
    serviceAccount: sa-arc-controller
  docker:
    imagePullPolicy: Always
    imageTag: v1.29.0_2024-04-09
    registry: mcr.microsoft.com
    repository: arcdata
  infrastructure: other # Must be a value in the array [alibaba, aws, azure, gcp, onpremises, other]
  security:
    allowDumps: true # Set this to false if deploying on OpenShift
    allowNodeMetricsCollection: true # Set this to false if deploying on OpenShift
    allowPodMetricsCollection: true # Set this to false if deploying on OpenShift
  services:
  - name: controller
    port: 30080
    serviceType: LoadBalancer # Modify serviceType based on your Kubernetes environment
  settings:
    ElasticSearch:
      vm.max_map_count: "-1"
    azure:
      connectionMode: indirect # Only indirect is supported for Kubernetes-native deployment for now.
      location: eastus # Choose a different Azure location if you want
      resourceGroup: <your resource group>
      subscription: <your subscription GUID>
    controller:
      displayName: arc-dc
      enableBilling: true
      logs.rotation.days: "7"
      logs.rotation.size: "5000"
  storage:
    data:
      accessMode: ReadWriteOnce
      className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
      size: 15Gi
    logs:
      accessMode: ReadWriteOnce
      className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
      size: 10Gi

編集したファイルをローカル コンピューターに保存し、次のコマンドを実行してデータ コントローラーを作成します。

kubectl create --namespace arc -f <path to your data controller file>

#Example
kubectl create --namespace arc -f data-controller.yaml

作成状態の監視

コントローラーの作成が完了するまでに数分かかります。 次のコマンドを使用して、別のターミナル ウィンドウで進行状況を監視できます。

kubectl get datacontroller --namespace arc
kubectl get pods --namespace arc

次のようなコマンドを実行して、特定のポッドの作成状態やログを確認することもできます。 これは特に、何らの問題をトラブルシューティングするのに役立ちます。

kubectl describe pod/<pod name> --namespace arc
kubectl logs <pod name> --namespace arc

#Example:
#kubectl describe pod/control-2g7bl --namespace arc
#kubectl logs control-2g7b1 --namespace arc

作成の問題のトラブルシューティング

作成で問題が発生した場合は、「トラブルシューティング ガイド」を参照してください。