ARO を使用すると、インフラストラクチャ マシン セットを使用して、既定のルーター、統合コンテナー レジストリ、クラスター メトリックと監視用のコンポーネントなどのインフラストラクチャ コンポーネントのみをホストするマシンを作成できます。 これらのインフラストラクチャ マシンでは、OpenShift のコストは発生しません。Azure コンピューティング コストのみが発生します。
運用環境のデプロイでは、インフラストラクチャ コンポーネントを保持するために 3 つのマシン セットをデプロイすることをお勧めします。 これらの各ノードを異なる可用性ゾーンにデプロイして、可用性を高めることができます。 この種類の構成には、3 つの異なるマシン セットが必要です。可用性ゾーンごとに 1 つ。 インフラストラクチャ ノードのサイズ設定のガイダンスについては、「 推奨されるインフラストラクチャのプラクティス」を参照してください。
適格なワークロード
次のインフラストラクチャ ワークロードでは、Azure Red Hat OpenShift worker サブスクリプションは発生しません。
マスターで実行される Kubernetes および Azure Red Hat OpenShift コントロール プレーン サービス
既定のルーター
統合コンテナー イメージ レジストリ
HAProxy ベースのイングレス コントローラー
ユーザー定義プロジェクトを監視するためのコンポーネントを含む、クラスター メトリックの収集または監視サービス
クラスター集約ログ記録
重要
インフラストラクチャ ノードで指定された種類以外のワークロードを実行すると、サービス レベル アグリーメント (SLA) とクラスターの安定性に影響する可能性があります。
開始する前に
ARO クラスターに追加された Azure VM を (より多くのワーカー ノードではなく) インフラストラクチャ ノードとして認識し、OpenShift 料金を請求しないようにするには、次の条件を満たす必要があります。
ノードは、次のインスタンスの種類のいずれかである必要があります。
- Standard_E4s_v5
- Standard_E8s_v5
- Standard_E16s_v5
- Standard_E4as_v5
- Standard_E8as_v5
- Standard_E16as_v5
3 つ以下のノードを使用できます。 追加のノードには OpenShift 料金が課金されます。
ノードには、node_role infra の Azure タグが必要です
インフラストラクチャ ノード用に指定されたワークロードのみが許可されます。 他のすべてのワークロードは、これらのワーカー ノードと見なされるため、料金が発生します。 これにより、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}'
Vnet:
oc get machineset <machineset_name> -n openshift-machine-api -o jsonpath='{.spec.template.spec.providerSpec.value.vnet}'
新しいインフラストラクチャ ノードへのワークロードの移動
インフラストラクチャ ワークロードを以前に作成したインフラストラクチャ ノードに移動するには、次の手順に従います。
イングレス
クラスターに追加のイングレス コントローラーがある場合は、この手順を使用します。
注
アプリケーションのイングレス リソース要件が非常に高い場合は、ワーカー ノードまたは専用のマシン セットに分散することをお勧めします。
ingresscontroller
のnodePlacement
を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 wide
NAME 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 wide
NAME 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" EOF
OpenShift Monitoring Operator が新しいインフラストラクチャ ノードでポッドを開始していることを確認します。 一部のノード (
prometheus-operator
など) はマスター ノードに残ります。oc -n openshift-monitoring get pods -o wide
NAME 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/default
apiVersion: operator.openshift.io/v1 kind: DNS metadata: name: default spec: nodePlacement: tolerations: - operator: Exists
DNS ポッドがすべてのインフラストラクチャ ノードにスケジュールされていることを確認します。
oc get ds/dns-default -n openshift-dns
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
dns-default 7 7 7 7 7 kubernetes.io/os=linux 35d