4.6.4. コンソールを使用したホステッドクラスターの作成
ベアメタルインフラストラクチャーには、ホステッドクラスターを作成またはインポートできます。multicluster engine Operator へのアドオンとして Assisted Installer を有効にし、Agent プラットフォームを使用してホステッドクラスターを作成すると、HyperShift Operator によって Agent Cluster API プロバイダーが Hosted Control Plane namespace にインストールされます。Agent Cluster API プロバイダーは、コントロールプレーンをホストする管理クラスターと、コンピュートノードのみで構成されるホステッドクラスターを接続します。
前提条件
- 各ホステッドクラスターの名前がクラスター全体で一意である。ホステッドクラスター名は、既存のマネージドクラスターと同じにすることはできません。この要件を満たさないと、multicluster engine Operator がホステッドクラスターを管理できません。
-
ホステッドクラスター名として
clustersという単語を使用しない。 - multicluster engine Operator のマネージドクラスターの namespace にホステッドクラスターを作成することはできない。
- 最適なセキュリティーと管理プラクティスを実現するために、他のホステッドクラスターとは別にホステッドクラスターを作成する。
- クラスターにデフォルトのストレージクラスが設定されていることを確認する。そうしない場合、保留中の永続ボリューム要求 (PVC) が表示されることがあります。
-
デフォルトでは、
hcp create cluster agentコマンドを使用すると、ノードポートが設定されたホステッドクラスターが作成されます。ベアメタル上のホステッドクラスターの推奨公開ストラテジーは、ロードバランサーを通じてサービスを公開することです。Web コンソールまたは Red Hat Advanced Cluster Management を使用してホステッドクラスターを作成する場合、Kubernetes API サーバー以外のサービスの公開ストラテジーを設定するには、HostedClusterカスタムリソースでservicePublishingStrategy情報を手動で指定する必要があります。 インフラストラクチャー、ファイアウォール、ポート、およびサービスに関連する要件を含め、「ベアメタル上の Hosted Control Plane の要件」に記載されている要件を満たしていることを確認する。要件では、たとえば次のコマンド例に示すように、管理クラスター内のベアメタルホストに適切なゾーンラベルを追加する方法が説明されています。
$ oc label node [compute-node-1] topology.kubernetes.io/zone=zone1$ oc label node [compute-node-2] topology.kubernetes.io/zone=zone2$ oc label node [compute-node-3] topology.kubernetes.io/zone=zone3- ハードウェアインベントリーにベアメタルノードを追加したことを確認する。
手順
次のコマンドを入力して namespace を作成します。
$ oc create ns <hosted_cluster_namespace><hosted_cluster_namespace>は、ホステッドクラスター namespace の識別子に置き換えます。namespace は HyperShift Operator によって作成されます。ベアメタルインフラストラクチャーにホステッドクラスターを作成するプロセスでは、Cluster API プロバイダー用のロールが生成されます。このロールを生成するには、namespace が事前に存在している必要があります。次のコマンドを入力して、ホステッドクラスターの設定ファイルを作成します。
$ hcp create cluster agent \ --name=<hosted_cluster_name> \1 --pull-secret=<path_to_pull_secret> \2 --agent-namespace=<hosted_control_plane_namespace> \3 --base-domain=<base_domain> \4 --api-server-address=api.<hosted_cluster_name>.<base_domain> \5 --etcd-storage-class=<etcd_storage_class> \6 --ssh-key=<path_to_ssh_key> \7 --namespace=<hosted_cluster_namespace> \8 --control-plane-availability-policy=HighlyAvailable \9 --release-image=quay.io/openshift-release-dev/ocp-release:<ocp_release_image>-multi \10 --node-pool-replicas=<node_pool_replica_count> \11 --render \ --render-sensitive \ --ssh-key <home_directory>/<path_to_ssh_key>/<ssh_key> > hosted-cluster-config.yaml12 - 1
- ホステッドクラスターの名前 (例:
example) を指定します。 - 2
- プルシークレットへのパスを指定します (例:
/user/name/pullsecret)。 - 3
- Hosted Control Plane の namespace を指定します (例:
clusters-example)。oc get agent -n <hosted_control_plane_namespace>コマンドを使用して、この namespace でエージェントが使用可能であることを確認します。 - 4
- ベースドメイン (例:
krnl.es) を指定します。 - 5
--api-server-addressフラグは、ホステッドクラスター内の Kubernetes API 通信に使用される IP アドレスを定義します。--api-server-addressフラグを設定しない場合は、管理クラスターに接続するためにログインする必要があります。- 6
- etcd ストレージクラス名を指定します (例:
lvm-storageclass)。 - 7
- SSH 公開鍵へのパスを指定します。デフォルトのファイルパスは
~/.ssh/id_rsa.pubです。 - 8
- ホステッドクラスターの namespace を指定します。
- 9
- Hosted Control Plane コンポーネントの可用性ポリシーを指定します。サポートされているオプションは
SingleReplicaとHighlyAvailableです。デフォルト値はHighlyAvailableです。 - 10
- 使用するサポート対象の OpenShift Container Platform バージョンを指定します (例:
4.20.0-multi)。非接続環境を使用している場合は、<ocp_release_image>をダイジェストイメージに置き換えます。OpenShift Container Platform リリースイメージダイジェストを抽出するには、OpenShift Container Platform リリースイメージダイジェストの抽出 を参照してください。 - 11
- ノードプールのレプリカ数を指定します (例:
3)。レプリカ数は0以上で指定する必要があります。指定したとおりの数のノードが作成されます。この値を指定しない場合、ノードプールは作成されません。 - 12
--ssh-keyフラグの後に、SSH 鍵へのパス (例:user/.ssh/id_rsa) を指定します。
サービス公開ストラテジーを設定します。デフォルトでは、ホステッドクラスターは
NodePortサービス公開ストラテジーを使用します。これは、ノードポートが追加のインフラストラクチャーなしで常に利用可能であるためです。ただし、ロードバランサーを使用するようにサービス公開ストラテジーを設定することもできます。-
デフォルトの
NodePortストラテジーを使用している場合は、管理クラスターノードではなく、ホステッドクラスターコンピュートノードを指すように DNS を設定します。詳細は、「ベアメタル上の DNS 設定」を参照してください。 実稼働環境では、証明書の処理と自動 DNS 解決を提供する
LoadBalancerストラテジーを使用します。次の例は、ホステッドクラスターの設定ファイルでLoadBalancerサービス公開ストラテジーを変更する方法を示しています。# ... spec: services: - service: APIServer servicePublishingStrategy: type: LoadBalancer1 - service: Ignition servicePublishingStrategy: type: Route - service: Konnectivity servicePublishingStrategy: type: Route - service: OAuthServer servicePublishingStrategy: type: Route - service: OIDC servicePublishingStrategy: type: Route sshKey: name: <ssh_key> # ...- 1
- API サーバータイプとして
LoadBalancerを指定します。それ以外のすべてのサービスでは、タイプとしてRouteを指定します。
-
デフォルトの
次のコマンドを入力して、ホステッドクラスター設定ファイルに変更を適用します。
$ oc apply -f hosted_cluster_config.yaml次のコマンドを入力して、ホステッドクラスター、ノードプール、および Pod の作成を確認します。
$ oc get hostedcluster \ <hosted_cluster_namespace> -n \ <hosted_cluster_namespace> -o \ jsonpath='{.status.conditions[?(@.status=="False")]}' | jq .$ oc get nodepool \ <hosted_cluster_namespace> -n \ <hosted_cluster_namespace> -o \ jsonpath='{.status.conditions[?(@.status=="False")]}' | jq .$ oc get pods -n <hosted_cluster_namespace>-
ホステッドクラスターの準備ができていることを確認します。
Available: Trueというステータスはクラスターの準備完了状態であることを示しています。ノードプールのステータスにはAllMachinesReady: Trueと表示されます。これらのステータスは、すべてのクラスター Operator の健全性を示しています。 ホステッドクラスターに MetalLB をインストールします。
次のコマンドを入力して、ホステッドクラスターから
kubeconfigファイルを展開し、ホステッドクラスターアクセス用の環境変数を設定します。$ oc get secret \ <hosted_cluster_namespace>-admin-kubeconfig \ -n <hosted_cluster_namespace> \ -o jsonpath='{.data.kubeconfig}' \ | base64 -d > \ kubeconfig-<hosted_cluster_namespace>.yaml$ export KUBECONFIG="/path/to/kubeconfig-<hosted_cluster_namespace>.yaml"install-metallb-operator.yamlファイルを作成して MetalLB Operator をインストールします。apiVersion: v1 kind: Namespace metadata: name: metallb-system --- apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: metallb-operator namespace: metallb-system --- apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: metallb-operator namespace: metallb-system spec: channel: "stable" name: metallb-operator source: redhat-operators sourceNamespace: openshift-marketplace installPlanApproval: Automatic # ...以下のコマンドを入力してファイルを適用します。
$ oc apply -f install-metallb-operator.yamldeploy-metallb-ipaddresspool.yamlファイルを作成して、MetalLB IP アドレスプールを設定します。apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: metallb namespace: metallb-system spec: autoAssign: true addresses: - 10.11.176.71-10.11.176.75 --- apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: l2advertisement namespace: metallb-system spec: ipAddressPools: - metallb # ...次のコマンドを入力して設定を適用します。
$ oc apply -f deploy-metallb-ipaddresspool.yaml次のコマンドを入力して、Operator ステータス、IP アドレスプール、および
L2Advertisementリソースを確認し、MetalLB のインストールを検証します。$ oc get pods -n metallb-system$ oc get ipaddresspool -n metallb-system$ oc get l2advertisement -n metallb-system
Ingress 用のロードバランサーを設定します。
ingress-loadbalancer.yamlファイルを作成します。apiVersion: v1 kind: Service metadata: annotations: metallb.universe.tf/address-pool: metallb name: metallb-ingress namespace: openshift-ingress spec: ports: - name: http protocol: TCP port: 80 targetPort: 80 - name: https protocol: TCP port: 443 targetPort: 443 selector: ingresscontroller.operator.openshift.io/deployment-ingresscontroller: default type: LoadBalancer # ...次のコマンドを入力して設定を適用します。
$ oc apply -f ingress-loadbalancer.yaml次のコマンドを入力して、ロードバランサーサービスが期待どおりに動作することを確認します。
$ oc get svc metallb-ingress -n openshift-ingress出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE metallb-ingress LoadBalancer 172.31.127.129 10.11.176.71 80:30961/TCP,443:32090/TCP 16h
ロードバランサーと連携するように DNS を設定します。
-
*.apps.<hosted_cluster_namespace>.<base_domain>ワイルドカード DNS レコードがロードバランサーの IP アドレスをポイントするように、appsドメインの DNS を設定します。 次のコマンドを入力して DNS 解決を確認します。
$ nslookup console-openshift-console.apps.<hosted_cluster_namespace>.<base_domain> <load_balancer_ip_address>出力例
Server: 10.11.176.1 Address: 10.11.176.1#53 Name: console-openshift-console.apps.my-hosted-cluster.sample-base-domain.com Address: 10.11.176.71
-
検証
次のコマンドを入力して、クラスター Operator を確認します。
$ oc get clusteroperatorsすべての Operator に
AVAILABLE: True、PROGRESSING: False、DEGRADED: Falseが表示されていることを確認します。次のコマンドを入力してノードを確認します。
$ oc get nodes各ノードのステータスが
READYであることを確認します。Web ブラウザーに次の URL を入力して、コンソールへのアクセスをテストします。
https://console-openshift-console.apps.<hosted_cluster_namespace>.<base_domain>