検索

Windows Container Support for OpenShift

download PDF
OpenShift Container Platform 4.15

Red Hat OpenShift for Windows Containers ガイド

Red Hat OpenShift Documentation Team

概要

Red Hat OpenShift for Windows Containers は、OpenShift Container Platform で Microsoft Windows Server コンテナーを実行するための組み込みサポートを提供します。本書では、すべての詳細情報を提供します。

第1章 Red Hat OpenShift support for Windows Containers の概要

Red Hat OpenShift support for Windows Containers は、OpenShift Container Platform クラスターで Windows コンピュートノードを実行する機能を提供します。これは、Red Hat Windows Machine Config Operator (WMCO) を使用して Windows ノードをインストールし、管理することで実行できます。Red Hat Subscription を使用すると、OpenShift Container Platform での Windows ワークロードの実行をサポートできます。WMCO によってデプロイされる Windows インスタンスは、containerd コンテナーランタイムで設定されます。詳細は、リリースノート を参照してください。

Windows ノードを追加するには、コンピュートマシンセット を作成するか、configuration map で既存の Bring-Your-Own-Host (BYOH) ウィンドウインスタンスを指定します。

注記

コンピュートマシンセットは、ベアメタルまたはプロバイダーに依存しないクラスターではサポートされていません。

Linux と Windows の両方を含むワークロードの場合、OpenShift Container Platform を使用すると、Windows Server コンテナーで実行される Windows ワークロードをデプロイすると同時に、Red Hat Enterprise Liznux CoreOS (RHCOS) または Red Hat Enterprise Linux (RHEL) でホストされる従来の Linux ワークロードを提供できます。詳細は、Windows コンテナーワークロードのスタートガイド を参照してください。

クラスターで Windows ワークロードを実行するには、WMCO が必要です。WMCO は、クラスター上で Windows ワークロードをデプロイし、管理するプロセスをオーケストレーションします。詳細は、Windows コンテナーワークロードを有効にする方法 を参照してください。

Windows MachineSet オブジェクトを作成して、インフラストラクチャー Windows マシンセットおよび関連マシンを作成し、サポートされている Windows ワークロードを新しい Windows マシンに移動できます。複数のプラットフォームで Windows MachineSet オブジェクトを作成できます。

Windows コンピュートノードに Windows ワークロードをスケジュール できます。

Windows Machine Config Operator のアップグレードを実行 して、Windows ノードに最新の更新が適用されていることを確認できます。

特定のマシンを削除することで、Windows ノードを削除 できます。

Bring-Your-Own-Host (BYOH) Windows インスタンスを使用 して、Windows Server VM を再利用し、OpenShift Container Platform に移動できます。BYOH Windows インスタンスは、Windows サーバーがオフラインになった場合に、主要な中断を軽減するのに役立ちます。BYOH Windows インスタンスは、OpenShift Container Platform 4.8 以降のバージョンのノードとして使用できます。

次の手順を実行して、Windows コンテナーのワークロードを無効化 できます。

  • Windows Machine Config Operator のアンインストール
  • Windows Machine Config Operator namespace の削除

第2章 リリースノート

2.1. Red Hat OpenShift support for Windows Containers リリースノート

Red Hat OpenShift for Windows Containers のリリースノートでは、OpenShift Container Platform ですべての Windows コンテナーワークロード機能を提供する Windows Machine Config Operator (WMCO) の開発を追跡します。

2.1.1. Windows Machine Config Operator の番号管理

このリリース以降、WMCO の y-stream リリースは OpenShift Container Platform と連動し、OpenShift Container Platform リリース間のリリースは z-stream のみとなります。WMCO の番号は、y-stream のポジションに関連付けられた OpenShift Container Platform のバージョンを反映します。たとえば、WMCO の現行リリースは OpenShift Container Platform バージョン 4.15 に関連付けられています。したがって、番号は WMCO 10.15.z となります。

2.1.2. Red Hat Windows Machine Config Operator 10.15.2 のリリースノート

WMCO のこのリリースは、OpenShift Container Platform クラスターで Windows コンピュートノードを実行するための新機能とバグ修正を提供します。WMCO 10.15.2 のコンポーネントは RHBA-2024:2704 でリリースされました。

2.1.2.1. バグ修正
  • 以前は、Azure クラスターでは、クラスターで外部 Cloud Controller Manager (CCM) が使用されているかどうかを WMCO がチェックしていました。CCM の使用はデフォルトです。CCM が使用されている場合、それに応じて Operator が設定ロジックを調整します。WMCO が CCM を確認するために使用していたステータス条件が削除されたため、WMCO は CCM が使用されていないかのように処理を続行しました。この修正により、このチェックが削除されます。その結果、WMCO が常に Azure クラスター上で必要なロジックを設定するようになりました。(OCPBUGS-31704)
  • 以前は、kubelet はプライベート Elastic Container Registries (ECR) レジストリーで認証できませんでした。このエラーのため、kubelet はこのレジストリーからイメージをプルできませんでした。この修正により、kubelet が期待どおりにこのレジストリーからイメージをプルできるようになりました。(OCPBUGS-26602)
  • 以前は、Windows インスタンスへの SSH 接続を介して実行されているコマンドが失敗したときに、WMCO がエラーメッセージをログに記録していました。一部のコマンドは失敗することが予想されるため、これは誤った動作でした。たとえば、WMCO がノードを再起動するとき、WMCO はインスタンス上で PowerShell コマンドを失敗するまで実行します。これは SSH 接続が期待どおりに再起動したことを意味します。この修正により、実際のエラーのみがログに記録されるようになりました。(OCPBUGS-20255)

2.1.3. 既知の制限

WMCO によって管理される Windows ノード (Windows ノード) を使用する場合は、次の制限に注意してください。

  • 以下の OpenShift Container Platform 機能は、Windows ノードではサポートされていません。

    • イメージビルド
    • OpenShift Pipeline
    • OpenShift Service Mesh
    • ユーザー定義プロジェクトの OpenShift モニタリング
    • OpenShift Serverless
    • Horizontal Pod Autoscaling
    • Vertical Pod Autoscaling
  • 次の Red Hat 機能は、Windows ノードではサポートされていません。

  • Windows ノードは、プライベートレジストリーからのコンテナーイメージのプルをサポートしていません。パブリックレジストリーのイメージを使用するか、イメージを事前にプルすることができます。
  • Windows ノードは、デプロイ設定を使用して作成されたワークロードをサポートしていません。デプロイまたはその他の方法を使用して、ワークロードをデプロイできます。
  • Windows ノードは、切断された環境にあるクラスターではサポートされていません。
  • Red Hat OpenShift による Windows コンテナーのサポートでは、トランクポートを介したクラスターへの Windows ノードの追加はサポートされていません。Windows ノードを追加するためにサポートされている唯一のネットワーク設定は、VLAN のトラフィックを伝送するアクセスポート経由です。
  • Red Hat OpenShift support for Windows Containers では、英語 (米国) 以外の Windows オペレーティングシステム言語はサポートされていません。
  • Kubernetes は、次の ノード機能の制限 を特定しました。

    • Windows コンテナーでは Huge Page はサポートされていません。
    • 特権コンテナーは、Windows コンテナーではサポートされていません。
  • Kubernetes は、いくつかの API 互換性の問題 を特定しました。

2.2. Windows Machine Config Operator の過去のリリースのリリースノート

次のリリースノートは、Windows Machine Config Operator (WMCO) の以前のバージョンに関するものです。

2.2.1. Red Hat Windows Machine Config Operator 10.15.1 のリリースノート

WMCO のこのリリースは、OpenShift Container Platform クラスターで Windows コンピュートノードを実行するための新機能とバグ修正を提供します。WMCO 10.15.1 のコンポーネントは RHBA-2024:1191 でリリースされました。

内部の問題により、計画されていた WMCO 10.15.0 はリリースできませんでした。WMCO 10.15.0 には、以下で説明する複数のバグおよびセキュリティー修正が含まれています。これらの修正は WMCO 10.15.1 に含まれています。これらのバグとセキュリティー修正の詳細は、RHSA-2024:0954 エラータを参照してください。

2.2.1.1. 新機能および改善点
2.2.1.1.1. CPU とメモリー使用量のメトリクスが利用可能

Windows Pod の CPU とメモリー使用量のメトリクスが、Prometheus で利用できるようになりました。このメトリクスは、OpenShift Container Platform Web コンソールの各 Windows Pod の Metrics タブに表示され、ユーザーによるクエリーが可能です。

2.2.1.1.2. Operator SDK のアップグレード

現在の WMCO は Operator SDK バージョン 1.32.0 を使用しています。

2.2.1.1.3. Kubernetes のアップグレード

現在の WMCO は、Kubernetes 1.28 を使用しています。

2.2.1.2. バグ修正
  • 以前は、WMCO が使用する HTTP/2 プロトコルの多重化ストリームの処理に不具合がありました。 クライアントは、新しい多重化ストリームのリクエストを繰り返し作成し、すぐに RST_STREAM フレームを送信してそれらのリクエストをキャンセルする可能性があります。このアクティビティーにより、ストリームのセットアップと削除によってサーバーに追加の処理が発生しましたが、接続ごとのアクティブなストリームの最大数に関するサーバー側の制限は回避されました。その結果、サーバーリソースの消費によりサービス拒否が発生しました。この問題は修正されました。(BZ-2243296)
  • 以前は、Kubernetes に不具合があり、Windows ノード上に Pod と永続ボリュームを作成できるユーザーが、そのノード上で管理者権限に昇格できていました。Kubernetes クラスターは、Windows ノードの in-tree ストレージプラグインを使用している場合に限り影響を受けました。この問題は修正されました。(BZ-2247163)
  • 以前は、SSH チャネルインテグリティーに不具合がありました。攻撃者は、ハンドシェイク中にシーケンス番号を操作することで、MAC 障害を引き起こすことなく、安全なチャネル上の最初のメッセージを削除できていました。たとえば、攻撃者は ping 拡張機能を無効にし、キーストロークタイミング攻撃に対する OpenSSH 9.5 の新しい対策を無効にできました。この問題は修正されました。(BZ-2254210)
  • 以前は、Windows Bring-Your-Own-Host (BYOH) 仮想マシンからメタデータエンドポイントへのルートは非永続ルートとして追加されていたため、仮想マシンが削除 (設定解除) または再設定されるとルートが削除されました。そのため、ノードを再設定するとメタデータエンドポイントが到達不可能になり、失敗しました。今回の修正により、WMCO は削除または再設定後に AWS EC2 launch v2 サービスを実行するようになりました。その結果、ルートが復元され、仮想マシンを期待どおりにノードに設定できるようになりました。(OCPBUGS-15988)
  • 以前は、WMCO は Windows 仮想マシンの再起動完了まで適切に待機しませんでした。そのため、WMCO が再起動中のノードとの対話を試行することで、WMCO がエラーをログに記録してノード設定を再起動するというタイミングの問題が発生することがありました。現在、WMCO はインスタンスが完全に再起動するまで待機します。(OCPBUGS-17217)
  • 以前は、emptyDir ボリュームが接続されているノードをドレインするために必要な DeleteEmptyDirData: true フィールドが WMCO の設定にありませんでした。そのため、emptyDir ボリュームがあるノードを持つお客様のログに、エラー cannot delete Pods with local storage が表示されていました。今回の修正により、WMCO のノードドレインヘルパー構造体に DeleteEmptyDirData: true フィールドが追加されました。その結果、お客様は emptyDir ボリュームが接続されたノードをドレインできるようになりました。(OCPBUGS-27300)
  • 以前は、Windows マシンセットノードと BYOH インスタンスが同期されないため、更新中にマシンセットノードと BYOH インスタンスが同時に更新される可能性がありました。これは、実行中のワークロードに影響を与える場合があります。今回の修正でロックメカニズムが導入され、マシンセットノードと BYOH インスタンスは個別に更新されるようになりました。(OCPBUGS-8996)
  • 以前は、シークレットがないため、WMCO は Nutanix クラスター上の WICD に適切な認証情報を設定できませんでした。その結果、WMCO は Windows ノードを作成できませんでした。今回の修正により、WMCO は長期間有効な WICD サービスアカウントの認証情報を作成できるようになりました。その結果、WMCO は Nutanix クラスター上に Windows ノードを設定できるようになりました。(OCPBUGS-25350)
  • 以前は、ネットワーク設定スクリプトのロジックが間違っていたため、WICD は CNI 設定ファイル内の改行を誤って変更として読み取り、ファイルが変更されたものとして識別していました。これにより、CNI 設定が不必要に再ロードされ、コンテナーの再起動や短時間のネットワーク停止が発生する可能性がありました。今回の修正により、WICD は、CNI 設定が実際に変更された場合にのみ CNI 設定をリロードするようになりました。(OCPBUGS-25756)

第3章 サポート

Windows Container Support for Red Hat OpenShift は、オプションでインストールできるコンポーネントとして提供されます。Windows Container Support for Red Hat OpenShift は、OpenShift Container Platform サブスクリプションに含まれていません。追加の Red Hat サブスクリプションが必要で、対象範囲 および サービスレベルアグリーメント に準じてサポートされます。

Windows Container Support for Red Hat OpenShift のサポートを受けるには、このサブスクリプションが別途必要です。この追加の Red Hat サブスクリプションがない場合、実稼働クラスターへの Windows コンテナーワークロードのデプロイはサポートされません。Red Hat カスタマーポータル からサポートをリクエストできます。

詳細は、Red Hat OpenShift support for Windows Containers の Red Hat OpenShift Container Platform ライフサイクルポリシーのドキュメントを参照してください。

この追加の Red Hat サブスクリプションがない場合は Community Windows Machine Config Operator を使用できますが、このディストリビューションに正式なサポートはありません。

第4章 Windows コンテナーワークロードについて

Red Hat OpenShift support for Windows Containers は、OpenShift Container Platform で Microsoft Windows Server コンテナーを実行するための組み込みサポートを提供します。Linux と Windows ワークロードの組み合わせを使用して異種環境を管理する場合、OpenShift Container Platform では、Windows Server コンテナーで実行されている Windows ワークロードをデプロイできますが、Red Hat Enterprise Linux CoreOS (RHCOS) または Red Hat Enterprise Linux (RHEL) でホストされる従来の Linux ワークロードも提供できます。

注記

Windows ノードを持つクラスターのマルチテナンシーはサポートされません。複数のワークロードが共有インフラストラクチャーおよびリソースで動作する場合、クラスターは マルチテナント とみなされます。インフラストラクチャーで実行されている 1 つ以上のワークロードを信頼できない場合、マルチテナント環境は 悪意がある と見なされます。

マルチテナントの悪意のあるクラスターは、すべての Kubernetes 環境にセキュリティー上の懸念をもたらします。Pod セキュリティーポリシー、またはノードのより詳細なロールベースアクセス制御 (RBAC) などの追加のセキュリティー機能により、環境の悪用がより困難になります。ただし、悪意のあるマルチテナントワークロードの実行を選択する場合、ハイパーバイザーは使用する必要のある唯一のセキュリティーオプションになります。Kubernetes のセキュリティードメインは、個別のノードではなく、クラスター全体に対応します。これらのタイプの悪意のあるマルチテナントワークロードには、物理的に分離されたクラスターを使用する必要があります。

Windows Server コンテナーは共有カーネルを使用してリソース分離を行いますが、悪意のあるマルチテナンシーのシナリオで使用することは意図されていません。悪意のあるマルチテナンシーを使用するシナリオの場合、テナントを確実に分離するために Hyper-V 分離コンテナーを使用する必要があります。

4.1. Windows Machine Config Operator の前提条件

以下では、Windows Machine Config Operator のサポート対象のプラットフォームバージョン、Windows Server バージョン、およびネットワーク設定について詳しく説明します。対象のプラットフォームのみに関連する情報については、vSphere のドキュメントを参照してください。

4.1.1. WMCO 10.y でサポートされるプラットフォームと Windows Server バージョン

次の表は、WMCO 10.y でサポートされる Windows Server のバージョン をプラットフォームに基づき示しています。リストにない Windows Server バージョンはサポート対象外で、使用しようとするとエラーが発生します。これらのエラーを防ぐには、プラットフォームに適したバージョンのみを使用してください。

プラットフォームサポート対象の Windows Server バージョン

Amazon Web Services (AWS)

  • Windows Server 2022、OS ビルド 20348.681 以降
  • Windows Server 2019、バージョン 1809

Microsoft Azure

  • Windows Server 2022、OS ビルド 20348.681 以降
  • Windows Server 2019、バージョン 1809

VMware vSphere

Windows Server 2022、OS ビルド 20348.681 以降

Google Cloud Platform (GCP)

Windows Server 2022、OS ビルド 20348.681 以降

Nutanix

Windows Server 2022、OS ビルド 20348.681 以降

ベアメタルまたはプロバイダーの指定なし

  • Windows Server 2022、OS ビルド 20348.681 以降
  • Windows Server 2019、バージョン 1809

4.1.2. サポート対象のネットワーク

サポート対象のネットワーク設定は、OVN-Kubernetes を使用したハイブリッドネットワークのみです。この機能の詳細は、以下の追加リソースを参照してください。以下の表は、プラットフォームで使用するネットワーク設定の種類と Windows Server バージョンの概要を示しています。クラスターのインストール時にネットワーク設定を指定する必要があります。

注記

WMCO は、ハイブリッドネットワークまたは OpenShift SDN を使用しない OVN-Kubernetes をサポートしません。

表4.1 プラットフォームネットワーキングサポート
プラットフォームサポート対象のネットワーク

Amazon Web Services (AWS)

OVN-Kubernetes を使用したハイブリッドネットワーク

Microsoft Azure

OVN-Kubernetes を使用したハイブリッドネットワーク

VMware vSphere

カスタム VXLAN ポートを備えた OVN-Kubernetes でのハイブリッドネットワーク

Google Cloud Platform (GCP)

OVN-Kubernetes を使用したハイブリッドネットワーク

Nutanix

OVN-Kubernetes を使用したハイブリッドネットワーク

ベアメタルまたはプロバイダーの指定なし

OVN-Kubernetes を使用したハイブリッドネットワーク

表4.2 ハイブリッド OVN-Kubernetes Windows Server のサポート
OVN-Kubernetes を使用したハイブリッドネットワークサポート対象の Windows Server バージョン

デフォルトの VXLAN ポート

  • Windows Server 2022、OS ビルド 20348.681 以降
  • Windows Server 2019、バージョン 1809

カスタム VXLAN ポート

Windows Server 2022、OS ビルド 20348.681 以降

4.2. Windows ワークロード管理

クラスターで Windows ワークロードを実行するには、まず Windows Machine Config Operator (WMCO) をインストールする必要があります。WMCO は Linux ベースのコントロールプレーンおよびコンピュートノードで実行される Linux ベースの Operator です。WMCO は、クラスター上で Windows ワークロードをデプロイし、管理するプロセスをオーケストレーションします。

図4.1 WMCO の設計

WMCO ワークフロー

Windows ワークロードをデプロイする前に、Windows コンピュートノードを作成し、これをクラスターに参加させる必要があります。Windows ノードは、クラスター内の Windows ワークロードをホストし、他の Linux ベースのコンピュートノードと共に実行できます。Windows Server コンピュートマシンをホストする Windows マシンセットを作成して、Windows コンピュートノードを作成することができます。Windows OS イメージを指定するコンピュートマシンセットには、Windows 固有のラベルを適用する必要があります。

WMCO は Windows ラベルの付いたマシンを監視します。Windows コンピュートマシンセットを検出し、そのそれぞれのマシンがプロビジョニングされると、WMCO は基礎となる Windows 仮想マシン (VM) を設定し、それがコンピュートノードとしてクラスターに参加できるようにします。

図4.2 Windows および Linux ワークロードの組み合わせ

Windows および Linux ワークロードの組み合わせ

WMCO は、Windows インスタンスとの対話に使用されるプライベートキーが含まれる namespace に事前に決定されたシークレットがあることを想定します。WMCO は起動時にこのシークレットの有無を確認し、作成した Windows MachineSet オブジェクトで参照する必要のあるユーザーデータのシークレットを作成します。次に WMCO は、プライベートキーに対応するパブリックキーでユーザーデータのシークレットを設定します。このデータが適用されると、クラスターは SSH 接続を使用して Windows 仮想マシンに接続できます。

クラスターが Windows 仮想マシンとの接続を確立した後に、Linux ベースのノードの場合と同様の手法を使用して Windows ノードを管理できます。

注記

OpenShift Container Platform Web コンソールは、Linux ノードで利用可能な機能と同じモニタリング機能のほとんどを Windows ノードについて提供します。ただし、現時点で Windows ノードで実行されている Pod のワークロードグラフを監視する機能は利用できません。

Windows ワークロードの Windows ノードへのスケジュールは、テイント、容認、ノードセレクターなどの一般的な Pod スケジュールの手法を使用して実行できますが、RuntimeClass オブジェクトを使用して Windows ワークロードを Linux ワークロードおよび他の Windows 版のワークロードから区別できます。

4.3. Windows ノードサービス

以下の Windows 固有のサービスは、各 Windows ノードにインストールされます。

サービス説明

kubelet

Windows ノードを登録し、そのステータスを管理します。

Container Network Interface (CNI) プラグイン

Windows ノードの ネットワーク を公開します。

Windows インスタンス設定デーモン (WICD)

Windows インスタンスで実行されているすべてのサービスの状態を維持して、インスタンスがワーカーノードとして機能するようにします。

Windows Exporter

Windows ノードから Prometheus メトリクスをエクスポートします。

Kubernetes Cloud Controller Manager (CCM)

基礎となる Azure クラウドプラットフォームと対話します。

hybrid-overlay

OpenShift Container Platform Host Network Service (HNS) を作成します。

kube-proxy

外部との通信を許可するノードでネットワークルールを維持します。

containerd コンテナーランタイム

コンテナーのライフサイクル全体を管理します。

CSI プロキシー

CSI ドライバーがノード上でストレージ操作を実行できるようにします。これにより、コンテナー化された CSI ドライバーを Windows ノード上で実行できます。

第5章 Windows コンテナーワークロードの有効化

Windows ワークロードをクラスターに追加する前に、OpenShift Container Platform OperatorHub で利用可能な Windows Machine Config Operator (WMCO) をインストールする必要があります。WMCO は、クラスター上で Windows ワークロードをデプロイし、管理するプロセスをオーケストレーションします。

注記

デュアル NIC は、WMCO が管理する Windows インスタンスではサポートされていません。

前提条件

  • cluster-admin 権限を持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。
  • OpenShift CLI (oc) がインストールされている。
  • installer-provisioned infrastructure を使用してクラスターをインストールしたか、install-config.yaml ファイルに platform: none フィールドを設定した user-provisioned infrastructure を使用してインストールした場合。
  • クラスターに OVN-Kubernetes を使用してハイブリッドネットワークを設定している。詳細は、ハイブリッドネットワークの設定 を参照してください。
  • OpenShift Container Platform クラスター (バージョン 4.6.8 以降) を実行している。
注記

WMCO によってデプロイされる Windows インスタンスは、containerd コンテナーランタイムで設定されます。WMCO がランタイムをインストールして管理するため、ノードに containerd を手動でインストールしないことを推奨します。

関連情報

5.1. Windows Machine Config Operator のインストール

Web コンソールまたは OpenShift CLI (oc) のいずれかを使用して Windows Machine Config Operator をインストールできます。

5.1.1. Web コンソールを使用した Windows Machine Config Operator のインストール

OpenShift Container Platform Web コンソールを使用して Windows Machine Config Operator (WMCO) をインストールすることができます。

注記

デュアル NIC は、WMCO が管理する Windows インスタンスではサポートされていません。

手順

  1. OpenShift Container Platform Web コンソールの Administrator パースペクティブから、Operators → OperatorHub ページに移動します。
  2. Filter by keyword ボックスを使用して、カタログで Windows Machine Config Operator を検索します。Windows Machine Config Operator タイルをクリックします。
  3. Operator についての情報を確認してから、Install をクリックします。
  4. Install Operator ページで以下を行います。

    1. Update Channel として stable チャネルを選択します。stable チャネルを使用すると、WMCO の最新の安定したリリースをインストールできます。
    2. WMCO は単一の namespace でのみ利用できるようにする必要があるため、インストールモード は事前に設定されます。
    3. WMCO の Installed Namespace を選択します。デフォルトの Operator の推奨される namespace は openshift-windows-machine-config-operator です。
    4. Enable Operator recommended cluster monitoring on the Namespace チェックボックスをクリックし、WMCO についてクラスターのモニタリングを有効にします。
    5. Approval Strategy を選択します。

      • Automatic ストラテジーにより、Operator Lifecycle Manager (OLM) は新規バージョンが利用可能になると Operator を自動的に更新できます。
      • Manual ストラテジーには、Operator の更新を承認するための適切な認証情報を持つユーザーが必要です。
  1. Install をクリックします。WMCO が Installed Operators ページにリスト表示されます。

    注記

    WMCO は、openshift-windows-machine-config-operator などのように、定義した namespace に自動的にインストールされます。

  2. StatusSucceeded が表示されていることを検証し、WMCO のインストールが正常に行われたことを確認します。

5.1.2. CLI を使用した Windows Machine Config Operator のインストール

OpenShift CLI (oc) を使用して、Windows Machine Config Operator (WMCO) をインストールできます。

注記

デュアル NIC は、WMCO が管理する Windows インスタンスではサポートされていません。

手順

  1. WMCO の namespace を作成します。

    1. WMCO の Namespace オブジェクト YAML ファイルを作成します。例: wmco-namespace.yaml

      apiVersion: v1
      kind: Namespace
      metadata:
        name: openshift-windows-machine-config-operator 1
        labels:
          openshift.io/cluster-monitoring: "true" 2
      1
      WMCO を openshift-windows-machine-config-operator namespace にデプロイすることが推奨されます。
      2
      このラベルは、WMCO についてクラスターモニタリングを有効にするために必要です。
    2. namespace を作成します。

      $ oc create -f <file-name>.yaml

      以下に例を示します。

      $ oc create -f wmco-namespace.yaml
  2. WMCO の Operator グループを作成します。

    1. OperatorGroup オブジェクト YAML ファイルを作成します。例: wmco-og.yaml

      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: windows-machine-config-operator
        namespace: openshift-windows-machine-config-operator
      spec:
        targetNamespaces:
        - openshift-windows-machine-config-operator
    2. Operator グループを作成します。

      $ oc create -f <file-name>.yaml

      以下に例を示します。

      $ oc create -f wmco-og.yaml
  3. namespace を WMCO にサブスクライブします。

    1. Subscription オブジェクト YAML ファイルを作成します。例: wmco-sub.yaml

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: windows-machine-config-operator
        namespace: openshift-windows-machine-config-operator
      spec:
        channel: "stable" 1
        installPlanApproval: "Automatic" 2
        name: "windows-machine-config-operator"
        source: "redhat-operators" 3
        sourceNamespace: "openshift-marketplace" 4
      1
      stable をチャネルとして指定します。
      2
      承認ストラテジーを設定します。Automatic または Manual を設定できます。
      3
      windows-machine-config-operator パッケージマニフェストが含まれる、redhat-operators カタログソースを指定します。OpenShift Container Platform が、非接続クラスターとも呼ばれる制限されたネットワークにインストールされている場合、Operator LifeCycle Manager (OLM) の設定時に作成した CatalogSource オブジェクトの名前を指定します。
      4
      カタログソースの namespace。デフォルトの OperatorHub カタログソースには openshift-marketplace を使用します。
    2. サブスクリプションを作成します。

      $ oc create -f <file-name>.yaml

      以下に例を示します。

      $ oc create -f wmco-sub.yaml

      WMCO が openshift-windows-machine-config-operator にインストールされるようになりました。

  4. WMCO インストールを確認します。

    $ oc get csv -n openshift-windows-machine-config-operator

    出力例

    NAME                                    DISPLAY                           VERSION   REPLACES   PHASE
    windows-machine-config-operator.2.0.0   Windows Machine Config Operator   2.0.0                Succeeded

5.2. Windows Machine Config Operator のシークレットの設定

Windows Machine Config Operator (WMCO) を実行するには、プライベートキーを含む WMCO namespace でシークレットを作成する必要があります。これは、WMCO が Windows 仮想マシン (VM) と通信できるようにするために必要です。

前提条件

  • Operator Lifecycle Manager (OLM) を使用して Windows Machine Config Operator (WMCO) をインストールしている。
  • RSA キーが含まれる PEM でエンコードされたファイルを作成します。

手順

  • Windows 仮想マシンへのアクセスに必要なシークレットを定義します。

    $ oc create secret generic cloud-private-key --from-file=private-key.pem=${HOME}/.ssh/<key> \
        -n openshift-windows-machine-config-operator 1
1
openshift-windows-machine-config-operator などの、WMCO namespace のプライベートキーを作成する必要があります。

クラスターのインストール時に使用されるものとは異なるプライベートキーを使用することが推奨されます。

5.3. プロキシー対応クラスターで Windows コンテナーを使用する

Windows Machine Config Operator (WMCO) は、クラスターの内部ネットワーク外で外部要求を行うときに、クラスター全体の Egress プロキシー設定を消費および使用できます。

これにより、プロキシー対応のクラスターに Windows ノードを追加してワークロードを実行できるようになり、Windows ノードはプロキシーサーバーの背後で保護されたレジストリーからイメージをプルしたり、クラスター外のサービスやカスタム公開鍵インフラストラクチャーを使用するサービスにリクエストを送信したりできるようになります。

注記

クラスター全体のプロキシーは、システムコンポーネントにのみ影響し、ユーザーのワークロードには影響しません。

プロキシー対応のクラスターでは、WMCO はクラスターに設定されている NO_PROXYHTTP_PROXY、および HTTPS_PROXY の値を認識しています。WMCO は、プロキシー環境変数が変更されたかどうかを定期的にチェックします。不一致がある場合、WMCO は Windows インスタンス上のプロキシー環境変数を調整して更新します。

プロキシー対応クラスターの Windows ノードで作成された Windows ワークロードは、Linux ノードと同様に、デフォルトではノードからプロキシー設定を継承しません。また、デフォルトでは、PowerShell セッションはプロキシー対応クラスター内の Windows ノード上のプロキシー設定を継承しません。

5.4. 関連情報

第6章 Windows マシンセットの作成

6.1. AWS 上での Windows マシンセットの作成

Amazon Web Services (AWS) で OpenShift Container Platform クラスターの特定の機能を果たすように MachineSet オブジェクトを作成することができます。たとえば、インフラストラクチャー Windows マシンセットおよび関連マシンを作成して、サポートする Windows ワークロードを新規の Windows マシンに移動できます。

前提条件
  • Operator Lifecycle Manager (OLM) を使用して Windows Machine Config Operator (WMCO) をインストールしている。
  • サポートされている Windows Server をオペレーティングシステムイメージとして使用しています。

    以下に示すコマンドから、使用している Windows Server リリースに対応する aws コマンドを使用して有効な AMI イメージをクエリーします。

    Windows Server 2022 コマンドの例

    $ aws ec2 describe-images --region <aws_region_name> --filters "Name=name,Values=Windows_Server-2022*English*Core*Base*" "Name=is-public,Values=true" --query "reverse(sort_by(Images, &CreationDate))[*].{name: Name, id: ImageId}" --output table

    Windows Server 2019 コマンドの例

    $ aws ec2 describe-images --region <aws_region_name> --filters "Name=name,Values=Windows_Server-2019*English*Core*Base*" "Name=is-public,Values=true" --query "reverse(sort_by(Images, &CreationDate))[*].{name: Name, id: ImageId}" --output table

    ここでは、以下のようになります。

    <aws_region_name>
    AWS リージョンの名前を指定します。

6.1.1. Machine API の概要

Machine API は、プライマリーリソースの組み合わせたものであり、アップストリーム Cluster API プロジェクトとカスタム OpenShift Container Platform リソースをベースとしています。

OpenShift Container Platform 4.15 クラスターの場合、Machine API はクラスターインストールの終了後にすべてのノードホストのプロビジョニングに対する管理アクションを実行します。このシステムにより、OpenShift Container Platform 4.15 はパブリックまたはプライベートのクラウドインフラストラクチャーに加え、弾力的かつ動的なプロビジョニング方法を提供します。

以下の 2 つのリソースは重要なリソースになります。

Machines
ノードのホストを記述する基本的なユニットです。マシンには、複数の異なるクラウドプラットフォーム用に提供されるコンピュートノードのタイプを記述する providerSpec 仕様があります。たとえば、コンピュートノードのマシンタイプは、特定のマシンタイプと必要なメタデータを定義する場合があります。
マシンセット

MachineSet リソースは、計算マシンのグループです。コンピューティングマシンセットはコンピューティングマシン用であり、レプリカセットは Pod 用です。より多くのコンピューティングマシンが必要な場合、またはそれらを縮小する必要がある場合は、コンピューティングのニーズを満たすように MachineSet リソースの replicas フィールドを変更します。

警告

コントロールプレーンマシンは、コンピューティングマシンセットでは管理できません。

コントロールプレーンマシンセットは、サポートされているコントロールプレーンマシンに対して、コンピュートマシンセットがコンピュートマシンに提供するものと同様の管理機能を提供します。

詳細は、「コントロールプレーンマシンの管理」を参照してください。

以下のカスタムリソースは、クラスターに機能を追加します。

Machine Autoscaler

MachineAutoscaler リソースは、クラウド内のコンピューティングマシンを自動的にスケーリングします。指定したコンピューティングマシンセット内のノードの最小および最大スケーリング境界を設定でき Machine Autoscaler はそのノード範囲を維持します。

MachineAutoscaler オブジェクトは ClusterAutoscaler オブジェクトの設定後に有効になります。ClusterAutoscaler および MachineAutoscaler リソースは、どちらも ClusterAutoscalerOperator オブジェクトによって利用可能にされます。

Cluster Autoscaler

このリソースはアップストリームの Cluster Autoscaler プロジェクトに基づいています。OpenShift Container Platform の実装では、これはコンピュートマシンセット API を拡張することによってクラスター API に統合されます。クラスターオートスケーラーを使用して、次の方法でクラスターを管理できます。

  • コア、ノード、メモリー、GPU などのリソースに対してクラスター全体のスケーリング制限を設定
  • クラスターが Pod に優先順位を付け、重要度の低い Pod のために新しいノードがオンラインにならないように、優先順位を設定します。
  • ノードをスケールアップできるがスケールダウンできないようにスケーリングポリシーを設定
マシンのヘルスチェック
MachineHealthCheck リソースはマシンの正常でない状態を検知し、マシンを削除し、サポートされているプラットフォームでは新規マシンを作成します。

OpenShift Container Platform バージョン 3.11 では、クラスターでマシンのプロビジョニングが管理されないためにマルチゾーンアーキテクチャーを容易にデプロイメントすることができませんでした。しかし、OpenShift Container Platform バージョン 4.1 以降、このプロセスはより簡単になりました。各コンピュートマシンセットのスコープは 1 つのゾーンに限定されるため、インストールプログラムはユーザーに代わって複数のアベイラビリティゾーンにコンピューティングマシンセットを送信します。さらに、コンピューティングは動的に展開されるため、ゾーンに障害が発生した場合の、マシンのリバランスが必要な場合に使用するゾーンを常に確保できます。複数のアベイラビリティーゾーンを持たないグローバル Azure リージョンでは、アベイラビリティーセットを使用して高可用性を確保できます。Autoscaler はクラスターの有効期間中にベストエフォートでバランシングを提供します。

6.1.2. AWS の Windows MachineSet オブジェクトのサンプル YAML

このサンプル YAML は、Windows Machine Config Operator (WMCO) が応答する Amazon Web Services (AWS) で実行される Windows MachineSet オブジェクトを定義します。

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1
  name: <infrastructure_id>-windows-worker-<zone> 2
  namespace: openshift-machine-api
spec:
  replicas: 1
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id> 3
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-windows-worker-<zone> 4
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5
        machine.openshift.io/cluster-api-machine-role: worker
        machine.openshift.io/cluster-api-machine-type: worker
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-windows-worker-<zone> 6
        machine.openshift.io/os-id: Windows 7
    spec:
      metadata:
        labels:
          node-role.kubernetes.io/worker: "" 8
      providerSpec:
        value:
          ami:
            id: <windows_container_ami> 9
          apiVersion: awsproviderconfig.openshift.io/v1beta1
          blockDevices:
            - ebs:
                iops: 0
                volumeSize: 120
                volumeType: gp2
          credentialsSecret:
            name: aws-cloud-credentials
          deviceIndex: 0
          iamInstanceProfile:
            id: <infrastructure_id>-worker-profile 10
          instanceType: m5a.large
          kind: AWSMachineProviderConfig
          placement:
            availabilityZone: <zone> 11
            region: <region> 12
          securityGroups:
            - filters:
                - name: tag:Name
                  values:
                    - <infrastructure_id>-worker-sg 13
          subnet:
            filters:
              - name: tag:Name
                values:
                  - <infrastructure_id>-private-<zone> 14
          tags:
            - name: kubernetes.io/cluster/<infrastructure_id> 15
              value: owned
          userDataSecret:
            name: windows-user-data 16
            namespace: openshift-machine-api
1 3 5 10 13 14 15
クラスターのプロビジョニング時に設定したクラスター ID を基にするインフラストラクチャー ID を指定します。以下のコマンドを実行してインフラストラクチャー ID を取得できます。
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
2 4 6
インフラストラクチャー ID、ワーカーラベル、およびゾーンを指定します。
7
コンピュートマシンセットを Windows マシンとして設定します。
8
Windows ノードをコンピュートマシンとして設定します。
9
コンテナーランタイムがインストールされている、サポートされている Windows イメージの AMI ID を指定します。
11
us-east-1a などの AWS ゾーンを指定します。
12
us-east-1 などの AWS リージョンを指定します。
16
最初の Windows マシンの設定時に WMCO によって作成されます。その後、windows-user-data は、後続のすべてのコンピュートマシンセットで使用できるようになります。

6.1.3. コンピュートマシンセットの作成

インストールプログラムによって作成されるコンピュートセットセットに加えて、独自のマシンセットを作成して、選択した特定のワークロードのマシンコンピューティングリソースを動的に管理できます。

前提条件

  • OpenShift Container Platform クラスターをデプロイすること。
  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin パーミッションを持つユーザーとして、oc にログインする。

手順

  1. コンピュートマシンセットのカスタムリソース (CR) サンプルを含む新しい YAML ファイルを作成し、<file_name>.yaml という名前を付けます。

    <clusterID> および <role> パラメーターの値を設定していることを確認します。

  2. オプション: 特定のフィールドに設定する値がわからない場合は、クラスターから既存のコンピュートマシンセットを確認できます。

    1. クラスター内のコンピュートマシンセットをリスト表示するには、次のコマンドを実行します。

      $ 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

    2. 特定のコンピュートマシンセットカスタムリソース (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
              ...

      1
      クラスターインフラストラクチャー ID。
      2
      デフォルトのノードラベル。
      注記

      user-provisioned infrastructure を持つクラスターの場合、コンピュートマシンセットは worker および infra タイプのマシンのみを作成できます。

      3
      コンピュートマシンセット CR の <providerSpec> セクションの値は、プラットフォーム固有です。CR の <providerSpec> パラメーターの詳細については、プロバイダーのサンプルコンピュートマシンセット CR 設定を参照してください。
  3. 次のコマンドを実行して MachineSet CR を作成します。

    $ oc create -f <file_name>.yaml

検証

  • 次のコマンドを実行して、コンピュートマシンセットのリストを表示します。

    $ oc get machineset -n openshift-machine-api

    出力例

    NAME                                       DESIRED   CURRENT   READY   AVAILABLE   AGE
    agl030519-vplxk-windows-worker-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

    新しいコンピュートマシンセットが利用可能になると、DESIREDCURRENT の値が一致します。コンピュートマシンセットが使用できない場合は、数分待ってからコマンドを再実行してください。

6.1.4. 関連情報

6.2. Azure 上での Windows マシンセットの作成

Microsoft Azure 上の OpenShift Container Platform クラスターで特定の機能を果たすように Windows MachineSet オブジェクトを作成できます。たとえば、インフラストラクチャー Windows マシンセットおよび関連マシンを作成して、サポートする Windows ワークロードを新規の Windows マシンに移動できます。

前提条件
  • Operator Lifecycle Manager (OLM) を使用して Windows Machine Config Operator (WMCO) をインストールしている。
  • サポートされている Windows Server をオペレーティングシステムイメージとして使用しています。

6.2.1. Machine API の概要

Machine API は、プライマリーリソースの組み合わせたものであり、アップストリーム Cluster API プロジェクトとカスタム OpenShift Container Platform リソースをベースとしています。

OpenShift Container Platform 4.15 クラスターの場合、Machine API はクラスターインストールの終了後にすべてのノードホストのプロビジョニングに対する管理アクションを実行します。このシステムにより、OpenShift Container Platform 4.15 はパブリックまたはプライベートのクラウドインフラストラクチャーに加え、弾力的かつ動的なプロビジョニング方法を提供します。

以下の 2 つのリソースは重要なリソースになります。

Machines
ノードのホストを記述する基本的なユニットです。マシンには、複数の異なるクラウドプラットフォーム用に提供されるコンピュートノードのタイプを記述する providerSpec 仕様があります。たとえば、コンピュートノードのマシンタイプは、特定のマシンタイプと必要なメタデータを定義する場合があります。
マシンセット

MachineSet リソースは、計算マシンのグループです。コンピューティングマシンセットはコンピューティングマシン用であり、レプリカセットは Pod 用です。より多くのコンピューティングマシンが必要な場合、またはそれらを縮小する必要がある場合は、コンピューティングのニーズを満たすように MachineSet リソースの replicas フィールドを変更します。

警告

コントロールプレーンマシンは、コンピューティングマシンセットでは管理できません。

コントロールプレーンマシンセットは、サポートされているコントロールプレーンマシンに対して、コンピュートマシンセットがコンピュートマシンに提供するものと同様の管理機能を提供します。

詳細は、「コントロールプレーンマシンの管理」を参照してください。

以下のカスタムリソースは、クラスターに機能を追加します。

Machine Autoscaler

MachineAutoscaler リソースは、クラウド内のコンピューティングマシンを自動的にスケーリングします。指定したコンピューティングマシンセット内のノードの最小および最大スケーリング境界を設定でき Machine Autoscaler はそのノード範囲を維持します。

MachineAutoscaler オブジェクトは ClusterAutoscaler オブジェクトの設定後に有効になります。ClusterAutoscaler および MachineAutoscaler リソースは、どちらも ClusterAutoscalerOperator オブジェクトによって利用可能にされます。

Cluster Autoscaler

このリソースはアップストリームの Cluster Autoscaler プロジェクトに基づいています。OpenShift Container Platform の実装では、これはコンピュートマシンセット API を拡張することによってクラスター API に統合されます。クラスターオートスケーラーを使用して、次の方法でクラスターを管理できます。

  • コア、ノード、メモリー、GPU などのリソースに対してクラスター全体のスケーリング制限を設定
  • クラスターが Pod に優先順位を付け、重要度の低い Pod のために新しいノードがオンラインにならないように、優先順位を設定します。
  • ノードをスケールアップできるがスケールダウンできないようにスケーリングポリシーを設定
マシンのヘルスチェック
MachineHealthCheck リソースはマシンの正常でない状態を検知し、マシンを削除し、サポートされているプラットフォームでは新規マシンを作成します。

OpenShift Container Platform バージョン 3.11 では、クラスターでマシンのプロビジョニングが管理されないためにマルチゾーンアーキテクチャーを容易にデプロイメントすることができませんでした。しかし、OpenShift Container Platform バージョン 4.1 以降、このプロセスはより簡単になりました。各コンピュートマシンセットのスコープは 1 つのゾーンに限定されるため、インストールプログラムはユーザーに代わって複数のアベイラビリティゾーンにコンピューティングマシンセットを送信します。さらに、コンピューティングは動的に展開されるため、ゾーンに障害が発生した場合の、マシンのリバランスが必要な場合に使用するゾーンを常に確保できます。複数のアベイラビリティーゾーンを持たないグローバル Azure リージョンでは、アベイラビリティーセットを使用して高可用性を確保できます。Autoscaler はクラスターの有効期間中にベストエフォートでバランシングを提供します。

6.2.2. Azure の Windows MachineSet オブジェクトのサンプル YAML

このサンプル YAML は、Windows Machine Config Operator (WMCO) が応答する Microsoft Azure で実行される Windows MachineSet オブジェクトを定義します。

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1
  name: <windows_machine_set_name> 2
  namespace: openshift-machine-api
spec:
  replicas: 1
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id> 3
      machine.openshift.io/cluster-api-machineset: <windows_machine_set_name> 4
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5
        machine.openshift.io/cluster-api-machine-role: worker
        machine.openshift.io/cluster-api-machine-type: worker
        machine.openshift.io/cluster-api-machineset: <windows_machine_set_name> 6
        machine.openshift.io/os-id: Windows 7
    spec:
      metadata:
        labels:
          node-role.kubernetes.io/worker: "" 8
      providerSpec:
        value:
          apiVersion: azureproviderconfig.openshift.io/v1beta1
          credentialsSecret:
            name: azure-cloud-credentials
            namespace: openshift-machine-api
          image: 9
            offer: WindowsServer
            publisher: MicrosoftWindowsServer
            resourceID: ""
            sku: 2019-Datacenter-with-Containers
            version: latest
          kind: AzureMachineProviderSpec
          location: <location> 10
          managedIdentity: <infrastructure_id>-identity 11
          networkResourceGroup: <infrastructure_id>-rg 12
          osDisk:
            diskSizeGB: 128
            managedDisk:
              storageAccountType: Premium_LRS
            osType: Windows
          publicIP: false
          resourceGroup: <infrastructure_id>-rg 13
          subnet: <infrastructure_id>-worker-subnet
          userDataSecret:
            name: windows-user-data 14
            namespace: openshift-machine-api
          vmSize: Standard_D2s_v3
          vnet: <infrastructure_id>-vnet 15
          zone: "<zone>" 16
1 3 5 11 12 13 15
クラスターのプロビジョニング時に設定したクラスター ID を基にするインフラストラクチャー ID を指定します。以下のコマンドを実行してインフラストラクチャー ID を取得できます。
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
2 4 6
Windows コンピュートマシンセット名を指定します。Azure の Windows マシン名は 15 文字を超えることができません。そのため、マシン名の生成方法により、コンピュートマシンセット名は 9 文字を超えることができません。
7
コンピュートマシンセットを Windows マシンとして設定します。
8
Windows ノードをコンピュートマシンとして設定します。
9
2019-Datacenter-with-Containers SKU を定義する WindowsServer イメージオファリングを指定します。
10
centralus などの Azure リージョンを指定します。
14
最初の Windows マシンの設定時に WMCO によって作成されます。その後、windows-user-data は、後続のすべてのコンピュートマシンセットで使用できるようになります。
16
マシンを配置するリージョン内のゾーンを指定します。リージョンがゾーンをサポートすることを確認してください。

6.2.3. コンピュートマシンセットの作成

インストールプログラムによって作成されるコンピュートセットセットに加えて、独自のマシンセットを作成して、選択した特定のワークロードのマシンコンピューティングリソースを動的に管理できます。

前提条件

  • OpenShift Container Platform クラスターをデプロイすること。
  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin パーミッションを持つユーザーとして、oc にログインする。

手順

  1. コンピュートマシンセットのカスタムリソース (CR) サンプルを含む新しい YAML ファイルを作成し、<file_name>.yaml という名前を付けます。

    <clusterID> および <role> パラメーターの値を設定していることを確認します。

  2. オプション: 特定のフィールドに設定する値がわからない場合は、クラスターから既存のコンピュートマシンセットを確認できます。

    1. クラスター内のコンピュートマシンセットをリスト表示するには、次のコマンドを実行します。

      $ 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

    2. 特定のコンピュートマシンセットカスタムリソース (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
              ...

      1
      クラスターインフラストラクチャー ID。
      2
      デフォルトのノードラベル。
      注記

      user-provisioned infrastructure を持つクラスターの場合、コンピュートマシンセットは worker および infra タイプのマシンのみを作成できます。

      3
      コンピュートマシンセット CR の <providerSpec> セクションの値は、プラットフォーム固有です。CR の <providerSpec> パラメーターの詳細については、プロバイダーのサンプルコンピュートマシンセット CR 設定を参照してください。
  3. 次のコマンドを実行して MachineSet CR を作成します。

    $ oc create -f <file_name>.yaml

検証

  • 次のコマンドを実行して、コンピュートマシンセットのリストを表示します。

    $ oc get machineset -n openshift-machine-api

    出力例

    NAME                                       DESIRED   CURRENT   READY   AVAILABLE   AGE
    agl030519-vplxk-windows-worker-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

    新しいコンピュートマシンセットが利用可能になると、DESIREDCURRENT の値が一致します。コンピュートマシンセットが使用できない場合は、数分待ってからコマンドを再実行してください。

6.2.4. 関連情報

6.3. GCP 上での Windows マシンセットの作成

Google Cloud Platform (GCP) 上の OpenShift Container Platform クラスターで特定の機能を果たすように Windows MachineSet オブジェクトを作成できます。たとえば、インフラストラクチャー Windows マシンセットおよび関連マシンを作成して、サポートする Windows ワークロードを新規の Windows マシンに移動できます。

前提条件
  • Operator Lifecycle Manager (OLM) を使用して Windows Machine Config Operator (WMCO) をインストールしている。
  • サポートされている Windows Server をオペレーティングシステムイメージとして使用しています。

6.3.1. Machine API の概要

Machine API は、プライマリーリソースの組み合わせたものであり、アップストリーム Cluster API プロジェクトとカスタム OpenShift Container Platform リソースをベースとしています。

OpenShift Container Platform 4.15 クラスターの場合、Machine API はクラスターインストールの終了後にすべてのノードホストのプロビジョニングに対する管理アクションを実行します。このシステムにより、OpenShift Container Platform 4.15 はパブリックまたはプライベートのクラウドインフラストラクチャーに加え、弾力的かつ動的なプロビジョニング方法を提供します。

以下の 2 つのリソースは重要なリソースになります。

Machines
ノードのホストを記述する基本的なユニットです。マシンには、複数の異なるクラウドプラットフォーム用に提供されるコンピュートノードのタイプを記述する providerSpec 仕様があります。たとえば、コンピュートノードのマシンタイプは、特定のマシンタイプと必要なメタデータを定義する場合があります。
マシンセット

MachineSet リソースは、計算マシンのグループです。コンピューティングマシンセットはコンピューティングマシン用であり、レプリカセットは Pod 用です。より多くのコンピューティングマシンが必要な場合、またはそれらを縮小する必要がある場合は、コンピューティングのニーズを満たすように MachineSet リソースの replicas フィールドを変更します。

警告

コントロールプレーンマシンは、コンピューティングマシンセットでは管理できません。

コントロールプレーンマシンセットは、サポートされているコントロールプレーンマシンに対して、コンピュートマシンセットがコンピュートマシンに提供するものと同様の管理機能を提供します。

詳細は、「コントロールプレーンマシンの管理」を参照してください。

以下のカスタムリソースは、クラスターに機能を追加します。

Machine Autoscaler

MachineAutoscaler リソースは、クラウド内のコンピューティングマシンを自動的にスケーリングします。指定したコンピューティングマシンセット内のノードの最小および最大スケーリング境界を設定でき Machine Autoscaler はそのノード範囲を維持します。

MachineAutoscaler オブジェクトは ClusterAutoscaler オブジェクトの設定後に有効になります。ClusterAutoscaler および MachineAutoscaler リソースは、どちらも ClusterAutoscalerOperator オブジェクトによって利用可能にされます。

Cluster Autoscaler

このリソースはアップストリームの Cluster Autoscaler プロジェクトに基づいています。OpenShift Container Platform の実装では、これはコンピュートマシンセット API を拡張することによってクラスター API に統合されます。クラスターオートスケーラーを使用して、次の方法でクラスターを管理できます。

  • コア、ノード、メモリー、GPU などのリソースに対してクラスター全体のスケーリング制限を設定
  • クラスターが Pod に優先順位を付け、重要度の低い Pod のために新しいノードがオンラインにならないように、優先順位を設定します。
  • ノードをスケールアップできるがスケールダウンできないようにスケーリングポリシーを設定
マシンのヘルスチェック
MachineHealthCheck リソースはマシンの正常でない状態を検知し、マシンを削除し、サポートされているプラットフォームでは新規マシンを作成します。

OpenShift Container Platform バージョン 3.11 では、クラスターでマシンのプロビジョニングが管理されないためにマルチゾーンアーキテクチャーを容易にデプロイメントすることができませんでした。しかし、OpenShift Container Platform バージョン 4.1 以降、このプロセスはより簡単になりました。各コンピュートマシンセットのスコープは 1 つのゾーンに限定されるため、インストールプログラムはユーザーに代わって複数のアベイラビリティゾーンにコンピューティングマシンセットを送信します。さらに、コンピューティングは動的に展開されるため、ゾーンに障害が発生した場合の、マシンのリバランスが必要な場合に使用するゾーンを常に確保できます。複数のアベイラビリティーゾーンを持たないグローバル Azure リージョンでは、アベイラビリティーセットを使用して高可用性を確保できます。Autoscaler はクラスターの有効期間中にベストエフォートでバランシングを提供します。

6.3.2. GCP の Windows MachineSet オブジェクトのサンプル YAML

このサンプル YAML ファイルは、Windows Machine Config Operator (WMCO) が使用できる Google Cloud Platform (GCP) で実行される Windows MachineSet オブジェクトを定義します。

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1
  name: <infrastructure_id>-windows-worker-<zone_suffix> 2
  namespace: openshift-machine-api
spec:
  replicas: 1
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id> 3
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-windows-worker-<zone_suffix> 4
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5
        machine.openshift.io/cluster-api-machine-role: worker
        machine.openshift.io/cluster-api-machine-type: worker
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-windows-worker-<zone_suffix> 6
        machine.openshift.io/os-id: Windows 7
    spec:
      metadata:
        labels:
          node-role.kubernetes.io/worker: "" 8
      providerSpec:
        value:
          apiVersion: machine.openshift.io/v1beta1
          canIPForward: false
          credentialsSecret:
            name: gcp-cloud-credentials
          deletionProtection: false
          disks:
          - autoDelete: true
            boot: true
            image: <windows_server_image> 9
            sizeGb: 128
            type: pd-ssd
          kind: GCPMachineProviderSpec
          machineType: n1-standard-4
          networkInterfaces:
          - network: <infrastructure_id>-network 10
            subnetwork: <infrastructure_id>-worker-subnet
          projectID: <project_id> 11
          region: <region> 12
          serviceAccounts:
          - email: <infrastructure_id>-w@<project_id>.iam.gserviceaccount.com
            scopes:
            - https://www.googleapis.com/auth/cloud-platform
          tags:
          - <infrastructure_id>-worker
          userDataSecret:
            name: windows-user-data 13
          zone: <zone> 14
1 3 5 10
クラスターのプロビジョニング時に設定したクラスター ID を基にするインフラストラクチャー ID を指定します。以下のコマンドを実行してインフラストラクチャー ID を取得できます。
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
2 4 6
インフラストラクチャー ID、ワーカーラベル、およびゾーンさフィックス (a など) を指定します。
7
Windows マシンとしてマシンセットを設定します。
8
Windows ノードをコンピュートマシンとして設定します。
9
サポートされているバージョンの Windows Server のイメージへのフルパスを指定します。
11
このクラスターが作成された GCP プロジェクトを指定します。
12
GCP リージョン (us-central1 など) を指定します。
13
最初の Windows マシンの設定時に WMCO によって作成されます。その後、後続のすべてのマシンセットで windows-user-data を消費できるようになります。
14
選択したリージョン内のゾーン (us-central1-a など) を指定します。

6.3.3. コンピュートマシンセットの作成

インストールプログラムによって作成されるコンピュートセットセットに加えて、独自のマシンセットを作成して、選択した特定のワークロードのマシンコンピューティングリソースを動的に管理できます。

前提条件

  • OpenShift Container Platform クラスターをデプロイすること。
  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin パーミッションを持つユーザーとして、oc にログインする。

手順

  1. コンピュートマシンセットのカスタムリソース (CR) サンプルを含む新しい YAML ファイルを作成し、<file_name>.yaml という名前を付けます。

    <clusterID> および <role> パラメーターの値を設定していることを確認します。

  2. オプション: 特定のフィールドに設定する値がわからない場合は、クラスターから既存のコンピュートマシンセットを確認できます。

    1. クラスター内のコンピュートマシンセットをリスト表示するには、次のコマンドを実行します。

      $ 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

    2. 特定のコンピュートマシンセットカスタムリソース (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
              ...

      1
      クラスターインフラストラクチャー ID。
      2
      デフォルトのノードラベル。
      注記

      user-provisioned infrastructure を持つクラスターの場合、コンピュートマシンセットは worker および infra タイプのマシンのみを作成できます。

      3
      コンピュートマシンセット CR の <providerSpec> セクションの値は、プラットフォーム固有です。CR の <providerSpec> パラメーターの詳細については、プロバイダーのサンプルコンピュートマシンセット CR 設定を参照してください。
  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

    新しいコンピュートマシンセットが利用可能になると、DESIREDCURRENT の値が一致します。コンピュートマシンセットが使用できない場合は、数分待ってからコマンドを再実行してください。

6.3.4. 関連情報

6.4. Nutanix での Windows MachineSet オブジェクトの作成

Windows MachineSet オブジェクトを作成して、Nutanix 上の OpenShift Container Platform クラスターで特定の機能を果たすようにできます。たとえば、インフラストラクチャー Windows マシンセットおよび関連マシンを作成して、サポートする Windows ワークロードを新規の Windows マシンに移動できます。

前提条件
  • Operator Lifecycle Manager (OLM) を使用して Windows Machine Config Operator (WMCO) をインストールしている。
  • サポートされている Windows Server をオペレーティングシステムイメージとして使用しています。
  • 外部 API サーバー URL api.<cluster_name>.<base_domain> を指す内部 API サーバー URL api-int.<cluster_name>.<base_domain> の新しい DNS エントリーを追加しました。これには、CNAME または追加の A レコードを指定できます。

6.4.1. Machine API の概要

Machine API は、プライマリーリソースの組み合わせたものであり、アップストリーム Cluster API プロジェクトとカスタム OpenShift Container Platform リソースをベースとしています。

OpenShift Container Platform 4.15 クラスターの場合、Machine API はクラスターインストールの終了後にすべてのノードホストのプロビジョニングに対する管理アクションを実行します。このシステムにより、OpenShift Container Platform 4.15 はパブリックまたはプライベートのクラウドインフラストラクチャーに加え、弾力的かつ動的なプロビジョニング方法を提供します。

以下の 2 つのリソースは重要なリソースになります。

Machines
ノードのホストを記述する基本的なユニットです。マシンには、複数の異なるクラウドプラットフォーム用に提供されるコンピュートノードのタイプを記述する providerSpec 仕様があります。たとえば、コンピュートノードのマシンタイプは、特定のマシンタイプと必要なメタデータを定義する場合があります。
マシンセット

MachineSet リソースは、計算マシンのグループです。コンピューティングマシンセットはコンピューティングマシン用であり、レプリカセットは Pod 用です。より多くのコンピューティングマシンが必要な場合、またはそれらを縮小する必要がある場合は、コンピューティングのニーズを満たすように MachineSet リソースの replicas フィールドを変更します。

警告

コントロールプレーンマシンは、コンピューティングマシンセットでは管理できません。

コントロールプレーンマシンセットは、サポートされているコントロールプレーンマシンに対して、コンピュートマシンセットがコンピュートマシンに提供するものと同様の管理機能を提供します。

詳細は、「コントロールプレーンマシンの管理」を参照してください。

以下のカスタムリソースは、クラスターに機能を追加します。

Machine Autoscaler

MachineAutoscaler リソースは、クラウド内のコンピューティングマシンを自動的にスケーリングします。指定したコンピューティングマシンセット内のノードの最小および最大スケーリング境界を設定でき Machine Autoscaler はそのノード範囲を維持します。

MachineAutoscaler オブジェクトは ClusterAutoscaler オブジェクトの設定後に有効になります。ClusterAutoscaler および MachineAutoscaler リソースは、どちらも ClusterAutoscalerOperator オブジェクトによって利用可能にされます。

Cluster Autoscaler

このリソースはアップストリームの Cluster Autoscaler プロジェクトに基づいています。OpenShift Container Platform の実装では、これはコンピュートマシンセット API を拡張することによってクラスター API に統合されます。クラスターオートスケーラーを使用して、次の方法でクラスターを管理できます。

  • コア、ノード、メモリー、GPU などのリソースに対してクラスター全体のスケーリング制限を設定
  • クラスターが Pod に優先順位を付け、重要度の低い Pod のために新しいノードがオンラインにならないように、優先順位を設定します。
  • ノードをスケールアップできるがスケールダウンできないようにスケーリングポリシーを設定
マシンのヘルスチェック
MachineHealthCheck リソースはマシンの正常でない状態を検知し、マシンを削除し、サポートされているプラットフォームでは新規マシンを作成します。

OpenShift Container Platform バージョン 3.11 では、クラスターでマシンのプロビジョニングが管理されないためにマルチゾーンアーキテクチャーを容易にデプロイメントすることができませんでした。しかし、OpenShift Container Platform バージョン 4.1 以降、このプロセスはより簡単になりました。各コンピュートマシンセットのスコープは 1 つのゾーンに限定されるため、インストールプログラムはユーザーに代わって複数のアベイラビリティゾーンにコンピューティングマシンセットを送信します。さらに、コンピューティングは動的に展開されるため、ゾーンに障害が発生した場合の、マシンのリバランスが必要な場合に使用するゾーンを常に確保できます。複数のアベイラビリティーゾーンを持たないグローバル Azure リージョンでは、アベイラビリティーセットを使用して高可用性を確保できます。Autoscaler はクラスターの有効期間中にベストエフォートでバランシングを提供します。

6.4.2. Nutanix の Windows MachineSet オブジェクトのサンプル YAML

このサンプル YAML は、Windows Machine Config Operator (WMCO) が応答する Nutanix で実行される Windows MachineSet オブジェクトを定義します。

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1
  name: <infrastructure_id>-windows-worker-<zone> 2
  namespace: openshift-machine-api
spec:
  replicas: 1
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id> 3
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-windows-worker-<zone> 4
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5
        machine.openshift.io/cluster-api-machine-role: worker
        machine.openshift.io/cluster-api-machine-type: worker
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-windows-worker-<zone> 6
        machine.openshift.io/os-id: Windows 7
    spec:
      metadata:
        labels:
          node-role.kubernetes.io/worker: "" 8
      providerSpec:
        value:
          apiVersion: machine.openshift.io/v1
          bootType: "" 9
          categories: null
          cluster: 10
            type: uuid
            uuid: <cluster_uuid>
          credentialsSecret:
            name: nutanix-credentials 11
          image: 12
            name: <image_id>
            type: name
          kind: NutanixMachineProviderConfig 13
          memorySize: 16Gi 14
          project:
            type: ""
          subnets: 15
          - type: uuid
            uuid: <subnet_uuid>
          systemDiskSize: 120Gi 16
          userDataSecret:
            name: windows-user-data 17
          vcpuSockets: 4 18
          vcpusPerSocket: 1 19
1 3 5
クラスターのプロビジョニング時に設定したクラスター ID を基にするインフラストラクチャー ID を指定します。以下のコマンドを実行してインフラストラクチャー ID を取得できます。
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
2 4 6
インフラストラクチャー ID、ワーカーラベル、およびゾーンを指定します。
7
コンピュートマシンセットを Windows マシンとして設定します。
8
Windows ノードをコンピュートマシンとして設定します。
9
コンピュートマシンが使用するブートタイプを指定します。ブートタイプの詳細については、仮想化環境内の UEFI、セキュアブート、および TPM について を参照してください。有効な値は、LegacySecureBoot、または UEFI です。デフォルトは、Legacy です。
注記

OpenShift Container Platform 4.15 では、Legacy ブートタイプを使用する必要があります。

10
Nutanix Prism Element のクラスター設定を指定します。この例のクラスタータイプは uuid であるため、uuid スタンザがあります。
11
クラスターのシークレット名を指定します。この値は変更しないでください。
12
使用するイメージを指定します。クラスターに設定されている既存のコンピュートデフォルトマシンのイメージを使用します。
13
クラウドプロバイダープラットフォームのタイプを指定します。この値は変更しないでください。
14
クラスターのメモリー量を Gi 単位で指定します。
15
サブネット設定を指定します。この例では、サブネットタイプは uuid であるため、uuid スタンザがあります。
16
システムディスクのサイズを Gi 単位で指定します。
17
openshift-machine-api namespace にあるユーザーデータ YAML ファイルで、シークレットの名前を指定します。インストールプログラムがデフォルトのコンピュートマシンセットに入力する値を使用します。
18
vCPU ソケットの数を指定します。
19
ソケットごとの vCPU 数を指定します。

6.4.3. コンピュートマシンセットの作成

インストールプログラムによって作成されるコンピュートセットセットに加えて、独自のマシンセットを作成して、選択した特定のワークロードのマシンコンピューティングリソースを動的に管理できます。

前提条件

  • OpenShift Container Platform クラスターをデプロイすること。
  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin パーミッションを持つユーザーとして、oc にログインする。

手順

  1. コンピュートマシンセットのカスタムリソース (CR) サンプルを含む新しい YAML ファイルを作成し、<file_name>.yaml という名前を付けます。

    <clusterID> および <role> パラメーターの値を設定していることを確認します。

  2. オプション: 特定のフィールドに設定する値がわからない場合は、クラスターから既存のコンピュートマシンセットを確認できます。

    1. クラスター内のコンピュートマシンセットをリスト表示するには、次のコマンドを実行します。

      $ 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

    2. 特定のコンピュートマシンセットカスタムリソース (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
              ...

      1
      クラスターインフラストラクチャー ID。
      2
      デフォルトのノードラベル。
      注記

      user-provisioned infrastructure を持つクラスターの場合、コンピュートマシンセットは worker および infra タイプのマシンのみを作成できます。

      3
      コンピュートマシンセット CR の <providerSpec> セクションの値は、プラットフォーム固有です。CR の <providerSpec> パラメーターの詳細については、プロバイダーのサンプルコンピュートマシンセット CR 設定を参照してください。
  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

    新しいコンピュートマシンセットが利用可能になると、DESIREDCURRENT の値が一致します。コンピュートマシンセットが使用できない場合は、数分待ってからコマンドを再実行してください。

6.4.4. 関連情報

6.5. vSphere 上での Windows マシンセットの作成

VMware vSphere 上の OpenShift Container Platform クラスターで特定の機能を果たすように Windows MachineSet オブジェクトを作成できます。たとえば、インフラストラクチャー Windows マシンセットおよび関連マシンを作成して、サポートする Windows ワークロードを新規の Windows マシンに移動できます。

前提条件
  • Operator Lifecycle Manager (OLM) を使用して Windows Machine Config Operator (WMCO) をインストールしている。
  • サポートされている Windows Server をオペレーティングシステムイメージとして使用しています。

6.5.1. Machine API の概要

Machine API は、プライマリーリソースの組み合わせたものであり、アップストリーム Cluster API プロジェクトとカスタム OpenShift Container Platform リソースをベースとしています。

OpenShift Container Platform 4.15 クラスターの場合、Machine API はクラスターインストールの終了後にすべてのノードホストのプロビジョニングに対する管理アクションを実行します。このシステムにより、OpenShift Container Platform 4.15 はパブリックまたはプライベートのクラウドインフラストラクチャーに加え、弾力的かつ動的なプロビジョニング方法を提供します。

以下の 2 つのリソースは重要なリソースになります。

Machines
ノードのホストを記述する基本的なユニットです。マシンには、複数の異なるクラウドプラットフォーム用に提供されるコンピュートノードのタイプを記述する providerSpec 仕様があります。たとえば、コンピュートノードのマシンタイプは、特定のマシンタイプと必要なメタデータを定義する場合があります。
マシンセット

MachineSet リソースは、計算マシンのグループです。コンピューティングマシンセットはコンピューティングマシン用であり、レプリカセットは Pod 用です。より多くのコンピューティングマシンが必要な場合、またはそれらを縮小する必要がある場合は、コンピューティングのニーズを満たすように MachineSet リソースの replicas フィールドを変更します。

警告

コントロールプレーンマシンは、コンピューティングマシンセットでは管理できません。

コントロールプレーンマシンセットは、サポートされているコントロールプレーンマシンに対して、コンピュートマシンセットがコンピュートマシンに提供するものと同様の管理機能を提供します。

詳細は、「コントロールプレーンマシンの管理」を参照してください。

以下のカスタムリソースは、クラスターに機能を追加します。

Machine Autoscaler

MachineAutoscaler リソースは、クラウド内のコンピューティングマシンを自動的にスケーリングします。指定したコンピューティングマシンセット内のノードの最小および最大スケーリング境界を設定でき Machine Autoscaler はそのノード範囲を維持します。

MachineAutoscaler オブジェクトは ClusterAutoscaler オブジェクトの設定後に有効になります。ClusterAutoscaler および MachineAutoscaler リソースは、どちらも ClusterAutoscalerOperator オブジェクトによって利用可能にされます。

Cluster Autoscaler

このリソースはアップストリームの Cluster Autoscaler プロジェクトに基づいています。OpenShift Container Platform の実装では、これはコンピュートマシンセット API を拡張することによってクラスター API に統合されます。クラスターオートスケーラーを使用して、次の方法でクラスターを管理できます。

  • コア、ノード、メモリー、GPU などのリソースに対してクラスター全体のスケーリング制限を設定
  • クラスターが Pod に優先順位を付け、重要度の低い Pod のために新しいノードがオンラインにならないように、優先順位を設定します。
  • ノードをスケールアップできるがスケールダウンできないようにスケーリングポリシーを設定
マシンのヘルスチェック
MachineHealthCheck リソースはマシンの正常でない状態を検知し、マシンを削除し、サポートされているプラットフォームでは新規マシンを作成します。

OpenShift Container Platform バージョン 3.11 では、クラスターでマシンのプロビジョニングが管理されないためにマルチゾーンアーキテクチャーを容易にデプロイメントすることができませんでした。しかし、OpenShift Container Platform バージョン 4.1 以降、このプロセスはより簡単になりました。各コンピュートマシンセットのスコープは 1 つのゾーンに限定されるため、インストールプログラムはユーザーに代わって複数のアベイラビリティゾーンにコンピューティングマシンセットを送信します。さらに、コンピューティングは動的に展開されるため、ゾーンに障害が発生した場合の、マシンのリバランスが必要な場合に使用するゾーンを常に確保できます。複数のアベイラビリティーゾーンを持たないグローバル Azure リージョンでは、アベイラビリティーセットを使用して高可用性を確保できます。Autoscaler はクラスターの有効期間中にベストエフォートでバランシングを提供します。

6.5.2. Windows コンテナーワークロード用の vSphere 環境の準備

vSphere Windows 仮想マシンのゴールドイメージを作成し、WMCO の内部 API サーバーとの通信を有効にして、Windows コンテナーのワークロード用に vSphere 環境を準備する必要があります。

6.5.2.1. vSphere Windows 仮想マシンのゴールドイメージの作成

vSphere Windows 仮想マシン (VM) のゴールドイメージを作成します。

前提条件

  • OpenSSH サーバーで鍵ベースの認証を設定するのに使用する、秘密鍵/公開鍵ペアを作成している。プライベートキーは Windows Machine Config Operator(WMCO) namespace でも設定される必要があります。これは、WMCO が Windows 仮想マシンと通信できるようにするために必要です。詳細は、Windows Machine Config Operator のシークレットの設定のセクションを参照してください。
注記

Windows 仮想マシンを作成する際には、複数のケースで Microsoft PowerShell コマンドを使用する必要があります。本書の PowerShell コマンドは、PS C:\> 接頭辞によって区別されます。

手順

  1. 互換性のある Windows Server バージョンを選択します。現在、Windows Machine Config Operator (WMCO) の安定版は、OS レベルのコンテナーネットワークパッチ KB5012637 を適用した Windows Server 2022 Long-Term Servicing Channel をサポートしています。
  2. 互換性のある Windows Server バージョンの VM ゴールデンイメージを使用して、vSphere クライアントに新しい VM を作成します。互換性のあるバージョンの詳細については、Windows コンテナーの Red Hat OpenShift サポートリリースノートの Windows Machine Config Operator の前提条件セクションを参照してください。

    重要

    VM の仮想ハードウェアバージョンは、OpenShift Container Platform のインフラストラクチャー要件を満たしている必要があります。詳細については、OpenShift Container Platform ドキュメントの VMware vSphere インフラストラクチャーの要件セクションを参照してください。また、仮想マシンのハードウェアバージョン に関する VMware のドキュメントを参照することもできます。

  3. Windows 仮想マシンに VMware Tools バージョン 11.0.6 以降をインストールし、設定します。詳細は、VMware Tools のドキュメント を参照してください。
  4. Windows 仮想マシンに VMware Tools をインストールした後、以下を確認します。

    1. C:\ProgramData\VMware\VMware Tools\tools.conf ファイルが、以下のエントリーとともに存在します。

      exclude-nics=

      tools.conf ファイルが存在しない場合は、exclude-nics オプションでコメント解除した状態でこれを作成し、空の値に設定します。

      このエントリーにより、ハイブリッドオーバーレイで Windows 仮想マシンで生成され、クローン作成された vNIC は無視されないようにします。

    2. Windows 仮想マシンには、vCenter で有効な IP アドレスがあります。

      C:\> ipconfig
    3. VMTools Windows サービスが実行中である。

      PS C:\> Get-Service -Name VMTools | Select Status, StartType
  5. Windows 仮想マシンに OpenSSH Server をインストールし、設定します。詳細は、Microsoft ドキュメントの Installing OpenSSH を参照してください。
  6. 管理ユーザーの SSH アクセスを設定します。そのためには、Microsoft のドキュメント Administrative user を参照してください。

    重要

    命令に使用されるパブリックキーは、シークレットを保持する WMCO namespace で後に作成するプライベートキーに対応している必要があります。詳細は、Windows Machine Config Operator のシークレットの設定のセクションを参照してください。

  7. コンテナーログの受信接続を可能にする新しいファイアウォールルールを Windows 仮想マシンに作成する必要があります。以下の PowerShell コマンドを実行して、TCP ポート 10250 にファイアウォールルールを作成します。

    PS C:\> New-NetFirewallRule -DisplayName "ContainerLogsPort" -LocalPort 10250 -Enabled True -Direction Inbound -Protocol TCP -Action Allow -EdgeTraversalPolicy Allow
  8. Windows 仮想マシンのクローンを作成し、再利用可能なイメージにします。詳細は、VMware ドキュメントで 既存の仮想マシンのクローンを作成 する方法を参照してください。
  9. クローン作成した Windows 仮想マシンで、Windows Sysprep ツール を実行します。

    C:\> C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown /unattend:<path_to_unattend.xml> 1
    1
    unattend.xml ファイルへのパスを指定します。
    注記

    Windows イメージで sysprep コマンドを実行することができる回数に制限があります。詳細は、Microsoft の ドキュメント を参照してください。

    サンプルの unattend.xml が提供され、これは WMCO で必要なすべての変更を維持します。この例では変更する必要があります。直接使用することはできません。

    例6.1 サンプル unattend.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <unattend xmlns="urn:schemas-microsoft-com:unattend">
       <settings pass="specialize">
          <component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
             <InputLocale>0409:00000409</InputLocale>
             <SystemLocale>en-US</SystemLocale>
             <UILanguage>en-US</UILanguage>
             <UILanguageFallback>en-US</UILanguageFallback>
             <UserLocale>en-US</UserLocale>
          </component>
          <component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
             <SkipAutoActivation>true</SkipAutoActivation>
          </component>
          <component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
             <CEIPEnabled>0</CEIPEnabled>
          </component>
          <component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
             <ComputerName>winhost</ComputerName> 1
          </component>
       </settings>
       <settings pass="oobeSystem">
          <component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
             <AutoLogon>
                <Enabled>false</Enabled> 2
             </AutoLogon>
             <OOBE>
                <HideEULAPage>true</HideEULAPage>
                <HideLocalAccountScreen>true</HideLocalAccountScreen>
                <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
                <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
                <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
                <NetworkLocation>Work</NetworkLocation>
                <ProtectYourPC>1</ProtectYourPC>
                <SkipMachineOOBE>true</SkipMachineOOBE>
                <SkipUserOOBE>true</SkipUserOOBE>
             </OOBE>
             <RegisteredOrganization>Organization</RegisteredOrganization>
             <RegisteredOwner>Owner</RegisteredOwner>
             <DisableAutoDaylightTimeSet>false</DisableAutoDaylightTimeSet>
             <TimeZone>Eastern Standard Time</TimeZone>
             <UserAccounts>
                <AdministratorPassword>
                   <Value>MyPassword</Value> 3
                   <PlainText>true</PlainText>
                </AdministratorPassword>
             </UserAccounts>
          </component>
       </settings>
    </unattend>
    1
    Kubernetes の名前の仕様 に従いなければならない ComputerName を指定します。これらの仕様は、新規仮想マシンの作成時に作成されるテンプレートで実行されるゲスト OS のカスタマイズにも適用されます。
    2
    自動ログオンを無効にして、起動時に管理者権限で開いているターミナルをそのまま残すセキュリティーの問題を回避します。これはデフォルト値であるため、変更しないでください。
    3
    MyPassword プレースホルダーを Administrator アカウントのパスワードに置き換えます。これにより、組み込みの Administrator アカウントはデフォルトで空のパスワードを持つことを防ぎます。Microsoft の パスワードを選択するベストプラクティス に従ってください。

    Sysprep ツールが完了すると、Windows 仮想マシンの電源がオフになります。この仮想マシンで使用または電源は使用しないでください。

  10. Windows 仮想マシンを vCenter のテンプレート に変換します。
6.5.2.1.1. 関連情報
6.5.2.2. vSphere での WMCO についての内部 API サーバーとの通信の有効化

Windows Machine Config Operator (WMCO) は Ignition 設定ファイルを内部 API サーバーエンドポイントからダウンロードします。Windows 仮想マシン (VM) が Ignition 設定ファイルをダウンロードできるように、また設定された仮想マシンが kubelet が内部 API サーバーとのみ通信できるように内部 API サーバーとの通信を有効にする必要があります。

前提条件

  • クラスターを vSphere にインストールしている。

手順

  • 外部 API サーバー URL api.<cluster_name>.<base_domain> を参照する api-int.<cluster_name>.<base_domain> の新規 DNS エントリー追加します。これには、CNAME または追加の A レコードを指定できます。
注記

外部 API エンドポイントは、vSphere への初期クラスターインストールの一部としてすでに作成されています。

6.5.3. vSphere での Windows の MachineSet オブジェクトのサンプル YAML

このサンプル YAML は、Windows Machine Config Operator (WMCO) が応答する VMware vSphere で実行される Windows MachineSet オブジェクトを定義します。

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1
  name: <windows_machine_set_name> 2
  namespace: openshift-machine-api
spec:
  replicas: 1
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id> 3
      machine.openshift.io/cluster-api-machineset: <windows_machine_set_name> 4
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5
        machine.openshift.io/cluster-api-machine-role: worker
        machine.openshift.io/cluster-api-machine-type: worker
        machine.openshift.io/cluster-api-machineset: <windows_machine_set_name> 6
        machine.openshift.io/os-id: Windows 7
    spec:
      metadata:
        labels:
          node-role.kubernetes.io/worker: "" 8
      providerSpec:
        value:
          apiVersion: vsphereprovider.openshift.io/v1beta1
          credentialsSecret:
            name: vsphere-cloud-credentials
          diskGiB: 128 9
          kind: VSphereMachineProviderSpec
          memoryMiB: 16384
          network:
            devices:
            - networkName: "<vm_network_name>" 10
          numCPUs: 4
          numCoresPerSocket: 1
          snapshot: ""
          template: <windows_vm_template_name> 11
          userDataSecret:
            name: windows-user-data 12
          workspace:
             datacenter: <vcenter_datacenter_name> 13
             datastore: <vcenter_datastore_name> 14
             folder: <vcenter_vm_folder_path> 15
             resourcePool: <vsphere_resource_pool> 16
             server: <vcenter_server_ip> 17
1 3 5
クラスターのプロビジョニング時に設定したクラスター ID を基にするインフラストラクチャー ID を指定します。以下のコマンドを実行してインフラストラクチャー ID を取得できます。
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
2 4 6
Windows コンピュートマシンセット名を指定します。コンピュートマシンセットの名前は、マシン名が vSphere で生成される方法により、9 文字を超えることができません。
7
コンピュートマシンセットを Windows マシンとして設定します。
8
Windows ノードをコンピュートマシンとして設定します。
9
vSphere 仮想マシンディスク (VMDK) のサイズを指定します。
注記

このパラメーターは、Windows パーティションのサイズを設定しません。unattend.xml ファイルを使用するか、必要なディスクサイズで vSphere Windows 仮想マシン (VM) ゴールデンイメージを作成することにより、Windows パーティションのサイズを変更できます。

10
コンピュートマシンセットをデプロイする vSphere 仮想マシンネットワークを指定します。この仮想マシンネットワークは、他の Linux コンピューティングマシンがクラスター内に存在する場所である必要があります。
11
golden-images/windows-server-template などの、使用する Windows vSphere 仮想マシンテンプレートの完全パスを指定します。名前は一意である必要があります。
重要

元の仮想マシンテンプレートは指定しないでください。仮想マシンテンプレートは停止した状態でなければなりません。また、新規の Windows マシン用にクローン作成する必要があります。仮想マシンテンプレートを起動すると、仮想マシンテンプレートがプラットフォームの仮想マシンとして設定されるので、これをコンピュートマシンセットで設定を適用できるテンプレートとして使用できなくなります。

12
windows-user-data は、最初の Windows マシンの設定時に WMCO によって作成されます。その後、windows-user-data は、後続のすべてのコンピュートマシンセットで使用できるようになります。
13
コンピュートマシンセットをデプロイする vCenter Datacenter を指定します。
14
コンピュートマシンセットをデプロイする vCenter Datastore を指定します。
15
/dc1/vm/user-inst-5ddjd などの vCenter の vSphere 仮想マシンフォルダーへのパスを指定します。
16
オプション: Windows 仮想マシンの vSphere リソースプールを指定します。
17
vCenter サーバーの IP または完全修飾ドメイン名を指定します。

6.5.4. コンピュートマシンセットの作成

インストールプログラムによって作成されるコンピュートセットセットに加えて、独自のマシンセットを作成して、選択した特定のワークロードのマシンコンピューティングリソースを動的に管理できます。

前提条件

  • OpenShift Container Platform クラスターをデプロイすること。
  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin パーミッションを持つユーザーとして、oc にログインする。

手順

  1. コンピュートマシンセットのカスタムリソース (CR) サンプルを含む新しい YAML ファイルを作成し、<file_name>.yaml という名前を付けます。

    <clusterID> および <role> パラメーターの値を設定していることを確認します。

  2. オプション: 特定のフィールドに設定する値がわからない場合は、クラスターから既存のコンピュートマシンセットを確認できます。

    1. クラスター内のコンピュートマシンセットをリスト表示するには、次のコマンドを実行します。

      $ 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

    2. 特定のコンピュートマシンセットカスタムリソース (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
              ...

      1
      クラスターインフラストラクチャー ID。
      2
      デフォルトのノードラベル。
      注記

      user-provisioned infrastructure を持つクラスターの場合、コンピュートマシンセットは worker および infra タイプのマシンのみを作成できます。

      3
      コンピュートマシンセット CR の <providerSpec> セクションの値は、プラットフォーム固有です。CR の <providerSpec> パラメーターの詳細については、プロバイダーのサンプルコンピュートマシンセット CR 設定を参照してください。
  3. 次のコマンドを実行して MachineSet CR を作成します。

    $ oc create -f <file_name>.yaml

検証

  • 次のコマンドを実行して、コンピュートマシンセットのリストを表示します。

    $ oc get machineset -n openshift-machine-api

    出力例

    NAME                                       DESIRED   CURRENT   READY   AVAILABLE   AGE
    agl030519-vplxk-windows-worker-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

    新しいコンピュートマシンセットが利用可能になると、DESIREDCURRENT の値が一致します。コンピュートマシンセットが使用できない場合は、数分待ってからコマンドを再実行してください。

6.5.5. 関連情報

第7章 Windows コンテナーワークロードのスケジューリング

Windows ワークロードを Windows コンピュートノードにスケジュールすることができます。

前提条件

  • Operator Lifecycle Manager (OLM) を使用して Windows Machine Config Operator (WMCO) をインストールしている。
  • OS イメージとして Windows コンテナーを使用しています。
  • Windows コンピュートマシンセットを作成しました。

7.1. Windows Pod の配置

Windows ワークロードをクラスターにデプロイする前に、Pod が適切に割り当てられるように Windows ノードのスケジューリングを設定する必要があります。Windows ノードをホストするマシンがあるので、これは Linux ベースのノードと同じように管理できます。同様に、テイント、容認およびノードセレクターなどのメカニズムを使用して、Windows Pod の適切な Windows ノードへのスケジュールも同様に実行されます。

複数のオペレーティングシステム、および同じクラスターで複数の Windows OS バリアントを実行する機能で、RuntimeClass オブジェクトを使用して Windows Pod をベース Windows OS バリアントにマップする必要があります。たとえば、複数の Windows ノードが複数の Windows Server コンテナーのバージョンで実行されている場合、クラスターは Windows Pod を互換性のない Windows OS バリアントにスケジュールする可能性があります。クラスター上の Windows OS バリアントごとに RuntimeClass オブジェクトを設定する必要があります。クラスターで 1 つの Windows OS バリアントのみが利用可能である場合、RuntimeClass オブジェクトを使用することも推奨されます。

詳細は、ホストとコンテナーのバージョンの互換性 を参照してください。

ワークロード Pod で spec.os.name.windows パラメーターを設定することも推奨されます。Windows Machine Config Operator (WMCO) は、このフィールドを使用して検証のために Pod オペレーティングシステムを正式に識別し、Windows 固有の Pod セキュリティーコンテキスト制約 (SCC) を強制するために使用されます。現在、このパラメーターは Pod のスケジュールには影響しません。このパラメーターの詳細は、Kubernetes Pod のドキュメント を参照してください。

重要

コンテナーの基本イメージは、コンテナーがスケジュールされるノードで実行されているものと同じ Windows OS バージョンおよびビルド番号である必要があります。

また、Windows ノードをあるバージョンから別のバージョンにアップグレードする場合 (たとえば、20H2 から 2022 に移行する場合)、新しいバージョンに一致するようにコンテナーの基本イメージをアップグレードする必要があります。詳細については、Windows コンテナーのバージョンの互換性 を参照してください。

関連情報

7.2. スケジューリングメカニズムをカプセル化するための RuntimeClass オブジェクトの作成

RuntimeClass オブジェクトを使用することにより、テイントおよび容認などのスケジュールの仕組みの使用を単純化できます。テイントおよび容認をカプセル化するランタイムクラスをデプロイしてから、これを Pod に適用して Pod を適切なノードにスケジュールできるようにします。ランタイムクラスの作成は、複数のオペレーティングシステムのバリアントをサポートするクラスターでも必要になります。

手順

  1. RuntimeClass オブジェクト YAML ファイルを作成します。例: runtime-class.yaml

    apiVersion: node.k8s.io/v1
    kind: RuntimeClass
    metadata:
      name: windows2019 1
    handler: 'runhcs-wcow-process'
    scheduling:
      nodeSelector: 2
        kubernetes.io/os: 'windows'
        kubernetes.io/arch: 'amd64'
        node.kubernetes.io/windows-build: '10.0.17763'
      tolerations: 3
      - effect: NoSchedule
        key: os
        operator: Equal
        value: "windows"
      - effect: NoSchedule
        key: os
        operator: Equal
        value: "Windows"
    1
    このランタイムクラスで管理する必要のある Pod で定義される RuntimeClass オブジェクト名を指定します。
    2
    このランタイムクラスをサポートするノードに存在する必要があるラベルを指定します。このランタイムクラスを使用する Pod は、このセレクターに一致するノードにのみスケジュールできます。ランタイムクラスのノードセレクターは Pod の既存のノードセレクターとマージされます。競合が発生した場合は、Pod をノードにスケジュールできなくなります。
    • Windows 2019 の場合は、node.kubernetes.io/windows-build: '10.0.17763' ラベルを指定します。
    • Windows 2022 の場合は、node.kubernetes.io/windows-build: '10.0.20348' ラベルを指定します。
    3
    Pod に追加する容認を指定します。ただし、受付時にこのランタイムクラスで実行される重複を除きます。これによって、Pod によって許容されるノードのセットとランタイムクラスが組み合わされます。
  2. RuntimeClass オブジェクトを作成します。

    $ oc create -f <file-name>.yaml

    以下に例を示します。

    $ oc create -f runtime-class.yaml
  3. RuntimeClass オブジェクトを Pod に適用し、これが適切なオペレーティングシステムバリアントにスケジュールされていることを確認します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-windows-pod
    spec:
      runtimeClassName: windows2019 1
    # ...
    1
    Pod のスケジュールを管理するためにランタイムクラスを指定します。

7.3. Windows コンテナーワークロードのデプロイメント例

Windows コンピュートノードが利用可能になる時点で、Windows コンテナーワークロードをクラスターにデプロイできます。

注記

このサンプルデプロイメントは参照用にのみ提供されます。

Service オブジェクトの例

apiVersion: v1
kind: Service
metadata:
  name: win-webserver
  labels:
    app: win-webserver
spec:
  ports:
    # the port that this service should serve on
  - port: 80
    targetPort: 80
  selector:
    app: win-webserver
  type: LoadBalancer

Deployment オブジェクトの例

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: win-webserver
  name: win-webserver
spec:
  selector:
    matchLabels:
      app: win-webserver
  replicas: 1
  template:
    metadata:
      labels:
        app: win-webserver
      name: win-webserver
    spec:
      containers:
      - name: windowswebserver
        image: mcr.microsoft.com/windows/servercore:ltsc2019 1
        imagePullPolicy: IfNotPresent
        command:
        - powershell.exe 2
        - -command
        - $listener = New-Object System.Net.HttpListener; $listener.Prefixes.Add('http://*:80/'); $listener.Start();Write-Host('Listening at http://*:80/'); while ($listener.IsListening) { $context = $listener.GetContext(); $response = $context.Response; $content='<html><body><H1>Red Hat OpenShift + Windows Container Workloads</H1></body></html>'; $buffer = [System.Text.Encoding]::UTF8.GetBytes($content); $response.ContentLength64 = $buffer.Length; $response.OutputStream.Write($buffer, 0, $buffer.Length); $response.Close(); };
        securityContext:
          runAsNonRoot: false
          windowsOptions:
            runAsUserName: "ContainerAdministrator"
      os:
        name: "windows"
      runtimeClassName: windows2019 3

1
使用するコンテナーイメージを指定します: mcr.microsoft.com/powershell:<tag> または mcr.microsoft.com/windows/servercore:<tag>。コンテナーイメージは、ノードで実行されている Windows バージョンと一致する必要があります。
  • Windows 2019 の場合は、ltsc2019 タグを使用します。
  • Windows 2022 の場合は、ltsc2022 タグを使用します。
2
コンテナーで実行するコマンドを指定します。
  • mcr.microsoft.com/powershell:<tag> コンテナーイメージの場合は、コマンドを pwsh.exe と定義する必要があります。
  • mcr.microsoft.com/windows/servercore:<tag> コンテナーイメージの場合は、コマンドを powershell.exe と定義する必要があります。
3
クラスターの Windows オペレーティングシステムバリアント用に作成したランタイムクラスを指定します。

7.4. コンピュートマシンセットの手動スケーリング

コンピュートマシンセットのマシンのインスタンスを追加したり、削除したりする必要がある場合、コンピュートマシンセットを手動でスケーリングできます。

本書のガイダンスは、完全に自動化された installer-provisioned infrastructure のインストールに関連します。user-provisioned infrastructure のカスタマイズされたインストールにはコンピュートマシンセットがありません。

前提条件

  • OpenShift Container Platform クラスターおよび oc コマンドラインをインストールすること。
  • cluster-admin パーミッションを持つユーザーとして、oc にログインする。

手順

  1. 次のコマンドを実行して、クラスター内のコンピュートマシンセットを表示します。

    $ oc get machinesets -n openshift-machine-api

    コンピュートマシンセットは <clusterid>-worker-<aws-region-az> の形式で一覧表示されます。

  2. 次のコマンドを実行して、クラスター内のコンピュートマシンを表示します。

    $ oc get machine -n openshift-machine-api
  3. 次のコマンドを実行して、削除するコンピュートマシンに注釈を設定します。

    $ oc annotate machine/<machine_name> -n openshift-machine-api machine.openshift.io/delete-machine="true"
  4. 次のいずれかのコマンドを実行して、コンピュートマシンセットをスケーリングします。

    $ oc scale --replicas=2 machineset <machineset> -n openshift-machine-api

    または、以下を実行します。

    $ oc edit machineset <machineset> -n openshift-machine-api
    ヒント

    または、以下の YAML を適用してコンピュートマシンセットをスケーリングすることもできます。

    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    metadata:
      name: <machineset>
      namespace: openshift-machine-api
    spec:
      replicas: 2

    コンピュートマシンセットをスケールアップまたはスケールダウンできます。新規マシンが利用可能になるまで数分の時間がかかります。

    重要

    デフォルトでは、マシンコントローラーは、成功するまでマシンによってサポートされるノードをドレイン (解放) しようとします。Pod 中断バジェットの設定が間違っているなど、状況によっては、ドレイン操作が成功しない可能性があります。排水操作が失敗した場合、マシンコントローラーはマシンの取り外しを続行できません。

    特定のマシンの machine.openshift.io/exclude-node-draining にアノテーションを付けると、ノードのドレイン (解放) を省略できます。

検証

  • 次のコマンドを実行して、目的のマシンが削除されたことを確認します。

    $ oc get machines

第8章 Windows ノードのアップグレード

Windows Machine Config Operator (WMCO) をアップグレードすることで、Windows ノードに最新の更新が含まれることを確認できます。

8.1. Windows Machine Config Operator のアップグレード

現在のクラスターバージョンと互換性のある Windows Machine Config Operator (WMCO) の新規バージョンがリリースされると、Operator はアップグレードチャネル、および Operator Lifecycle Manager (OLM) を使用する際にインストールに使用されたサブスクリプションの承認ストラテジーに基づいてアップグレードされます。WMCO のアップグレードにより、Windows マシンの Kubernetes コンポーネントがアップグレードされます。

注記

WMCO の新規バージョンにアップグレードする場合でクラスターモニタリングを使用する必要がある場合は、WMCO namespace に openshift.io/cluster-monitoring=true ラベルが必要です。ラベルを既存の WMCO namespace に追加し、すでに Windows ノードが設定されている場合は、WMCO Pod を再起動してモニタリンググラフを表示できるようにします。

中断なしのアップグレードの場合、WMCO は以前のバージョンの WMCO で設定された Windows マシンを中止し、現行バージョンを使用してそれらを再作成します。これは、Machine オブジェクトを削除して実行されます。これにより、Windows ノードのドレイン (解放) および削除が実行されます。アップグレードを容易にするために、WMCO は設定されたすべてのノードにバージョンのアノテーションを追加します。アップグレード時に、バージョンのアノテーションで不一致があると、Windows マシンが削除され、再作成されます。アップグレード時のサービスの中断を最小限にするために、WMCO は一度に 1 つの Windows マシンのみを更新します。

更新後、ワークロード Pod で spec.os.name.windows パラメーターを設定することが推奨されます。WMCO は、このフィールドを使用して検証のために Pod オペレーティングシステムを正式に識別し、Windows 固有の Pod セキュリティーコンテキスト制約 (SCC) を強制するために使用されます。

重要

WMCO は Kubernetes コンポーネントの更新のみを行い、Windows オペレーティングシステムの更新は行いません。仮想マシンの作成時に Windows イメージを指定できるため、更新されたイメージを指定できます。MachineSet 仕様でイメージ設定を変更して、更新された Windows イメージを指定できます。

Operator Lifecycle Manager (OLM) を使用した Operator のアップグレードの詳細は、インストールされた Operator のアップグレード を参照してください。

第9章 BYOH (Bring-Your-Own-Host) Windows インスタンスをノードとして使用

BYOH (Bring-Your-Own-Host) を使用すると、ユーザーは Windows Server 仮想マシンを再利用して、OpenShift Container Platform に移動できます。BYOH Windows インスタンスは、Windows サーバーがオフラインになった場合に、主要な中断を軽減するのに役立ちます。

9.1. BYOH Windows インスタンスの設定

BYOH Windows インスタンスを作成するには、Windows Machine Config Operator (WMCO) namespace に Config Map を作成する必要があります。

前提条件

ノードとしてクラスターに割り当てられる Windows インスタンスはすべて、以下の要件を満たす必要がある。

  • インスタンスは、クラスターの Linux ワーカーノードと同じネットワーク上にある必要があります。
  • ポート 22 が開いていて、SSH サーバーを実行している必要があります。
  • SSH サーバーのデフォルトシェルは、Windows コマンドシェル または cmd.exe である必要があります。
  • ログコレクションに対してポート 10250 を開く必要があります。
  • 管理者ユーザーは、認可された SSH キーとしてシークレットセットで使用される秘密鍵とともに存在します。
  • インストーラーによってプロビジョニングされたインフラストラクチャー (IPI) AWS クラスター用に BYOH Windows インスタンスを作成する場合は、ワーカーノード用のコンピュートマシンセットの spec.template.spec.value.tag 値と一致する AWS インスタンスにタグを追加する必要があります。たとえば、kubernetes.io/cluster/<cluster_id>: owned または kubernetes.io/cluster/<cluster_id>: shared です。
  • vSphere で BYOH Windows インスタンスを作成する場合は、内部 API サーバーとの通信を有効にする必要があります。
  • インスタンスのホスト名は、以下の標準を含む RFC 1123 DNS ラベルの要件に従う必要があります。

    • 小文字の英数字またはハイフン (-) のみが含まれます。
    • 英数字から始まります。
    • 英数字の文字で終わります。
注記

WMCO によってデプロイされる Windows インスタンスは、containerd コンテナーランタイムで設定されます。WMCO がランタイムをインストールして管理するため、ノードに containerd を手動でインストールしないことを推奨します。

手順

  1. 追加する Windows インスタンスを記述する WMCO namespace に windows-instances という名前の ConfigMap を作成します。

    注記

    値を username=<username> としてフォーマットし、アドレスをキーとして使用し、設定マップの data セクションの各エントリーをフォーマットします。

    設定マップの例

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: windows-instances
      namespace: openshift-windows-machine-config-operator
    data:
      10.1.42.1: |- 1
        username=Administrator 2
      instance.example.com: |-
        username=core

    1
    WMCO が SSH 経由でインスタンスに到達するために使用するアドレス (DNS 名または IPv4 アドレス)。このアドレスの DNS PTR レコードが存在する必要があります。組織が DHCP を使用して IP アドレスを割り当てる場合は、BYOH インスタンスで DNS 名を使用することを推奨します。そうでない場合は、インスタンスに新しい IP アドレスが割り当てられるたびに、windows-instances ConfigMap を更新する必要があります。
    2
    前提条件で作成した管理者ユーザーの名前。

9.2. BYOH Windows インスタンスの削除

設定マップでインスタンスのエントリーを削除して、クラスターに割り当てられた BYOH インスタンスを削除できます。インスタンスを削除すると、クラスターに追加する前にそのインスタンスがその状態に戻ります。ログおよびコンテナーランタイムアーティファクトは、これらのインスタンスには追加されません。

インスタンスを正常に削除するには、WMCO に提供される現在のプライベートキーを使用してアクセスできる必要があります。たとえば、直前の例から 10.1.42.1 インスタンスを削除するには、設定マップを以下に変更します。

kind: ConfigMap
apiVersion: v1
metadata:
  name: windows-instances
  namespace: openshift-windows-machine-config-operator
data:
  instance.example.com: |-
    username=core

windows-instances を削除すると、ノードとして追加されるすべての Windows インスタンスを分解する要求として表示されます。

第10章 Windows ノードの削除

ホスト Windows マシンを削除して、Windows ノードを削除できます。

10.1. 特定マシンの削除

特定のマシンを削除できます。

重要

クラスターがコントロールプレーンマシンセットを使用していない限り、コントロールプレーンマシンを削除しないでください。

前提条件

  • OpenShift Container Platform クラスターをインストールします。
  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin パーミッションを持つユーザーとして、oc にログインする。

手順

  1. 次のコマンドを実行して、クラスター内のマシンを表示します。

    $ oc get machine -n openshift-machine-api

    コマンド出力には、<clusterid>-<role>-<cloud_region> 形式のマシンのリストが含まれます。

  2. 削除するマシンを特定します。
  3. 次のコマンドを実行してマシンを削除します。

    $ oc delete machine <machine> -n openshift-machine-api
    重要

    デフォルトでは、マシンコントローラーは、成功するまでマシンによってサポートされるノードをドレイン (解放) しようとします。Pod 中断バジェットの設定が間違っているなど、状況によっては、ドレイン操作が成功しない可能性があります。排水操作が失敗した場合、マシンコントローラーはマシンの取り外しを続行できません。

    特定のマシンの machine.openshift.io/exclude-node-draining にアノテーションを付けると、ノードのドレイン (解放) を省略できます。

    削除するマシンがマシンセットに属している場合は、指定された数のレプリカを満たす新しいマシンがすぐに作成されます。

第11章 Windows コンテナーワークロードの無効化

Windows コンテナーワークロードを実行する機能を無効にするには、Windows Machine Config Operator (WMCO) をアンインストールし、WMCO のインストール時にデフォルトで追加された namespace を削除します。

11.1. Windows Machine Config Operator のアンインストール

クラスターから Windows Machine Config Operator (WMCO) をアンインストールできます。

前提条件

  • Windows ワークロードをホストする Windows Machine オブジェクトを削除します。

手順

  1. Operators → OperatorHub ページから、Filter by keyword ボックスを使用して、Red Hat Windows Machine Config Operator を検索します。
  2. Red Hat Windows Machine Config Operator タイルをクリックします。Operator タイルはこれがインストールされていることを示します。
  3. Windows Machine Config Operator 記述子ページで、Uninstall をクリックします。

11.2. Windows Machine Config Operator namespace の削除

デフォルトで Windows Machine Config Operator (WMCO) 用に生成された namespace を削除できます。

前提条件

  • WMCO がクラスターから削除される。

手順

  1. openshift-windows-machine-config-operator namespace で作成されたすべての Windows ワークロードを削除します。

    $ oc delete --all pods --namespace=openshift-windows-machine-config-operator
  2. openshift-windows-machine-config-operator namespace のすべての Pod が削除されているか、終了状態を報告していることを確認します。

    $ oc get pods --namespace openshift-windows-machine-config-operator
  3. openshift-windows-machine-config-operator namespace を削除します。

    $ oc delete namespace openshift-windows-machine-config-operator

関連情報

法律上の通知

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.