Azure Stack Hub に AKS エンジンを使用して Kubernetes クラスターをデプロイする

AKS エンジンを実行しているクライアント VM から、Azure Stack Hub に Kubernetes クラスターをデプロイできます。 この記事では、クラスター仕様の記述、 apimodel.json ファイルを使用したクラスターのデプロイ、Helm を使用した MySQL のデプロイによるクラスターの確認について説明します。

クラスター仕様の定義

API モデルと呼ばれる JSON 形式を使用して、ドキュメント ファイルでクラスター仕様を指定できます。 AKS エンジンは、API モデルのクラスター仕様を使用してクラスターを作成します。

ご使用の OS の API モデルの例と最新リリースの AKS エンジンのバージョン番号は、AKS エンジンと対応するイメージ マッピングにあります。

  1. テーブルで、AKS エンジンのバージョン番号 (例: v.0.63.0) を検索します。
  2. API モデルのサンプル テーブルで、OS のリンクを選択して開きます。
  3. [Raw](未フォーマット) を選択します。 URL は、次の手順で使用できます。

API モデルの URL は次のようになります。

https://raw.githubusercontent.com/Azure/aks-engine-azurestack/master/examples/azure-stack/kubernetes-azurestack.json

次の各サンプルでは、<URL for the API Model> を URL に置き換える必要があります。

API モデルの更新

このセクションでは、クラスターの API モデルの作成について説明します。

  1. Linux 用または Windows 用の Azure Stack Hub API モデル ファイルを使用して開始します。 AKS エンジンをインストールしたマシンから、次を実行します。

    curl -o kubernetes-azurestack.json <URL for the API Model>
    

    Note

    切断されている場合は、ファイルをダウンロードして、編集する予定の切断されたマシンに手動でコピーすることができます。 PuTTY や WinSCP などのツールを使用して、ファイルを Linux マシンにコピーできます。

  2. API モデルをエディターで開くには、nano を使用できます。

    nano ./kubernetes-azurestack.json
    

    Note

    nano がインストールされていない場合は、Ubuntu で nano をインストールできます: sudo apt-get install nano

  3. kubernetes-azurestack.json ファイルで、orchestratorRelease と orchestratorVersion を見つけます。 サポートされている Kubernetes バージョンのいずれかを選択します。バージョン テーブルは、リリース ノートで確認できますorchestratorRelease を x.xx、orchestratorVersion を x.xx.x と指定します。 最新バージョンの一覧については、「サポートされている AKS エンジンのバージョン」を参照してください

  4. customCloudProfile を見つけ、テナント ポータルへの URL を指定します。 たとえば、「 https://portal.local.azurestack.external 」のように入力します。

  5. AD FS を使用している場合は、"identitySystem":"adfs" を追加します。 たとえば、次のように入力します。

        "customCloudProfile": {
            "portalURL": "https://portal.local.azurestack.external",
            "identitySystem": "adfs"
        },
    

    Note

    ID システムMicrosoft Entra ID を使用している場合は、identitySystem フィールドを追加する必要はありません。

  6. masterProfile で、次のフィールドを編集します。

    フィールド 説明
    dnsPrefix VM のホスト名を識別するために使用される一意の文字列を入力します。 たとえば、リソース グループ名に基づいて名前を指定します。
    count デプロイに必要なマスターの数を入力します。 HA デプロイの最小値は 3 ですが、非 HA デプロイでは 1 が許可されます。
    vmSize Azure Stack Hub でサポートされているサイズ (例: Standard_D2_v2) を入力します。
    ディストリビューション aks-ubuntu-18.04 または aks-ubuntu-20.04 を入力します。
  7. agentPoolProfiles で、以下を更新します。

    フィールド 説明
    count デプロイに必要なエージェントの数を入力します。 サブスクリプションごとに使用するノードの最大数は 50 です。 サブスクリプションごとに複数のクラスターをデプロイする場合は、エージェントの合計数が 50 を超えないようにしてください。 API モデルの JSON ファイルのサンプルで指定されている構成アイテムを使用してください。
    vmSize Azure Stack Hub でサポートされているサイズ (例: Standard_D2_v2) を入力します。
    ディストリビューション aks-ubuntu-18.04aks-ubuntu-20.04、または Windows を入力します。
    Windows で実行されるエージェントには Windows を使用します。 例については、kubernetes-windows.json を参照してください。
  8. linuxProfile で、以下を更新します。

    フィールド 説明
    adminUsername VM の管理者ユーザー名を入力します。
    ssh VM での SSH 認証に使用される公開キーを入力します。 ssh-rsa およびキーを使用します。 公開キーを作成する手順については、「Linux 用の SSH キーを作成する」を参照してください。

    カスタム仮想ネットワークにデプロイする場合、API モデルの適切な配列に必要なキーと値を見つけて追加する手順は、カスタム仮想ネットワークへの Kubernetes クラスターのデプロイに関する記事で確認できます。

    Note

    Azure Stack Hub 用の AKS エンジンでは、クラスターを作成するための独自の証明書を提供することはできません。

  9. Windows を使用している場合は、windowsProfileadminUsername:adminPassword の値を更新します。

    "windowsProfile": {
    "adminUsername": "azureuser",
    "adminPassword": "",
    "sshEnabled": true
    }
    

API モデルに関する詳細情報

  • API モデルで使用可能なすべてのオプションの完全なリファレンスについては、クラスターの定義に関する記事を参照してください。
  • Azure Stack Hub の特定のオプションに関する詳細については、Azure Stack Hub クラスター定義の詳細に関する記事を参照してください。

ASDK を使用するときに証明書を追加する

Azure Stack Development Kit (ASDK) にクラスターをデプロイし、Linux を使用している場合は、AKS エンジンを実行しているクライアント VM の信頼された証明書ストアにルート証明書を追加する必要があります。

  1. 次のディレクトリで、VM のルート証明書を見つけます: /var/lib/waagent/Certificates.pem.
  2. 証明書ファイルをコピーします。
    sudo cp /var/lib/waagent/Certificates.pem /usr/local/share/ca-certificates/azurestacka.crt
    sudo update-ca-certificates
    

Kubernetes クラスターのデプロイ

API モデルで必要なすべての値を収集したら、クラスターを作成できます。 この時点で、次のことを行う必要があります。

Azure Stack Hub オペレーターに次のことを依頼します。

  • システムの正常性を確認し、Test-AzureStack および OEM ベンダーのハードウェア監視ツールの実行を提案します。
  • メモリ、ストレージ、パブリック IP などのリソースを含むシステム容量を確認します。
  • 使用する予定の VM の数に十分な領域があることを確認できるように、サブスクリプションに関連付けられているクォータの詳細を指定します。

クラスターのデプロイに進む:

  1. Azure Stack Hub の CLI フラグで、AKS エンジンで使用可能なパラメーターを確認します。

    パラメーター 説明
    azure-env AzureStackCloud AKS エンジンに対して、ターゲット プラットフォームが Azure Stack Hub であることを示すには、AzureStackCloud を使用します。
    identity-system adfs 省略可能。 Active Directory フェデレーション サービス (AD FS) を使用している場合に、ID 管理ソリューションを指定します。
    location local Azure Stack Hub のリージョン名。 ASDK の場合、リージョンは local に設定されます。
    resource-group kube-rg 新しいリソース グループの名前を入力するか、既存のリソース グループを選択します。 リソース名は、英数字かつ小文字にする必要があります。
    api-model ./kubernetes-azurestack.json クラスター構成ファイルまたは API モデルへのパス。
    output-directory kube-rg 出力ファイル apimodel.json とその他の生成されたファイルを格納するディレクトリの名前を入力します。
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx サービス プリンシパル GUID を入力します。 Azure Stack Hub 管理者がサービス プリンシパルを作成したときにアプリケーション ID として識別されたクライアント ID。
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx サービス プリンシパル シークレットを入力します。 クライアント シークレットは、サービスの作成時に設定します。
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx サブスクリプション ID を入力します。 テナントのサブスクリプションを指定する必要があります。 管理サブスクリプションへのデプロイはサポートされません。 詳細については、「プランへのサブスクライブ」を参照してください。

    たとえば次のようになります。

    Note

    AKSe バージョン 0.75.3 以降の場合、AKS エンジン クラスターをデプロイするコマンドは です aks-engine-azurestack deploy

    aks-engine deploy \
    --azure-env AzureStackCloud \
    --location <for asdk is local> \
    --resource-group kube-rg \
    --api-model ./kubernetes-azurestack.json \
    --output-directory kube-rg \
    --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --identity-system adfs # required if using AD FS
    
  2. 何らかの理由で出力ディレクトリの作成後に実行が失敗する場合は、問題を修正し、コマンドを再実行できます。 デプロイを再実行していて、以前に同じ出力ディレクトリを使用していた場合、AKS エンジンはディレクトリが既に存在することを示すエラーを返します。 フラグ --force-overwrite を使用すると、既存のディレクトリを上書きできます。

  3. AKS エンジン クラスター構成を、安全で暗号化された場所に保存します。

    ファイル apimodel.json を見つけます。 安全な場所に保存します。 このファイルは、他のすべての AKS エンジン操作で入力として使用されます。

    生成された apimodel.json ファイルには、入力 API モデルで使用するサービス プリンシパル、シークレット、SSH 公開キーが含まれています。 ファイルには、他のすべての操作を実行するために AKS エンジンに必要な他のすべてのメタデータも含まれています。 ファイルを失った場合、AKS エンジンはクラスターを構成できません。

    シークレットは暗号化されていません。 ファイルは暗号化された安全な場所に保管してください。

クラスターを確認する

に接続し、情報を kubectl取得し、ノードの状態を取得して、クラスターを確認します。

  1. コントロール プレーンに接続する kubeconfig ファイルを取得します。

    • 既にインストールされている場合はkubectl、新しく作成したクラスターのファイルをkubeconfigこのディレクトリ パス にチェックします/kubeconfig/kubeconfig.json。 をディレクトリに追加 /kubeconfig.json して、 .kube 新しいクラスターにアクセスできます。
      kubectl をインストールしていない場合は、「Install Tools」を参照し、Kubernetes コマンドライン ツールをインストールします。 それ以外の場合は、次の手順に従って、いずれかのコントロール プレーン ノードからクラスターにアクセスします。
  2. Azure Stack Hub ポータルを使用して、いずれかのコントロール プレーン ノードのパブリック IP アドレスを取得します。

  3. Azure Stack Hub インスタンスにアクセスできるマシンから、PuTTY や MobaXterm などのクライアントを使用して、SSH 経由で新しいコントロール プレーン ノードに接続します。

  4. SSH ユーザー名には、"azureuser" と、クラスターのデプロイに指定したキー ペアの秘密キー ファイルを使用します。

  5. 次のようにして、クラスター エンドポイントが実行されていることを確認します。

    kubectl cluster-info
    

    出力は次のようになります。

    Kubernetes master is running at https://democluster01.location.domain.com
    CoreDNS is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    Metrics-server is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
    
  6. 次に、ノードの状態を確認します。

    kubectl get nodes
    

    出力は次のようになります。

    k8s-linuxpool-29969128-0   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-1   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-2   Ready      agent    9d    v1.15.5
    k8s-master-29969128-0      Ready      master   9d    v1.15.5
    k8s-master-29969128-1      Ready      master   9d    v1.15.5
    k8s-master-29969128-2      Ready      master   9d    v1.15.5
    

クラスターのデプロイのトラブルシューティング

AKS エンジンを使用して Kubernetes クラスターをデプロイしているときにエラーが発生した場合は、次のチェックできます。

  1. 正しいサービス プリンシパル資格情報 (SPN) を使用していますか?
  2. SPN には Azure Stack Hub サブスクリプションに対する "共同作成者" ロールがありますか?
  3. Azure Stack Hub プランに十分な大きさのクォータがありますか?
  4. Azure Stack Hub インスタンスには、適用される修正プログラムまたはアップグレードがありますが?

詳細については、Azure/aks-engine-azurestack GitHub リポジトリのトラブルシューティングに関する記事を参照してください。

サービス プリンシパル シークレットのローテーション

AKS エンジンを使用して Kubernetes クラスターをデプロイすると、Azure Stack Hub インスタンスでの Azure Resource Manager との対話を管理するために、サービス プリンシパル (SPN) が使用されます。 ある時点で、このサービス プリンシパルのシークレットの有効期限が切れるおそれがあります。 シークレットの有効期限が切れた場合は、次の方法で資格情報を更新できます。

  • 新しいサービス プリンシパル シークレットを使用して各ノードを更新する。
  • または、API モデルの資格情報を更新し、アップグレードを実行する。

各ノードを手動で更新する

  1. クラウド オペレーターからサービス プリンシパルの新しいシークレットを取得します。 Azure Stack Hub の手順については、「アプリ ID を使用して Azure Stack Hub リソースにアクセスする」を参照してください。
  2. クラウド オペレーターによって提供される新しい資格情報を使用して、各ノード で /etc/kubernetes/azure.json を 更新します。 更新を行った後、 と の両方 kubelekube-controller-manager再起動します。

aks-engine の更新プログラムを使用してクラスターを更新する

または、 apimodel.json の資格情報を置き換え、更新された .json ファイルを使用して同じまたは新しい Kubernetes バージョンにアップグレードを実行することもできます。 モデルをアップグレードする手順については、「Azure Stack Hub で Kubernetes クラスターをアップグレードする」を参照してください。

次のステップ