Azure Stack Hub に AKS エンジンを使用して Kubernetes クラスターをデプロイする
AKS エンジンを実行しているクライアント VM から、Azure Stack Hub に Kubernetes クラスターをデプロイできます。 この記事では、クラスター仕様の記述、 apimodel.json ファイルを使用したクラスターのデプロイ、Helm を使用した MySQL のデプロイによるクラスターの確認について説明します。
クラスター仕様の定義
API モデルと呼ばれる JSON 形式を使用して、ドキュメント ファイルでクラスター仕様を指定できます。 AKS エンジンは、API モデルのクラスター仕様を使用してクラスターを作成します。
ご使用の OS の API モデルの例と最新リリースの AKS エンジンのバージョン番号は、AKS エンジンと対応するイメージ マッピングにあります。
- テーブルで、AKS エンジンのバージョン番号 (例:
v.0.63.0
) を検索します。 - API モデルのサンプル テーブルで、OS のリンクを選択して開きます。
- [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 モデルの作成について説明します。
Linux 用または Windows 用の Azure Stack Hub API モデル ファイルを使用して開始します。 AKS エンジンをインストールしたマシンから、次を実行します。
curl -o kubernetes-azurestack.json <URL for the API Model>
Note
切断されている場合は、ファイルをダウンロードして、編集する予定の切断されたマシンに手動でコピーすることができます。 PuTTY や WinSCP などのツールを使用して、ファイルを Linux マシンにコピーできます。
API モデルをエディターで開くには、nano を使用できます。
nano ./kubernetes-azurestack.json
Note
nano がインストールされていない場合は、Ubuntu で nano をインストールできます:
sudo apt-get install nano
。kubernetes-azurestack.json ファイルで、orchestratorRelease と orchestratorVersion を見つけます。 サポートされている Kubernetes バージョンのいずれかを選択します。バージョン テーブルは、リリース ノートで確認できます。
orchestratorRelease
を x.xx、orchestratorVersion を x.xx.x と指定します。 最新バージョンの一覧については、「サポートされている AKS エンジンのバージョン」を参照してくださいcustomCloudProfile
を見つけ、テナント ポータルへの URL を指定します。 たとえば、https://portal.local.azurestack.external
のようにします。AD FS を使用している場合は、
"identitySystem":"adfs"
を追加します。 たとえば、 にします。"customCloudProfile": { "portalURL": "https://portal.local.azurestack.external", "identitySystem": "adfs" },
Note
ID システムに Microsoft Entra ID を使用している場合は、 identitySystem フィールドを追加する必要はありません。
masterProfile
で、次のフィールドを編集します。フィールド 説明 dnsPrefix VM のホスト名を識別するために使用される一意の文字列を入力します。 たとえば、リソース グループ名に基づいて名前を指定します。 count デプロイに必要なマスターの数を入力します。 HA デプロイの最小値は 3 ですが、非 HA デプロイでは 1 が許可されます。 vmSize Azure Stack Hub でサポートされているサイズ (例: Standard_D2_v2
) を入力します。ディストリビューション aks-ubuntu-18.04
またはaks-ubuntu-20.04
を入力します。agentPoolProfiles
で、以下を更新します。フィールド 説明 count デプロイに必要なエージェントの数を入力します。 サブスクリプションごとに使用するノードの最大数は 50 です。 サブスクリプションごとに複数のクラスターをデプロイする場合は、エージェントの合計数が 50 を超えないようにしてください。 API モデルの JSON ファイルのサンプルで指定されている構成アイテムを使用してください。 vmSize Azure Stack Hub でサポートされているサイズ (例: Standard_D2_v2
) を入力します。ディストリビューション aks-ubuntu-18.04
、aks-ubuntu-20.04
、またはWindows
を入力します。
Windows で実行されるエージェントにはWindows
を使用します。 例については、kubernetes-windows.json を参照してください。linuxProfile
で、以下を更新します。フィールド 説明 adminUsername VM の管理者ユーザー名を入力します。 ssh VM での SSH 認証に使用される公開キーを入力します。 ssh-rsa
およびキーを使用します。 公開キーを作成する手順については、「Linux 用の SSH キーを作成する」を参照してください。カスタム仮想ネットワークにデプロイする場合、API モデルの適切な配列に必要なキーと値を見つけて追加する手順は、カスタム仮想ネットワークへの Kubernetes クラスターのデプロイに関する記事で確認できます。
Note
Azure Stack Hub 用の AKS エンジンでは、クラスターを作成するための独自の証明書を提供することはできません。
Windows を使用している場合は、
windowsProfile
でadminUsername:
とadminPassword
の値を更新します。"windowsProfile": { "adminUsername": "azureuser", "adminPassword": "", "sshEnabled": true }
API モデルに関する詳細情報
- API モデルで使用可能なすべてのオプションの完全なリファレンスについては、クラスターの定義に関する記事を参照してください。
- Azure Stack Hub の特定のオプションに関する詳細については、Azure Stack Hub クラスター定義の詳細に関する記事を参照してください。
ASDK を使用するときに証明書を追加する
Azure Stack Development Kit (ASDK) にクラスターをデプロイし、Linux を使用している場合は、AKS エンジンを実行しているクライアント VM の信頼された証明書ストアにルート証明書を追加する必要があります。
- 次のディレクトリで、VM のルート証明書を見つけます:
/var/lib/waagent/Certificates.pem.
- 証明書ファイルをコピーします。
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 の数に十分な領域があることを確認できるように、サブスクリプションに関連付けられているクォータの詳細を指定します。
クラスターのデプロイに進む:
Azure Stack Hub の CLI フラグで、AKS エンジンで使用可能なパラメーターを確認します。
パラメーター 例 説明 azure-env AzureStackCloud AKS エンジンに対して、ターゲット プラットフォームが Azure Stack Hub であることを示すには、 AzureStackCloud
を使用します。identity-system adfs 省略可能。 Active Directory フェデレーション サービス (AD FS) を使用している場合に、ID 管理ソリューションを指定します。 location ローカル 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
何らかの理由で出力ディレクトリの作成後に実行が失敗する場合は、問題を修正し、コマンドを再実行できます。 デプロイを再実行していて、以前に同じ出力ディレクトリを使用していた場合、AKS エンジンは、ディレクトリが既に存在することを示すエラーを返します。 フラグ
--force-overwrite
を使用すると、既存のディレクトリを上書きできます。AKS エンジン クラスター構成を、安全で暗号化された場所に保存します。
apimodel.jsonファイルを見つけます。 安全な場所に保存します。 このファイルは、他のすべての AKS エンジン操作で入力として使用されます。
生成された apimodel.json ファイルには、入力 API モデルで使用するサービス プリンシパル、シークレット、SSH 公開キーが含まれています。 ファイルには、AKS エンジンが他のすべての操作を実行するために必要な他のすべてのメタデータも含まれています。 ファイルが失われると、AKS エンジンはクラスターを構成できなくなります。
シークレットは暗号化されていません。 ファイルは暗号化された安全な場所に保管してください。
クラスターを確認する
クラスターを確認するには、 kubectl
に接続し、情報を取得し、ノードの状態を取得します。
コントロール プレーンに接続する
kubeconfig
ファイルを取得します。kubectl
が既にインストールされている場合は、このディレクトリ パス/kubeconfig/kubeconfig.json
に新しく作成されたクラスターのkubeconfig
ファイルを確認します。/kubeconfig.json
を.kube
ディレクトリに追加し、名前を "config" に変更して新しいクラスターにアクセスできます。
kubectl
をインストールしていない場合は、「Install Tools」を参照し、Kubernetes コマンドライン ツールをインストールします。 それ以外の場合は、次の手順に従って、コントロール プレーン ノードの 1 つからクラスターにアクセスします。
Azure Stack Hub ポータルを使用して、いずれかのコントロール プレーン ノードのパブリック IP アドレスを取得します。
Azure Stack Hub インスタンスにアクセスできるマシンから、PuTTY や MobaXterm などのクライアントを使用して SSH 経由で新しいコントロール プレーン ノードに接続します。
SSH ユーザー名には、クラスターのデプロイに指定したキー ペアの "azureuser" と秘密キー ファイルを使用します。
次のようにして、クラスター エンドポイントが実行されていることを確認します。
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
次に、ノードの状態を確認します。
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 クラスターをデプロイ中にエラーが発生した場合は、次のことを確認できます。
- 正しいサービス プリンシパル資格情報 (SPN) を使用していますか?
- SPN には Azure Stack Hub サブスクリプションに対する "共同作成者" ロールがありますか?
- Azure Stack Hub プランに十分な大きさのクォータがありますか?
- Azure Stack Hub インスタンスには、適用される修正プログラムまたはアップグレードがありますが?
詳細については、Azure/aks-engine-azurestack GitHub リポジトリの Troubleshooting に関する記事を参照してください。
サービス プリンシパル シークレットのローテーション
AKS エンジンを使用して Kubernetes クラスターをデプロイすると、Azure Stack Hub インスタンスでの Azure Resource Manager との対話を管理するために、サービス プリンシパル (SPN) が使用されます。 ある時点で、このサービス プリンシパルのシークレットの有効期限が切れるおそれがあります。 シークレットの有効期限が切れた場合は、次の方法で資格情報を更新できます。
- 新しいサービス プリンシパル シークレットを使用して各ノードを更新する。
- または、API モデルの資格情報を更新し、アップグレードを実行する。
各ノードを手動で更新する
- クラウド オペレーターからサービス プリンシパルの新しいシークレットを取得します。 Azure Stack Hub の手順については、「アプリ ID を使用して Azure Stack Hub リソースにアクセスする」を参照してください。
- クラウド オペレーターによって提供される新しい資格情報を使用して、各ノードの /etc/kubernetes/azure.json を更新します。 更新を行った後、
kubele
とkube-controller-manager
の両方を再起動します。
aks-engine の更新プログラムを使用してクラスターを更新する
または、 apimodel.json の資格情報を置き換え、更新された .json ファイルを使用して同じまたは新しい Kubernetes バージョンにアップグレードを実行することもできます。 モデルをアップグレードする手順については、「Azure Stack Hub で Kubernetes クラスターをアップグレードする」を参照してください。