Service Fabric マネージド クラスター上の Dedicated Hosts の概要
Azure 専用ホストは、1 つの Azure サブスクリプションに対して専用の物理サーバーを提供するサービスであり、1 つ以上の仮想マシンをホストできます。 サーバーは組織専用であり、ワークロードと容量は他のユーザーと共有されません。 専用ホストは、データ センターで使用されるものと同じ物理サーバーであり、リソースとして提供されます。 リージョン、可用性ゾーン、障害ドメイン内に専用ホストをプロビジョニングできます。 次に、プロビジョニングされたホストに VM を直接配置し、ニーズに最も合った構成にすることができます。
Service Fabric マネージド クラスター (SFMC) でノードに Azure Dedicated Host を使用することには、次のような利点があります。
- 物理サーバー レベルでのホスト レベルのハードウェアの分離。 他の VM はホスト上に配置されません。 専用ホストは同じデータ センターに展開され、他の分離されていないホストと同じネットワークおよび基になるストレージ インフラストラクチャを共有します。
- Azure プラットフォームによって開始されるメンテナンス イベントの制御。 ほとんどのメンテナンス イベントでは仮想マシンに対する影響はほとんど、またはまったくありませんが、1 秒間の一時停止が影響する可能性のある機密性の高いワークロードがいくつかあります。 専用ホストを使用すると、メンテナンス期間を選択して、サービスへの影響を軽減できます。
ワークロードの要件に基づいて、Dedicated Host の Virtual Machines の SKU を選択できます。 詳細については、「Dedicated Host の Virtual Machines」を参照してください。
次のガイドでは、Azure Resource Manager テンプレートを使用して Azure Dedicated Host を Service Fabric マネージド クラスターに追加する方法について、手順を追って説明します。
前提条件
このガイドは、マネージド クラスターのクイック スタート ガイド「Azure Resource Manager を使用して Service Fabric マネージド クラスターをデプロイする」に基づいています。
作業を開始する前に、次のことを行います。
- Azure サブスクリプションを持っていない場合は無料アカウントを作成する
- マネージド クラスター ARM テンプレートを取得します。 サンプルの Resource Manager テンプレートは、GitHub の Azure サンプルで入手できます。 これらのテンプレートは、クラスター テンプレートの作成を始める際に使用できます。 このガイドでは、2 つのノードの種類と 12 個のノードを持つ Standard SKU クラスターをデプロイする方法を示します。
- ユーザーがホスト グループでロールの割り当てを行うには、ユーザー アクセス管理者や所有者 などのホスト グループに対する Microsoft.Authorization/roleAssignments/write アクセス許可が必要です。 詳細については、「Azure portal を使用して Azure ロールを割り当てる - Azure RBAC」を参照してください。
テンプレートを確認する
このガイドで使用するテンプレートは、Azure サンプルの Service Fabric クラスター テンプレートから入手したものです。
クライアント証明書を作成する
Service Fabric マネージド クラスターでは、アクセスの制御用のキーとしてクライアント証明書が使用されます。 クラスターへのアクセスの制御に使用するクライアント証明書が既にある場合は、この手順はスキップしてかまいません。
新しいクライアント証明書を作成する必要がある場合は、Azure Key Vault から証明書の設定と取得を行う方法に関するページの手順に従ってください。 証明書の拇印を書き留めておいてください。これは次の手順でテンプレートをデプロイする際に必要となります。
Dedicated Host のリソースをデプロイし、Service Fabric リソース プロバイダーへのアクセスを構成する
専用ホスト グループを作成し、次の手順に従って Service Fabric リソース プロバイダー アプリケーションを使用してホスト グループにロールの割り当てを追加します。 このロールの割り当てにより、Service Fabric リソース プロバイダーは、ホスト グループ内の Dedicated Host 上の VM をマネージド クラスターの仮想マシン スケール セットにデプロイできます。 この割り当ては 1 回限りの操作です。
SFRP プロバイダー ID と Service Fabric リソース プロバイダー アプリケーションのサービス プリンシパルを取得します。
Login-AzAccount Select-AzSubscription -SubscriptionId <SubId> Get-AzADServicePrincipal -DisplayName "Azure Service Fabric Resource Provider"
Note
正しいサブスクリプションを使用していることを確認します。サブスクリプションが別のテナントにある場合は、プリンシパル ID が変わります。
提供されている Dedicated Host グループ用のサンプル ARM デプロイ テンプレートを使用して、1 つの可用性ゾーンと 5 つの障害ドメインにピン留めされた専用ホスト グループを作成します。 このサンプルでは、障害ドメインごとに少なくとも 1 つの専用ホストが存在します。
New-AzResourceGroup -Name $ResourceGroupName -Location $location New-AzResourceGroupDeployment -Name "hostgroup-deployment" -ResourceGroupName $ResourceGroupName -TemplateFile ".\HostGroup-And-RoleAssignment.json" -TemplateParameterFile ".\HostGroup-And-RoleAssignment.parameters.json" -Debug -Verbose
注意
- 基になるノードの種類の VM SKU に使用するものと一致する、Dedicated Host の正しい SKU ファミリを選択するようにしてください。 詳細については、「Dedicated Host の Virtual Machines」を参照してください。
- 各障害ドメインには専用ホストを配置する必要があり、Service Fabric マネージド クラスターには 5 つの障害ドメインが必要です。 したがって、各専用ホスト グループには、少なくとも 5 つの専用ホストが存在する必要があります。
前の手順で使用した Dedicated Host グループ用のサンプル ARM デプロイ テンプレートでは、共同作成者のアクセス権を持つロールの割り当てもホスト グループに追加されます。 Azure ロールの詳細については、「Azure 組み込みロール - Azure RBAC」を参照してください。 このロールの割り当ては、最初の手順で決定されたプリンシパル ID とロール定義 ID を使用して、テンプレートのリソース セクションで定義されます。
"variables": { "authorizationApiVersion": "2018-01-01-preview", "contributorRoleId": "b24988ac-6180-42a0-ab88-20f7382dd24c", "SFRPAadServicePrincipalId": " <Service Fabric Resource Provider ID> -" }, "resources": [ { "apiVersion": "[variables('authorizationApiVersion')]", "type": "Microsoft.Compute/Hostgroups/providers/roleAssignments", "name": "[concat(concat(parameters('dhgNamePrefix'), '0'), '/Microsoft.Authorization/', parameters('hostGroupRoleAssignmentId'))]", "dependsOn": [ "[resourceId('Microsoft.Compute/hostGroups', concat(parameters('dhgNamePrefix'), '0'))]" ], "properties": { "roleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', variables('contributorRoleId'))]", "principalId": "[variables('SFRPAadServicePrincipalId')]" } } ]
または、必要に応じて、最初の手順で決定されたプリンシパル ID とロール定義名を「共同作成者」として使用し、PowerShell を介してロールの割り当てを追加することもできます。
New-AzRoleAssignment -PrincipalId "<Service Fabric Resource Provider ID>" -RoleDefinitionName "Contributor" -Scope "<Host Group Id>"
Service Fabric マネージド クラスターをデプロイする
Dedicated Host グループのリソース ID を参照するように構成されたノードの種類の Azure Service Fabric マネージド クラスターを作成します。 ノードの種類は、ホスト グループと同じ可用性ゾーンにピン留めする必要があります。
Dedicated Host 用の Service Fabric クラスター サンプル テンプレートからテンプレートを選択します。これには Dedicated Host のサポートの仕様が含まれます。
以下のテンプレート パラメーターに、独自の値を指定します。
- サブスクリプション: ホスト グループ サブスクリプションと同じ Azure サブスクリプションを選択します。
- リソース グループ: [新規作成] を選択します。 リソース グループの一意の名前 (myResourceGroup など) を入力し、 [OK] を選択します。
- 場所: ホスト グループの場所と同じ場所を選択します。
- クラスター名:自分のクラスター用に一意の名前 (mysfcluster など) を入力します。
- 管理ユーザー名: クラスター内の基になる VM で RDP に使用する管理者の名前を入力します。
- 管理パスワード: クラスター内の基になる VM で RDP に使用する管理者のパスワードを入力します。
- クライアント証明書の拇印:クラスターにアクセスするために使用するクライアント証明書の拇印を指定します。 証明書がない場合は、証明書の設定と取得に関する手順に従って、自己署名証明書を作成します。
- ノード タイプ名: ノード タイプの一意の名前を入力します (例: nt1)。
次のいずれかの方法で ARM テンプレートをデプロイします。
ARM ポータルのカスタム テンプレート エクスペリエンス: カスタム デプロイ - Microsoft Azure。 次の画像を選択して Azure にサインインし、テンプレート パラメーターに独自の値を指定してから、テンプレートをデプロイします。
ARM PowerShell コマンドレット: New-AzResourceGroupDeployment (Az.Resources)。 ARM テンプレートとパラメーター ファイルのパスを変数に格納し、テンプレートをデプロイします。
$templateFilePath = "<full path to azuredeploy.json>" $parameterFilePath = "<full path to azuredeploy.parameters.json>" $pass = (ConvertTo-SecureString -AsPlainText -Force "<adminPassword>") New-AzResourceGroupDeployment ` -Name $DeploymentName ` -ResourceGroupName $resourceGroupName ` -TemplateFile $templateFilePath ` -TemplateParameterFile $parameterFilePath ` -adminPassword $pass ` -Debug -Verbose
デプロイが正常に完了するまで待機します。
トラブルシューティング
- SFRP がホスト グループにアクセスできない場合、次のエラーがスローされます。 上記のロールの割り当て手順を確認し、割り当てが正しく実行されていることを確認します。
{ "code": "LinkedAuthorizationFailed", "message": "The client '[<clientId>]' with object id '[<objectId>]' has permission to perform action 'Microsoft.Compute/virtualMachineScaleSets/write' on scope '/subscriptions/[<Subs-Id>]/resourcegroups/[<ResGrp-Id>]/providers/Microsoft.Compute/virtualMachineScaleSets/pnt'; however, it does not have permission to perform action 'write' on the linked scope(s) '/subscriptions/[<Subs-Id>]/resourceGroups/[<ResGrp-Id>]/providers/Microsoft.Compute/hostGroups/HostGroupscu0' or the linked scope(s) are invalid." }
- ホスト グループがクラスターとは異なるサブスクリプションにある場合は、次のエラーが報告されます。 両方が同じサブスクリプションにあるようにしてください。
{ "code": "BadRequest", "message": "Entity subscriptionId in resource reference id /subscriptions/[<Subs-Id>]/resourceGroups/[<ResGrp-Id>]/providers/Microsoft.Compute/hostGroups/[<HostGroup>] is invalid." }
- ホスト グループのクォータが十分でない場合は、次のエラーがスローされます。
{ "code": "QuotaExceeded", "message": "Operation could not be completed as it results in exceeding approved standardDSv3Family Cores quota. Additional Required: 320, (Minimum) New Limit Required: 320. Submit a request for Quota increase [here](https://aka.ms/ProdportalCRP/#blade/Microsoft_Azure_Capacity/UsageAndQuota.ReactView/Parameters/). Please read more about quota limits [here](/azure/azure-supportability/per-vm-quota-requests)” }