Microsoft Azure Red Hat OpenShift を使用すると、インフラストラクチャ マシン セットを使用して、既定のルーター、統合コンテナー レジストリ、クラスター メトリックと監視用のコンポーネントなどのインフラストラクチャ コンポーネントのみをホストするマシンを作成できます。 これらのインフラストラクチャ マシンでは、OpenShift のコストは発生しません。Azure コンピューティング コストのみが発生します。
運用環境のデプロイでは、インフラストラクチャ コンポーネントを保持するために 3 つのマシン セットをデプロイすることをお勧めします。 これらの各ノードを異なる可用性ゾーンにデプロイして、可用性を高めることができます。 この種類の構成には、3 つの異なるマシン セットが必要です。可用性ゾーンごとに 1 つ。 インフラストラクチャ ノードのサイズ設定のガイダンスについては、「 推奨されるインフラストラクチャのプラクティス」を参照してください。
適格なワークロード
次のインフラストラクチャ ワークロードでは、Azure Red Hat OpenShift worker サブスクリプションは発生しません。
マスターで実行される Kubernetes および Azure Red Hat OpenShift コントロール プレーン サービス
既定のルーター
統合コンテナー イメージ レジストリ
HAProxy ベースのイングレス コントローラー
ユーザー定義プロジェクトを監視するためのコンポーネントを含む、クラスター メトリックの収集または監視サービス
クラスター集約ログ記録
重要
インフラストラクチャ ノードで指定された種類以外のワークロードを実行すると、サービス レベル アグリーメント (SLA) とクラスターの安定性に影響する可能性があります。
[前提条件]
クラスターに追加された Azure 仮想マシンがワーカー ノードではなくインフラストラクチャ ノードとして認識され、OpenShift 料金が課金されないようにするには、次の条件を満たす必要があります。
ノードは、次のインスタンスの種類のいずれかである必要があります。
- Standard_E4s_v5
- Standard_E8s_v5
- Standard_E16s_v5
- Standard_E4as_v5
- Standard_E8as_v5
- Standard_E16as_v5
3 つ以下のノードを使用できます。 追加のノードには OpenShift 料金が課金されます。
ノードには、次の Azure タグが必要です。
node_role: infraインフラストラクチャ ノード用に指定されたワークロードのみが許可されます。 他のすべてのワークロードでは、これらのワーカー ノードが考慮され、料金が適用されます。 この指定により、SLA が無効になり、クラスターの安定性が損なわれる可能性もあります。
インフラストラクチャ マシン セットを作成する
マニフェスト定義テンプレートを使用して、インフラストラクチャ マシン セットのマニフェスト定義を作成します。
山括弧 (
<>) の間にあるすべてのフィールドをあなたの具体的な値に置き換えます。たとえば、
___location: <REGION>を___location: westus2に置き換えますマニフェスト定義テンプレートに必要な値を取得するには、「 コマンドと値」を参照してください。
次のコマンドを使用してマシン セットを作成します。
oc create -f <machine-set-filename.yaml>マシン セットの作成を確認するには、次のコマンドを実行します。
oc get machineset -n openshift-machine-api検証コマンドの出力は、次の値のようになります。
NAME DESIRED CURRENT READY AVAILABLE AGE ok0608-vkxvw-infra-westus21 1 1 1 1 165M ok0608-vkxvw-worker-westus21 1 1 1 1 4H24M ok0608-vkxvw-worker-westus22 1 1 1 1 4H24M ok0608-vkxvw-worker-westus23 1 1 1 1 4H24M
マニフェスト定義テンプレート
前の手順で、インフラストラクチャ マシン セットのマニフェスト定義を作成するために、次のテンプレートを使用しました。
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
labels:
machine.openshift.io/cluster-api-cluster: <INFRASTRUCTURE_ID>
machine.openshift.io/cluster-api-machine-role: infra
machine.openshift.io/cluster-api-machine-type: infra
name: <INFRASTRUCTURE_ID>-infra-<REGION><ZONE>
namespace: openshift-machine-api
spec:
replicas: 1
selector:
matchLabels:
machine.openshift.io/cluster-api-cluster: <INFRASTRUCTURE_ID>
machine.openshift.io/cluster-api-machineset: <INFRASTRUCTURE_ID>-infra-<REGION><ZONE>
template:
metadata:
creationTimestamp: null
labels:
machine.openshift.io/cluster-api-cluster: <INFRASTRUCTURE_ID>
machine.openshift.io/cluster-api-machine-role: infra
machine.openshift.io/cluster-api-machine-type: infra
machine.openshift.io/cluster-api-machineset: <INFRASTRUCTURE_ID>-infra-<REGION><ZONE>
spec:
metadata:
creationTimestamp: null
labels:
machine.openshift.io/cluster-api-machineset: <OPTIONAL: Specify the machine set name to enable the use of availability sets. This setting only applies to new compute machines.>
node-role.kubernetes.io/infra: ''
providerSpec:
value:
apiVersion: azureproviderconfig.openshift.io/v1beta1
credentialsSecret:
name: azure-cloud-credentials
namespace: openshift-machine-api
image:
offer: aro4
publisher: azureopenshift
sku: <SKU>
version: <VERSION>
kind: AzureMachineProviderSpec
___location: <REGION>
metadata:
creationTimestamp: null
natRule: null
networkResourceGroup: <NETWORK_RESOURCE_GROUP>
osDisk:
diskSizeGB: 128
managedDisk:
storageAccountType: Premium_LRS
osType: Linux
publicIP: false
resourceGroup: <CLUSTER_RESOURCE_GROUP>
tags:
node_role: infra
subnet: <SUBNET_NAME>
userDataSecret:
name: worker-user-data
vmSize: <Standard_E4s_v5, Standard_E8s_v5, Standard_E16s_v5>
vnet: <VNET_NAME>
zone: <ZONE>
taints:
- key: node-role.kubernetes.io/infra
effect: NoSchedule
コマンドと値
テンプレートの作成と実行に使用される一般的なコマンドと値を次に示します。
すべてのマシン セットを一覧表示します。
oc get machineset -n openshift-machine-api
特定のマシン セットの詳細を取得します。
oc get machineset <machineset_name> -n openshift-machine-api -o yaml
クラスター リソース グループ:
oc get infrastructure cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}'
ネットワーク リソース グループ:
oc get infrastructure cluster -o jsonpath='{.status.platformStatus.azure.networkResourceGroupName}'
インフラ ID:
oc get infrastructure cluster -o jsonpath='{.status.infrastructureName}'
リージョン:
oc get machineset <machineset_name> -n openshift-machine-api -o jsonpath='{.spec.template.spec.providerSpec.value.___location}'
SKU:
oc get machineset <machineset_name> -n openshift-machine-api -o jsonpath='{.spec.template.spec.providerSpec.value.image.sku}'
サブネット:
oc get machineset <machineset_name> -n openshift-machine-api -o jsonpath='{.spec.template.spec.providerSpec.value.subnet}'
バージョン:
oc get machineset <machineset_name> -n openshift-machine-api -o jsonpath='{.spec.template.spec.providerSpec.value.image.version}'
仮想ネットワーク:
oc get machineset <machineset_name> -n openshift-machine-api -o jsonpath='{.spec.template.spec.providerSpec.value.vnet}'
新しいインフラストラクチャ ノードへのワークロードの移動
次の手順に従って、インフラストラクチャ ワークロードを以前に作成したインフラストラクチャ ノードに移動します。
イングレス
この手順は、クラスターに存在する可能性がある他のイングレス コントローラーに対して使用します。 アプリケーションに高いイングレス リソース要件がある場合は、ワーカー ノードまたは専用のマシン セットに分散することをお勧めします。
nodePlacementのingresscontrollerをnode-role.kubernetes.io/infraに設定し、インフラストラクチャ ノードの数に合わせてreplicasを増やします。oc patch -n openshift-ingress-operator ingresscontroller default --type=merge \ -p='{"spec":{"replicas":3,"nodePlacement":{"nodeSelector":{"matchLabels":{"node-role.kubernetes.io/infra":""}},"tolerations":[{"effect":"NoSchedule","key":"node-role.kubernetes.io/infra","operator":"Exists"}]}}}'イングレス コントローラー オペレーターが新しいインフラストラクチャ ノードでポッドを起動していることを確認します。
oc -n openshift-ingress get pods -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES router-default-69f58645b7-6xkvh 1/1 Running 0 66s 10.129.6.6 cz-cluster-hsmtw-infra-aro-machinesets-eastus-3-l6dqw <none> <none> router-default-69f58645b7-vttqz 1/1 Running 0 66s 10.131.4.6 cz-cluster-hsmtw-infra-aro-machinesets-eastus-1-vr56r <none> <none> router-default-6cb5ccf9f5-xjgcp 1/1 Terminating 0 23h 10.131.0.11 cz-cluster-hsmtw-worker-eastus2-xj9qx <none> <none>
レジストリ
レジストリの
nodePlacementをnode-role.kubernetes.io/infraに設定します。oc patch configs.imageregistry.operator.openshift.io/cluster --type=merge \ -p='{"spec":{"affinity":{"podAntiAffinity":{"preferredDuringSchedulingIgnoredDuringExecution":[{"podAffinityTerm":{"namespaces":["openshift-image-registry"],"topologyKey":"kubernetes.io/hostname"},"weight":100}]}},"logLevel":"Normal","managementState":"Managed","nodeSelector":{"node-role.kubernetes.io/infra":""},"tolerations":[{"effect":"NoSchedule","key":"node-role.kubernetes.io/infra","operator":"Exists"}]}}'レジストリ オペレーターが新しいインフラストラクチャ ノードでポッドを開始していることを確認します。
oc -n openshift-image-registry get pods -l "docker-registry" -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES image-registry-84cbd76d5d-cfsw7 1/1 Running 0 3h46m 10.128.6.7 cz-cluster-hsmtw-infra-aro-machinesets-eastus-2-kljml <none> <none> image-registry-84cbd76d5d-p2jf9 1/1 Running 0 3h46m 10.129.6.7 cz-cluster-hsmtw-infra-aro-machinesets-eastus-3-l6dqw <none> <none>
クラスターの監視
インフラストラクチャ ノードを使用するようにクラスター監視スタックを構成します。
これにより、クラスター監視スタックに対するその他のカスタマイズがオーバーライドされるため、コマンドを実行する前に既存のカスタマイズをマージできます。
cat << EOF | oc apply -f - apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: |+ alertmanagerMain: nodeSelector: node-role.kubernetes.io/infra: "" tolerations: - effect: "NoSchedule" key: "node-role.kubernetes.io/infra" operator: "Exists" prometheusK8s: nodeSelector: node-role.kubernetes.io/infra: "" tolerations: - effect: "NoSchedule" key: "node-role.kubernetes.io/infra" operator: "Exists" prometheusOperator: {} grafana: nodeSelector: node-role.kubernetes.io/infra: "" tolerations: - effect: "NoSchedule" key: "node-role.kubernetes.io/infra" operator: "Exists" k8sPrometheusAdapter: nodeSelector: node-role.kubernetes.io/infra: "" tolerations: - effect: "NoSchedule" key: "node-role.kubernetes.io/infra" operator: "Exists" kubeStateMetrics: nodeSelector: node-role.kubernetes.io/infra: "" tolerations: - effect: "NoSchedule" key: "node-role.kubernetes.io/infra" operator: "Exists" telemeterClient: nodeSelector: node-role.kubernetes.io/infra: "" tolerations: - effect: "NoSchedule" key: "node-role.kubernetes.io/infra" operator: "Exists" openshiftStateMetrics: nodeSelector: node-role.kubernetes.io/infra: "" tolerations: - effect: "NoSchedule" key: "node-role.kubernetes.io/infra" operator: "Exists" thanosQuerier: nodeSelector: node-role.kubernetes.io/infra: "" tolerations: - effect: "NoSchedule" key: "node-role.kubernetes.io/infra" operator: "Exists" EOFOpenShift Monitoring Operator が新しいインフラストラクチャ ノードでポッドを開始していることを確認します。
prometheus-operatorなどの一部のノードはマスター ノードに残ります。oc -n openshift-monitoring get pods -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES alertmanager-main-0 6/6 Running 0 2m14s 10.128.6.11 cz-cluster-hsmtw-infra-aro-machinesets-eastus-2-kljml <none> <none> alertmanager-main-1 6/6 Running 0 2m46s 10.131.4.11 cz-cluster-hsmtw-infra-aro-machinesets-eastus-1-vr56r <none> <none> cluster-monitoring-operator-5bbfd998c6-m9w62 2/2 Running 0 28h 10.128.0.23 cz-cluster-hsmtw-master-1 <none> <none> grafana-599d4b948c-btlp2 3/3 Running 0 2m48s 10.131.4.10 cz-cluster-hsmtw-infra-aro-machinesets-eastus-1-vr56r <none> <none> kube-state-metrics-574c5bfdd7-f7fjk 3/3 Running 0 2m49s 10.131.4.8 cz-cluster-hsmtw-infra-aro-machinesets-eastus-1-vr56r <none> <none>
DNS
DNS ポッドをインフラストラクチャ ノードで実行できるようにします。
oc edit dns.operator/defaultapiVersion: operator.openshift.io/v1 kind: DNS metadata: name: default spec: nodePlacement: tolerations: - operator: ExistsDNS ポッドがすべての
infraノードにスケジュールされていることを確認します。oc get ds/dns-default -n openshift-dnsNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE dns-default 7 7 7 7 7 kubernetes.io/os=linux 35d
関連コンテンツ
クラスターをアップグレードするには、「 Azure Red Hat OpenShift クラスターのアップグレード」を参照してください。