Share via


Azure CLI を使用して Kubernetes クラスターを作成する

適用対象: Azure Stack HCI バージョン 23H2

この記事では、Azure CLI を使用して Azure Stack HCI で Kubernetes クラスターを作成する方法について説明します。 ワークフローは次のとおりです。

  1. Azure CLI を使用して、Azure Stack HCI 23H2 に Kubernetes クラスターを作成します。 クラスターは、既定で Azure Arc に接続されています。
  2. クラスターの作成時に、Kubernetes クラスター管理者アクセス権を持つMicrosoft Entra ユーザーの一覧を含むMicrosoft Entra グループを指定します。
  3. kubectl とMicrosoft Entra IDを使用してクラスターにアクセスします。
  4. このクラスターで、Web フロントエンドと Redis インスタンスが含まれているサンプルの複数コンテナー アプリケーションを実行します。

開始する前に

  • 開始する前に、オンプレミスのインフラストラクチャ管理者から次の詳細を確認してください。
    • Azure サブスクリプション ID - デプロイと登録に Azure Stack HCI が使用される Azure サブスクリプション ID。
    • カスタムの場所 ID - カスタムの場所の Azure Resource Manager ID。 カスタムの場所は、Azure Stack HCI クラスターのデプロイ中に構成されます。 インフラストラクチャ管理者は、カスタムの場所のResource Manager ID を指定する必要があります。 このパラメーターは、Kubernetes クラスターを作成するために必要です。 インフラストラクチャ管理者がカスタムの場所名とリソース グループ名を指定している場合は、 を使用してaz customlocation show --name "<custom location name>" --resource-group <azure resource group> --query "id" -o tsvResource Manager ID を取得することもできます。
    • ネットワーク ID - 次の手順に従って作成された Azure Stack HCI 論理ネットワークの Azure Resource Manager ID。 管理者が論理ネットワークの ID を指定する必要があります。 このパラメーターは、Kubernetes クラスターを作成するために必要です。 論理ネットワークが作成されたリソース グループがわかっている場合は、 を使用して az stack-hci-vm network lnet show --name "<lnet name>" --resource-group <azure resource group> --query "id" -o tsv Azure Resource Manager ID を取得することもできます。
  • ローカル開発マシンでこの記事の手順を実行して、リモート Azure Stack HCI デプロイに Kubernetes クラスターを作成できます。 開発用コンピューターに最新バージョンの Az CLI があることを確認します。 を使用 az upgradeして Az CLI バージョンをアップグレードすることもできます。
  • どこからでも Kubernetes クラスターに接続するには、Microsoft Entra グループを作成し、それにメンバーを追加します。 Microsoft Entra グループ内のすべてのメンバーには、クラスターへのクラスター管理者アクセス権があります。 自分をメンバーとしてMicrosoft Entra グループに追加してください。 自分を追加しない場合は、kubectl を使用して Kubernetes クラスターにアクセスできません。 Microsoft Entra グループの作成とユーザーの追加の詳細については、「Microsoft Entra グループとグループ メンバーシップの管理」を参照してください。
  • 開発用コンピューターに kubectl をダウンロードしてインストールします。 Kubernetes コマンド ライン ツール kubectl を使用すると、Kubernetes クラスターに対してコマンドを実行できます。 kubectl を使用して、アプリケーションのデプロイ、クラスター リソースの検査と管理、ログの表示を行うことができます。

Azure CLI 拡張機能をインストールする

次のコマンドを実行して、必要な Azure CLI 拡張機能をインストールします。

az extension add -n aksarc --upgrade
az extension add -n customlocation --upgrade
az extension add -n stack-hci-vm --upgrade
az extension add -n connectedk8s --upgrade

Kubernetes クラスターを作成する

コマンドを az aksarc create 使用して、AKS Arc に Kubernetes クラスターを作成します。このコマンドを実行する前に、必ず Azure にサインインしてください。 複数の Azure サブスクリプションがある場合は、 az account set コマンドを使用して適切なサブスクリプション ID を選択します。

az aksarc create -n $aksclustername -g $resource_group --custom-location $customlocationID --vnet-ids $logicnetId --aad-admin-group-object-ids $aadgroupID --generate-ssh-keys --load-balancer-count 0  --control-plane-ip $controlplaneIP

数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。

Kubernetes クラスターに接続する

これで、開発用コンピューターから コマンドを実行して、Kubernetes クラスターに az connectedk8s proxy 接続できます。 このコマンドを実行する前に、必ず Azure にサインインしてください。 複数の Azure サブスクリプションがある場合は、 az account set コマンドを使用して適切なサブスクリプション ID を選択します。

このコマンドは、Kubernetes クラスターの kubeconfig を開発用コンピューターにダウンロードし、オンプレミスの Kubernetes クラスターへのプロキシ接続チャネルを開きます。 コマンドが実行されている限り、チャネルは開いています。 好きなだけ長くこのコマンドを実行して、クラスターにアクセスしてみましょう。 タイムアウトした場合は、CLI ウィンドウを閉じ、新しいウィンドウを開き、コマンドをもう一度実行します。

次のコマンドを正常に実行するには、Kubernetes クラスターをホストするリソース グループに対する共同作成者アクセス許可が必要です。

az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config

予想される出力:

Proxy is listening on port 47011
Merged "aks-workload" as current context in .\\aks-arc-kube-config
Start sending kubectl requests on 'aks-workload' context using
kubeconfig at .\\aks-arc-kube-config
Press Ctrl+C to close proxy.

このセッションを実行したまま、別のターミナルまたはコマンド プロンプトから Kubernetes クラスターに接続します。 kubectl get コマンドを実行して、Kubernetes クラスターに接続できることを確認します。 このコマンドは、クラスター ノードの一覧を返します。

kubectl get node -A --kubeconfig .\aks-arc-kube-config

次の出力例は、前の手順で作成したノードを示しています。 ノードの状態が "準備完了" であることを確認します。

NAME             STATUS ROLES                AGE VERSION
moc-l0ttdmaioew  Ready  control-plane,master 34m v1.24.11
moc-ls38tngowsl  Ready  <none>               32m v1.24.11

アプリケーションの配置

Kubernetes のマニフェスト ファイルでは、どのコンテナー イメージを実行するかなど、クラスターの望ましい状態を定義します。

マニフェストを使用して、 Azure Vote アプリケーションの実行に必要なすべてのオブジェクトを作成できます。 このマニフェストには、次の 2 つの Kubernetes デプロイが含まれています。

  • サンプルの Azure Vote Python アプリケーション。
  • Redis インスタンス。

次の 2 つの Kubernetes サービス も作成されます。

  • Redis インスタンス用の内部サービス。
  • インターネットから Azure Vote アプリケーションにアクセスするための外部サービス。

azure-vote.yaml という名前のファイルを作成し、次のマニフェストにコピーします。

apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
      name: azure-vote-back 
    spec: 
      replicas: 1 
      selector: 
        matchLabels: 
          app: azure-vote-back 
      template: 
        metadata: 
          labels: 
            app: azure-vote-back 
        spec: 
          nodeSelector: 
            "kubernetes.io/os": linux 
          containers: 
          - name: azure-vote-back 
            image: mcr.microsoft.com/oss/bitnami/redis:6.0.8 
            env: 
            - name: ALLOW_EMPTY_PASSWORD 
              value: "yes" 
            resources: 
              requests: 
                cpu: 100m 
                memory: 128Mi 
              limits: 
                cpu: 250m 
                memory: 256Mi 
            ports: 
            - containerPort: 6379 
              name: redis 
    ---
    apiVersion: v1
    kind: Service 
    metadata: 
      name: azure-vote-back 
    spec: 
      ports: 
      - port: 6379 
      selector: 
        app: azure-vote-back 
    --- 
    apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
      name: azure-vote-front 
    spec: 
      replicas: 1 
      selector: 
        matchLabels: 
          app: azure-vote-front 
      template: 
        metadata: 
          labels: 
            app: azure-vote-front 
        spec: 
          nodeSelector: 
            "kubernetes.io/os": linux 
          containers: 
          - name: azure-vote-front 
            image: mcr.microsoft.com/azuredocs/azure-vote-front:v1 
            resources: 
              requests: 
                cpu: 100m 
                memory: 128Mi 
              limits: 
                cpu: 250m 
                memory: 256Mi 
            ports: 
            - containerPort: 80 
            env: 
            - name: REDIS 
              value: "azure-vote-back" 
    --- 
    apiVersion: v1 
    kind: Service 
    metadata: 
      name: azure-vote-front 
    spec: 
      type: LoadBalancer 
      ports: 
      - port: 80 
      selector: 
        app: azure-vote-front

kubectl apply コマンドを使用してアプリケーションをデプロイし、YAML の名前を指定します。

kubectl apply -f azure-vote.yaml --kubeconfig .\\aks-arc-kube-config

次の出力例は、正常に作成されたデプロイおよびサービスを示しています。

deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created

アプリケーションをテストする

アプリケーションが実行されると、Kubernetes サービスによってアプリケーション フロントエンドがインターネットに公開されます。 このプロセスが完了するまでに数分かかることがあります。

kubectl get service コマンドと --watch 引数を使用して、進行状況を監視します。

kubectl get service azure-vote-front --watch --kubeconfig .\aks-arc-kube-config

azure-vote-front サービスの EXTERNAL-IP 出力は、最初は保留中と表示 されます

NAME             TYPE         CLUSTER-IP EXTERNAL-IP PORT(S)      AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending>   80:30572/TCP 6s

EXTERNAL-IP アドレスが保留中から実際のパブリック IP アドレスに変わったら、Ctrl キーを押しながら C キーを押して kubectl watch プロセスを停止します。 次の出力例は、サービスに割り当てられている有効なパブリック IP アドレスを示しています。

azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m

Azure Vote アプリが動作していることを確認するには、Web ブラウザーを開いてサービスの外部 IP アドレスにアクセスします。

クラスターを削除する

コマンドをaz aksarc delete実行して、作成したクラスターをクリーンします。

az aksarc delete --resource-group $aksclustername --name $resource_group

次の手順