設定
第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
$ microshift show-config
Copy to Clipboard Copied! YAML 形式でのデフォルト値の出力例
apiServer: advertiseAddress: 10.44.0.0/32 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: "" nodeIPv6: "" storage: driver: "" optionalCsiComponents: - ""
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 Copied!
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 パラメーターとそれぞれの有効な値を説明しています。
フィールド | 型 | 説明 |
---|---|---|
|
| API サーバーがクラスターのメンバーにアドバタイズされる IP アドレスを指定する文字列。デフォルト値は、サービスネットワークのアドレスに基づいて計算されます。 |
|
|
ログファイルが自動的に削除されるまでの保存期間。 |
|
|
デフォルトでは、 |
|
| 保存されるログファイルの合計数。デフォルトでは、MicroShift は 10 個のログファイルを保持します。余分なファイルが作成されると、最も古いものが削除されます。この値は設定可能です。 |
|
|
読み取りおよび書き込み要求のメタデータのみをログに記録します。OAuth アクセストークン要求を除く要求の本文はログに記録されません。このフィールドを指定しない場合は、 |
|
| カスタム認証局を使用して、外部で生成された証明書およびドメイン名を定義します。 |
|
| 証明書への完全パス。 |
|
| 証明書キーへの完全パス。 |
|
| オプション: 明示的な DNS 名のリストを追加します。ワイルドカードは、先頭に指定できます。名前が指定されていない場合は、暗黙名が証明書から抽出されます。 |
|
完全修飾ドメイン名 (FQDN)、 | API サーバー証明書のサブジェクト代替名 (SAN)。SAN は、証明書で保護されたすべてのドメイン名および IP アドレスを示します。 |
|
|
ログの詳細レベル。デフォルトは |
|
| クラスターのベースドメイン。管理されるすべての DNS レコードはこのベースのサブドメインです。 |
|
|
デフォルトでは、 |
| IP アドレス、NIC 名、またはその複数。 | デフォルト値は、ホストのネットワーク全体になります。有効な設定可能な値は、単一の IP アドレスまたは NIC 名、あるいは複数の IP アドレスと NIC 名のリストです。 |
|
|
デフォルトのポートが表示されます。設定可能です。有効な値は、1-65535 の範囲内の単一の一意のポートです。 |
|
|
デフォルトのポートが表示されます。設定可能です。有効な値は、1-65535 の範囲内の単一の一意のポートです。 |
|
|
複数の namespace のホスト名要求の処理方法を記述します。デフォルトでは、ルートが、複数の namespace においてホストが同じ名前でパスが異なる要求を許可します。 |
|
|
ルーターのステータス。デフォルトは |
| MicroShift の低レイテンシーの手順を参照してください | kubelet ノードエージェントのパススルー設定のパラメーター。低レイテンシー設定に使用されます。デフォルト値は null です。 |
|
|
マニフェストをロードするために使用する |
| IP アドレスブロック |
Pod IP アドレスの割り当てに使用する IP アドレスのブロック。IPv4 がデフォルトです。デュアルスタックエントリーはサポートされています。このフィールドの最初のエントリーは、MicroShift の起動後は変更できません。デフォルトの範囲は |
| IP アドレスブロック |
Kubernetes サービスの仮想 IP アドレスのブロック。サービスの IP アドレスプール。IPv4 がデフォルトです。デュアルスタックエントリーはサポートされています。このフィールドの最初のエントリーは、MicroShift の起動後は変更できません。デフォルトの範囲は |
|
|
|
|
| ノードの名前。デフォルト値はホスト名です。空でない場合、この文字列はホスト名ではなく、ノードを識別するために使用されます。この値は、MicroShift の起動後は変更できません。 |
| IPv4 アドレス | ノードの IPv4 アドレス。デフォルト値は、デフォルトルートの IP アドレスです。 |
| IPv6 アドレス | デュアルスタック設定のノードの IPv6 アドレス。IPv4 または IPv6 のいずれかのシングルスタックでは設定できません。デフォルトは空の値または null です。 |
|
| デフォルト値は空です。空の値または null フィールドのデフォルトは LVMS デプロイメントです。 |
|
|
デフォルト値は null または空の配列です。null または空の配列はデフォルトで |
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 ルートがある。
手順
-
/etc/microshift/
ディレクトリーにある指定されたconfig.yaml.default
ファイルのコピーを作成し (まだ作成していない場合)、config.yaml
という名前を付けます。 新しい MicroShift の
config.yaml
を/etc/microshift/
ディレクトリーに保持します。config.yaml
ファイルは、MicroShift サービスが起動するたびに読み取られます。注記これを作成すると、
config.yaml
ファイルは組み込み設定よりも優先されます。MicroShift YAML の
network
セクションのデフォルト値を、有効な値に置き換えます。シングルスタック IPv6 ネットワーク設定の例
apiServer: # ... network: clusterNetwork: - fd01::/48 serviceNetwork: - fd02::/112 node: nodeIP: 2600:1f14:1c48:ee00:2d76:3190:5bc2:5aef # ...
apiServer: # ... network: clusterNetwork: - fd01::/48
1 serviceNetwork: - fd02::/112
2 node: nodeIP: 2600:1f14:1c48:ee00:2d76:3190:5bc2:5aef
3 # ...
Copy to Clipboard Copied! - 1
64
未満の CIDR 値でclusterNetwork
を指定します。- 2
- 接頭辞が
112
である IPv6 CIDR を指定します。Kubernetes は最低レベルの 16 ビットのみを使用します。接頭辞が112
の場合、IP アドレスは112
から128
ビットに割り当てられます。 - 3
- ノード IP アドレスの例。有効な値は、IPv6 アドレスファミリーの IP アドレスです。IPv4 ネットワークも存在する場合に限り、IPv6 アドレスを指定する必要があります。IPv4 ネットワークが存在しない場合、MicroShift サービスは再起動時にこの値を自動的に入力します。
その他の必要な設定を完了してから、次のコマンドを実行して MicroShift を起動します。
sudo systemctl start microshift
$ sudo systemctl start microshift
Copy to Clipboard Copied!
検証
次のコマンドを実行して、ノードリソースで定義されたネットワークを取得します。
oc get node -o jsonpath='{.items[].spec.podCIDRs[]}'
$ oc get node -o jsonpath='{.items[].spec.podCIDRs[]}'
Copy to Clipboard Copied! 出力例
fd01::/48
fd01::/48
Copy to Clipboard Copied! 次のコマンドを実行して、Pod のステータスを取得します。
oc get pod -A -o wide
$ oc get pod -A -o wide
Copy to Clipboard Copied! 出力例
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>
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 Copied! 次のコマンドを実行して、サービスのステータスを取得します。
oc get svc -A
$ oc get svc -A
Copy to Clipboard Copied! 出力例
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
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 Copied!
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) があります。
手順
-
/etc/microshift/
ディレクトリーにある指定されたconfig.yaml.default
ファイルのコピーを作成し (まだ作成していない場合)、config.yaml
という名前を付けます。 新しい MicroShift の
config.yaml
を/etc/microshift/
ディレクトリーに保持します。config.yaml
ファイルは、MicroShift サービスが起動するたびに読み取られます。注記これを作成すると、
config.yaml
ファイルは組み込み設定よりも優先されます。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 serviceNetwork: - 10.43.0.0/16 - fd02::/112 node: nodeIP: 192.168.113.117 nodeIPv6: 2001:db9:ca7:ff::1db8 # ...
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 Copied! 必要なその他の MicroShift 設定を完了してから、次のコマンドを実行して MicroShift を起動します。
sudo systemctl start microshift
$ sudo systemctl start microshift
Copy to Clipboard Copied! - 必要に応じてアプリケーション Pod とサービスの IP ファミリーポリシーをリセットし、それらのアプリケーション Pod とサービスを再起動してデュアルスタックネットワークを有効化します。簡単な例は、「アプリケーション Pod およびサービスの IP ファミリーポリシーのリセット」を参照してください。
検証
次の手順に従って、すべてのシステムサービスと Pod に 2 つの IP アドレス (ファミリーごとに 1 つずつ) があることを確認できます。
次のコマンドを実行して、ノードリソースで定義されたネットワークを取得します。
oc get pod -n openshift-ingress router-default-5b75594b4-w7w6s -o jsonpath='{.status.podIPs}'
$ oc get pod -n openshift-ingress router-default-5b75594b4-w7w6s -o jsonpath='{.status.podIPs}'
Copy to Clipboard Copied! 出力例
[{"ip":"10.42.0.4"},{"ip":"fd01:0:0:1::4"}]
[{"ip":"10.42.0.4"},{"ip":"fd01:0:0:1::4"}]
Copy to Clipboard Copied! 次のコマンドを実行して、ホストネットワーク Pod によって定義されたネットワークを取得します。
oc get pod -n openshift-ovn-kubernetes ovnkube-master-2fm2k -o jsonpath='{.status.podIPs}'
$ oc get pod -n openshift-ovn-kubernetes ovnkube-master-2fm2k -o jsonpath='{.status.podIPs}'
Copy to Clipboard Copied! 出力例
[{"ip":"192.168.113.117"},{"ip":"2001:db9:ca7:ff::1db8"}]
[{"ip":"192.168.113.117"},{"ip":"2001:db9:ca7:ff::1db8"}]
Copy to Clipboard Copied!
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) があります。
手順
-
/etc/microshift/
ディレクトリーにある指定されたconfig.yaml.default
ファイルのコピーを作成し (まだ作成していない場合)、config.yaml
という名前を付けます。 新しい MicroShift の
config.yaml
を/etc/microshift/
ディレクトリーに保持します。config.yaml
ファイルは、MicroShift サービスが起動するたびに読み取られます。注記これを作成すると、
config.yaml
ファイルは組み込み設定よりも優先されます。有効な値を使用して、MicroShift YAML の
network
セクションに IPv6 設定を追加します。警告再起動と移行後も同じ最初のエントリーを保持する必要があります。これは、シングルスタックからデュアルスタック、またはデュアルスタックからシングルスタックへの移行など、あらゆる移行に当てはまります。最初のエントリーへの変更が必要な場合は、etcd データベースの完全な消去が必要になります。これにより、アプリケーションデータの損失が発生する可能性があり、サポートされていません。
-
有効な値を使用して、MicroShift YAML の
network
セクションにある 2 番目のネットワークの IPv6 設定を追加します。 MicroShift
config.yaml
のnetwork
セクションにネットワーク割り当てを追加して、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 Copied! - 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 アドレスファミリーである必要があります。
-
有効な値を使用して、MicroShift YAML の
必要なその他の設定を完了してから、次のコマンドを実行して MicroShift を再起動します。
sudo systemctl restart microshift
$ sudo systemctl restart microshift
Copy to Clipboard Copied! - 必要に応じてアプリケーション Pod とサービスの IP ファミリーポリシーをリセットし、それらのアプリケーション Pod とサービスを再起動してデュアルスタックネットワークを有効化します。簡単な例は、「アプリケーション Pod およびサービスの IP ファミリーポリシーのリセット」を参照してください。
検証
次の手順に従って、すべてのシステムサービスと Pod に 2 つの IP アドレス (ファミリーごとに 1 つずつ) があることを確認できます。
次のコマンドを実行して、Pod のステータスを取得します。
oc get pod -A -o wide
$ oc get pod -A -o wide
Copy to Clipboard Copied! 出力例
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>
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 Copied! 次のコマンドを実行して、OVN-K ネットワークプラグインによって定義されたネットワークを取得します。
oc get pod -n openshift-ovn-kubernetes ovnkube-master-bltk7 -o jsonpath='{.status.podIPs}'
$ oc get pod -n openshift-ovn-kubernetes ovnkube-master-bltk7 -o jsonpath='{.status.podIPs}'
Copy to Clipboard Copied! 出力例
[{"ip":"192.168.113.117"},{"ip":"2001:db9:ca7:ff::1db8"}]
[{"ip":"192.168.113.117"},{"ip":"2001:db9:ca7:ff::1db8"}]
Copy to Clipboard Copied! 次のコマンドを実行して、ノードリソースで定義されたネットワークを取得します。
oc get pod -n openshift-ingress router-default-5b75594b4-228z7 -o jsonpath='{.status.podIPs}'
$ oc get pod -n openshift-ingress router-default-5b75594b4-228z7 -o jsonpath='{.status.podIPs}'
Copy to Clipboard Copied! 出力例
[{"ip":"10.42.0.3"},{"ip":"fd01:0:0:1::3"}]
[{"ip":"10.42.0.3"},{"ip":"fd01:0:0:1::3"}]
Copy to Clipboard Copied!
シングルスタックネットワークに戻すには、ネットワークの 2 番目のエントリーを削除し、デュアルスタックに移行する前に設定されたシングルスタックに戻ることができます。
2.5. アプリケーション Pod およびサービスの IP ファミリーポリシーのリセット
デフォルトの ipFamilyPolicy
設定値 PreferSingleStack
は、MicroShift 設定をデュアルスタックネットワークに更新した後、すべてのサービスで自動的に更新されません。サービスおよびアプリケーション Pod でデュアルスタックネットワークを有効化するには、ipFamilyPolicy
値を更新する必要があります。
前提条件
-
MicroShift
config.yaml
を使用して、IPv6 アドレスファミリーを含むデュアルスタックネットワークを定義している。
手順
以下の例を使用して、
spec.ipFamilyPolicy
フィールドをサービスまたは Pod 内のデュアルスタックネットワークの有効な値に設定します。サービスのデュアルスタックネットワーク設定の例
kind: Service apiVersion: v1 metadata: name: microshift-new-service labels: app: microshift-application spec: type: NodePort ipFamilyPolicy: `PreferDualStack` # ...
kind: Service apiVersion: v1 metadata: name: microshift-new-service labels: app: microshift-application spec: type: NodePort ipFamilyPolicy: `PreferDualStack`
1 # ...
Copy to Clipboard Copied! - 1
- 必須。デュアルスタックネットワークの有効な値は、
PreferDualStack
とRequireDualStack
です。設定する値は、アプリケーションの要件によって異なります。PreferSingleStack
は、ipFamilyPolicy
フィールドのデフォルト値です。
-
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
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 Copied! 唯一の解決策は、両方の 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
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 Copied! 唯一の解決策として、両方の 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 ├── alt-name-1 │ └── kubeconfig ├── 1.2.3.4 │ └── kubeconfig └── microshift-rhel9 └── kubeconfig
/var/lib/microshift/resources/kubeadmin/
├── kubeconfig
├── alt-name-1
│ └── kubeconfig
├── 1.2.3.4
│ └── kubeconfig
└── microshift-rhel9
└── kubeconfig
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
clusters:
- cluster:
certificate-authority-data: <base64 CA>
server: https://localhost:6443
localhost
の kubeconfig
ファイルは、同じホストから API サーバーに接続するクライアントからのみ使用できます。ファイル内の証明書はリモート接続では機能しません。
3.2.1. MicroShift クラスターへのローカルアクセス
以下の手順に従って、kubeconfig
ファイルを使用して MicroShift クラスターをローカルでアクセスします。
前提条件
-
oc
バイナリーがインストールされている。
手順
オプション: Red Hat Enterprise Linux (RHEL) マシンに
~/.kube/
フォルダーがない場合は、次のコマンドを実行してフォルダーを作成します。mkdir -p ~/.kube/
$ mkdir -p ~/.kube/
Copy to Clipboard Copied! 次のコマンドを実行して、生成されたローカルアクセス
kubeconfig
ファイルを~/.kube/
ディレクトリーにコピーします。sudo cat /var/lib/microshift/resources/kubeadmin/kubeconfig > ~/.kube/config
$ sudo cat /var/lib/microshift/resources/kubeadmin/kubeconfig > ~/.kube/config
Copy to Clipboard Copied! 次のコマンドを実行して、
~/.kube/config
ファイルの権限を更新します。chmod go-r ~/.kube/config
$ chmod go-r ~/.kube/config
Copy to Clipboard Copied!
検証
次のコマンドを入力して、MicroShift が実行されていることを確認します。
oc get all -A
$ oc get all -A
Copy to Clipboard Copied!
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
clusters:
- cluster:
certificate-authority-data: <base64 CA>
server: https://microshift-rhel9:6443
3.3.1. リモートアクセスのカスタマイズ
異なる IP アドレスまたはホスト名でクラスターにアクセスするために、複数のリモートアクセス kubeconfig
ファイル値を生成できます。apiServer.subjectAltNames
パラメーターのエントリーごとに追加の kubeconfig
ファイルが生成されます。IP 接続中にホストからリモートアクセス kubeconfig
ファイルをコピーし、それを使用して他のワークステーションから API サーバーにアクセスできます。
3.4. リモートアクセス用の追加の kubeconfig ファイルの生成
デフォルトのリモートアクセスファイルが提供するものより多くのホスト名または IP アドレスが必要な場合は、追加の kubeconfig
ファイルを生成して使用できます。
設定の変更を実装するには、MicroShift を再起動する必要があります。
前提条件
-
MicroShift の
config.yaml
が作成されている。
手順
オプション:
config.yaml
の内容を表示できます。以下のコマンドを実行します。cat /etc/microshift/config.yaml
$ cat /etc/microshift/config.yaml
Copy to Clipboard Copied! オプション: リモートアクセス
kubeconfig
ファイルの内容を表示できます。以下のコマンドを実行します。cat /var/lib/microshift/resources/kubeadmin/<hostname>/kubeconfig
$ cat /var/lib/microshift/resources/kubeadmin/<hostname>/kubeconfig
Copy to Clipboard Copied! 重要追加のリモートアクセス
kubeconfig
ファイルには、MicroShiftconfig.yaml
ファイルにリストされているサーバー名のいずれかを含める必要があります。追加のkubeconfig
ファイルも検証に同じ CA を使用する必要があります。追加の 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" nodeIP: 10.0.0.1 apiServer: subjectAltNames: - alt-name-1 - 1.2.3.4
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 Copied! MicroShift を再起動して設定の変更を適用し、次のコマンドを実行して必要な
kubeconfig
ファイルを自動生成します。sudo systemctl restart microshift
$ sudo systemctl restart microshift
Copy to Clipboard Copied! 追加のリモートアクセス
kubeconfig
ファイルの内容を確認するには、config.yaml
にリストされている名前または IP アドレスをcat
コマンドに挿入します。たとえば、次のコマンド例ではalt-name-1
が使用されています。cat /var/lib/microshift/resources/kubeadmin/alt-name-1/kubeconfig
$ cat /var/lib/microshift/resources/kubeadmin/alt-name-1/kubeconfig
Copy to Clipboard Copied! クラスターの接続に使用する SAN または IP アドレスを含む、使用する
kubeconfig
ファイルを選択します。この例では、cluster.server
フィールドに `alt-name-1` を含むkubeconfig
が正しいファイルです。追加の
kubeconfig
ファイルの内容の例clusters: - cluster: certificate-authority-data: <base64 CA> server: https://alt-name-1:6443
clusters: - cluster: certificate-authority-data: <base64 CA> server: https://alt-name-1:6443
1 Copy to Clipboard Copied! - 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
) のファイアウォールポートを開きます。sudo firewall-cmd --permanent --zone=public --add-port=6443/tcp && sudo firewall-cmd --reload
[user@microshift]$ sudo firewall-cmd --permanent --zone=public --add-port=6443/tcp && sudo firewall-cmd --reload
Copy to Clipboard Copied!
検証
user@microshift
として次のコマンドを実行して、MicroShift が入力されていることを確認します。oc get all -A
[user@microshift]$ oc get all -A
Copy to Clipboard Copied!
3.4.2. MicroShift クラスターへのリモートアクセス
以下の手順に従って、kubeconfig
ファイルを使用してリモートロケーションから MicroShift クラスターにアクセスします。
user@workstation
ログインは、ホストマシンにリモートからアクセスするのに使用されます。手順の <user>
値は、user@workstation
が MicroShift ホストにログインするユーザーの名前になります。
前提条件
-
oc
バイナリーがインストールされている。 -
user@microshift
は、ローカルホストからファイアウォールを開いている。
手順
user@workstation
として、Red Hat Enterprise Linux (RHEL) マシンに~/.kube/
フォルダーがない場合は、次のコマンドを実行してフォルダーを作成します。mkdir -p ~/.kube/
[user@workstation]$ mkdir -p ~/.kube/
Copy to Clipboard Copied! user@workstation
として、次のコマンドを実行して、MicroShift ホストのホスト名の変数を設定します。MICROSHIFT_MACHINE=<name or IP address of MicroShift machine>
[user@workstation]$ MICROSHIFT_MACHINE=<name or IP address of MicroShift machine>
Copy to Clipboard Copied! user@workstation
として、次のコマンドを実行して、MicroShift を実行している RHEL マシンからローカルマシンに接続するホスト名または IP アドレスを含む生成されたkubeconfig
ファイルをコピーします。ssh <user>@$MICROSHIFT_MACHINE "sudo cat /var/lib/microshift/resources/kubeadmin/$MICROSHIFT_MACHINE/kubeconfig" > ~/.kube/config
[user@workstation]$ ssh <user>@$MICROSHIFT_MACHINE "sudo cat /var/lib/microshift/resources/kubeadmin/$MICROSHIFT_MACHINE/kubeconfig" > ~/.kube/config
Copy to Clipboard Copied! 注記この手順の
kubeconfig
ファイルを生成するには、リモートアクセス用の kubeconfig ファイルの追加生成 を参照してください。user@workstation
として、次のコマンドを実行して~/.kube/config
ファイルのパーミッションを更新します。chmod go-r ~/.kube/config
$ chmod go-r ~/.kube/config
Copy to Clipboard Copied!
検証
user@workstation
として、次のコマンドを入力して、MicroShift が実行されていることを確認します。oc get all -A
[user@workstation]$ oc get all -A
Copy to Clipboard Copied!
第4章 カスタム認証局の設定
MicroShift サービスでは、カスタム証明局 (CA) を使用して接続を暗号化できます。
4.1. MicroShift でのカスタム認証局の仕組み
デフォルトの API サーバー証明書は、内部の MicroShift クラスター認証局 (CA) によって発行されます。デフォルトでは、クラスター外部のクライアントは API サーバー証明書を検証できません。この証明書は、クライアントが信頼するカスタム CA によって外部的に発行されたカスタムサーバー証明書に置き換えることができます。次の手順は、MicroShift のワークフローを示しています。
- 証明書とキーをホストオペレーティングシステムの優先ディレクトリーにコピーします。ファイルに root のみがアクセスできることを確認してください。
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 名を指定できます。
-
MicroShift サービスが再起動した後、生成された
kubeconfig
ファイルをクライアントにコピーする必要があります。 - クライアントシステムで追加の CA を設定します。たとえば、Red Hat Enterprise Linux (RHEL) トラストストア内の CA バンドルを更新できます。
- 証明書と鍵は、ホスト上の指定されたファイルの場所から読み取られます。設定のテストおよび検証はクライアントから行われます。
- 外部サーバー証明書は自動的に更新されません。外部証明書を手動でローテーションする必要があります。
検証に失敗した場合、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
設定ファイルが存在する。
手順
- 追加するカスタム証明書を MicroShift ホストの信頼ルートにコピーします。証明書と秘密鍵に MicroShift のみがアクセス可能であることを確認します。
必要なカスタム CA ごとに、次の例を使用して、
namedCertificates
というapiServer
セクションを/etc/microshift/config.yaml
MicroShift 設定ファイルに追加します。apiServer: namedCertificates: - certPath: ~/certs/api_fqdn_1.crt keyPath: ~/certs/api_fqdn_1.key - certPath: ~/certs/api_fqdn_2.crt keyPath: ~/certs/api_fqdn_2.key names: - api_fqdn_1 - *.apps.external.com
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 Copied! 次のコマンドを実行して、MicroShift を再起動し、証明書を適用します。
systemctl microshift restart
$ systemctl microshift restart
Copy to Clipboard Copied! -
システムが再起動してカスタムサーバーが適用されるまで数分間待ちます。新しい
kubeconfig
ファイルは/var/lib/microshift/resources/kubeadmin/
ディレクトリーに生成されます。 -
kubeconfig
ファイルをクライアントにコピーします。IP アドレスにワイルドカードを指定した場合は、kubeconfig
を更新してサーバーのパブリック IP アドレスを削除し、その IP アドレスを使用する特定のワイルドカード範囲に置き換えます。 クライアントからは、次の手順を実行します。
次のコマンドを実行して、使用する
kubeconfig
を指定します。export KUBECONFIG=~/custom-kubeconfigs/kubeconfig
$ export KUBECONFIG=~/custom-kubeconfigs/kubeconfig
1 Copy to Clipboard Copied! - 1
- コピーした
kubeconfig
ファイルの場所をパスとして使用します。
次のコマンドを使用して、証明書が適用されていることを確認します。
oc --certificate-authority ~/certs/ca.ca get node
$ oc --certificate-authority ~/certs/ca.ca get node
Copy to Clipboard Copied! 出力例
oc get node NAME STATUS ROLES AGE VERSION dhcp-1-235-195.arm.example.com Ready control-plane,master,worker 76m v1.30.3
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 Copied! 次のコマンドを実行して、新しい CA ファイルを $KUBECONFIG 環境変数に追加します。
oc config set clusters.microshift.certificate-authority /tmp/certificate-authority-data-new.crt
$ oc config set clusters.microshift.certificate-authority /tmp/certificate-authority-data-new.crt
Copy to Clipboard Copied! 次のコマンドを実行して、新しい
kubeconfig
ファイルに新しい CA が含まれていることを確認します。oc config view --flatten
$ oc config view --flatten
Copy to Clipboard Copied! 外部で生成された
kubeconfig
ファイルの例apiVersion: v1 clusters: - cluster: certificate-authority: /tmp/certificate-authority-data-new.crt 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: {}
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 Copied! - 1
- 外部で生成された
kubeconfig
ファイルには、certificate-authority-data
セクションが存在しません。これは、以前使用したoc config set
コマンドで追加されます。
次のコマンドを実行して、カスタマイズされた API サーバー認証局の
subject
とissuer
を確認します。curl --cacert /tmp/caCert.pem https://${fqdn_name}:6443/healthz -v
$ curl --cacert /tmp/caCert.pem https://${fqdn_name}:6443/healthz -v
Copy to Clipboard Copied! 出力例
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.
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 Copied! 重要生成された
kubeconfig
ファイル内のcertificate-authority-data
を新しいrootCA
に置き換えるか、certificate-authority-data
をオペレーティングシステムの信頼ルートに追加します。両方の方法を使用しないでください。オペレーティングシステムの信頼ルートで追加の CA を設定します。たとえば、クライアントシステム上の RHEL クライアントトラストストア内などです。詳細は、システム全体のトラストストア を参照してください。
- CA を含む設定で証明書バンドルを更新することを推奨します。
-
証明書バンドルを設定しない場合は、代わりに
oc login localhost:8443 --certificate-authority=/path/to/cert.crt
コマンドを使用することもできますが、この方法は推奨されません。
4.3. カスタム証明書の予約名の値
次の証明書の問題により、MicroShift は証明書を動的に無視し、エラーをログに記録します。
- 証明書ファイルがディスク上に存在しないか、読み取り可能ではありません。
- 証明書は解析できません。
-
証明書は、
SubjectAlternativeNames
(SAN) フィールドの内部証明書の IP アドレスまたは DNS 名をオーバーライドします。SAN を設定するときは予約名を使用しないでください。
住所 | 型 | コメント |
---|---|---|
| DNS | |
| IP Address | |
| IP Address | クラスターネットワーク |
| IP Address | サービスネットワーク |
169.254.169.2/29 | IP Address | br-ex ネットワーク |
| DNS | |
| DNS | |
| DNS |
4.4. カスタム証明書のトラブルシューティング
カスタム証明書の実装のトラブルシューティングを行うには、次の手順を実行します。
手順
MicroShift から、次のコマンドを実行して、証明書が
kube-apiserver
によって提供されていることを確認し、証明書パスが--tls-sni-cert-key
フラグに追加されていることを確認します。journalctl -u microshift -b0 | grep tls-sni-cert-key
$ journalctl -u microshift -b0 | grep tls-sni-cert-key
Copy to Clipboard Copied! 出力例
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
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 Copied! クライアントから次のコマンドを実行して、
kube-apiserver
が正しい証明書を提供していることを確認します。openssl s_client -connect <SNI_ADDRESS>:6443 -showcerts | openssl x509 -text -noout -in - | grep -C 1 "Alternative\|CN"
$ openssl s_client -connect <SNI_ADDRESS>:6443 -showcerts | openssl x509 -text -noout -in - | grep -C 1 "Alternative\|CN"
Copy to Clipboard Copied!
4.5. カスタム証明書のクリーンアップおよび再作成
MicroShift サービスを停止するには、カスタム証明書をクリーンアップし、カスタム証明書を再作成するには、次の手順を使用します。
手順
次のコマンドを実行して、MicroShift サービスを停止し、カスタム証明書をクリーンアップします。
sudo microshift-cleanup-data --cert
$ sudo microshift-cleanup-data --cert
Copy to Clipboard Copied! 出力例
Stopping MicroShift services Removing MicroShift certificates MicroShift service was stopped Cleanup succeeded
Stopping MicroShift services Removing MicroShift certificates MicroShift service was stopped Cleanup succeeded
Copy to Clipboard Copied! 次のコマンドを実行して、MicroShift サービスを再起動し、カスタム証明書を再作成します。
sudo systemctl start microshift
$ sudo systemctl start microshift
Copy to Clipboard Copied!
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
$ systemctl show --property=SubState --value greenboot-healthcheck.service
Copy to Clipboard Copied! -
start
が出力される場合、greenboot チェックがまだ実行中であることを意味します。 -
exited
が出力される場合、チェックが合格し、greenboot が終了したことを意味します。Greenboot は、システムが正常な状態の場合、green.d
ディレクトリー内のスクリプトを実行します。 -
failed
の出力は、チェックが合格しなかったことを意味します。システムがこの状態にある場合、Greenboot はred.d
ディレクトリー内のスクリプトを実行し、システムを再起動する可能性があります。
-
サービスの数値終了コードを示すレポートを表示するには、次のコマンドを使用します。
0
は成功を、0 以外の値は失敗を意味します。systemctl show --property=ExecMainStatus --value greenboot-healthcheck.service
$ systemctl show --property=ExecMainStatus --value greenboot-healthcheck.service
Copy to Clipboard Copied! Boot Status is GREEN - Health Check SUCCESS
など、ブートステータスに関するメッセージを表示するレポートを表示するには、次のコマンドを使用します。cat /run/motd.d/boot-status
$ cat /run/motd.d/boot-status
Copy to Clipboard Copied!
第6章 監査ロギングポリシーの設定
設定値を使用して、MicroShift 監査ログファイルのローテーションと保持を制御できます。
6.1. 監査ログファイルの制限設定について
設定値を使用して MicroShift 監査ログファイルのローテーションと保持を制御すると、ファーエッジデバイスの限られたストレージ容量を超えないようにすることができます。このようなデバイスでは、ログデータの蓄積によってホストシステムまたはクラスターのワークロードが制限され、デバイスの動作が停止する可能性があります。監査ログポリシーを設定すると、重要な処理スペースを継続して利用できるようにします。
MicroShift 監査ログを制限するために設定した値を使用すると、監査ログバックアップのサイズ、数、保存期間の制限を適用できます。フィールド値は、優先順位を付けずに、互いに独立して処理されます。
フィールドを組み合わせて設定し、保持されるログの最大ストレージ制限を定義できます。以下に例を示します。
-
ログストレージの上限を作成するには、
maxFileSize
とmaxFiles
の両方を設定します。 -
maxFileAge
値を設定すると、maxFiles
値に関係なく、ファイル名のタイムスタンプより古いファイルが自動的に削除されます。
6.1.1. デフォルトの監査ログ値
MicroShift には、次のデフォルトの監査ログローテーション値が含まれています。
監査ログパラメーター | デフォルト設定 | 定義 |
---|---|---|
|
| ログファイルが自動的に削除されるまでの保持期間。デフォルト値は、経過時間をベースにしてログファイルが削除されないという意味です。この値は設定可能です。 |
|
| 保持されるログファイルの合計数。デフォルトでは、MicroShift は 10 個のログファイルを保持します。余分なファイルが作成されると、最も古いものが削除されます。この値は設定可能です。 |
|
|
デフォルトでは、 |
|
|
|
ファイルが 10 個以下の場合、監査ログの保持の最大デフォルトストレージ使用量は 2000 Mb です。
フィールドに値を指定しない場合は、デフォルト値が使用されます。以前に設定したフィールド値を削除すると、次回の MicroShift サービスの再起動後にデフォルト値が復元されます。
アプリケーション Pod によって生成されるログは、Red Hat Enterprise Linux (RHEL) で監査ログの保持およびローテーションを設定する必要があります。これらのログはコンソールに出力され、保存されます。MicroShift クラスターの健全性を維持するために、RHEL /var/log/audit/audit.log
ファイルにログ設定が設定されていることを確認してください。
関連情報
- 環境を保護するための auditd の設定
- Audit ログファイルについて
- How to use logrotate utility to rotate log files (2024 年 8 月 7 日付けのソリューション記事)
6.2. 監査ログポリシープロファイルについて
監査ログプロファイルは、OpenShift API サーバーおよび Kubernetes API サーバーに送信されるリクエストをログに記録する方法を定義します。
MicroShift は、次の定義済み監査ポリシープロファイルをサポートしています。
Profile | 説明 |
---|---|
| 読み取りおよび書き込み要求のメタデータのみをログに記録します。OAuth アクセストークン要求を除く要求の本文はログに記録されません。これはデフォルトポリシーになります。 |
|
すべてのリクエストのメタデータのログに加えて、API サーバーへのすべての書き込みリクエスト ( |
|
すべての要求のメタデータをロギングする以外にも、API サーバーへの読み取りおよび書き込み要求ごとに要求の本文をログに記録します ( |
| OAuth アクセストークン要求や OAuth 承認トークン要求などの要求はログに記録されません。 警告
問題のトラブルシューティング時に有用なデータが記録されないリスクを完全に理解していない限り、 |
-
Secret
、Route
、OAuthClient
オブジェクトなどの機密リソースは、メタデータレベルでのみログ記録されます。
デフォルトでは、MicroShift は Default
の監査ログプロファイルを使用します。リクエスト本文もログに記録する別の監査ポリシープロファイルを使用することもできますが、CPU、メモリー、I/O などのリソース使用量が増加することに注意してください。
6.3. 監査ログ値の設定
MicroShift サービス設定ファイルを使用して、監査ログ設定を指定できます。
手順
-
指定されている
config.yaml.default
ファイルのコピーを/etc/microshift/
ディレクトリーに作成し、名前をconfig.yaml
に変更します。作成した新しい MicroShiftconfig.yaml
を/etc/microshift/
ディレクトリーに保存します。MicroShift サービスが開始されるたびに、新しいconfig.yaml
が読み取られます。これを作成すると、config.yaml
ファイルは組み込み設定よりも優先されます。 YAML の
auditLog
セクションのデフォルト値を必要な有効な値に置き換えてください。デフォルトの
auditLog
設定の例apiServer: # .... auditLog: maxFileAge: 7 maxFileSize: 200 maxFiles: 1 profile: Default # ....
apiServer: # .... auditLog: maxFileAge: 7
1 maxFileSize: 200
2 maxFiles: 1
3 profile: Default
4 # ....
Copy to Clipboard Copied! - 1
- ログファイルが保持される最大時間を日数で指定します。この制限よりも古いファイルは削除されます。この例では、ログファイルは 7 日以上経過すると削除されます。ライブログが
maxFileSize
フィールドで指定された最大ファイルサイズに達したかどうかに関係なく、ファイルは削除されます。ファイルの有効期限は、ローテーションされたログファイルの名前に書き込まれたタイムスタンプによって決定されます (例:audit-2024-05-16T17-03-59.994.log)
。値が0
の場合、制限は無効になります。 - 2
- 監査ログファイルの最大サイズ (メガバイト単位)。この例では、ライブログが 200 MB の制限に達するとすぐにファイルがローテーションされます。値を
0
に設定すると、制限は無効になります。 - 3
- 保持されるローテーションされた監査ログファイルの最大数。制限に達すると、ログファイルは古いものから順に削除されます。この例では、値
1
を指定すると、現在のアクティブログに加えて、maxFileSize
サイズのファイル 1 つだけが保持されます。値を0
に設定すると、制限は無効になります。 - 4
- 読み取りおよび書き込み要求のメタデータのみをログに記録します。OAuth アクセストークン要求を除く要求の本文はログに記録されません。このフィールドを指定しない場合は、
Default
プロファイルが使用されます。
オプション: ログ用の新しいディレクトリーを指定するには、MicroShift を停止し、
/var/log/kube-apiserver
ディレクトリーを目的の場所に移動します。次のコマンドを実行して MicroShift を停止します。
sudo systemctl stop microshift
$ sudo systemctl stop microshift
Copy to Clipboard Copied! 以下のコマンドを実行して、
/var/log/kube-apiserver
ディレクトリーを目的の場所に移動します。sudo mv /var/log/kube-apiserver <~/kube-apiserver>
$ sudo mv /var/log/kube-apiserver <~/kube-apiserver>
1 Copy to Clipboard Copied! - 1
<~/kube-apiserver>
は、使用するディレクトリーへのパスに置き換えます。
ログの新規ディレクトリーを指定した場合、次のコマンドを実行して、
/var/log/kube-apiserver
にカスタムディレクトリーへのシンボリックリンクを作成します。sudo ln -s <~/kube-apiserver> /var/log/kube-apiserver
$ sudo ln -s <~/kube-apiserver> /var/log/kube-apiserver
1 Copy to Clipboard Copied! - 1
<~/kube-apiserver>
は、使用するディレクトリーへのパスに置き換えます。これにより、SOS レポートでのログの収集が可能になります。
実行中のインスタンスで監査ログポリシーを設定する場合は、次のコマンドを入力して MicroShift を再起動します。
sudo systemctl restart microshift
$ sudo systemctl restart microshift
Copy to Clipboard Copied!
6.4. 監査ログ設定のトラブルシューティング
カスタム監査ログ設定とファイルの場所のトラブルシューティングを行うには、次の手順に従います。
手順
次のコマンドを実行して、現在設定されている値を確認します。
sudo microshift show-config --mode effective
$ sudo microshift show-config --mode effective
Copy to Clipboard Copied! 出力例
auditLog: maxFileSize: 200 maxFiles: 1 maxFileAge: 7 profile: AllRequestBodies
auditLog: maxFileSize: 200 maxFiles: 1 maxFileAge: 7 profile: AllRequestBodies
Copy to Clipboard Copied! 次のコマンドを実行して、
audit.log
ファイルのパーミッションを確認します。sudo ls -ltrh /var/log/kube-apiserver/audit.log
$ sudo ls -ltrh /var/log/kube-apiserver/audit.log
Copy to Clipboard Copied! 出力例
-rw-------. 1 root root 46M Mar 12 09:52 /var/log/kube-apiserver/audit.log
-rw-------. 1 root root 46M Mar 12 09:52 /var/log/kube-apiserver/audit.log
Copy to Clipboard Copied! 次のコマンドを実行して、現在のログディレクトリーの内容をリスト表示します。
sudo ls -ltrh /var/log/kube-apiserver/
$ sudo ls -ltrh /var/log/kube-apiserver/
Copy to Clipboard Copied! 出力例
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
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 Copied!
第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 を設定する必要があります。
手順
/etc/microshift/config.yaml
の MicroShift 設定ファイルのstorage
セクションで、optionalCsiComponents
値を入力して、CSI スナップショットコントローラーのインストールを無効化します。... ...
# ... storage: {}
1 # ...
Copy to Clipboard Copied! - 1
- 許可される値は次のとおりです。
-
optionalCsiComponents
は定義しません。 -
optionalCsiComponents
フィールドを空の値 ([]
) または単一の空の文字列要素 ([""]
) で指定します。 許可される値 (
snapshot-controller
、snapshot-webhook
、またはnone
) のいずれかでoptionalCsiComponents
を指定します。none
は、他のすべての値と相互に排他的です。注記optionalCsiComponents
値が空または null の場合、MicroShift はデフォルトで snapshot-controller および snapshot-webhook をデプロイします。
-
optionalCsiComponents
フィールドがconfig.yaml
のサポートされている値で指定された後、次のコマンドを実行して MicroShift を起動します。sudo systemctl start microshift
$ sudo systemctl start microshift
Copy to Clipboard Copied! 注記MicroShift は、再起動後に無効化されたコンポーネントを再デプロイしません。
7.2. CSI ドライバー実装を実行するデプロイメントの無効化
以下の手順に従って、CSI 実装 Pod のインストールを無効にします。
この手順は、MicroShift をインストールして実行する前に設定ファイルを定義するユーザーを対象としています。MicroShift がすでに起動されている場合、CSI ドライバー実装が実行されます。ユーザーは、アンインストール手順に従って手動で削除する必要があります。
MicroShift は、CSI ドライバー実装 Pod を削除しません。起動プロセス中に CSI ドライバー実装 Pod のインストールを無効化するように MicroShift を設定する必要があります。
手順
/etc/microshift/config.yaml
の MicroShift 設定ファイルのstorage
セクションの下にdriver
値を入力して、CSI ドライバーのインストールを無効化します。... ...
# ... storage driver: - "none"
1 # ...
Copy to Clipboard Copied! - 1
- 有効な値は
none
またはlvms
です。
注記デフォルトでは、
driver
値は空または null で、LVMS がデプロイされています。次のコマンドを実行して、
driver
フィールドが、/etc/microshift/config.yaml
ファイルでサポートされている値で指定された後に MicroShift を開始します。sudo systemctl enable --now microshift
$ sudo systemctl enable --now microshift
Copy to Clipboard Copied! 注記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) のサービスです。
- ホストを再起動します。
-
- 任意
- x86_64 アーキテクチャーを使用している場合は、Red Hat Enterprise Linux for Real Time 9 をインストールできます。
8.1.2. MicroShift の低レイテンシー RPM パッケージのインストール
MicroShift をインストールする際に、低レイテンシー RPM パッケージはデフォルトでインストールされません。低レイテンシー RPM は、オプションのパッケージとしてインストールできます。
前提条件
- MicroShift RPM をインストールしている。
- MicroShift のワークロードのパーティション分割を設定している。
手順
次のコマンドを実行して、低レイテンシーの RPM パッケージをインストールします。
sudo dnf install -y microshift-low-latency
$ sudo dnf install -y microshift-low-latency
Copy to Clipboard Copied! ヒントTuneD プロファイルがアクティブ化されるのを待ってから、ホストを再起動します。ホストを再起動することで MicroShift と CRI-O が再起動され、低レイテンシーマニフェストが適用され、TuneD プロファイルがアクティブ化されます。
次のステップ
-
MicroShift
config.yaml
で、低レイテンシー用の kubelet パラメーターを設定します。 - オペレーティングシステムを調整してください。たとえば、TuneD プロファイルを設定してアクティブ化します。
- オプション: TuneD プロファイルの自動アクティブ化を設定します。
- オプション: x86_64 アーキテクチャーを使用している場合は、Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) をインストールします。
- 低レイテンシー用にワークロードを準備します。
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: 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 # ...
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 Copied! - 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
です。CPUManager
とCPUManagerPolicyOptions
機能ゲートの両方を有効化する必要があります。- 4
- Memory Manager が使用するポリシーの名前。大文字と小文字を区別します。デフォルト値は
none
です。MemoryManager
フィーチャーゲートを有効化する必要があります。 - 5
- 必須。
reservedSystemCPUs
の値は、オフライン化された CPU の逆数である必要があります。なぜなら、これら両方を合わせた値は、システム上のすべての CPU を考慮する必要があるためです。このパラメーターは、管理およびアプリケーションワークロードを分割する上で不可欠です。このパラメーターを使用して、ホストレベルのシステムおよび Kubernetes デーモン、さらに割り込みやタイマーのための静的 CPU セットを定義します。その後、システム上の残りの CPU はワークロード専用に使用できます。 - 6
- この例の
reservedMemory[0].limits.memory
、1100
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
ファイルにあることを確認できます。
次のステップ
- ワークロードのパーティション分割を有効化します。
- オペレーティングシステムを調整します。たとえば、TuneD プロファイルを設定およびアクティブ化します。
- オプション: TuneD プロファイルの自動有効化を設定します。
- オプション: x86_64 アーキテクチャーを使用している場合は、Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) をインストールできます。
- 低レイテンシー用に 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 ドキュメント) を参照してください。
手順
/etc/tuned/
ディレクトリープロファイルでデフォルトのmicroshift-baseline-variables.conf
TuneD プロファイルを使用するか、独自のチューニングを作成してチューニングをさらに追加できます。microshift-baseline-variables.conf
TuneD プロファイルの例Isolate cores 2-7 for running application workloads Size of the hugepages Number of hugepages Additional kernel arguments CPU set to be offlined
# 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 Copied! - 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
と重複することはできません。
次のコマンドを実行して、プロファイルを有効化するか、変更をアクティブにします。
sudo tuned-adm profile microshift-baseline
$ sudo tuned-adm profile microshift-baseline
Copy to Clipboard Copied! - ホストを再起動して、カーネル引数をアクティブにします。
検証
オプション: 起動時に現在実行中のカーネルに指定された引数を含む
/proc/cmdline
ファイルを読み取ることができます。cat /proc/cmdline
$ cat /proc/cmdline
Copy to Clipboard Copied! 出力例
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
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 Copied!
次のステップ
- 低レイテンシー用に MicroShift ワークロードを準備します。
- オプション: TuneD プロファイルの自動有効化を設定します。
- オプション: x86_64 アーキテクチャーを使用している場合は、Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) をインストールできます。
8.1.4.2. MicroShift TuneD プロファイルを自動的に有効化する
microshift-low-latency
RPM パッケージには、システムの起動時に TuneD プロファイルを自動的に有効化するように設定可能な systemd サービスが含まれています。この機能は、大量のデバイスに MicroShift をインストールする場合に特に便利です。
前提条件
- ホストに microshift-low-latency RPM パッケージをインストールしている。
-
MicroShift の
config.yaml
で低レイテンシーを有効化している。 - TuneD プロファイルを作成している。
-
microshift-baseline-variables.conf
ファイルを設定している。
手順
/etc/microshift/
ディレクトリーでtuned.yaml
を設定します。次に例を示します。tuned.yaml の例
profile: microshift-baseline reboot_after_apply: True
profile: microshift-baseline
1 reboot_after_apply: True
2 Copy to Clipboard Copied! 重要ホストは、
microshift-tuned.service
の実行時に再起動されますが、新しいコミットのデプロイ時にシステムは再起動されません。ホストを再起動して新しいコミットを有効化する必要があります。その後、起動時にmicroshift-tuned.service
が実行され、プロファイルと変数への変更が検出されたときに、システムが再び起動します。この二重ブートはロールバックに影響を及ぼす可能性があります。自動プロファイルアクティブ化の使用時に、ロールバック前に許可される greenboot での再起動の回数を調整してください。たとえば、greenboot でロールバック前に 3 回の再起動が許可されている場合、その回数を 4 回に増やします。詳細は、「関連情報」のリストを参照してください。
次のコマンドを入力して、
microshift-tuned.service
が各システムの起動時に実行できるようにします。sudo systemctl enable microshift-tuned.service
$ sudo systemctl enable microshift-tuned.service
Copy to Clipboard Copied! 重要reboot_after_apply
をTrue
に設定する場合は、TuneD プロファイルがアクティブであること、および他のプロファイルが MicroShift サービス外でアクティブ化されていないことを確認してください。そのように設定されずにmicroshift-tuned.service
を起動すると、ホストが再起動します。次のコマンドを実行して、
microshift-tuned.service
を起動します。sudo systemctl start microshift-tuned.service
$ sudo systemctl start microshift-tuned.service
Copy to Clipboard Copied! 注記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 アーキテクチャーを使用している。
手順
次のコマンドを実行して、リアルタイムカーネルリポジトリーを有効化します。
sudo subscription-manager repos --enable rhel-9-for-x86_64-rt-rpms
$ sudo subscription-manager repos --enable rhel-9-for-x86_64-rt-rpms
Copy to Clipboard Copied! 次のコマンドを実行して、リアルタイムカーネルをインストールします。
sudo dnf install -y kernel-rt
$ sudo dnf install -y kernel-rt
Copy to Clipboard Copied! 次のコマンドを実行して、リアルタイムカーネルのバージョンをクエリーします。
RTVER=$(rpm -q --queryformat '%{version}-%{release}.%{arch}' kernel-rt | sort | tail -1)
$ RTVER=$(rpm -q --queryformat '%{version}-%{release}.%{arch}' kernel-rt | sort | tail -1)
Copy to Clipboard Copied! 次のコマンドを実行して、リアルタイムカーネルをデフォルトのカーネルとして指定する GRUB に永続的な変更を加えます。
sudo grubby --set-default="/boot/vmlinuz-${RTVER}+rt"
$ sudo grubby --set-default="/boot/vmlinuz-${RTVER}+rt"
Copy to Clipboard Copied! - ホストを再起動して、リアルタイムカーネルをアクティブ化します。
次のステップ
- 低レイテンシー用に MicroShift ワークロードを準備します。
- オプション: ブループリントを使用して、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 """
[[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 Copied!
次のステップ
- イメージのビルドプロセスを完了します。
- MicroShift クラスターの低レイテンシーを有効化するための以前の手順を完了していない場合は、今すぐ完了してください。これらの手順で収集された情報を使用してブループリントを更新します。
- ワークロードのパーティション分割を設定していない場合は、今すぐ設定してください。
- 低レイテンシー用に 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>"
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 Copied! oslat
テストを実行する Pod の例:apiVersion: v1 kind: Pod metadata: name: oslat annotations: cpu-load-balancing.crio.io: "disable" irq-load-balancing.crio.io: "disable" cpu-quota.crio.io: "disable" cpu-c-states.crio.io: "disable" cpu-freq-governor.crio.io: "<governor>" spec: runtimeClassName: microshift-low-latency 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
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 Copied! - 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 """
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
"""
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 設定ファイルをそれぞれ作成および更新します。
手順
MicroShift
config.yaml
ファイルを更新して、kubelet 設定ファイルを含め、ワークロードの CPU マネージャーを有効化して設定します。パス
/etc/kubernetes/openshift-workload-pinning
に kubelet 設定ファイルを作成します。kubelet 設定は、容量および割り当て可能な CPU に基づいてノードリソースを変更するように kubelet に指示します。kubelet 設定の例
... ...
# ... { "management": { "cpuset": "0,6,7"
1 } } # ...
Copy to Clipboard Copied! - 1
cpuset
は、8 つの VCPU (4 コア) を搭載したマシンに適用され、ドキュメント全体で有効です。
パス
/etc/microshift/config.yaml
内の MicroShift config.yaml ファイルを更新します。MicroShiftconfig.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 Copied!
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 Copied! パス
/etc/systemd/system/crio.service.d/microshift-cpuaffinity.conf
に CRI-O の systemd ファイルを作成します。CRI-O systemd 設定の例
... ...
# ... [Service] CPUAffinity=0,6,7 # ...
Copy to Clipboard Copied!
MicroShift および CRI-O サービスの
CPUAffinity
値を使用して、systemd 設定ファイルを作成および更新します。パス
/etc/systemd/system/microshift.service.d/microshift-cpuaffinity.conf
に MicroShift サービスの systemd ファイルを作成します。MicroShift は、systemdCPUAffinity
値を使用して固定されます。MicroShift サービスの systemd 設定の例
... ...
# ... [Service] CPUAffinity=0,6,7 # ...
Copy to Clipboard Copied! パス
/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 Copied! パス
/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 Copied!