4.6.4. コンソールを使用したホステッドクラスターの作成
ベアメタル環境では、コマンドラインインターフェイス (CLI) を使用してホステッドクラスターをインポートするか、作成することができます。
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> \ --pull-secret=<path_to_pull_secret> \ --agent-namespace=<hosted_control_plane_namespace> \ --base-domain=<base_domain> \ --api-server-address=api.<hosted_cluster_name>.<base_domain> --etcd-storage-class=<etcd_storage_class> \ --ssh-key=<path_to_ssh_key> \ --namespace=<hosted_cluster_namespace> \ --control-plane-availability-policy=HighlyAvailable \ --release-image=quay.io/openshift-release-dev/ocp-release:<ocp_release_image>-multi \ --node-pool-replicas=<node_pool_replica_count> \ --render \ --render-sensitive \ --ssh-key <home_directory>/<path_to_ssh_key>/<ssh_key> > hosted-cluster-config.yaml各項目の説明:
<hosted_cluster_name>-
例: ホステッドクラスターの名前を指定します。 <path_to_pull_secret>-
プルシークレットへのパスを指定します。例:
/user/name/pullsecret。 < ホスト型コントロールプレーン名空間 >-
clusters-exampleなど、Hosted Control Plane の名前空間を指定します。oc get agent -n <hosted_control_plane_namespace>コマンドを使用して、この namespace でエージェントが使用可能であることを確認します。 < ベースドメイン >-
ベースドメインを指定します。例:
krnl.es。 --api-server-address-
ホステッドクラスターにおける Kubernetes API 通信に使用される IP アドレスを指定します。
--api-server-addressフラグを設定しない場合は、管理クラスターに接続するためにログインする必要があります。 <etcd_storage_class>-
etcd ストレージクラス名を指定します (例:
lvm-storageclass)。 <SSH キーへのパス >-
SSH 公開鍵へのパスを指定します。デフォルトのファイルパスは
~/.ssh/id_rsa.pubです。 <hosted_cluster_namespace>- ホステッドクラスターの namespace を指定します。
制御プレーン可用性ポリシー-
Hosted Control Plane コンポーネントの可用性ポリシーを指定します。サポートされているオプションは
SingleReplicaとHighlyAvailableです。デフォルト値はHighlyAvailableです。 <ocp_release_image>-
使用するサポートされている OpenShift Container Platform のバージョンを指定します。たとえば、
4.21.0-multiなどです。非接続環境を使用している場合は、<ocp_release_image>をダイジェストイメージに置き換えます。OpenShift Container Platform リリースイメージダイジェストを抽出するには、「OpenShift Container Platform リリースイメージダイジェストの抽出」を参照してください。 <node_pool_replica_count>-
ノードプールのレプリカ数を指定します (例:
3)。レプリカ数は0以上で指定する必要があります。指定したとおりの数のノードが作成されます。この値を指定しない場合、ノードプールは作成されません。 < ホームディレクトリー >/<SSH キーへのパス >/<SSH キー >-
SSH 鍵へのパスを指定します。例:
user/.ssh/id_rsa。
サービス公開ストラテジーを設定します。デフォルトでは、ホステッドクラスターは
NodePortサービス公開ストラテジーを使用します。これは、ノードポートが追加のインフラストラクチャーなしで常に利用可能であるためです。ただし、ロードバランサーを使用するようにサービス公開ストラテジーを設定することもできます。-
デフォルトの
NodePortストラテジーを使用している場合は、管理クラスターノードではなく、ホステッドクラスターコンピュートノードを指すように DNS を設定します。詳細は、「ベアメタル上の DNS 設定」を参照してください。 実稼働環境では、証明書の処理と自動 DNS 解決を提供する
LoadBalancerストラテジーを使用します。次の例は、ホステッドクラスターの設定ファイルでLoadBalancerサービス公開ストラテジーを変更する方法を示しています。apiVersion: hypershift.openshift.io/v1beta1 kind: HostedCluster metadata: # ... spec: services: - service: APIServer servicePublishingStrategy: type: LoadBalancer - service: Ignition servicePublishingStrategy: type: Route - service: Konnectivity servicePublishingStrategy: type: Route - service: OAuthServer servicePublishingStrategy: type: Route - service: OIDC servicePublishingStrategy: type: Route sshKey: name: <ssh_key> # ...API サーバータイプとして
LoadBalancerを指定します。それ以外のすべてのサービスでは、タイプとしてRouteを指定します。
-
デフォルトの
外部ロードバランサーを使用する場合は、次の例に示すようにイングレスエンドポイントを設定してください。エンドポイントを設定しない場合、デフォルトの動作では、サービスが Ingress を公開するノードポートがランダム化されます。イングレスコントローラーがデフォルトの Ingress ルートを公開する方法を設定するには、
HostedClusterリソースを編集して、endpointPublishingStrategyパラメーターとその基となる関数を設定します。apiVersion: hypershift.openshift.io/v1beta1 kind: HostedCluster metadata: #... spec: operatorConfiguration: ingressOperator: endpointPublishingStrategy: hostNetwork: httpPort: 80 httpsPort: 443 protocol: TCP statsPort: 1936 type: HostNetwork #...spec.operatorConfiguration.ingressOperator.endPointPublishingStrategy.typeパラメーターは、ロードバランサーのエンドポイントを指定します。ベアメタル環境へのインストールには、HostNetworkタイプを使用してください。次のコマンドを入力して、ホステッドクラスター設定ファイルに変更を適用します。
$ 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>