設定


Red Hat build of MicroShift 4.17

MicroShift の設定

Red Hat OpenShift Documentation Team

概要

このドキュメントでは、MicroShift を設定する手順を説明します。

第1章 MicroShift 設定ファイルの使用

YAML ファイルは、設定およびパラメーターを使用して MicroShift インスタンスをカスタマイズします。

注記

kustomize マニフェスト以外のツールを使用し、MicroShif API を介して設定を変更したり、アプリケーションをデプロイしたりする場合は、greenboot ヘルスチェックが完了するまで待つ必要があります。これにより、greenboot が rpm-ostree システムを以前の状態にロールバックしても、変更が失われなくなります。

1.1. MicroShift YAML 設定ファイル

MicroShift は、起動時にシステム全体の /etc/microshift/ ディレクトリーで config.yaml という名前の設定ファイルがあるか確認します。ディレクトリー内に設定ファイルが存在しない場合は、組み込みのデフォルト値を使用してサービスを起動します。

MicroShift 設定ファイルは、ホストと組み合わせて使用する必要があります。アプリケーション設定およびサービス設定と組み合わせて使用する必要が出てくる場合もあります。MicroShift クラスターをカスタマイズする際は、各項目が連動して設定されていることを確認します。

1.1.1. デフォルトの設定

config.yaml ファイルを作成しない場合は、デフォルト値が使用されます。次の例は、デフォルトの設定を示しています。

  • デフォルト値を確認するには、次のコマンドを実行します。

    $ microshift show-config
    Copy to Clipboard

    YAML 形式でのデフォルト値の出力例

    apiServer:
      advertiseAddress: 10.44.0.0/32 
    1
    
      auditLog:
        maxFileAge: 0
        maxFileSize: 200
        maxFiles: 10
        profile: Default
      namedCertificates:
        - certPath: ""
          keyPath: ""
          names:
            - ""
      subjectAltNames: []
    debugging:
      logLevel: "Normal"
    dns:
      baseDomain: microshift.example.com
    etcd:
      memoryLimitMB: 0
    ingress:
      listenAddress:
        - ""
      ports:
        http: 80
        https: 443
      routeAdmissionPolicy:
        namespaceOwnership: InterNamespaceAllowed
      status: Managed
    kubelet:
    manifests:
      kustomizePaths:
        - /usr/lib/microshift/manifests
        - /usr/lib/microshift/manifests.d/*
        - /etc/microshift/manifests
        - /etc/microshift/manifests.d/*
    network:
      clusterNetwork:
        - 10.42.0.0/16
      serviceNetwork:
        - 10.43.0.0/16
      serviceNodePortRange: 30000-32767
    node:
      hostnameOverride: ""
      nodeIP: "" 
    2
    
      nodeIPv6: ""
    storage:
      driver: "" 
    3
    
      optionalCsiComponents: 
    4
    
        - ""
    Copy to Clipboard

    1
    サービスネットワークのアドレスに基づいて計算されます。
    2
    デフォルトルートの IP アドレス。
    3
    デフォルトの null 値は、Logical Volume Manager Storage (LVMS) をデプロイします。
    4
    デフォルトの null 値は、snapshot-controller および snapshot-webhook をデプロイします。

1.2. カスタム設定の使用

カスタム設定を作成するには、/etc/microshift/ ディレクトリーで提供される config.yaml.default ファイルのコピーを作成し、config.yaml という名前を付けます。このファイルを /etc/microshift/ ディレクトリー保存し、MicroShift を起動または再起動する前に、デフォルトをオーバーライドすることが予想されるサポート対象の設定を変更できます。

重要

設定を変更したら、MicroShift を再起動して有効にします。config.yaml は MicroShift 起動時の読み取り専用ファイルです。

1.2.1. 個別の再起動

MicroShift クラスターで使用されるアプリケーションおよびその他のオプションサービスも、クラスター全体で設定の変更を適用するには、個別に再起動する必要がある場合があります。たとえば、特定のネットワーク設定に変更を加える場合は、サービスおよびアプリケーション Pod を停止して再起動し、それらの変更を適用する必要があります。詳細は、完了するタスクのそれぞれの手順を参照してください。

ヒント

必要な設定をすべて一度に追加すると、システムの再起動を最小限に抑えることができます。

1.2.2. MicroShift config.yaml ファイルのパラメーターと値

次の表は、MicroShift 設定 YAML パラメーターとそれぞれの有効な値を説明しています。

表1.1 MicroShift config.yaml パラメーター
フィールド説明

advertiseAddress

string

API サーバーがクラスターのメンバーにアドバタイズされる IP アドレスを指定する文字列。デフォルト値は、サービスネットワークのアドレスに基づいて計算されます。

auditLog.maxFileAge

number

ログファイルが自動的に削除されるまでの保存期間。maxFileAge パラメーターのデフォルト値 0 に設定すると、ログファイルが経過時間をベースに削除されなくなります。この値は設定可能です。

auditLog.maxFileSize

number

デフォルトでは、audit.log ファイルが maxFileSize の制限に達すると、audit.log ファイルがローテーションされ、MicroShift は新しい audit.log ファイルへの書き込みを開始します。この値は設定可能です。

auditLog.maxFiles

number

保存されるログファイルの合計数。デフォルトでは、MicroShift は 10 個のログファイルを保持します。余分なファイルが作成されると、最も古いものが削除されます。この値は設定可能です。

auditLog.profile

DefaultWriteRequestBodiesAllRequestBodies または None

読み取りおよび書き込み要求のメタデータのみをログに記録します。OAuth アクセストークン要求を除く要求の本文はログに記録されません。このフィールドを指定しない場合は、Default プロファイルが使用されます。

namedCertificates

list

カスタム認証局を使用して、外部で生成された証明書およびドメイン名を定義します。

namedCertificates.certPath

path

証明書への完全パス。

namedCertificates.keyPath

path

証明書キーへの完全パス。

namedCertificates.names

list

オプション: 明示的な DNS 名のリストを追加します。ワイルドカードは、先頭に指定できます。名前が指定されていない場合は、暗黙名が証明書から抽出されます。

subjectAltNames

完全修飾ドメイン名 (FQDN)、*.domain.com などのワイルドカード、または IP アドレス

API サーバー証明書のサブジェクト代替名 (SAN)。SAN は、証明書で保護されたすべてのドメイン名および IP アドレスを示します。

debugging.logLevel

NormalDebugTrace、または TraceAll

ログの詳細レベル。デフォルトは Normal です。

dns.baseDomain

valid domain

クラスターのベースドメイン。管理されるすべての DNS レコードはこのベースのサブドメインです。

etcd.memoryLimitMB

number

デフォルトでは、etcd はシステムの負荷を処理するために必要な量のメモリーを使用します。ただし、メモリー制約のあるシステムでは、etcd が特定の時点で使用できるメモリーの量を制限することが望ましいか、または制限する必要がある場合があります。

ingress.listenAddress

IP アドレス、NIC 名、またはその複数。

デフォルト値は、ホストのネットワーク全体になります。有効な設定可能な値は、単一の IP アドレスまたは NIC 名、あるいは複数の IP アドレスと NIC 名のリストです。

ingress.ports.http

80

デフォルトのポートが表示されます。設定可能です。有効な値は、1-65535 の範囲内の単一の一意のポートです。ports.http および ports.https フィールドの値は、同じにすることはできません。

ingress.ports.https

443

デフォルトのポートが表示されます。設定可能です。有効な値は、1-65535 の範囲内の単一の一意のポートです。ports.http および ports.https フィールドの値は、同じにすることはできません。

ingress.routeAdmissionPolicy. namespaceOwnership

Strict または InterNamespaceAllowed

複数の namespace のホスト名要求の処理方法を記述します。デフォルトでは、ルートが、複数の namespace においてホストが同じ名前でパスが異なる要求を許可します。Strict を指定すると、namespace が異なるルートが、同じホスト名を要求しなくなります。カスタマイズされた MicroShift の config.yaml で値が削除されると、InterNamespaceAllowed 値が自動的に設定されます。

ingress.status

Managed または Removed

ルーターのステータス。デフォルトは Managed です。

kubelet

MicroShift の低レイテンシーの手順を参照してください

kubelet ノードエージェントのパススルー設定のパラメーター。低レイテンシー設定に使用されます。デフォルト値は null です。

manifests

list of paths

マニフェストをロードするために使用する kustomization ファイルをスキャンするファイルシステム上の場所。パスのリストを設定すると、それらのパスのみをスキャンします。マニフェストの読み込みを無効にするには、空のリストに設定します。リスト内のエントリーは、複数のサブディレクトリーに一致する glob パターンに指定できます。デフォルト値は、/usr/lib/microshift/manifests/usr/lib/microshift/manifests.d//etc/microshift/manifests/etc/microshift/manifests.d/ です。

network.clusterNetwork

IP アドレスブロック

Pod IP アドレスの割り当てに使用する IP アドレスのブロック。IPv4 がデフォルトです。デュアルスタックエントリーはサポートされています。このフィールドの最初のエントリーは、MicroShift の起動後は変更できません。デフォルトの範囲は 10.42.0.0/16 です。

network.serviceNetwork

IP アドレスブロック

Kubernetes サービスの仮想 IP アドレスのブロック。サービスの IP アドレスプール。IPv4 がデフォルトです。デュアルスタックエントリーはサポートされています。このフィールドの最初のエントリーは、MicroShift の起動後は変更できません。デフォルトの範囲は 10.43.0.0/16 です。

network.serviceNodePortRange

range

NodePort タイプの Kubernetes サービスに許可されるポート範囲。指定しない場合、デフォルトの範囲の 30000-32767 が使用されます。NodePort が指定されていないサービスは、この範囲から自動的に割り当てられます。このパラメーターは、MicroShift の開始後に更新できます。

node.hostnameOverride

string

ノードの名前。デフォルト値はホスト名です。空でない場合、この文字列はホスト名ではなく、ノードを識別するために使用されます。この値は、MicroShift の起動後は変更できません。

node.nodeIP

IPv4 アドレス

ノードの IPv4 アドレス。デフォルト値は、デフォルトルートの IP アドレスです。

nodeIPv6

IPv6 アドレス

デュアルスタック設定のノードの IPv6 アドレス。IPv4 または IPv6 のいずれかのシングルスタックでは設定できません。デフォルトは空の値または null です。

storage.driver

none または lvms

デフォルト値は空です。空の値または null フィールドのデフォルトは LVMS デプロイメントです。

storage.optionalCsiComponents

array

デフォルト値は null または空の配列です。null または空の配列はデフォルトで snapshot-controller および snapshot-webhook をデプロイします。予想される値は csi-snapshot-controllercsi-snapshot-webhook、または none です。none のエントリーは、他のすべての値と相互に排他的です。

1.2.3. アドバタイズアドレスネットワークフラグの設定

apiserver.advertiseAddress フラグは、API サーバーをクラスターのメンバーにアドバタイズする IP アドレスを指定します。このアドレスは、クラスターから到達可能である必要があります。ここでカスタム IP アドレスを設定できますが、その IP アドレスをホストインターフェイスに追加する必要もあります。このパラメーターをカスタマイズすると、MicroShift がデフォルトの IP アドレスを br-ex ネットワークインターフェイスに追加しなくなります。

重要

advertiseAddress IP アドレスをカスタマイズする場合は、ホストインターフェイスに IP アドレスを追加して、MicroShift の起動時にクラスターからその IP アドレスに到達できることを確認してください。

設定されていない場合、デフォルト値はサービスネットワークのすぐ後のサブネットに設定されます。たとえば、サービスネットワークが 10.43.0.0/16 の場合、advertiseAddress は、10.44.0.0/32 に設定されます。

1.2.4. NodePort サービスのポート範囲の拡張

serviceNodePortRange 設定では、NodePort サービスで使用できるポート範囲が拡張します。このオプションは、30000-32767 範囲内で特定の標準ポートを公開する必要がある場合に役立ちます。たとえば、クライアントデバイスは別のポートを使用できないため、デバイスはネットワーク上で 1883/tcp MQ Telemetry Transport (MQTT) ポートを公開する必要があります。

重要

NodePort がシステムポートと重複し、システムまたは MicroShift の誤動作を引き起こす可能性があります。

NodePort サービス範囲を設定するときは、次の点を考慮してください。

  • nodePort を明示的に選択せずに NodePort サービスを作成しないでください。明示的な nodePort が指定されていない場合、このポートは kube-apiserver によってランダムに割り当てられるため、予測できません。
  • デバイスの HostNetwork で公開するシステムサービスポート、MicroShift ポート、またはその他のサービスに対して NodePort サービスを作成しないでください。
  • 表 1 は、ポート範囲の拡張時に避けるべきポートを示しています。

    表1.2 回避するポート
    ポート説明

    22/tcp

    SSH ポート

    80/tcp

    OpenShift Router HTTP エンドポイント

    443/tcp

    OpenShift Router HTTPS エンドポイント

    1936/tcp

    現在公開されていない openshift-router のメトリクスサービス

    2379/tcp

    etcd ポート

    2380/tcp

    etcd ポート

    6443

    kubernetes API

    8445/tcp

    openshift-route-controller-manager

    9537/tcp

    cri-o metrics

    10250/tcp

    kubelet

    10248/tcp

    kubelet healthz ポート

    10259/tcp

    kube スケジューラー

第2章 IPv6 シングルまたはデュアルスタックネットワークの設定

シングルスタックまたはデュアルスタックネットワークモードのいずれかで、IPv6 ネットワークプロトコルを使用できます。

2.1. MicroShift を使用した IPv6 ネットワーク

MicroShift サービスのデフォルトはクラスター全体の IPv4 アドレスファミリーです。ただし、サポート対象のプラットフォームでは、IPv6 シングルスタックおよび IPv4/IPv6 デュアルスタックネットワークを利用できます。

  • MicroShift 設定ファイルで IPv6 の値を設定してサービスを再起動すると、OVN-Kubernetes ネットワークプラグインによって管理される設定が自動的に更新されます。
  • デュアルスタックネットワークへの移行後に、新規および既存の Pod の両方でデュアルスタックネットワークが有効化されます。
  • コントロールプレーンおよびその他のサービスなど、クラスター全体の IPv6 アクセスが必要な場合は、以下の設定例を使用します。MicroShift Multus Container Network Interface (CNI) プラグインは、Pod の IPv6 を有効化できます。
  • デュアルスタックネットワークの場合、各 MicroShift クラスターネットワークとサービスネットワークは、クラスターおよびサービスネットワーク設定パラメーター内で最大 2 つの値をサポートします。
重要

MicroShift を初めて起動する前に IPv6 を計画します。クラスターを異なる IP ファミリー間で切り替えることは、デフォルトのシングルスタックからデュアルスタックネットワーキングに移行する場合を除き、サポートされていません。

IPv6 シングルスタックまたは IPv4/IPv6 デュアルスタックのいずれかのネットワークを設定する場合は、アプリケーション Pod とサービスを再起動する必要があります。再起動しない場合、Pod とサービスはデフォルトの IP ファミリーで設定されたままとなります。

2.2. IPv6 シングルスタックネットワークの設定

MicroShift サービス設定ファイルを更新することで、IPv6 ネットワークプロトコルを使用できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • クラスターへの root アクセス権限がある。
  • クラスターが OVN-Kubernetes ネットワークプラグインを使用している。
  • ホストには、デフォルトを含む IPv6 アドレスおよび IPv6 ルートがある。

手順

  1. /etc/microshift/ ディレクトリーにある指定された config.yaml.default ファイルのコピーを作成し (まだ作成していない場合)、config.yaml という名前を付けます。
  2. 新しい MicroShift の config.yaml/etc/microshift/ ディレクトリーに保持します。config.yaml ファイルは、MicroShift サービスが起動するたびに読み取られます。

    注記

    これを作成すると、config.yaml ファイルは組み込み設定よりも優先されます。

  3. MicroShift YAML の network セクションのデフォルト値を、有効な値に置き換えます。

    シングルスタック IPv6 ネットワーク設定の例

    apiServer:
    # ...
    network:
      clusterNetwork:
      - fd01::/48 
    1
    
      serviceNetwork:
      - fd02::/112 
    2
    
    node:
      nodeIP: 2600:1f14:1c48:ee00:2d76:3190:5bc2:5aef 
    3
    
    # ...
    Copy to Clipboard

    1
    64 未満の CIDR 値で clusterNetwork を指定します。
    2
    接頭辞が 112 である IPv6 CIDR を指定します。Kubernetes は最低レベルの 16 ビットのみを使用します。接頭辞が 112 の場合、IP アドレスは 112 から 128 ビットに割り当てられます。
    3
    ノード IP アドレスの例。有効な値は、IPv6 アドレスファミリーの IP アドレスです。IPv4 ネットワークも存在する場合に限り、IPv6 アドレスを指定する必要があります。IPv4 ネットワークが存在しない場合、MicroShift サービスは再起動時にこの値を自動的に入力します。
  4. その他の必要な設定を完了してから、次のコマンドを実行して MicroShift を起動します。

    $ sudo systemctl start microshift
    Copy to Clipboard

検証

  1. 次のコマンドを実行して、ノードリソースで定義されたネットワークを取得します。

    $ oc get node -o jsonpath='{.items[].spec.podCIDRs[]}'
    Copy to Clipboard

    出力例

    fd01::/48
    Copy to Clipboard

  2. 次のコマンドを実行して、Pod のステータスを取得します。

    $ oc get pod -A -o wide
    Copy to Clipboard

    出力例

    NAMESPACE                  NAME                                      READY   STATUS    RESTARTS   AGE   IP                      NODE           NOMINATED NODE   READINESS GATES
    kube-system                csi-snapshot-controller-bb7cb654b-rqrt6   1/1     Running   0          65s   fd01:0:0:1::5           microshift-9   <none>           <none>
    kube-system                csi-snapshot-webhook-95f475949-nbz8x      1/1     Running   0          61s   fd01:0:0:1::6           microshift-9   <none>           <none>
    openshift-dns              dns-default-cjn66                         2/2     Running   0          62s   fd01:0:0:1::9           microshift-9   <none>           <none>
    openshift-dns              node-resolver-ppnjb                       1/1     Running   0          63s   2001:db9:ca7:ff::1db8   microshift-9   <none>           <none>
    openshift-ingress          router-default-6d97d7b8b6-wdtmg           1/1     Running   0          61s   fd01:0:0:1::8           microshift-9   <none>           <none>
    openshift-ovn-kubernetes   ovnkube-master-gfvp5                      4/4     Running   0          63s   2001:db9:ca7:ff::1db8   microshift-9   <none>           <none>
    openshift-ovn-kubernetes   ovnkube-node-bnpjh                        1/1     Running   0          63s   2001:db9:ca7:ff::1db8   microshift-9   <none>           <none>
    openshift-service-ca       service-ca-5d7bd9db6-j25bd                1/1     Running   0          60s   fd01:0:0:1::4           microshift-9   <none>           <none>
    openshift-storage          lvms-operator-656cd9b59b-bwr47            1/1     Running   0          63s   fd01:0:0:1::7           microshift-9   <none>           <none>
    openshift-storage          vg-manager-f7dmk                          1/1     Running   0          27s   fd01:0:0:1::a           microshift-9   <none>           <none>
    Copy to Clipboard

  3. 次のコマンドを実行して、サービスのステータスを取得します。

    $ oc get svc -A
    Copy to Clipboard

    出力例

    NAMESPACE           NAME                            TYPE           CLUSTER-IP   EXTERNAL-IP                                             PORT(S)                      AGE
    default             kubernetes                      ClusterIP      fd02::1      <none>                                                  443/TCP                      3m42s
    kube-system         csi-snapshot-webhook            ClusterIP      fd02::4c4f   <none>                                                  443/TCP                      3m20s
    openshift-dns       dns-default                     ClusterIP      fd02::a      <none>                                                  53/UDP,53/TCP,9154/TCP       2m58s
    openshift-ingress   router-default                  LoadBalancer   fd02::f2e6   2001:db9:ca7:ff::1db8,fd01:0:0:1::2,fd02::1:0,fd69::2   80:31133/TCP,443:31996/TCP   2m58s
    openshift-ingress   router-internal-default         ClusterIP      fd02::c55e   <none>                                                  80/TCP,443/TCP,1936/TCP      2m58s
    openshift-storage   lvms-operator-metrics-service   ClusterIP      fd02::7afb   <none>                                                  443/TCP                      2m58s
    openshift-storage   lvms-webhook-service            ClusterIP      fd02::d8dd   <none>                                                  443/TCP                      2m58s
    openshift-storage   vg-manager-metrics-service      ClusterIP      fd02::fc1    <none>                                                  443/TCP                      2m58s
    Copy to Clipboard

2.3. MicroShift 起動前の IPv6 デュアルスタックネットワークの設定

サービスを起動する前に設定ファイルを使用して、IPv4 および IPv6 アドレスファミリーをサポートするデュアルスタックネットワークで実行するように MicroShift クラスターを設定できます。

  • 設定の最初の IP ファミリーは、クラスター内のプライマリー IP スタックです。
  • クラスターがデュアルスタックネットワークで実行された後に、それらを再起動して、デュアルスタック用のアプリケーション Pod およびアドオンサービスを有効化します。
重要

OVN-Kubernetes ネットワークプラグインでは、IPv4 と IPv6 の両方のデフォルトルートが同じネットワークデバイスに存在する必要があります。別のネットワークデバイス上の IPv4 および IPv6 のデフォルトルートはサポートされていません。

重要

IPv6 を必要とするデュアルスタックネットワークを使用する場合、::FFFF:198.51.100.1 などの IPv4 にマッピングされた IPv6 アドレスは使用できません。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • クラスターへの root アクセス権限がある。
  • クラスターが OVN-Kubernetes ネットワークプラグインを使用している。
  • ホストには、それぞれのデフォルトを含む、IPv4 と IPv6 の両方のアドレスとルートがあります。
  • ホストには、少なくとも 2 つの L3 ネットワーク (IPv4 と IPv6) があります。

手順

  1. /etc/microshift/ ディレクトリーにある指定された config.yaml.default ファイルのコピーを作成し (まだ作成していない場合)、config.yaml という名前を付けます。
  2. 新しい MicroShift の config.yaml/etc/microshift/ ディレクトリーに保持します。config.yaml ファイルは、MicroShift サービスが起動するたびに読み取られます。

    注記

    これを作成すると、config.yaml ファイルは組み込み設定よりも優先されます。

  3. MicroShift を起動していない場合は、MicroShift YAML の network セクションのデフォルト値を有効な値に置き換えます。

    ネットワーク割り当てを使用したデュアルスタック IPv6 ネットワーク設定の例

    apiServer:
    # ...
    apiServer:
      subjectAltNames:
      - 192.168.113.117
      - 2001:db9:ca7:ff::1db8
    network:
      clusterNetwork:
      - 10.42.0.0/16
      - fd01::/48 
    1
    
      serviceNetwork:
      - 10.43.0.0/16
      - fd02::/112 
    2
    
    node:
      nodeIP: 192.168.113.117 
    3
    
      nodeIPv6: 2001:db9:ca7:ff::1db8 
    4
    
    # ...
    Copy to Clipboard

    1
    64 未満の CIDR 値で IPv6 clusterNetwork を指定します。
    2
    接頭辞が 112 である IPv6 CIDR を指定します。Kubernetes は最低レベルの 16 ビットのみを使用します。接頭辞が 112 の場合、IP アドレスは 112 から 128 ビットに割り当てられます。
    3
    ノード IP アドレスの例: IPv4 アドレスファミリーである必要があります。
    4
    デュアルスタック設定のノード IP アドレスの例。IPv6 アドレスファミリーである必要があります。デュアルスタックネットワークでのみ設定できます。
  4. 必要なその他の MicroShift 設定を完了してから、次のコマンドを実行して MicroShift を起動します。

    $ sudo systemctl start microshift
    Copy to Clipboard
  5. 必要に応じてアプリケーション Pod とサービスの IP ファミリーポリシーをリセットし、それらのアプリケーション Pod とサービスを再起動してデュアルスタックネットワークを有効化します。簡単な例は、「アプリケーション Pod およびサービスの IP ファミリーポリシーのリセット」を参照してください。

検証

  1. 次の手順に従って、すべてのシステムサービスと Pod に 2 つの IP アドレス (ファミリーごとに 1 つずつ) があることを確認できます。

    1. 次のコマンドを実行して、ノードリソースで定義されたネットワークを取得します。

      $ oc get pod -n openshift-ingress router-default-5b75594b4-w7w6s -o jsonpath='{.status.podIPs}'
      Copy to Clipboard

      出力例

      [{"ip":"10.42.0.4"},{"ip":"fd01:0:0:1::4"}]
      Copy to Clipboard

    2. 次のコマンドを実行して、ホストネットワーク Pod によって定義されたネットワークを取得します。

      $ oc get pod -n openshift-ovn-kubernetes ovnkube-master-2fm2k -o jsonpath='{.status.podIPs}'
      Copy to Clipboard

      出力例

      [{"ip":"192.168.113.117"},{"ip":"2001:db9:ca7:ff::1db8"}]
      Copy to Clipboard

2.4. MicroShift クラスターの IPv6 デュアルスタックネットワークへの移行

MicroShift 設定ファイルのサービスおよびクラスターネットワークパラメーターに 2 つのエントリーを設定することで、シングルスタッククラスターを IPv4 および IPv6 アドレスファミリーをサポートするデュアルスタッククラスターネットワークに変換できます。

  • 設定の最初の IP ファミリーは、クラスター内のプライマリー IP スタックです。
  • MicroShift システム Pod とサービスは、MicroShift の再起動時に自動的に更新されます。
  • クラスターがデュアルスタックネットワークに移行し、再起動したら、それらを再起動して、デュアルスタックネットワーク用のワークロード Pod とサービスを有効化します。
重要

OVN-Kubernetes ネットワークプラグインでは、IPv4 と IPv6 の両方のデフォルトルートが同じネットワークデバイスに存在する必要があります。別のネットワークデバイス上の IPv4 および IPv6 のデフォルトルートはサポートされていません。

重要

IPv6 を必要とするデュアルスタックネットワークを使用する場合、::FFFF:198.51.100.1 などの IPv4 にマッピングされた IPv6 アドレスは使用できません。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • クラスターへの root アクセス権限がある。
  • クラスターが OVN-Kubernetes ネットワークプラグインを使用している。
  • ホストには、それぞれのデフォルトを含む、IPv4 と IPv6 の両方のアドレスとルートがあります。
  • ホストには、少なくとも 2 つの L3 ネットワーク (IPv4 と IPv6) があります。

手順

  1. /etc/microshift/ ディレクトリーにある指定された config.yaml.default ファイルのコピーを作成し (まだ作成していない場合)、config.yaml という名前を付けます。
  2. 新しい MicroShift の config.yaml/etc/microshift/ ディレクトリーに保持します。config.yaml ファイルは、MicroShift サービスが起動するたびに読み取られます。

    注記

    これを作成すると、config.yaml ファイルは組み込み設定よりも優先されます。

  3. 有効な値を使用して、MicroShift YAML の network セクションに IPv6 設定を追加します。

    警告

    再起動と移行後も同じ最初のエントリーを保持する必要があります。これは、シングルスタックからデュアルスタック、またはデュアルスタックからシングルスタックへの移行など、あらゆる移行に当てはまります。最初のエントリーへの変更が必要な場合は、etcd データベースの完全な消去が必要になります。これにより、アプリケーションデータの損失が発生する可能性があり、サポートされていません。

    1. 有効な値を使用して、MicroShift YAML の network セクションにある 2 番目のネットワークの IPv6 設定を追加します。
    2. MicroShift config.yamlnetwork セクションにネットワーク割り当てを追加して、IPv6 をセカンダリーネットワークとして使用するデュアルスタックを有効化します。

      ネットワーク割り当てによるデュアルスタック IPv6 設定の例

      # ...
      apiServer:
        subjectAltNames:
        - 192.168.113.117
        - 2001:db9:ca7:ff::1db8 
      1
      
      network:
        clusterNetwork:
        - 10.42.0.0/16 
      2
      
        - fd01::/48 
      3
      
        serviceNetwork:
        - 10.43.0.0/16
        - fd02::/112 
      4
      
      node:
        nodeIP: 192.168.113.117 
      5
      
        nodeIPv6: 2001:db9:ca7:ff::1db8 
      6
      
      # ...
      Copy to Clipboard

      1
      IPv6 ノードアドレス:
      2
      IPv4 ネットワーク: 24 未満の CIDR 値で clusterNetwork を指定します。
      3
      IPv6 ネットワーク: 64 未満の CIDR 値で clusterNetwork を指定します。
      4
      接頭辞が 112 である IPv6 CIDR を指定します。Kubernetes は最低レベルの 16 ビットのみを使用します。接頭辞が 112 の場合、IP アドレスは 112 から 128 ビットに割り当てられます。
      5
      ノード IP アドレスの例: 以前の IPv4 IP アドレスを維持します。
      6
      ノード IP アドレスの例: IPv6 アドレスファミリーである必要があります。
  4. 必要なその他の設定を完了してから、次のコマンドを実行して MicroShift を再起動します。

    $ sudo systemctl restart microshift
    Copy to Clipboard
  5. 必要に応じてアプリケーション Pod とサービスの IP ファミリーポリシーをリセットし、それらのアプリケーション Pod とサービスを再起動してデュアルスタックネットワークを有効化します。簡単な例は、「アプリケーション Pod およびサービスの IP ファミリーポリシーのリセット」を参照してください。

検証

次の手順に従って、すべてのシステムサービスと Pod に 2 つの IP アドレス (ファミリーごとに 1 つずつ) があることを確認できます。

  1. 次のコマンドを実行して、Pod のステータスを取得します。

    $ oc get pod -A -o wide
    Copy to Clipboard

    出力例

    NAMESPACE                  NAME                                      READY   STATUS    RESTARTS        AGE     IP                NODE           NOMINATED NODE   READINESS GATES
    kube-system                csi-snapshot-controller-bb7cb654b-7s5ql   1/1     Running   0               46m     10.42.0.6         microshift-9   <none>           <none>
    kube-system                csi-snapshot-webhook-95f475949-jrqv8      1/1     Running   0               46m     10.42.0.4         microshift-9   <none>           <none>
    openshift-dns              dns-default-zxkqn                         2/2     Running   0               46m     10.42.0.5         microshift-9   <none>           <none>
    openshift-dns              node-resolver-r2h5z                       1/1     Running   0               46m     192.168.113.117   microshift-9   <none>           <none>
    openshift-ingress          router-default-5b75594b4-228z7            1/1     Running   0               2m5s    10.42.0.3         microshift-9   <none>           <none>
    openshift-ovn-kubernetes   ovnkube-master-bltk7                      4/4     Running   2 (2m32s ago)   2m36s   192.168.113.117   microshift-9   <none>           <none>
    openshift-ovn-kubernetes   ovnkube-node-9ghgs                        1/1     Running   2 (2m32s ago)   46m     192.168.113.117   microshift-9   <none>           <none>
    openshift-service-ca       service-ca-5d7bd9db6-qgwgw                1/1     Running   0               46m     10.42.0.7         microshift-9   <none>           <none>
    openshift-storage          lvms-operator-656cd9b59b-8rpf4            1/1     Running   0               46m     10.42.0.8         microshift-9   <none>           <none>
    openshift-storage          vg-manager-wqmh4                          1/1     Running   2 (2m39s ago)   46m     10.42.0.10        microshift-9   <none>           <none>
    Copy to Clipboard

  2. 次のコマンドを実行して、OVN-K ネットワークプラグインによって定義されたネットワークを取得します。

    $ oc get pod -n openshift-ovn-kubernetes ovnkube-master-bltk7 -o jsonpath='{.status.podIPs}'
    Copy to Clipboard

    出力例

    [{"ip":"192.168.113.117"},{"ip":"2001:db9:ca7:ff::1db8"}]
    Copy to Clipboard

  3. 次のコマンドを実行して、ノードリソースで定義されたネットワークを取得します。

    $ oc get pod -n openshift-ingress router-default-5b75594b4-228z7 -o jsonpath='{.status.podIPs}'
    Copy to Clipboard

    出力例

    [{"ip":"10.42.0.3"},{"ip":"fd01:0:0:1::3"}]
    Copy to Clipboard

注記

シングルスタックネットワークに戻すには、ネットワークの 2 番目のエントリーを削除し、デュアルスタックに移行する前に設定されたシングルスタックに戻ることができます。

2.5. アプリケーション Pod およびサービスの IP ファミリーポリシーのリセット

デフォルトの ipFamilyPolicy 設定値 PreferSingleStack は、MicroShift 設定をデュアルスタックネットワークに更新した後、すべてのサービスで自動的に更新されません。サービスおよびアプリケーション Pod でデュアルスタックネットワークを有効化するには、ipFamilyPolicy 値を更新する必要があります。

前提条件

  • MicroShift config.yaml を使用して、IPv6 アドレスファミリーを含むデュアルスタックネットワークを定義している。

手順

  1. 以下の例を使用して、spec.ipFamilyPolicy フィールドをサービスまたは Pod 内のデュアルスタックネットワークの有効な値に設定します。

    サービスのデュアルスタックネットワーク設定の例

    kind: Service
    apiVersion: v1
    metadata:
      name: microshift-new-service
      labels: app: microshift-application
    spec:
      type: NodePort
      ipFamilyPolicy: `PreferDualStack` 
    1
    
    # ...
    Copy to Clipboard

    1
    必須。デュアルスタックネットワークの有効な値は、PreferDualStackRequireDualStack です。設定する値は、アプリケーションの要件によって異なります。PreferSingleStack は、ipFamilyPolicy フィールドのデフォルト値です。
  2. hostNetwork が定義されていないアプリケーション Pod を再起動します。hostNetwork が定義されている Pod は、ipFamilyPolicy 値を更新するために再起動する必要はありません。
注記

ipFamilyPolicy 値が更新されると、MicroShift システムサービスと Pod が自動的に更新されます。

2.6. OVN-Kubernetes IPv6 とデュアルスタックの制限

OVN-Kubernetes ネットワークプラグインには、次の制限があります。

  • デュアルスタックネットワーク用に設定されたクラスターの場合、IPv4 と IPv6 の両方のトラフィックはデフォルトゲートウェイと同じネットワークインターフェイスを使用する必要があります。この要件が満たされない場合には、ovnkube-node デーモンセットのホストにある Pod は、CrashLoopBackOff 状態になります。oc get pod -n openshift-ovn-kubernetes -l app=ovnkube-node -o yaml のようなコマンドで Pod を表示すると、以下の出力のように、status フィールドにデフォルトゲートウェイに関する複数のメッセージが表示されます。

    I1006 16:09:50.985852   60651 helper_linux.go:73] Found default gateway interface br-ex 192.168.127.1
    I1006 16:09:50.985923   60651 helper_linux.go:73] Found default gateway interface ens4 fe80::5054:ff:febe:bcd4
    F1006 16:09:50.985939   60651 ovnkube.go:130] multiple gateway interfaces detected: br-ex ens4
    Copy to Clipboard

    唯一の解決策は、両方の IP ファミリーがデフォルトゲートウェイに同じネットワークインターフェイスを使用するように、ホストネットワークを再設定することです。

  • デュアルスタックネットワーク用に設定されたクラスターの場合、IPv4 と IPv6 の両方のルーティングテーブルにデフォルトゲートウェイが含まれている必要があります。この要件が満たされない場合には、ovnkube-node デーモンセットのホストにある Pod は、CrashLoopBackOff 状態になります。oc get pod -n openshift-ovn-kubernetes -l app=ovnkube-node -o yaml のようなコマンドで Pod を表示すると、以下の出力のように、status フィールドにデフォルトゲートウェイに関する複数のメッセージが表示されます。

    I0512 19:07:17.589083  108432 helper_linux.go:74] Found default gateway interface br-ex 192.168.123.1
    F0512 19:07:17.589141  108432 ovnkube.go:133] failed to get default gateway interface
    Copy to Clipboard

    唯一の解決策として、両方の IP ファミリーにデフォルトゲートウェイが含まれるようにホストネットワークを再設定できます。

第3章 kubeconfig を使用したクラスターアクセス

MicroShift デプロイメントで kubeconfig ファイルがどのように使用されるかを説明します。CLI ツールは、kubeconfig ファイルを使用してクラスターの API サーバーと通信します。これらのファイルには、クラスターの詳細、IP アドレス、および認証に必要なその他の情報が含まれています。

3.1. クラスターアクセスを設定するための Kubeconfig ファイル

MicroShift で使用される kubeconfig ファイルの 2 つのカテゴリーは、ローカルアクセスとリモートアクセスです。MicroShift が起動するたびに、API サーバーへのローカルおよびリモートアクセスのための kubeconfig ファイルのセットが生成されます。これらのファイルは、既存の設定情報を使用して /var/lib/microshift/resources/kubeadmin/ ディレクトリーに生成されます。

各アクセスタイプには、異なる認証局 (CA) によって署名された異なる認証証明書が必要です。複数の kubeconfig ファイルを生成することで、このニーズに対応できます。

それぞれの場合に必要なアクセスタイプに適切な kubeconfig ファイルを使用して、認証の詳細を提供できます。MicroShift kubeconfig ファイルの内容は、デフォルトの組み込み値または config.yaml ファイルによって決まります。

注記

クラスターにアクセスするには、kubeconfig ファイルが存在する必要があります。値は、組み込みのデフォルト値、または config.yaml (作成されている場合) から適用されます。

kubeconfig ファイルの内容の例

/var/lib/microshift/resources/kubeadmin/
├── kubeconfig 
1

├── alt-name-1 
2

│   └── kubeconfig
├── 1.2.3.4 
3

│   └── kubeconfig
└── microshift-rhel9 
4

    └── kubeconfig
Copy to Clipboard

1
ローカルホスト名。ホストのメイン IP アドレスは常にデフォルトです。
2
API サーバー証明書のサブジェクト代替名 (SAN)。
3
DNS 名。
4
MicroShift のホスト名。

3.2. ローカルアクセスの kubeconfig ファイル

ローカルアクセスの kubeconfig ファイルは /var/lib/microshift/resources/kubeadmin/kubeconfig に書き込まれます。この kubeconfig ファイルは、localhost を使用した API サーバーへのアクセスを提供します。クラスターをローカルに接続する場合は、このファイルを選択します。

ローカルアクセス用の kubeconfig の内容例

clusters:
- cluster:
    certificate-authority-data: <base64 CA>
    server: https://localhost:6443
Copy to Clipboard

localhostkubeconfig ファイルは、同じホストから API サーバーに接続するクライアントからのみ使用できます。ファイル内の証明書はリモート接続では機能しません。

3.2.1. MicroShift クラスターへのローカルアクセス

以下の手順に従って、kubeconfig ファイルを使用して MicroShift クラスターをローカルでアクセスします。

前提条件

  • oc バイナリーがインストールされている。

手順

  1. オプション: Red Hat Enterprise Linux (RHEL) マシンに ~/.kube/ フォルダーがない場合は、次のコマンドを実行してフォルダーを作成します。

    $ mkdir -p ~/.kube/
    Copy to Clipboard
  2. 次のコマンドを実行して、生成されたローカルアクセス kubeconfig ファイルを ~/.kube/ ディレクトリーにコピーします。

    $ sudo cat /var/lib/microshift/resources/kubeadmin/kubeconfig > ~/.kube/config
    Copy to Clipboard
  3. 次のコマンドを実行して、~/.kube/config ファイルの権限を更新します。

    $ chmod go-r ~/.kube/config
    Copy to Clipboard

検証

  • 次のコマンドを入力して、MicroShift が実行されていることを確認します。

    $ oc get all -A
    Copy to Clipboard

3.3. リモートアクセスの kubeconfig ファイル

MicroShift クラスターが外部ソースから API サーバーに接続する場合は、SAN フィールド内のすべての代替名を持つ証明書が検証に使用されます。MicroShift は、hostname 値を使用して外部アクセス用のデフォルトの kubeconfig を生成します。デフォルトは、デフォルトの kubeconfig ファイルの <node.hostnameOverride><node.nodeIP>、および api.<dns.baseDomain> パラメーター値に設定されます。

/var/lib/microshift/resources/kubeadmin/<hostname>/kubeconfig ファイルは、マシンの hostname、またはオプションが設定されている場合は node.hostnameOverride を使用して、API サーバーにアクセスします。kubeconfig ファイルの CA は、外部からアクセスされたときに証明書を検証できます。

リモートアクセス用の kubeconfig デフォルトファイルの内容例

clusters:
- cluster:
    certificate-authority-data: <base64 CA>
    server: https://microshift-rhel9:6443
Copy to Clipboard

3.3.1. リモートアクセスのカスタマイズ

異なる IP アドレスまたはホスト名でクラスターにアクセスするために、複数のリモートアクセス kubeconfig ファイル値を生成できます。apiServer.subjectAltNames パラメーターのエントリーごとに追加の kubeconfig ファイルが生成されます。IP 接続中にホストからリモートアクセス kubeconfig ファイルをコピーし、それを使用して他のワークステーションから API サーバーにアクセスできます。

3.4. リモートアクセス用の追加の kubeconfig ファイルの生成

デフォルトのリモートアクセスファイルが提供するものより多くのホスト名または IP アドレスが必要な場合は、追加の kubeconfig ファイルを生成して使用できます。

重要

設定の変更を実装するには、MicroShift を再起動する必要があります。

前提条件

  • MicroShift の config.yaml が作成されている。

手順

  1. オプション: config.yaml の内容を表示できます。以下のコマンドを実行します。

    $ cat /etc/microshift/config.yaml
    Copy to Clipboard
  2. オプション: リモートアクセス kubeconfig ファイルの内容を表示できます。以下のコマンドを実行します。

    $ cat /var/lib/microshift/resources/kubeadmin/<hostname>/kubeconfig
    Copy to Clipboard
    重要

    追加のリモートアクセス kubeconfig ファイルには、MicroShift config.yaml ファイルにリストされているサーバー名のいずれかを含める必要があります。追加の kubeconfig ファイルも検証に同じ CA を使用する必要があります。

  3. 追加の DNS 名、SAN、または外部 IP アドレス用に追加の kubeconfig ファイルを生成するには、必要なエントリーを apiServer.subjectAltNames フィールドに追加します。次の例では、使用される DNS 名は alt-name-1、IP アドレスは 1.2.3.4 です。

    追加の認証値を含む config.yaml の例

    dns:
      baseDomain: example.com
    node:
      hostnameOverride: "microshift-rhel9" 
    1
    
      nodeIP: 10.0.0.1
    apiServer:
      subjectAltNames:
      - alt-name-1 
    2
    
      - 1.2.3.4 
    3
    Copy to Clipboard

    1
    ホスト名
    2
    DNS 名
    3
    IP アドレスまたは範囲
  4. MicroShift を再起動して設定の変更を適用し、次のコマンドを実行して必要な kubeconfig ファイルを自動生成します。

    $ sudo systemctl restart microshift
    Copy to Clipboard
  5. 追加のリモートアクセス kubeconfig ファイルの内容を確認するには、config.yaml にリストされている名前または IP アドレスを cat コマンドに挿入します。たとえば、次のコマンド例では alt-name-1 が使用されています。

    $ cat /var/lib/microshift/resources/kubeadmin/alt-name-1/kubeconfig
    Copy to Clipboard
  6. クラスターの接続に使用する SAN または IP アドレスを含む、使用する kubeconfig ファイルを選択します。この例では、cluster.server フィールドに `alt-name-1` を含む kubeconfig が正しいファイルです。

    追加の kubeconfig ファイルの内容の例

    clusters:
    - cluster:
        certificate-authority-data: <base64 CA>
        server: https://alt-name-1:6443 
    1
    Copy to Clipboard

    1
    /var/lib/microshift/resources/kubeadmin/alt-name-1/kubeconfig ファイルの値は、apiServer.subjectAltNames 設定値からのものです。
注記

これらのパラメーターはすべて、API サーバーの外部提供証明書に共通名 (CN) およびサブジェクト代替名 (SAN) として含まれています。

3.4.1. MicroShift クラスターへのリモートアクセス用にファイアウォールを開く

リモートユーザーが MicroShift クラスターにアクセスできるように、次の手順を使用してファイアウォールを開きます。この手順は、ワークステーションユーザーがリモートでクラスターにアクセスする前に完了する必要があります。

この手順では、user@microshift は、MicroShift ホストマシン上のユーザーであり、別のワークステーション上のリモートユーザーがアクセスできるようにそのマシンをセットアップする責任があります。

前提条件

  • oc バイナリーがインストールされている。
  • クラスター管理者の権限がある。

手順

  • MicroShift ホストの user@microshift として、次のコマンドを実行して、Kubernetes API サーバー (6443/tcp) のファイアウォールポートを開きます。

    [user@microshift]$ sudo firewall-cmd --permanent --zone=public --add-port=6443/tcp && sudo firewall-cmd --reload
    Copy to Clipboard

検証

  • user@microshift として次のコマンドを実行して、MicroShift が入力されていることを確認します。

    [user@microshift]$ oc get all -A
    Copy to Clipboard

3.4.2. MicroShift クラスターへのリモートアクセス

以下の手順に従って、kubeconfig ファイルを使用してリモートロケーションから MicroShift クラスターにアクセスします。

user@workstation ログインは、ホストマシンにリモートからアクセスするのに使用されます。手順の <user> 値は、user@workstation が MicroShift ホストにログインするユーザーの名前になります。

前提条件

  • oc バイナリーがインストールされている。
  • user@microshift は、ローカルホストからファイアウォールを開いている。

手順

  1. user@workstation として、Red Hat Enterprise Linux (RHEL) マシンに ~/.kube/ フォルダーがない場合は、次のコマンドを実行してフォルダーを作成します。

    [user@workstation]$ mkdir -p ~/.kube/
    Copy to Clipboard
  2. user@workstation として、次のコマンドを実行して、MicroShift ホストのホスト名の変数を設定します。

    [user@workstation]$ MICROSHIFT_MACHINE=<name or IP address of MicroShift machine>
    Copy to Clipboard
  3. user@workstation として、次のコマンドを実行して、MicroShift を実行している RHEL マシンからローカルマシンに接続するホスト名または IP アドレスを含む生成された kubeconfig ファイルをコピーします。

    [user@workstation]$ ssh <user>@$MICROSHIFT_MACHINE "sudo cat /var/lib/microshift/resources/kubeadmin/$MICROSHIFT_MACHINE/kubeconfig" > ~/.kube/config
    Copy to Clipboard
    注記

    この手順の kubeconfig ファイルを生成するには、リモートアクセス用の kubeconfig ファイルの追加生成 を参照してください。

  4. user@workstation として、次のコマンドを実行して ~/.kube/config ファイルのパーミッションを更新します。

    $ chmod go-r ~/.kube/config
    Copy to Clipboard

検証

  • user@workstation として、次のコマンドを入力して、MicroShift が実行されていることを確認します。

    [user@workstation]$ oc get all -A
    Copy to Clipboard

第4章 カスタム認証局の設定

MicroShift サービスでは、カスタム証明局 (CA) を使用して接続を暗号化できます。

4.1. MicroShift でのカスタム認証局の仕組み

デフォルトの API サーバー証明書は、内部の MicroShift クラスター認証局 (CA) によって発行されます。デフォルトでは、クラスター外部のクライアントは API サーバー証明書を検証できません。この証明書は、クライアントが信頼するカスタム CA によって外部的に発行されたカスタムサーバー証明書に置き換えることができます。次の手順は、MicroShift のワークフローを示しています。

  1. 証明書とキーをホストオペレーティングシステムの優先ディレクトリーにコピーします。ファイルに root のみがアクセスできることを確認してください。
  2. MicroShift /etc/microshift/config.yaml 設定ファイルで証明書名と新しい完全修飾ドメイン名 (FQDN) を指定して、各カスタム CA の MicroShift 設定を更新します。

    各証明書設定には、以下の値を含めることができます。

    • 証明書ファイルの場所は必須の値です。
    • API サーバーの DNS と IP アドレスまたは IP アドレス範囲を含む単一の共通名。

      ヒント

      ほとんどの場合、MicroShift は、指定した IP アドレスまたは範囲を含むカスタム CA の新しい kubeconfig を生成します。例外は、IP アドレスにワイルドカードが指定されている場合です。この場合、MicroShift はサーバーのパブリック IP アドレスを使用して kubeconfig を生成します。ワイルドカードを使用するには、特定の詳細で kubeconfig ファイルを更新する必要があります。

    • API サーバーの DNS と IP アドレス、またはワイルドカード証明書を含む複数のサブジェクト別名 (SAN)。
    • 各証明書に追加の DNS 名を指定できます。
  3. MicroShift サービスが再起動した後、生成された kubeconfig ファイルをクライアントにコピーする必要があります。
  4. クライアントシステムで追加の CA を設定します。たとえば、Red Hat Enterprise Linux (RHEL) トラストストア内の CA バンドルを更新できます。
  5. 証明書と鍵は、ホスト上の指定されたファイルの場所から読み取られます。設定のテストおよび検証はクライアントから行われます。
  6. 外部サーバー証明書は自動的に更新されません。外部証明書を手動でローテーションする必要があります。
注記

検証に失敗した場合、MicroShift サービスはカスタム設定をスキップし、デフォルトの証明書を使用して起動します。サービスを中断せずに継続することが最優先事項です。MicroShift は、サービスの開始時にエラーを記録します。一般的なエラーには、証明書の期限切れ、ファイルの欠落、IP アドレスの誤りなどがあります。

重要

カスタムサーバー証明書は、ホストオペレーティングシステムの信頼ルートに設定された CA データに対して検証する必要があります。詳細は、システム全体のトラストストア を参照してください。

4.2. カスタム認証局の設定

カスタム証明局 (CA) を使用して外部で生成された証明書とドメイン名を設定するには、それらを MicroShift の /etc/microshift/config.yaml 設定ファイルに追加します。ホストオペレーティングシステムの信頼ルートも設定する必要があります。

注記

外部で生成された kubeconfig ファイルは /var/lib/microshift/resources/kubeadmin/<hostname>/kubeconfig ディレクトリーに作成されます。外部で生成された設定に加えて localhost を使用する必要がある場合は、元の kubeconfig ファイルをデフォルトの場所に保持します。localhost kubeconfig ファイルは、自己署名認証局を使用します。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • クラスター管理者のロールを持つユーザーとしてクラスターにアクセスできる。
  • 認証局がカスタム証明書を発行している。
  • MicroShift の /etc/microshift/config.yaml 設定ファイルが存在する。

手順

  1. 追加するカスタム証明書を MicroShift ホストの信頼ルートにコピーします。証明書と秘密鍵に MicroShift のみがアクセス可能であることを確認します。
  2. 必要なカスタム CA ごとに、次の例を使用して、namedCertificates という apiServer セクションを /etc/microshift/config.yaml MicroShift 設定ファイルに追加します。

    apiServer:
      namedCertificates:
       - certPath: ~/certs/api_fqdn_1.crt 
    1
    
         keyPath:  ~/certs/api_fqdn_1.key 
    2
    
       - certPath: ~/certs/api_fqdn_2.crt
         keyPath:  ~/certs/api_fqdn_2.key
         names: 
    3
    
         - api_fqdn_1
         - *.apps.external.com
    Copy to Clipboard
    1
    証明書の完全パスを追加します。
    2
    証明書キーへの完全パスを追加します。
    3
    オプション: 明示的な DNS 名のリストを追加します。ワイルドカードは、先頭に指定できます。名前が指定されていない場合は、暗黙名が証明書から抽出されます。
  3. 次のコマンドを実行して、MicroShift を再起動し、証明書を適用します。

    $ systemctl microshift restart
    Copy to Clipboard
  4. システムが再起動してカスタムサーバーが適用されるまで数分間待ちます。新しい kubeconfig ファイルは /var/lib/microshift/resources/kubeadmin/ ディレクトリーに生成されます。
  5. kubeconfig ファイルをクライアントにコピーします。IP アドレスにワイルドカードを指定した場合は、kubeconfig を更新してサーバーのパブリック IP アドレスを削除し、その IP アドレスを使用する特定のワイルドカード範囲に置き換えます。
  6. クライアントからは、次の手順を実行します。

    1. 次のコマンドを実行して、使用する kubeconfig を指定します。

      $ export KUBECONFIG=~/custom-kubeconfigs/kubeconfig 
      1
      Copy to Clipboard
      1
      コピーした kubeconfig ファイルの場所をパスとして使用します。
    2. 次のコマンドを使用して、証明書が適用されていることを確認します。

      $ oc --certificate-authority ~/certs/ca.ca get node
      Copy to Clipboard

      出力例

      oc get node
      NAME                             STATUS   ROLES                         AGE   VERSION
      dhcp-1-235-195.arm.example.com   Ready    control-plane,master,worker   76m   v1.30.3
      Copy to Clipboard

    3. 次のコマンドを実行して、新しい CA ファイルを $KUBECONFIG 環境変数に追加します。

      $ oc config set clusters.microshift.certificate-authority /tmp/certificate-authority-data-new.crt
      Copy to Clipboard
    4. 次のコマンドを実行して、新しい kubeconfig ファイルに新しい CA が含まれていることを確認します。

      $ oc config view --flatten
      Copy to Clipboard

      外部で生成された kubeconfig ファイルの例

      apiVersion: v1
      clusters:
      - cluster:
          certificate-authority: /tmp/certificate-authority-data-new.crt 
      1
      
          server: https://api.ci-ln-k0gim2b-76ef8.aws-2.ci.openshift.org:6443
        name: ci-ln-k0gim2b-76ef8
      contexts:
      - context:
          cluster: ci-ln-k0gim2b-76ef8
          user:
        name:
      current-context:
      kind: Config
      preferences: {}
      Copy to Clipboard

      1
      外部で生成された kubeconfig ファイルには、certificate-authority-data セクションが存在しません。これは、以前使用した oc config set コマンドで追加されます。
    5. 次のコマンドを実行して、カスタマイズされた API サーバー認証局の subjectissuer を確認します。

      $ curl --cacert /tmp/caCert.pem https://${fqdn_name}:6443/healthz -v
      Copy to Clipboard

      出力例

      Server certificate:
        subject: CN=kas-test-cert_server
        start date: Mar 12 11:39:46 2024 GMT
        expire date: Mar 12 11:39:46 2025 GMT
        subjectAltName: host "dhcp-1-235-3.arm.eng.rdu2.redhat.com" matched cert's "dhcp-1-235-3.arm.eng.rdu2.redhat.com"
        issuer: CN=kas-test-cert_ca
        SSL certificate verify ok.
      Copy to Clipboard

      重要

      生成された kubeconfig ファイル内の certificate-authority-data を新しい rootCA に置き換えるか、certificate-authority-data をオペレーティングシステムの信頼ルートに追加します。両方の方法を使用しないでください。

    6. オペレーティングシステムの信頼ルートで追加の CA を設定します。たとえば、クライアントシステム上の RHEL クライアントトラストストア内などです。詳細は、システム全体のトラストストア を参照してください。

      • CA を含む設定で証明書バンドルを更新することを推奨します。
      • 証明書バンドルを設定しない場合は、代わりに oc login localhost:8443 --certificate-authority=/path/to/cert.crt コマンドを使用することもできますが、この方法は推奨されません。

4.3. カスタム証明書の予約名の値

次の証明書の問題により、MicroShift は証明書を動的に無視し、エラーをログに記録します。

  • 証明書ファイルがディスク上に存在しないか、読み取り可能ではありません。
  • 証明書は解析できません。
  • 証明書は、SubjectAlternativeNames (SAN) フィールドの内部証明書の IP アドレスまたは DNS 名をオーバーライドします。SAN を設定するときは予約名を使用しないでください。
表4.1 予約名の値
住所コメント

localhost

DNS

 

127.0.0.1

IP Address

 

10.42.0.0

IP Address

クラスターネットワーク

10.43.0.0/16,10.44.0.0/16

IP Address

サービスネットワーク

169.254.169.2/29

IP Address

br-ex ネットワーク

kubernetes.default.svc

DNS

 

openshift.default.svc

DNS

 

svc.cluster.local

DNS

 

4.4. カスタム証明書のトラブルシューティング

カスタム証明書の実装のトラブルシューティングを行うには、次の手順を実行します。

手順

  1. MicroShift から、次のコマンドを実行して、証明書が kube-apiserver によって提供されていることを確認し、証明書パスが --tls-sni-cert-key フラグに追加されていることを確認します。

    $ journalctl -u microshift -b0 | grep tls-sni-cert-key
    Copy to Clipboard

    出力例

    Jan 24 14:53:00 localhost.localdomain microshift[45313]: kube-apiserver I0124 14:53:00.649099   45313 flags.go:64] FLAG: --tls-sni-cert-key="[/home/eslutsky/dev/certs/server.crt,/home/eslutsky/dev/certs/server.key;/var/lib/microshift/certs/kube-apiserver-external-signer/kube-external-serving/server.crt,/var/lib/microshift/certs/kube-apiserver-external-signer/kube-external-serving/server.key;/var/lib/microshift/certs/kube-apiserver-localhost-signer/kube-apiserver-localhost-serving/server.crt,/var/lib/microshift/certs/kube-apiserver-localhost-signer/kube-apiserver-localhost-serving/server.key;/var/lib/microshift/certs/kube-apiserver-service-network-signer/kube-apiserver-service-network-serving/server.crt,/var/lib/microshift/certs/kube-apiserver-service-network-signer/kube-apiserver-service-network-serving/server.key
    Copy to Clipboard

  2. クライアントから次のコマンドを実行して、kube-apiserver が正しい証明書を提供していることを確認します。

    $ openssl s_client -connect <SNI_ADDRESS>:6443 -showcerts | openssl x509 -text -noout -in - | grep -C 1 "Alternative\|CN"
    Copy to Clipboard

4.5. カスタム証明書のクリーンアップおよび再作成

MicroShift サービスを停止するには、カスタム証明書をクリーンアップし、カスタム証明書を再作成するには、次の手順を使用します。

手順

  1. 次のコマンドを実行して、MicroShift サービスを停止し、カスタム証明書をクリーンアップします。

    $ sudo microshift-cleanup-data --cert
    Copy to Clipboard

    出力例

    Stopping MicroShift services
    Removing MicroShift certificates
    MicroShift service was stopped
    Cleanup succeeded
    Copy to Clipboard

  2. 次のコマンドを実行して、MicroShift サービスを再起動し、カスタム証明書を再作成します。

    $ sudo systemctl start microshift
    Copy to Clipboard

4.6. 関連情報

第5章 greenboot スクリプトのステータスの確認

kustomize マニフェスト以外のツールを使用して MicroShift API を通じてアプリケーションをデプロイしたり、その他の変更を加えたりするには、greenboot ヘルスチェックが完了するまで待つ必要があります。これにより、greenboot が rpm-ostree システムを以前の状態にロールバックしても、変更が失われなくなります。

greenboot-healthcheck サービスは 1 回実行してから終了します。greenboot が終了し、システムが正常な状態になったら、設定の変更とデプロイメントを続行できます。

5.1. greenboot ヘルスチェックのステータスの確認

システムに変更を加える前、またはトラブルシューティング中に、greenboot ヘルスチェックのステータスを確認します。次のコマンドのいずれかを使用すると、greenboot スクリプトの実行が完了したことを確認できます。

手順

  • ヘルスチェックステータスのレポートを表示するには、次のコマンドを使用します。

    $ systemctl show --property=SubState --value greenboot-healthcheck.service
    Copy to Clipboard
    • start が出力される場合、greenboot チェックがまだ実行中であることを意味します。
    • exited が出力される場合、チェックが合格し、greenboot が終了したことを意味します。Greenboot は、システムが正常な状態の場合、green.d ディレクトリー内のスクリプトを実行します。
    • failed の出力は、チェックが合格しなかったことを意味します。システムがこの状態にある場合、Greenboot は red.d ディレクトリー内のスクリプトを実行し、システムを再起動する可能性があります。
  • サービスの数値終了コードを示すレポートを表示するには、次のコマンドを使用します。0 は成功を、0 以外の値は失敗を意味します。

    $ systemctl show --property=ExecMainStatus --value greenboot-healthcheck.service
    Copy to Clipboard
  • Boot Status is GREEN - Health Check SUCCESS など、ブートステータスに関するメッセージを表示するレポートを表示するには、次のコマンドを使用します。

    $ cat /run/motd.d/boot-status
    Copy to Clipboard

第6章 監査ロギングポリシーの設定

設定値を使用して、MicroShift 監査ログファイルのローテーションと保持を制御できます。

6.1. 監査ログファイルの制限設定について

設定値を使用して MicroShift 監査ログファイルのローテーションと保持を制御すると、ファーエッジデバイスの限られたストレージ容量を超えないようにすることができます。このようなデバイスでは、ログデータの蓄積によってホストシステムまたはクラスターのワークロードが制限され、デバイスの動作が停止する可能性があります。監査ログポリシーを設定すると、重要な処理スペースを継続して利用できるようにします。

MicroShift 監査ログを制限するために設定した値を使用すると、監査ログバックアップのサイズ、数、保存期間の制限を適用できます。フィールド値は、優先順位を付けずに、互いに独立して処理されます。

フィールドを組み合わせて設定し、保持されるログの最大ストレージ制限を定義できます。以下に例を示します。

  • ログストレージの上限を作成するには、maxFileSizemaxFiles の両方を設定します。
  • maxFileAge 値を設定すると、maxFiles 値に関係なく、ファイル名のタイムスタンプより古いファイルが自動的に削除されます。

6.1.1. デフォルトの監査ログ値

MicroShift には、次のデフォルトの監査ログローテーション値が含まれています。

表6.1 MicroShift のデフォルトの監査ログ値
監査ログパラメーターデフォルト設定定義

maxFileAge:

0

ログファイルが自動的に削除されるまでの保持期間。デフォルト値は、経過時間をベースにしてログファイルが削除されないという意味です。この値は設定可能です。

maxFiles:

10

保持されるログファイルの合計数。デフォルトでは、MicroShift は 10 個のログファイルを保持します。余分なファイルが作成されると、最も古いものが削除されます。この値は設定可能です。

maxFileSize:

200

デフォルトでは、audit.log ファイルが maxFileSize の制限に達すると、audit.log ファイルがローテーションされ、MicroShift は新しい audit.log ファイルへの書き込みを開始します。この値はメガバイト単位で設定できます。

profile:

Default

Default プロファイル設定では、読み取りおよび書き込み要求のメタデータのみがログに記録されます。OAuth アクセストークン要求を除き、要求本文はログに記録されません。このフィールドを指定しない場合は、Default プロファイルが使用されます。

ファイルが 10 個以下の場合、監査ログの保持の最大デフォルトストレージ使用量は 2000 Mb です。

フィールドに値を指定しない場合は、デフォルト値が使用されます。以前に設定したフィールド値を削除すると、次回の MicroShift サービスの再起動後にデフォルト値が復元されます。

重要

アプリケーション Pod によって生成されるログは、Red Hat Enterprise Linux (RHEL) で監査ログの保持およびローテーションを設定する必要があります。これらのログはコンソールに出力され、保存されます。MicroShift クラスターの健全性を維持するために、RHEL /var/log/audit/audit.log ファイルにログ設定が設定されていることを確認してください。

6.2. 監査ログポリシープロファイルについて

監査ログプロファイルは、OpenShift API サーバーおよび Kubernetes API サーバーに送信されるリクエストをログに記録する方法を定義します。

MicroShift は、次の定義済み監査ポリシープロファイルをサポートしています。

Profile説明

Default

読み取りおよび書き込み要求のメタデータのみをログに記録します。OAuth アクセストークン要求を除く要求の本文はログに記録されません。これはデフォルトポリシーになります。

WriteRequestBodies

すべてのリクエストのメタデータのログに加えて、API サーバーへのすべての書き込みリクエスト (createupdatepatchdeletedeletecollection) のリクエスト本文をログに記録します。このプロファイルには、Default プロファイルよりも多くのリソースのオーバーヘッドがあります。[1]

AllRequestBodies

すべての要求のメタデータをロギングする以外にも、API サーバーへの読み取りおよび書き込み要求ごとに要求の本文をログに記録します (getlistcreateupdatepatch)。このプロファイルには最も多くのリソースのオーバーヘッドがあります。[1]

None

OAuth アクセストークン要求や OAuth 承認トークン要求などの要求はログに記録されません。

警告

問題のトラブルシューティング時に有用なデータが記録されないリスクを完全に理解していない限り、None プロファイルを使用して監査ロギングを無効にしないようにしてください。監査ロギングを無効にしてサポートが必要な状況が生じた場合は、適切にトラブルシューティングを行うために監査ロギングを有効にし、問題を再現することを推奨します。

  1. SecretRouteOAuthClient オブジェクトなどの機密リソースは、メタデータレベルでのみログ記録されます。

デフォルトでは、MicroShift は Default の監査ログプロファイルを使用します。リクエスト本文もログに記録する別の監査ポリシープロファイルを使用することもできますが、CPU、メモリー、I/O などのリソース使用量が増加することに注意してください。

6.3. 監査ログ値の設定

MicroShift サービス設定ファイルを使用して、監査ログ設定を指定できます。

手順

  1. 指定されている config.yaml.default ファイルのコピーを /etc/microshift/ ディレクトリーに作成し、名前を config.yaml に変更します。作成した新しい MicroShift config.yaml/etc/microshift/ ディレクトリーに保存します。MicroShift サービスが開始されるたびに、新しい config.yaml が読み取られます。これを作成すると、config.yaml ファイルは組み込み設定よりも優先されます。
  2. YAML の auditLog セクションのデフォルト値を必要な有効な値に置き換えてください。

    デフォルトの auditLog 設定の例

    apiServer:
    # ....
      auditLog:
        maxFileAge: 7 
    1
    
        maxFileSize: 200 
    2
    
        maxFiles: 1 
    3
    
        profile: Default 
    4
    
    # ....
    Copy to Clipboard

    1
    ログファイルが保持される最大時間を日数で指定します。この制限よりも古いファイルは削除されます。この例では、ログファイルは 7 日以上経過すると削除されます。ライブログが maxFileSize フィールドで指定された最大ファイルサイズに達したかどうかに関係なく、ファイルは削除されます。ファイルの有効期限は、ローテーションされたログファイルの名前に書き込まれたタイムスタンプによって決定されます (例: audit-2024-05-16T17-03-59.994.log)。値が 0 の場合、制限は無効になります。
    2
    監査ログファイルの最大サイズ (メガバイト単位)。この例では、ライブログが 200 MB の制限に達するとすぐにファイルがローテーションされます。値を 0 に設定すると、制限は無効になります。
    3
    保持されるローテーションされた監査ログファイルの最大数。制限に達すると、ログファイルは古いものから順に削除されます。この例では、値 1 を指定すると、現在のアクティブログに加えて、maxFileSize サイズのファイル 1 つだけが保持されます。値を 0 に設定すると、制限は無効になります。
    4
    読み取りおよび書き込み要求のメタデータのみをログに記録します。OAuth アクセストークン要求を除く要求の本文はログに記録されません。このフィールドを指定しない場合は、Default プロファイルが使用されます。
  3. オプション: ログ用の新しいディレクトリーを指定するには、MicroShift を停止し、/var/log/kube-apiserver ディレクトリーを目的の場所に移動します。

    1. 次のコマンドを実行して MicroShift を停止します。

      $ sudo systemctl stop microshift
      Copy to Clipboard
    2. 以下のコマンドを実行して、/var/log/kube-apiserver ディレクトリーを目的の場所に移動します。

      $ sudo mv /var/log/kube-apiserver <~/kube-apiserver> 
      1
      Copy to Clipboard
      1
      <~/kube-apiserver> は、使用するディレクトリーへのパスに置き換えます。
    3. ログの新規ディレクトリーを指定した場合、次のコマンドを実行して、/var/log/kube-apiserver にカスタムディレクトリーへのシンボリックリンクを作成します。

      $ sudo ln -s <~/kube-apiserver> /var/log/kube-apiserver 
      1
      Copy to Clipboard
      1
      <~/kube-apiserver> は、使用するディレクトリーへのパスに置き換えます。これにより、SOS レポートでのログの収集が可能になります。
  4. 実行中のインスタンスで監査ログポリシーを設定する場合は、次のコマンドを入力して MicroShift を再起動します。

    $ sudo systemctl restart microshift
    Copy to Clipboard

6.4. 監査ログ設定のトラブルシューティング

カスタム監査ログ設定とファイルの場所のトラブルシューティングを行うには、次の手順に従います。

手順

  • 次のコマンドを実行して、現在設定されている値を確認します。

    $ sudo microshift show-config --mode effective
    Copy to Clipboard

    出力例

    auditLog:
        maxFileSize: 200
        maxFiles: 1
        maxFileAge: 7
        profile: AllRequestBodies
    Copy to Clipboard

  • 次のコマンドを実行して、audit.log ファイルのパーミッションを確認します。

    $ sudo ls -ltrh /var/log/kube-apiserver/audit.log
    Copy to Clipboard

    出力例

    -rw-------. 1 root root 46M Mar 12 09:52 /var/log/kube-apiserver/audit.log
    Copy to Clipboard

  • 次のコマンドを実行して、現在のログディレクトリーの内容をリスト表示します。

    $ sudo ls -ltrh /var/log/kube-apiserver/
    Copy to Clipboard

    出力例

    total 6.0M
    -rw-------. 1 root root 2.0M Mar 12 10:56 audit-2024-03-12T14-56-16.267.log
    -rw-------. 1 root root 2.0M Mar 12 10:56 audit-2024-03-12T14-56-49.444.log
    -rw-------. 1 root root 962K Mar 12 10:57 audit.log
    Copy to Clipboard

第7章 LVMS CSI プロバイダーまたは CSI スナップショットの無効化

MicroShift を設定して、組み込みの Logical Volume Manager Storage (LVMS) Container Storage Interface (CSI) プロバイダーまたは CSI スナップショット機能を無効にし、RAM、CPU、ストレージなどのランタイムリソースの使用を減らすことができます。

7.1. CSI スナップショット実装を実行するデプロイメントの無効化

以下の手順に従って、CSI 実装 Pod のインストールを無効にします。

重要

この手順は、MicroShift をインストールして実行する前に設定ファイルを定義するユーザーを対象としています。MicroShift がすでに開始されている場合、CSI スナップショット実装が実行されます。ユーザーは、アンインストール手順に従って手動で削除する必要があります。

注記

MicroShift は、CSI スナップショット実装 Pod を削除しません。起動プロセス中に CSI スナップショット実装 Pod のインストールを無効化するように MicroShift を設定する必要があります。

手順

  1. /etc/microshift/config.yaml の MicroShift 設定ファイルの storage セクションで、optionalCsiComponents 値を入力して、CSI スナップショットコントローラーのインストールを無効化します。

    # ...
      storage: {} 
    1
    
    # ...
    Copy to Clipboard
    1
    許可される値は次のとおりです。
    • optionalCsiComponents は定義しません。
    • optionalCsiComponents フィールドを空の値 ([]) または単一の空の文字列要素 ([""]) で指定します。
    • 許可される値 (snapshot-controllersnapshot-webhook、または none) のいずれかで optionalCsiComponents を指定します。none は、他のすべての値と相互に排他的です。

      注記

      optionalCsiComponents 値が空または null の場合、MicroShift はデフォルトで snapshot-controller および snapshot-webhook をデプロイします。

  2. optionalCsiComponents フィールドが config.yaml のサポートされている値で指定された後、次のコマンドを実行して MicroShift を起動します。

    $ sudo systemctl start microshift
    Copy to Clipboard
    注記

    MicroShift は、再起動後に無効化されたコンポーネントを再デプロイしません。

7.2. CSI ドライバー実装を実行するデプロイメントの無効化

以下の手順に従って、CSI 実装 Pod のインストールを無効にします。

重要

この手順は、MicroShift をインストールして実行する前に設定ファイルを定義するユーザーを対象としています。MicroShift がすでに起動されている場合、CSI ドライバー実装が実行されます。ユーザーは、アンインストール手順に従って手動で削除する必要があります。

注記

MicroShift は、CSI ドライバー実装 Pod を削除しません。起動プロセス中に CSI ドライバー実装 Pod のインストールを無効化するように MicroShift を設定する必要があります。

手順

  1. /etc/microshift/config.yaml の MicroShift 設定ファイルの storage セクションの下に driver 値を入力して、CSI ドライバーのインストールを無効化します。

    # ...
      storage
       driver:
       - "none" 
    1
    
    # ...
    Copy to Clipboard
    1
    有効な値は none または lvms です。
    注記

    デフォルトでは、driver 値は空または null で、LVMS がデプロイされています。

  2. 次のコマンドを実行して、driver フィールドが、/etc/microshift/config.yaml ファイルでサポートされている値で指定された後に MicroShift を開始します。

    $ sudo systemctl enable --now microshift
    Copy to Clipboard
    注記

    MicroShift は、再起動操作後に無効化されたコンポーネントを再デプロイしません。

第8章 低レイテンシーの設定

8.1. 低レイテンシーの設定

低レイテンシー機能を設定してチューニングすることで、エッジデバイスでアプリケーションのパフォーマンスを向上させることができます。

8.1.1. MicroShift アプリケーションのレイテンシーの短縮

レイテンシーは、イベントからそのイベントへの応答までの時間として定義されます。エッジデバイスが外部イベントに迅速に応答する必要がある、運用上またはソフトウェア定義の制御システムで実行されている MicroShift クラスターで、低レイテンシー設定およびチューニングを使用できます。MicroShift の設定とオペレーティングシステムのチューニングとワークロードのパーティション分割を組み合わせることで、低レイテンシーのパフォーマンスを完全に最適化できます。

重要

MicroShift サービス、OVS、CRI-O、MicroShift Pod、分離されたコアなどの管理アプリケーションの CPU セットには、すべてのオンライン CPU が含まれている必要があります。

8.1.1.1. MicroShift アプリケーションの低レイテンシーを設定するためのワークフロー

MicroShift クラスターで実行されているアプリケーションの低レイテンシーを設定するには、次のタスクを完了する必要があります。

必須
  • microshift-low-latency RPM をインストールします。
  • ワークロードのパーティション分割を設定します。
  • /etc/microshift/ ディレクトリーにある config.yaml ファイルの kubelet セクションを設定します。
  • TuneD プロファイルを設定してアクティブ化します。TuneD は、ホストシステムを監視し、特定のワークロードでパフォーマンスを最適化する Red Hat Enterprise Linux (RHEL) のサービスです。
  • ホストを再起動します。
任意

8.1.2. MicroShift の低レイテンシー RPM パッケージのインストール

MicroShift をインストールする際に、低レイテンシー RPM パッケージはデフォルトでインストールされません。低レイテンシー RPM は、オプションのパッケージとしてインストールできます。

前提条件

  1. MicroShift RPM をインストールしている。
  2. MicroShift のワークロードのパーティション分割を設定している。

手順

  • 次のコマンドを実行して、低レイテンシーの RPM パッケージをインストールします。

    $ sudo dnf install -y microshift-low-latency
    Copy to Clipboard
    ヒント

    TuneD プロファイルがアクティブ化されるのを待ってから、ホストを再起動します。ホストを再起動することで MicroShift と CRI-O が再起動され、低レイテンシーマニフェストが適用され、TuneD プロファイルがアクティブ化されます。

次のステップ

  1. MicroShift config.yaml で、低レイテンシー用の kubelet パラメーターを設定します。
  2. オペレーティングシステムを調整してください。たとえば、TuneD プロファイルを設定してアクティブ化します。
  3. オプション: TuneD プロファイルの自動アクティブ化を設定します。
  4. オプション: x86_64 アーキテクチャーを使用している場合は、Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) をインストールします。
  5. 低レイテンシー用にワークロードを準備します。

8.1.3. MicroShift での kubelet パラメーターおよび値の設定

MicroShift クラスターへの低レイテンシーを有効化するための最初の手順は、MicroShift config.yaml ファイルに設定を追加することです。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • クラスターへの root アクセス権限がある。
  • /etc/microshift/ ディレクトリーにある指定された config.yaml.default ファイルのコピーを作成し、config.yaml という名前を付けている。

手順

  • kubelet 設定を MicroShift config.yaml ファイルに追加します。

    パススルー kubelet 設定の例

    apiServer:
    # ...
    kubelet: 
    1
    
      cpuManagerPolicy: static 
    2
    
      cpuManagerPolicyOptions:
        full-pcpus-only: "true" 
    3
    
      cpuManagerReconcilePeriod: 5s
      memoryManagerPolicy: Static 
    4
    
      topologyManagerPolicy: single-numa-node
      reservedSystemCPUs: 0-1 
    5
    
      reservedMemory:
      - limits:
          memory: 1100Mi 
    6
    
        numaNode: 0
      kubeReserved:
        memory: 500Mi
      systemReserved:
        memory: 500Mi
      evictionHard: 
    7
    
        imagefs.available: "15%" 
    8
    
        memory.available: "100Mi" 
    9
    
        nodefs.available: "10%" 
    10
    
        nodefs.inodesFree: "5%" 
    11
    
      evictionPressureTransitionPeriod: 5m 
    12
    
    # ...
    Copy to Clipboard

    1
    kubelet 設定で CPU またはメモリーマネージャーを変更する場合は、以前の設定をキャッシュするファイルを削除する必要があります。ホストを再起動してそれらを自動的に削除するか、/var/lib/kubelet/cpu_manager_state ファイルおよび /var/lib/kubelet/memory_manager_state ファイルを手動で削除します。
    2
    使用するポリシーの名前。有効な値は none および static です。CPUManager フィーチャーゲートを有効化する必要があります。デフォルト値は none です。
    3
    CPUManager ポリシーの動作を微調整する追加のオプションを設定するための key=value ペアのセット。デフォルト値は null です。CPUManagerCPUManagerPolicyOptions 機能ゲートの両方を有効化する必要があります。
    4
    Memory Manager が使用するポリシーの名前。大文字と小文字を区別します。デフォルト値は none です。MemoryManager フィーチャーゲートを有効化する必要があります。
    5
    必須。reservedSystemCPUs の値は、オフライン化された CPU の逆数である必要があります。なぜなら、これら両方を合わせた値は、システム上のすべての CPU を考慮する必要があるためです。このパラメーターは、管理およびアプリケーションワークロードを分割する上で不可欠です。このパラメーターを使用して、ホストレベルのシステムおよび Kubernetes デーモン、さらに割り込みやタイマーのための静的 CPU セットを定義します。その後、システム上の残りの CPU はワークロード専用に使用できます。
    6
    この例の reservedMemory[0].limits.memory1100 Mi の値は、kubeReserved.memory + systemReserved.memory + evictionHard.memory.available に相当します。
    7
    evictionHard パラメーターは、kubelet が Pod をエビクトする条件を定義します。evictionHard スタンザの 1 つのみのパラメーターのデフォルト値を変更する場合、他のパラメーターのデフォルト値は継承されず、ゼロに設定されます。1 つだけ変更したい場合でも、すべてのしきい値を指定します。
    8
    imagefs は、コンテナーランタイムがコンテナーイメージとコンテナーの書き込み可能な階層を保存するために使用するファイルシステムです。この例では、evictionHard.imagefs.available パラメーターは、イメージファイルシステムで利用可能な領域が 15% 未満の場合に Pod がエビクトされることを意味します。
    9
    この例では、evictionHard.memory.available パラメーターは、ノードの利用可能なメモリーが 100 MiB 未満の場合に Pod がエビクトされることを意味します。
    10
    この例では、evictionHard.nodefs.available パラメーターは、ノードのメインファイルシステムに空き容量が 10% 未満になると Pod がエビクトされることを意味します。
    11
    この例では、evictionHard.nodefs.inodesFree パラメーターは、ノードのメインファイルシステムの inode のうち 15% 強が使用されている場合に Pod がエビクトされることを意味します。
    12
    コンテナーのガベージコレクションの場合: エビクションプレッシャー状態から移行するまでの待機時間。evictionPressureTransitionPeriod パラメーターを 0 に設定すると、デフォルト値の 5 分が設定されます。

検証

  • 次のステップを完了してホストを再起動したら、root-access アカウントを使用して、設定が /var/lib/microshift/resources/kubelet/config/ ディレクトリーの config.yaml ファイルにあることを確認できます。

次のステップ

  1. ワークロードのパーティション分割を有効化します。
  2. オペレーティングシステムを調整します。たとえば、TuneD プロファイルを設定およびアクティブ化します。
  3. オプション: TuneD プロファイルの自動有効化を設定します。
  4. オプション: x86_64 アーキテクチャーを使用している場合は、Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) をインストールできます。
  5. 低レイテンシー用に MicroShift ワークロードを準備します。

8.1.4. Red Hat Enterprise Linux 9 のチューニング

Red Hat Enterprise Linux (RHEL) システム管理者は、TuneD サービスを使用して、さまざまなユースケースに対して RHEL のパフォーマンスプロファイルを最適化できます。TuneD は、レイテンシーのパフォーマンスを含む、特定のワークロードでシステムパフォーマンスを監視し、最適化します。

  • TuneD プロファイルを使用して、低レイテンシーの MicroShift クラスターのデプロイなど、さまざまなユースケースに合わせてシステムを調整します。
  • 各プロファイルに定義されたルールを変更し、特定のデバイスのチューニングをカスタマイズできます。
  • 別のプロファイルに切り替えたり、TuneD を非アクティブ化すると、以前のプロファイルがシステム設定に加えた変更はすべて、元の状態に戻ります。
  • また、TuneD を設定してデバイスの使用状況の変化に対応し、設定を調整して、アクティブなデバイスのパフォーマンスを向上させ、非アクティブなデバイスの消費電力を削減することもできます。
8.1.4.1. MicroShift TuneD プロファイルの設定

microshift-low-latency RPM パッケージをインストールした後、Red Hat Enterprise Linux (RHEL) /etc/tuned/ host ディレクトリーで提供される microshift-baseline-variables.conf 設定ファイルを使用して、MicroShift ワークロードで低レイテンシーを使用するようにホストの TuneD プロファイルを設定します。

前提条件

  • クラスターへの root アクセス権限がある。
  • microshift-low-latency RPM パッケージをインストールしている。
  • RHEL ホストに TuneD がインストールされている。TuneD のスタートガイド (RHEL ドキュメント) を参照してください。

手順

  1. /etc/tuned/ ディレクトリープロファイルでデフォルトの microshift-baseline-variables.conf TuneD プロファイルを使用するか、独自のチューニングを作成してチューニングをさらに追加できます。

    microshift-baseline-variables.conf TuneD プロファイルの例

    # Isolate cores 2-7 for running application workloads
    isolated_cores=2-7 
    1
    
    
    # Size of the hugepages
    hugepages_size=2M 
    2
    
    
    # Number of hugepages
    hugepages=0
    
    # Additional kernel arguments
    additional_args= 
    3
    
    
    # CPU set to be offlined
    offline_cpu_set= 
    4
    Copy to Clipboard

    1
    分離する必要のあるコアを制御します。MicroShift では、ハウスキーピング用にソケットごとに 1 コアがデフォルトで予約されています。他のコアは分離されます。有効な値はコアリストまたは範囲です。任意の範囲 (例: isolated_cores=2,4-7 または isolated_cores=2-23) を分離できます。
    重要

    isolated_cores= 変数を 1 つだけ維持する必要があります。

    注記

    Kubernetes CPU マネージャーは、kubelet 設定で定義された予約済み CPU を除き、任意の CPU を使用してワークロードを実行できます。このような理由から、以下が最善となります。

    • kubelet の予約 CPU と分離されたコアの合計には、すべてのオンライン CPU が含まれます。
    • 分離されたコアは、kubelet 設定で定義された予約済み CPU に補完されます。
    2
    hugepages のサイズ。有効な値は 2M または 1G です。
    3
    追加のカーネル引数 (additional_args=console=tty0 console=ttyS0,115200 など)
    4
    オフラインに設定された CPU。
    重要

    isolated_cores と重複することはできません。

  2. 次のコマンドを実行して、プロファイルを有効化するか、変更をアクティブにします。

    $ sudo tuned-adm profile microshift-baseline
    Copy to Clipboard
  3. ホストを再起動して、カーネル引数をアクティブにします。

検証

  • オプション: 起動時に現在実行中のカーネルに指定された引数を含む /proc/cmdline ファイルを読み取ることができます。

    $ cat /proc/cmdline
    Copy to Clipboard

    出力例

    BOOT_IMAGE=(hd0,msdos2)/ostree/rhel-7f82ccd9595c3c70af16525470e32c6a81c9138c4eae6c79ab86d5a2d108d7fc/vmlinuz-5.14.0-427.31.1.el9_4.x86_64+rt crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M rd.lvm.lv=rhel/root fips=0 console=ttyS0,115200n8 root=/dev/mapper/rhel-root rw ostree=/ostree/boot.1/rhel/7f82ccd9595c3c70af16525470e32c6a81c9138c4eae6c79ab86d5a2d108d7fc/0 skew_tick=1 tsc=reliable rcupdate.rcu_normal_after_boot=1 nohz=on nohz_full=2,4-5 rcu_nocbs=2,4-5 tuned.non_isolcpus=0000000b intel_pstate=disable nosoftlockup hugepagesz=2M hugepages=10
    Copy to Clipboard

次のステップ

  1. 低レイテンシー用に MicroShift ワークロードを準備します。
  2. オプション: TuneD プロファイルの自動有効化を設定します。
  3. オプション: x86_64 アーキテクチャーを使用している場合は、Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) をインストールできます。
8.1.4.2. MicroShift TuneD プロファイルを自動的に有効化する

microshift-low-latency RPM パッケージには、システムの起動時に TuneD プロファイルを自動的に有効化するように設定可能な systemd サービスが含まれています。この機能は、大量のデバイスに MicroShift をインストールする場合に特に便利です。

前提条件

  1. ホストに microshift-low-latency RPM パッケージをインストールしている。
  2. MicroShift の config.yaml で低レイテンシーを有効化している。
  3. TuneD プロファイルを作成している。
  4. microshift-baseline-variables.conf ファイルを設定している。

手順

  1. /etc/microshift/ ディレクトリーで tuned.yaml を設定します。次に例を示します。

    tuned.yaml の例

    profile: microshift-baseline 
    1
    
    reboot_after_apply: True 
    2
    Copy to Clipboard

    1
    アクティブ化する TuneD プロファイルを制御します。この例では、プロファイルの名前は microshift-baseline です。
    2
    プロファイルの適用後にホストを再起動する必要があるかどうかを制御します。有効な値は True および False です。たとえば、True 設定を使用して、新しい ostree コミットがデプロイされた後にホストを自動的に再起動します。
    重要

    ホストは、microshift-tuned.service の実行時に再起動されますが、新しいコミットのデプロイ時にシステムは再起動されません。ホストを再起動して新しいコミットを有効化する必要があります。その後、起動時に microshift-tuned.service が実行され、プロファイルと変数への変更が検出されたときに、システムが再び起動します。

    この二重ブートはロールバックに影響を及ぼす可能性があります。自動プロファイルアクティブ化の使用時に、ロールバック前に許可される greenboot での再起動の回数を調整してください。たとえば、greenboot でロールバック前に 3 回の再起動が許可されている場合、その回数を 4 回に増やします。詳細は、「関連情報」のリストを参照してください。

  2. 次のコマンドを入力して、microshift-tuned.service が各システムの起動時に実行できるようにします。

    $ sudo systemctl enable microshift-tuned.service
    Copy to Clipboard
    重要

    reboot_after_applyTrue に設定する場合は、TuneD プロファイルがアクティブであること、および他のプロファイルが MicroShift サービス外でアクティブ化されていないことを確認してください。そのように設定されずに microshift-tuned.service を起動すると、ホストが再起動します。

  3. 次のコマンドを実行して、microshift-tuned.service を起動します。

    $ sudo systemctl start microshift-tuned.service
    Copy to Clipboard
    注記

    microshift-tuned.service は、収集したチェックサムを使用して、一部の TuneD プロファイルと変数への変更を検出します。ディスクにチェックサムがない場合は、サービスは TuneD プロファイルをアクティブ化し、ホストを再起動します。microshift-tuned.service の初めて起動する際は、ホストの再起動が必要です。

次のステップ

  • オプション: x86_64 アーキテクチャーを使用している場合は、Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) をインストールできます。

8.1.5. Red Hat Enterprise Linux for Real-Time の使用

ワークロードが割り込み処理やプロセススケジューリングなど、マイクロ秒 (μs) 単位の低レイテンシーかつ決定論的なコアカーネル機能を厳密に求める場合、Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) を使用できます。リアルタイムカーネルの目的は、予測可能な応答時間を提供する、一貫性のある低レイテンシーの決定論です。

システムのチューニングを検討する際には、以下の要素を考慮してください。

  • リアルタイムカーネルを使用する場合でも、標準カーネルと同様にシステムのチューニングは重要です。
  • RHEL 9 リリースの一部として提供される標準カーネルを実行する未チューニングのシステムに、リアルタイムカーネルをインストールしても、目立った利点はありません。
  • 標準カーネルを調整することで、達成可能なレイテンシー改善の 90% が得られます。
  • リアルタイムカーネルは、最も要求の厳しいワークロードで必要とされる、レイテンシー改善の最後の 10% を提供します。
8.1.5.1. Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) のインストール

低レイテンシーのワークロードにはリアルタイムカーネルは必要ありませんが、リアルタイムカーネルを使用すると低レイテンシーのパフォーマンスを最適化できます。RPM パッケージを使用してホストにインストールし、Red Hat Enterprise Linux for Edge (RHEL for Edge) イメージのデプロイメントに追加することができます。

前提条件

  • Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) を含む Red Hat サブスクリプションがある。たとえば、ホストマシンが登録され、Red Hat Enterprise Linux (RHEL) が RHEL for Real Time サブスクリプにアタッチされています。
  • x86_64 アーキテクチャーを使用している。

手順

  1. 次のコマンドを実行して、リアルタイムカーネルリポジトリーを有効化します。

    $ sudo subscription-manager repos --enable rhel-9-for-x86_64-rt-rpms
    Copy to Clipboard
  2. 次のコマンドを実行して、リアルタイムカーネルをインストールします。

    $ sudo dnf install -y kernel-rt
    Copy to Clipboard
  3. 次のコマンドを実行して、リアルタイムカーネルのバージョンをクエリーします。

    $ RTVER=$(rpm -q --queryformat '%{version}-%{release}.%{arch}' kernel-rt | sort | tail -1)
    Copy to Clipboard
  4. 次のコマンドを実行して、リアルタイムカーネルをデフォルトのカーネルとして指定する GRUB に永続的な変更を加えます。

    $ sudo grubby --set-default="/boot/vmlinuz-${RTVER}+rt"
    Copy to Clipboard
  5. ホストを再起動して、リアルタイムカーネルをアクティブ化します。

次のステップ

  1. 低レイテンシー用に MicroShift ワークロードを準備します。
  2. オプション: ブループリントを使用して、RHEL for Edge イメージにリアルタイムカーネルをインストールします。
8.1.5.2. Red Hat Enterprise Linux for Edge (RHEL for Edge) イメージに Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) をインストールする

Image Builder を使用して、RHEL for Edge イメージデプロイメントにリアルタイムカーネルを含めることができます。次のブループリントセクションの例には、MicroShift クラスターの低レイテンシーを設定するために必要だった前の手順で収集した参照が含まれています。

前提条件

  • Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) を含むホストで Red Hat サブスクリプションを有効化している。
  • x86_64 アーキテクチャーを使用している。
  • kernel-rt リポジトリーを使用するように osbuild を設定している。
重要

リアルタイムカーネルを含むサブスクリプションは、コミットのビルドに使用するホストで有効化する必要があります。

手順

  • RHEL for Edge イメージにリアルタイムカーネルをインストールするための完全なインストールブループリントに、以下の例のブループリントセクションを追加してください。

    リアルタイムカーネルのブループリントスニペットの例

    [[packages]]
    name = "microshift-low-latency"
    version = "*"
    
    # Kernel RT is supported only on the x86_64 architecture
    [customizations.kernel]
    name = "kernel-rt"
    
    [customizations.services]
    enabled = ["microshift", "microshift-tuned"]
    
    [[customizations.files]]
    path = "/etc/microshift/config.yaml"
    data = """
    kubelet:
      cpuManagerPolicy: static
      cpuManagerPolicyOptions:
        full-pcpus-only: "true"
      cpuManagerReconcilePeriod: 5s
      memoryManagerPolicy: Static
      topologyManagerPolicy: single-numa-node
      reservedSystemCPUs: 0-1
      reservedMemory:
      - limits:
          memory: 1100Mi
        numaNode: 0
      kubeReserved:
        memory: 500Mi
      systemReserved:
        memory: 500Mi
      evictionHard:
        imagefs.available: 15%
        memory.available: 100Mi
        nodefs.available: 10%
        nodefs.inodesFree: 5%
      evictionPressureTransitionPeriod: 5m
    """
    
    [[customizations.files]]
    path = "/etc/tuned/microshift-baseline-variables.conf"
    data = """
    # Isolated cores should be complementary to the kubelet configuration reserved CPUs.
    # Isolated and reserved CPUs must contain all online CPUs.
    # Core #3 is for testing offlining, therefore it is skipped.
    isolated_cores=2,4-5
    hugepages_size=2M
    hugepages=10
    additional_args=test1=on test2=true dummy
    offline_cpu_set=3
    """
    
    [[customizations.files]]
    path = "/etc/microshift/tuned.yaml"
    data = """
    profile: microshift-baseline
    reboot_after_apply: True
    """
    Copy to Clipboard

次のステップ

  1. イメージのビルドプロセスを完了します。
  2. MicroShift クラスターの低レイテンシーを有効化するための以前の手順を完了していない場合は、今すぐ完了してください。これらの手順で収集された情報を使用してブループリントを更新します。
  3. ワークロードのパーティション分割を設定していない場合は、今すぐ設定してください。
  4. 低レイテンシー用に MicroShift ワークロードを準備します。

8.1.6. リアルタイムカーネルを使用した Red Hat Enterprise Linux for Edge (RHEL for Edge) イメージのビルド

ビルドプロセスを完了するには、RHEL for Edge イメージに MicroShift を埋め込む以下の手順から開始します。次に、RHEL for Edge イメージに MicroShift をインストールするためのインストールドキュメントの残りの手順を完了します。

8.1.7. 低レイテンシーに対する MicroShift ワークロードの準備

低レイテンシーを利用するには、MicroShift で実行されるワークロードでは、RuntimeClass 機能を使用して microshift-low-latency コンテナーのランタイム設定を行う必要があります。CRI-O RuntimeClass オブジェクトは microshift-low-latency RPM でインストールされるため、Pod アノテーションのみを設定する必要があります。

前提条件

  • microshift-low-latency RPM パッケージをインストールしている。
  • ワークロードのパーティション分割を設定している。

手順

  • 以下の例を使用して、Pod 仕様で次のアノテーションを設定します。

    cpu-load-balancing.crio.io: "disable"
    irq-load-balancing.crio.io: "disable"
    cpu-quota.crio.io: "disable"
    cpu-load-balancing.crio.io: "disable"
    cpu-freq-governor.crio.io: "<governor>"
    Copy to Clipboard

    oslat テストを実行する Pod の例:

    apiVersion: v1
    kind: Pod
    metadata:
      name: oslat
      annotations:
        cpu-load-balancing.crio.io: "disable" 
    1
    
        irq-load-balancing.crio.io: "disable" 
    2
    
        cpu-quota.crio.io: "disable" 
    3
    
        cpu-c-states.crio.io: "disable" 
    4
    
        cpu-freq-governor.crio.io: "<governor>" 
    5
    
    spec:
      runtimeClassName: microshift-low-latency 
    6
    
      containers:
      - name: oslat
        image: quay.io/container-perf-tools/oslat
        imagePullPolicy: Always
        resources:
          requests:
            memory: "400Mi"
            cpu: "2"
          limits:
            memory: "400Mi"
            cpu: "2"
        env:
        - name: tool
          value: "oslat"
        - name: manual
          value: "n"
        - name: PRIO
          value: "1"
        - name: delay
          value: "0"
        - name: RUNTIME_SECONDS
          value: "60"
        - name: TRACE_THRESHOLD
          value: ""
        - name: EXTRA_ARGS
          value: ""
        securityContext:
          privileged: true
          capabilities:
            add:
              - SYS_NICE
              - IPC_LOCK
    Copy to Clipboard

    1
    Pod の CPU 負荷分散を無効化します。
    2
    Pod の割り込み処理 (IRQ) をオプトアウトします。
    3
    Pod の実行時に CPU Completely Fair Scheduler (CFS) のクォータを無効にします。
    4
    各 CPU の C-状態を有効化または無効化します。優先順位の高い Pod で最高のパフォーマンスを提供するには、値を disable に設定します。
    5
    各 CPU の cpufreq ガバナーを設定します。performance ガバナーは、優先度の高いワークロードに推奨されます。
    6
    runtimeClassName は、クラスターで設定したパフォーマンスプロファイルの名前と一致している必要があります。たとえば、microshift-low-latency です。
    注記

    CPU マネージャーの静的ポリシーが有効化され、CPU 全体を使用する Guaranteed QoS を持つ Pod に対してのみ、CPU 負荷分散を無効化します。これ以外の場合に CPU 負荷分散を無効にすると、クラスター内の他のコンテナーのパフォーマンスに影響する可能性があります。

    重要

    Pod が Guaranteed QoS クラスを持つには、要求と制限で CPU およびメモリーの値が同じである必要があります。Guaranteed (Kubernetes アップストリームのドキュメント) を参照してください。

8.1.8. RHEL for Edge イメージに Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) をインストールするための参照ブループリント

イメージのブループリントは、複数のビルドを作成できる必要なイメージのカスタマイズの永続的な定義です。各イメージビルドのブループリントを再設定する代わりに、ブループリントからイメージを継続的に再ビルドできるように、ブループリントを編集、再ビルド、削除、および保存できます。

RHEL for Edge イメージにリアルタイムカーネルをインストールするために使用されるブループリントの例

name = "microshift-low-latency"
description = "RHEL 9.4 and MicroShift configured for low latency"
version = "0.0.1"
modules = []
groups = []
distro = "rhel-94"

[[packages]]
name = "microshift"
version = "*"

[[packages]]
name = "microshift-greenboot"
version = "*"

[[packages]]
name = "microshift-networking"
version = "*"

[[packages]]
name = "microshift-selinux"
version = "*"

[[packages]]
name = "microshift-low-latency"
version = "*"

# Kernel RT is only available for x86_64
[customizations.kernel]
name = "kernel-rt"

[customizations.services]
enabled = ["microshift", "microshift-tuned"]

[customizations.firewall]
ports = ["22:tcp", "80:tcp", "443:tcp", "5353:udp", "6443:tcp", "30000-32767:tcp", "30000-32767:udp"]

[customizations.firewall.services]
enabled = ["mdns", "ssh", "http", "https"]

[[customizations.firewall.zones]]
name = "trusted"
sources = ["10.42.0.0/16", "169.254.169.1"]

[[customizations.files]]
path = "/etc/microshift/config.yaml"
data = """
kubelet:
  cpuManagerPolicy: static
  cpuManagerPolicyOptions:
    full-pcpus-only: "true"
  cpuManagerReconcilePeriod: 5s
  memoryManagerPolicy: Static
  topologyManagerPolicy: single-numa-node
  reservedSystemCPUs: 0-1
  reservedMemory:
  - limits:
      memory: 1100Mi
    numaNode: 0
  kubeReserved:
    memory: 500Mi
  systemReserved:
    memory: 500Mi
  evictionHard:
    imagefs.available: 15%
    memory.available: 100Mi
    nodefs.available: 10%
    nodefs.inodesFree: 5%
  evictionPressureTransitionPeriod: 5m
"""

[[customizations.files]]
path = "/etc/tuned/microshift-baseline-variables.conf"
data = """
# Isolated cores should be complementary to the kubelet configuration reserved CPUs.
# Isolated and reserved CPUs must contain all online CPUs.
# Core #3 is for testing offlining, therefore it is skipped.
isolated_cores=2,4-5
hugepages_size=2M
hugepages=10
additional_args=test1=on test2=true dummy
offline_cpu_set=3
"""

[[customizations.files]]
path = "/etc/microshift/tuned.yaml"
data = """
profile: microshift-baseline
reboot_after_apply: True
"""
Copy to Clipboard

8.2. ワークロードのパーティション分割

ワークロードのパーティション分割は、ノードの CPU リソースを個別の CPU セットに分割します。主な目的は、ユーザーのワークロード用に残りのデバイス CPU リソースを予約するすべてのコントロールプレーンコンポーネントの CPU 使用率を制限することです。

ワークロードのパーティション分割は、予約済みの CPU セットを MicroShift サービス、クラスター管理ワークロード、およびインフラストラクチャー Pod に割り当て、クラスターデプロイメント内の残りの CPU が変更されずに、プラットフォーム以外のワークロード専用になるようにします。

8.2.1. ワークロードのパーティション分割の有効化

MicroShift でワークロードのパーティション分割を有効化するには、次の設定変更を行います。

  • MicroShift config.yaml ファイルを更新して、kubelet 設定ファイルを含めます。
  • CRI-O systemd および設定ファイルを作成します。
  • MicroShift および CRI-O サービスの systemd 設定ファイルをそれぞれ作成および更新します。

手順

  1. MicroShift config.yaml ファイルを更新して、kubelet 設定ファイルを含め、ワークロードの CPU マネージャーを有効化して設定します。

    • パス /etc/kubernetes/openshift-workload-pinning に kubelet 設定ファイルを作成します。kubelet 設定は、容量および割り当て可能な CPU に基づいてノードリソースを変更するように kubelet に指示します。

      kubelet 設定の例

      # ...
      {
        "management": {
          "cpuset": "0,6,7" 
      1
      
        }
      }
      # ...
      Copy to Clipboard

      1
      cpuset は、8 つの VCPU (4 コア) を搭載したマシンに適用され、ドキュメント全体で有効です。
    • パス /etc/microshift/config.yaml 内の MicroShift config.yaml ファイルを更新します。MicroShift config.yaml ファイルに kubelet 設定を埋め込んで、ワークロードの CPU マネージャーを有効化して設定します。

      MicroShift の config.yaml の例

      # ...
      kubelet:
        reservedSystemCPUs: 0,6,7 
      1
      
        cpuManagerPolicy: static
        cpuManagerPolicyOptions:
          full-pcpus-only: "true" 
      2
      
        cpuManagerReconcilePeriod: 5s
      # ...
      Copy to Clipboard

      1
      システムデーモンと割り込み/タイマー用の排他的な cpuset。
      2
      kubelet 設定では、CPUManagerPolicyOptions オプションを full-pcpus-only に設定し、コア全体をコンテナーのワークロードに割り当てできるようにします。
  2. CRI-O systemd および設定ファイルを作成します。

    • パス /etc/crio/crio.conf.d/20-microshift-workload-partition.conf に CRI-O 設定ファイルを作成します。このファイルは、11-microshift-ovn.conf ファイルにすでに存在するデフォルト設定をオーバーライドします。

      CRI-O 設定の例

      # ...
      [crio.runtime]
      infra_ctr_cpuset = "0,6,7"
      
      [crio.runtime.workloads.management]
      activation_annotation = "target.workload.openshift.io/management"
      annotation_prefix = "resources.workload.openshift.io"
      resources = { "cpushares" = 0, "cpuset" = "0,6,7" }
      # ...
      Copy to Clipboard

    • パス /etc/systemd/system/crio.service.d/microshift-cpuaffinity.conf に CRI-O の systemd ファイルを作成します。

      CRI-O systemd 設定の例

      # ...
      [Service]
      CPUAffinity=0,6,7
      # ...
      Copy to Clipboard

  3. MicroShift および CRI-O サービスの CPUAffinity 値を使用して、systemd 設定ファイルを作成および更新します。

    • パス /etc/systemd/system/microshift.service.d/microshift-cpuaffinity.conf に MicroShift サービスの systemd ファイルを作成します。MicroShift は、systemd CPUAffinity 値を使用して固定されます。

      MicroShift サービスの systemd 設定の例

      # ...
      [Service]
      CPUAffinity=0,6,7
      # ...
      Copy to Clipboard

    • パス /etc/systemd/system/ovs-vswitchd.service.d/microshift-cpuaffinity.conf の MicroShift ovs-vswitchd systemd ファイルの CPUAffinity 値を更新します。

      MicroShift ovs-vswitchd systemd 設定の例

      # ...
      [Service]
      CPUAffinity=0,6,7
      # ...
      Copy to Clipboard

    • パス /etc/systemd/system/ovsdb-server.service.d/microshift-cpuaffinity.conf の MicroShift ovsdb-server systemd ファイルの CPUAffinity 値を更新します。

      MicroShift ovsdb-server systemd 設定の例

      # ...
      [Service]
      CPUAffinity=0,6,7
      # ...
      Copy to Clipboard

法律上の通知

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

Theme

© 2025 Red Hat, Inc.