2.3. Azure でのマシンセットの作成
Microsoft Azure 上の OpenShift Container Platform クラスターで特定の目的を果たすように異なるマシンセットを作成することができます。たとえば、インフラストラクチャーマシンセットおよび関連マシンを作成して、サポートするワークロードを新しいマシンに移動できます。
高度なマシン管理およびスケーリング機能は、マシン API が機能しているクラスターでのみ使用することができます。ユーザーがプロビジョニングしたインフラストラクチャーを持つクラスターでは、マシン API を使用するために追加の検証と設定が必要です。
インフラストラクチャープラットフォームタイプが none
のクラスターは、マシン API を使用できません。この制限は、クラスターに接続されている計算マシンが、この機能をサポートするプラットフォームにインストールされている場合でも適用されます。このパラメーターは、インストール後に変更することはできません。
クラスターのプラットフォームタイプを表示するには、以下のコマンドを実行します。
$ oc get infrastructure cluster -o jsonpath='{.status.platform}'
2.3.1. Azure 上のマシンセットのカスタムリソースのサンプル YAML
このサンプル YAML は、リージョンの 1
Microsoft Azure ゾーンで実行され、node-role.kubernetes.io/<role>: ""
というラベルの付けられたノードを作成するマシンセットを定義します。
このサンプルでは、<infrastructure_id>
はクラスターのプロビジョニング時に設定したクラスター ID に基づくインフラストラクチャー ID であり、<role>
は追加するノードラベルです。
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1 machine.openshift.io/cluster-api-machine-role: <role> 2 machine.openshift.io/cluster-api-machine-type: <role> 3 name: <infrastructure_id>-<role>-<region> 4 namespace: openshift-machine-api spec: replicas: 1 selector: matchLabels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5 machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<region> 6 template: metadata: creationTimestamp: null labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 7 machine.openshift.io/cluster-api-machine-role: <role> 8 machine.openshift.io/cluster-api-machine-type: <role> 9 machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<region> 10 spec: metadata: creationTimestamp: null labels: machine.openshift.io/cluster-api-machineset: <machineset_name> 11 node-role.kubernetes.io/<role>: "" 12 providerSpec: value: apiVersion: azureproviderconfig.openshift.io/v1beta1 credentialsSecret: name: azure-cloud-credentials namespace: openshift-machine-api image: 13 offer: "" publisher: "" resourceID: /resourceGroups/<infrastructure_id>-rg/providers/Microsoft.Compute/images/<infrastructure_id> 14 sku: "" version: "" internalLoadBalancer: "" kind: AzureMachineProviderSpec location: <region> 15 managedIdentity: <infrastructure_id>-identity 16 metadata: creationTimestamp: null natRule: null networkResourceGroup: "" osDisk: diskSizeGB: 128 managedDisk: storageAccountType: Premium_LRS osType: Linux publicIP: false publicLoadBalancer: "" resourceGroup: <infrastructure_id>-rg 17 sshPrivateKey: "" sshPublicKey: "" tags: - name: <custom_tag_name> 18 value: <custom_tag_value> 19 subnet: <infrastructure_id>-<role>-subnet 20 21 userDataSecret: name: worker-user-data 22 vmSize: Standard_D4s_v3 vnet: <infrastructure_id>-vnet 23 zone: "1" 24
- 1 5 7 16 17 20 23
- クラスターのプロビジョニング時に設定したクラスター ID を基にするインフラストラクチャー ID を指定します。OpenShift CLI がインストールされている場合は、以下のコマンドを実行してインフラストラクチャー ID を取得できます。
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
以下のコマンドを実行してサブネットを取得できます。
$ oc -n openshift-machine-api \ -o jsonpath='{.spec.template.spec.providerSpec.value.subnet}{"\n"}' \ get machineset/<infrastructure_id>-worker-centralus1
以下のコマンドを実行して vnet を取得できます。
$ oc -n openshift-machine-api \ -o jsonpath='{.spec.template.spec.providerSpec.value.vnet}{"\n"}' \ get machineset/<infrastructure_id>-worker-centralus1
- 2 3 8 9 12 21 22
- 追加するノードラベルを指定します。
- 4 6 10
- インフラストラクチャー ID、ノードラベル、およびリージョンを指定します。
- 11
- オプション: 可用性セットの使用を有効にするためにマシンセットの名前を指定します。この設定は、新規コンピュートマシンにのみ適用されます。
- 13
- マシンセットのイメージの詳細を指定します。Azure Marketplace イメージを使用する場合は、Azure Marketplace イメージの選択を参照してください。
- 14
- インスタンスタイプと互換性のあるイメージを指定します。インストールプログラムによって作成された Hyper-V 世代の V2 イメージには接尾辞
-gen2
が付いていますが、V1 イメージには接尾辞のない同じ名前が付いています。 - 15
- マシンを配置するリージョンを指定します。
- 24
- マシンを配置するリージョン内のゾーンを指定します。リージョンがゾーンをサポートすることを確認してください。
- 18 19
- オプション: マシンセットでカスタムタグを指定します。
<custom_tag_name>
フィールドにタグ名を指定し、対応するタグ値を<custom_tag_value>
フィールドに指定します。
2.3.2. マシンセットの作成
インストールプログラムによって作成されるコンピュートセットセットに加えて、独自のマシンセットを作成して、選択した特定のワークロードのマシンコンピューティングリソースを動的に管理できます。
前提条件
- OpenShift Container Platform クラスターをデプロイすること。
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
パーミッションを持つユーザーとして、oc
にログインする。
手順
説明されているようにマシンセット カスタムリソース (CR) サンプルを含む新規 YAML ファイルを作成し、そのファイルに
<file_name>.yaml
という名前を付けます。<clusterID>
および<role>
パラメーターの値を設定していることを確認します。オプション: 特定のフィールドに設定する値がわからない場合は、クラスターから既存のコンピュートマシンセットを確認できます。
クラスター内のコンピュートマシンセットをリスト表示するには、次のコマンドを実行します。
$ oc get machinesets -n openshift-machine-api
出力例
NAME DESIRED CURRENT READY AVAILABLE AGE agl030519-vplxk-worker-us-east-1a 1 1 1 1 55m agl030519-vplxk-worker-us-east-1b 1 1 1 1 55m agl030519-vplxk-worker-us-east-1c 1 1 1 1 55m agl030519-vplxk-worker-us-east-1d 0 0 55m agl030519-vplxk-worker-us-east-1e 0 0 55m agl030519-vplxk-worker-us-east-1f 0 0 55m
特定のコンピュートマシンセットカスタムリソース(CR)の値を表示するには、以下のコマンドを実行します。
$ oc get machineset <machineset_name> \ -n openshift-machine-api -o yaml
出力例
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1 name: <infrastructure_id>-<role> 2 namespace: openshift-machine-api spec: replicas: 1 selector: matchLabels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> template: metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machine-role: <role> machine.openshift.io/cluster-api-machine-type: <role> machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> spec: providerSpec: 3 ...
次のコマンドを実行して
MachineSet
CR を作成します。$ oc create -f <file_name>.yaml
検証
次のコマンドを実行して、コンピュートマシンセットのリストを表示します。
$ oc get machineset -n openshift-machine-api
出力例
NAME DESIRED CURRENT READY AVAILABLE AGE agl030519-vplxk-infra-us-east-1a 1 1 1 1 11m agl030519-vplxk-worker-us-east-1a 1 1 1 1 55m agl030519-vplxk-worker-us-east-1b 1 1 1 1 55m agl030519-vplxk-worker-us-east-1c 1 1 1 1 55m agl030519-vplxk-worker-us-east-1d 0 0 55m agl030519-vplxk-worker-us-east-1e 0 0 55m agl030519-vplxk-worker-us-east-1f 0 0 55m
新規のマシンセットが利用可能な場合、
DESIRED
およびCURRENT
の値は一致します。マシンセットが利用可能でない場合、数分待機してからコマンドを再度実行します。
2.3.3. Azure Marketplace イメージの選択
Azure Marketplace サービスを使用するマシンをデプロイする、Azure で実行するマシンセットを作成できます。このサービスを使用するには、まず Azure Marketplace イメージを取得する必要があります。イメージを取得するときは、次の点を考慮してください。
-
イメージは同じですが、Azure Marketplace のパブリシャーは地域によって異なります。北米にお住まいの場合は、
redhat
をパブリッシャーとして指定してください。EMEA にお住まいの場合は、redhat-limited
をパブリッシャーとして指定してください。 -
このオファーには、
rh-ocp-worker
SKU とrh-ocp-worker-gen1
SKU が含まれています。rh-ocp-worker
SKU は、Hyper-V 世代のバージョン 2 VM イメージを表します。OpenShift Container Platform で使用されるデフォルトのインスタンスタイプは、バージョン 2 と互換性があります。バージョン 1 のみと互換性のあるインスタンスタイプを使用する場合は、rh-ocp-worker-gen1
SKU に関連付けられたイメージを使用します。rh-ocp-worker-gen1
SKU は、Hyper-V バージョン 1 VM イメージを表します。
前提条件
-
Azure CLI クライアント
(az)
をインストールしている。 - お客様の Azure アカウントにはオファーのエンタイトルメントがあり、Azure CLI クライアントを使用してこのアカウントにログインしている。
手順
以下のいずれかのコマンドを実行して、利用可能なすべての OpenShift Container Platform イメージを表示します。
北米:
$ az vm image list --all --offer rh-ocp-worker --publisher redhat -o table
出力例
Offer Publisher Sku Urn Version ------------- -------------- ------------------ -------------------------------------------------------------- -------------- rh-ocp-worker RedHat rh-ocp-worker RedHat:rh-ocp-worker:rh-ocpworker:4.8.2021122100 4.8.2021122100 rh-ocp-worker RedHat rh-ocp-worker-gen1 RedHat:rh-ocp-worker:rh-ocp-worker-gen1:4.8.2021122100 4.8.2021122100
EMEA:
$ az vm image list --all --offer rh-ocp-worker --publisher redhat-limited -o table
出力例
Offer Publisher Sku Urn Version ------------- -------------- ------------------ -------------------------------------------------------------- -------------- rh-ocp-worker redhat-limited rh-ocp-worker redhat-limited:rh-ocp-worker:rh-ocp-worker:4.8.2021122100 4.8.2021122100 rh-ocp-worker redhat-limited rh-ocp-worker-gen1 redhat-limited:rh-ocp-worker:rh-ocp-worker-gen1:4.8.2021122100 4.8.2021122100
注記インストールする OpenShift Container Platform のバージョンに関係なく、使用する Azure Marketplace イメージの正しいバージョンは 4.8.x です。必要に応じて、インストールプロセスの一環として、VM が自動的にアップグレードされます。
次のいずれかのコマンドを実行して、オファーのイメージを調べます。
北米:
$ az vm image show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
EMEA:
$ az vm image show --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
次のコマンドのいずれかを実行して、オファーの条件を確認します。
北米:
$ az vm image terms show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
EMEA:
$ az vm image terms show --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
次のコマンドのいずれかを実行して、オファリングの条件に同意します。
北米:
$ az vm image terms accept --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
EMEA:
$ az vm image terms accept --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
-
オファーのイメージの詳細 (具体的には
publisher
、offer
、sku
、およびversion
の値) を記録します。 オファーのイメージの詳細を使用して、マシンセット YAML ファイルの
providerSpec
セクションに次のパラメーターを追加します。Azure Marketplace コンピュートマシンのサンプルの
providerSpec
イメージ値providerSpec: value: image: offer: rh-ocp-worker publisher: redhat resourceID: "" sku: rh-ocp-worker type: MarketplaceWithPlan version: 4.8.2021122100
2.3.4. マシンを Spot 仮想マシンとしてデプロイするマシンセット
マシンを保証されていない Spot 仮想マシンとしてデプロイする Azure で実行されるマシンセットを作成して、コストを節約できます。Spot 仮想マシンは未使用の Azure 容量を使用し、標準の仮想マシンよりもコストが低くなります。Spot 仮想マシンは、バッチやステートレス、水平的に拡張可能なワークロードなどの割り込みを許容できるワークロードに使用することができます。
Azure は Spot 仮想マシンをいつでも終了できます。Azure は、中断の発生時にユーザーに警告を 30 秒間表示します。OpenShift Container Platform は、Azure が終了についての警告を発行する際に影響を受けるインスタンスからワークロードを削除し始めます。
以下の理由により、Spot 仮想マシンを使用すると中断が生じる可能性があります。
- インスタンス価格は最大価格を超えます。
- Spot 仮想マシンの供給は減少します。
- Azure は容量を戻す必要があります。
Azure がインスタンスを終了すると、Spot 仮想マシンノードで実行される終了ハンドラーによりマシンリソースが削除されます。マシンセットの replicas
の量を満たすために、マシンセットは Spot 仮想マシンを要求するマシンを作成します。
2.3.5. マシンセットの使用による Spot 仮想マシンの作成
spotVMOptions
をマシンセットの YAML ファイルに追加して、Azure で Spot 仮想マシンを起動できます。
手順
providerSpec
フィールドの下に以下の行を追加します。providerSpec: value: spotVMOptions: {}
オプションで、Spot 仮想マシンのコストを制限するために、
spotVMOptions.maxPrice
フィールドを設定できます。たとえば、maxPrice: '0.98765'
を設定できます。maxPrice
が設定されている場合、この値は毎時の最大 Spot 価格として使用されます。設定されていない場合、最大価格はデフォルトの-1
に設定され、標準の仮想マシン価格までチャージされます。Azure は標準価格で Spot 仮想マシン価格を制限します。インスタンスがデフォルトの
maxPrice
で設定されている場合、Azure は価格設定によりインスタンスをエビクトしません。ただし、インスタンスは容量の制限によって依然としてエビクトできます。
デフォルトの仮想マシンの標準価格を maxPrice
値として使用し、Spot 仮想マシンの最大価格を設定しないことが強く推奨されます。
2.3.6. マシンを一時 OS ディスクにデプロイするマシンセット
マシンを Ephemeral OS ディスクにデプロイする Azure で実行されるマシンセットを作成できます。Azure Ephemeral OS ディスクは、リモートの Azure Storage ではなく、ローカルの VM 容量を使用します。したがって、この設定により、追加コストがなく、読み取り、書き込み、および再イメージ化のレイテンシーが短くなります。
関連情報
- 詳細は、Ephemeral OS disks for Azure VMs についての Microsoft Azure ドキュメントを参照してください。
2.3.7. マシンセットの使用による一時 OS ディスクでのマシンの作成
マシンセット YAML ファイルを編集して、Azure で Ephemeral OS ディスクでマシンを起動できます。
前提条件
- 既存の Microsoft Azure クラスターがある。
手順
以下のコマンドを実行してカスタムリソース (CR) を編集します。
$ oc edit machineset <machine-set-name>
ここで、
<machine-set-name>
は、エフェメラル OS ディスクにマシンをプロビジョニングするマシンセットです。以下を
providerSpec
フィールドに追加します。providerSpec: value: ... osDisk: ... diskSettings: 1 ephemeralStorageLocation: Local 2 cachingType: ReadOnly 3 managedDisk: storageAccountType: Standard_LRS 4 ...
重要OpenShift Container Platform での Ephemeral OS ディスクのサポートの実装は、
CacheDisk
配置タイプのみをサポートします。placement
設定は変更しないでください。更新された設定を使用してマシンセットを作成します。
$ oc create -f <machine-set-config>.yaml
検証
-
Microsoft Azure ポータルで、マシンセットによってデプロイされたマシンの Overview ページを確認し、
Ephemeral OS ディスク
フィールドがOS
キャッシュ配置に設定されていることを確認します。
2.3.8. マシンセットの顧客管理の暗号鍵の有効化
Azure に暗号化キーを指定して、停止中に管理ディスクのデータを暗号化できます。マシン API を使用して、顧客管理の鍵でサーバー側の暗号化を有効にすることができます。
お客様が管理する鍵を使用するために、Azure Key Vault、ディスク暗号化セット、および暗号化キーが必要です。ディスク暗号化セットは、Cloud Credential Operator (CCO) にパーミッションが付与されたリソースグループに事前に存在する必要があります。これがない場合は、ディスク暗号化セットで追加のリーダーロールを指定する必要があります。
前提条件
手順
マシンセット YAML ファイルの
providerSpec
フィールドでディスクの暗号化キーを設定します。以下に例を示します。... providerSpec: value: ... osDisk: diskSizeGB: 128 managedDisk: diskEncryptionSet: id: /subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.Compute/diskEncryptionSets/<disk_encryption_set_name> storageAccountType: Premium_LRS ...
関連情報
- お客様が管理する鍵 についての詳細は、Azure ドキュメントを参照してください。
2.3.9. Microsoft Azure 仮想マシンのネットワークアクセラレート
アクセラレートネットワークは、Single Root I/O Virtualization (SR-IOV) を使用して、スイッチへのより直接的なパスを持つ Microsoft Azure 仮想マシンを提供します。これにより、ネットワークパフォーマンスが向上します。この機能は、インストール時またはインストール後に有効にできます。
2.3.9.1. 制限事項
Accelerated Networking を使用するかどうかを決定する際には、以下の制限を考慮してください。
- ネットワークのアクセラレートは、マシン API が機能しているクラスターでのみサポートされます。
-
Azure ワーカーノードの最小要件は 2 つの vCPU ですが、Accelerated Networking には 4 つ以上の vCPU を含む Azure 仮想マシンのサイズが必要です。この要件を満たすには、マシンセットの
vmSize
の値を変更します。Azure VM サイズの詳細は、Microsoft Azure のドキュメント を参照してください。 - この機能が既存の Azure クラスターで有効にされている場合、新たにプロビジョニングされたノードのみが影響を受けます。現在実行中のノードは調整されていません。全ノードで機能を有効にするには、それぞれの既存マシンを置き換える必要があります。これは、各マシンに対して個別に行うか、レプリカをゼロにスケールダウンしてから、必要なレプリカ数にスケールアップして実行できます。
関連情報
- インストール時に Accelerated Networking を有効にする方法は、インストール時にネットワークが 高速化されるネットワークの有効化を参照してください。
2.3.10. 既存の Microsoft Azure クラスターでの Accelerated Networking の有効化
Azure で Accelerated Networking を有効にするには、Networking を
マシンセットの YAML ファイルに追加します。
前提条件
- マシン API が機能している既存の Microsoft Azure クラスターがあること。
手順
以下のコマンドを実行して、クラスター内のマシンセットを一覧表示します。
$ oc get machinesets -n openshift-machine-api
マシンセットは
<cluster-id>-worker-<region>
の形式で一覧表示されます。出力例
NAME DESIRED CURRENT READY AVAILABLE AGE jmywbfb-8zqpx-worker-centralus1 1 1 1 1 15m jmywbfb-8zqpx-worker-centralus2 1 1 1 1 15m jmywbfb-8zqpx-worker-centralus3 1 1 1 1 15m
それぞれのマシンセットについて以下を実行します。
以下のコマンドを実行してカスタムリソース (CR) を編集します。
$ oc edit machineset <machine-set-name>
以下を
providerSpec
フィールドに追加します。providerSpec: value: ... acceleratedNetworking: true 1 ... vmSize: <azure-vm-size> 2 ...
- 1
- この行は Accelerated Networking を有効にします。
- 2
- 4 つ以上の vCPU を含む Azure 仮想マシンのサイズを指定します。仮想マシンのサイズに関する情報は、Microsoft Azure のドキュメント を参照してください。
- 現在実行中のノードで機能を有効にするには、それぞれの既存マシンを置き換える必要があります。これは、各マシンに対して個別に行うか、レプリカをゼロにスケールダウンしてから、必要なレプリカ数にスケールアップして実行できます。
検証
-
Microsoft Azure ポータルで、マシンセットによってプロビジョニングされるマシンの Networking 設定ページを確認し、
Accelerated networking
フィールドがEnabled
に設定されていることを確認します。
関連情報
- マシンセットのスケーリングの詳細は、マシンセットの手動によるスケーリングを参照してください。