5.4. 非ベアメタルエージェントマシンでの Hosted Control Plane の管理
非ベアメタルエージェントマシンに Hosted Control Plane をデプロイした後、次のタスクを完了してホステッドクラスターを管理できます。
5.4.1. ホステッドクラスターへのアクセス
ホステッドクラスターにアクセスするには、kubeconfig
ファイルと kubeadmin
認証情報をリソースから直接取得するか、hcp
コマンドラインインターフェイスを使用して kubeconfig
ファイルを生成します。
前提条件
リソースから kubeconfig
ファイルと認証情報を直接取得し、ホステッドクラスターにアクセスするには、ホステッドクラスターのアクセスシークレットを理解している必要があります。ホステッドクラスター (ホスティング) のリソースとアクセスシークレットは、ホステッドクラスターの namespace に格納されます。Hosted Control Plane は、Hosted Control Plane の namespace で実行されます。
シークレット名の形式は次のとおりです。
-
kubeconfig
シークレット:<hosted_cluster_namespace>-<name>-admin-kubeconfig
.たとえば、clusters-hypershift-demo-admin-kubeconfig
です。 -
kubeadmin
パスワードシークレット:<hosted_cluster_namespace>-<name>-kubeadmin-password
.たとえば、clusters-hypershift-demo-kubeadmin-password
です。
kubeconfig
シークレットには Base64 でエンコードされた kubeconfig
フィールドが含まれており、これをデコードしてファイルに保存し、次のコマンドで使用できます。
$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
kubeadmin
パスワードシークレットも Base64 でエンコードされます。これをデコードし、そのパスワードを使用して、ホステッドクラスターの API サーバーまたはコンソールにログインできます。
手順
hcp
CLI を使用してホステッドクラスターにアクセスしてkubeconfig
ファイルを生成するには、次の手順を実行します。次のコマンドを入力して、
kubeconfig
ファイルを生成します。$ hcp create kubeconfig --namespace <hosted_cluster_namespace> --name <hosted_cluster_name> > <hosted_cluster_name>.kubeconfig
kubeconfig
ファイルを保存した後、次のコマンド例を入力して、ホステッドクラスターにアクセスできます。$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
5.4.2. ホステッドクラスターの NodePool オブジェクトのスケーリング
ホステッドクラスターにノードを追加することで、NodePool
オブジェクトをスケールアップできます。ノードプールをスケーリングする際には、次の情報を考慮してください。
- ノードプールによってレプリカをスケーリングすると、マシンが作成されます。クラスター API プロバイダーは、すべてのマシンに対して、ノードプール仕様で指定された要件を満たすエージェントを見つけてインストールします。エージェントのステータスと状態を確認することで、エージェントのインストールを監視できます。
- ノードプールをスケールダウンすると、エージェントは対応するクラスターからバインド解除されます。Agent を再利用するには、Discovery イメージを使用してエージェントを再起動する必要があります。
手順
NodePool
オブジェクトを 2 つのノードにスケーリングします。$ oc -n <hosted_cluster_namespace> scale nodepool <nodepool_name> --replicas 2
Cluster API エージェントプロバイダーは、ホステッドクラスターに割り当てられる 2 つのエージェントをランダムに選択します。これらのエージェントはさまざまな状態を経て、最終的に OpenShift Container Platform ノードとしてホステッドクラスターに参加します。エージェントは次の順序で状態を通過します。
-
binding
-
discovering
-
insufficient
-
installing
-
installing-in-progress
-
added-to-existing-cluster
-
以下のコマンドを入力します。
$ oc -n <hosted_control_plane_namespace> get agent
出力例
NAME CLUSTER APPROVED ROLE STAGE 4dac1ab2-7dd5-4894-a220-6a3473b67ee6 hypercluster1 true auto-assign d9198891-39f4-4930-a679-65fb142b108b true auto-assign da503cf1-a347-44f2-875c-4960ddb04091 hypercluster1 true auto-assign
以下のコマンドを入力します。
$ oc -n <hosted_control_plane_namespace> get agent -o jsonpath='{range .items[*]}BMH: {@.metadata.labels.agent-install\.openshift\.io/bmh} Agent: {@.metadata.name} State: {@.status.debugInfo.state}{"\n"}{end}'
出力例
BMH: ocp-worker-2 Agent: 4dac1ab2-7dd5-4894-a220-6a3473b67ee6 State: binding BMH: ocp-worker-0 Agent: d9198891-39f4-4930-a679-65fb142b108b State: known-unbound BMH: ocp-worker-1 Agent: da503cf1-a347-44f2-875c-4960ddb04091 State: insufficient
次の extract コマンドを入力して、新しいホステッドクラスターの kubeconfig を取得します。
$ oc extract -n <hosted_cluster_namespace> secret/<hosted_cluster_name>-admin-kubeconfig --to=- > kubeconfig-<hosted_cluster_name>
エージェントが
added-to-existing-cluster
状態に達したら、次のコマンドを入力して、ホステッドクラスターの OpenShift Container Platform ノードが表示されることを確認します。$ oc --kubeconfig kubeconfig-<hosted_cluster_name> get nodes
出力例
NAME STATUS ROLES AGE VERSION ocp-worker-1 Ready worker 5m41s v1.24.0+3882f8f ocp-worker-2 Ready worker 6m3s v1.24.0+3882f8f
Cluster Operator は、ワークロードをノードに追加することによって調整を開始します。
次のコマンドを入力して、
NodePool
オブジェクトをスケールアップしたときに 2 台のマシンが作成されたことを確認します。$ oc -n <hosted_control_plane_namespace> get machines
出力例
NAME CLUSTER NODENAME PROVIDERID PHASE AGE VERSION hypercluster1-c96b6f675-m5vch hypercluster1-b2qhl ocp-worker-1 agent://da503cf1-a347-44f2-875c-4960ddb04091 Running 15m 4.x.z hypercluster1-c96b6f675-tl42p hypercluster1-b2qhl ocp-worker-2 agent://4dac1ab2-7dd5-4894-a220-6a3473b67ee6 Running 15m 4.x.z
clusterversion
調整プロセスは最終的に、Ingress および Console クラスター Operator のみが欠落しているポイントに到達します。以下のコマンドを入力します。
$ oc --kubeconfig kubeconfig-<hosted_cluster_name> get clusterversion,co
出力例
NAME VERSION AVAILABLE PROGRESSING SINCE STATUS clusterversion.config.openshift.io/version False True 40m Unable to apply 4.x.z: the cluster operator console has not yet successfully rolled out NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE clusteroperator.config.openshift.io/console 4.12z False False False 11m RouteHealthAvailable: failed to GET route (https://console-openshift-console.apps.hypercluster1.domain.com): Get "https://console-openshift-console.apps.hypercluster1.domain.com": dial tcp 10.19.3.29:443: connect: connection refused clusteroperator.config.openshift.io/csi-snapshot-controller 4.12z True False False 10m clusteroperator.config.openshift.io/dns 4.12z True False False 9m16s
5.4.2.1. ノードプールの追加
名前、レプリカの数、およびエージェントラベルセレクターなどの追加情報を指定して、ホステッドクラスターのノードプールを作成できます。
手順
ノードプールを作成するには、次の情報を入力します。
$ hcp create nodepool agent \ --cluster-name <hosted_cluster_name> \1 --name <nodepool_name> \2 --node-count <worker_node_count> \3 --agentLabelSelector size=medium 4
clusters
namespace 内のnodepool
リソースをリスト表示して、ノードプールのステータスを確認します。$ oc get nodepools --namespace clusters
次のコマンドを入力して、
admin-kubeconfig
シークレットを抽出します。$ oc extract -n <hosted_control_plane_namespace> secret/admin-kubeconfig --to=./hostedcluster-secrets --confirm
出力例
hostedcluster-secrets/kubeconfig
しばらくしてから、次のコマンドを入力してノードプールのステータスを確認できます。
$ oc --kubeconfig ./hostedcluster-secrets get nodes
検証
次のコマンドを入力して、使用可能なノードプールの数が予想されるノードプールの数と一致することを確認します。
$ oc get nodepools --namespace clusters
5.4.2.2. ホステッドクラスターのノード自動スケーリングの有効化
ホステッドクラスターにさらに容量が必要で、予備のエージェントが利用可能な場合は、自動スケーリングを有効にして新しいワーカーノードをインストールできます。
手順
自動スケーリングを有効にするには、次のコマンドを入力します。
$ oc -n <hosted_cluster_namespace> patch nodepool <hosted_cluster_name> --type=json -p '[{"op": "remove", "path": "/spec/replicas"},{"op":"add", "path": "/spec/autoScaling", "value": { "max": 5, "min": 2 }}]'
注記この例では、ノードの最小数は 2、最大数は 5 です。追加できるノードの最大数は、プラットフォームによって制限される場合があります。たとえば、エージェントプラットフォームを使用する場合、ノードの最大数は使用可能なエージェントの数によって制限されます。
新しいノードを必要とするワークロードを作成します。
次の例を使用して、ワークロード設定を含む YAML ファイルを作成します。
apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: reversewords name: reversewords namespace: default spec: replicas: 40 selector: matchLabels: app: reversewords strategy: {} template: metadata: creationTimestamp: null labels: app: reversewords spec: containers: - image: quay.io/mavazque/reversewords:latest name: reversewords resources: requests: memory: 2Gi status: {}
-
ファイルを
workload-config.yaml
として保存します。 以下のコマンドを入力して、YAML を適用します。
$ oc apply -f workload-config.yaml
次のコマンドを入力して、
admin-kubeconfig
シークレットを抽出します。$ oc extract -n <hosted_cluster_namespace> secret/<hosted_cluster_name>-admin-kubeconfig --to=./hostedcluster-secrets --confirm
出力例
hostedcluster-secrets/kubeconfig
次のコマンドを入力して、新しいノードが
Ready
ステータスであるかどうかを確認できます。$ oc --kubeconfig ./hostedcluster-secrets get nodes
ノードを削除するには、次のコマンドを入力してワークロードを削除します。
$ oc --kubeconfig ./hostedcluster-secrets -n <namespace> delete deployment <deployment_name>
数分間待ちます。その間に、容量の追加が必要にならないようにします。エージェントプラットフォームでは、エージェントは廃止され、再利用できます。次のコマンドを入力すると、ノードが削除されたことを確認できます。
$ oc --kubeconfig ./hostedcluster-secrets get nodes
IBM Z エージェントの場合、コンピュートノードがクラスターからデタッチされるのは、KVM エージェントを使用する IBM Z の場合だけです。z/VM および LPAR の場合は、コンピュートノードを手動で削除する必要があります。
エージェントは、KVM を使用する IBM Z でのみ再利用できます。z/VM および LPAR の場合は、エージェントを再作成して、それらをコンピュートノードとして使用してください。
5.4.2.3. ホストされたクラスターのノードの自動スケーリングを無効にする
ノードの自動スケーリングを無効にするには、次の手順を実行します。
手順
ホステッドクラスターのノードの自動スケーリングを無効にするには、次のコマンドを入力します。
$ oc -n <hosted_cluster_namespace> patch nodepool <hosted_cluster_name> --type=json -p '[\{"op":"remove", "path": "/spec/autoScaling"}, \{"op": "add", "path": "/spec/replicas", "value": <specify_value_to_scale_replicas>]'
このコマンドは、YAML ファイルから
"spec.autoScaling"
を削除し、"spec.replicas"
を追加し、"spec.replicas"
を指定の整数値に設定します。
関連情報
5.4.3. 非ベアメタルエージェントマシン上のホステッドクラスターでの Ingress の処理
すべての OpenShift Container Platform クラスターには、通常、外部 DNS レコードが関連付けられているデフォルトのアプリケーション Ingress コントローラーがあります。たとえば、ベースドメイン krnl.es
で example
という名前のホストされたクラスターを作成する場合は、ワイルドカードドメイン *.apps.example.krnl.es
がルーティング可能であると予想することができます。
手順
*.apps
ドメインのロードバランサーとワイルドカード DNS レコードを設定するには、ゲストクラスターで次のアクションを実行します。
MetalLB Operator の設定を含む YAML ファイルを作成して MetalLB をデプロイします。
apiVersion: v1 kind: Namespace metadata: name: metallb labels: openshift.io/cluster-monitoring: "true" annotations: workload.openshift.io/allowed: management --- apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: metallb-operator-operatorgroup namespace: metallb --- apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: metallb-operator namespace: metallb spec: channel: "stable" name: metallb-operator source: redhat-operators sourceNamespace: openshift-marketplace
-
ファイルを
metallb-operator-config.yaml
として保存します。 以下のコマンドを入力して設定を適用します。
$ oc apply -f metallb-operator-config.yaml
Operator の実行後、MetalLB インスタンスを作成します。
MetalLB インスタンスの設定を含む YAML ファイルを作成します。
apiVersion: metallb.io/v1beta1 kind: MetalLB metadata: name: metallb namespace: metallb
-
ファイルを
metallb-instance-config.yaml
として保存します。 次のコマンドを入力して、MetalLB インスタンスを作成します。
$ oc apply -f metallb-instance-config.yaml
単一の IP アドレスを含む
IPAddressPool
リソースを作成します。この IP アドレスは、クラスターノードが使用するネットワークと同じサブネット上にある必要があります。以下の例のような内容で、
ipaddresspool.yaml
などのファイルを作成します。apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb name: <ip_address_pool_name> 1 spec: addresses: - <ingress_ip>-<ingress_ip> 2 autoAssign: false
次のコマンドを入力して、IP アドレスプールの設定を適用します。
$ oc apply -f ipaddresspool.yaml
L2 アドバタイズメントを作成します。
以下の例のような内容で、
l2advertisement.yaml
などのファイルを作成します。apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: <l2_advertisement_name> 1 namespace: metallb spec: ipAddressPools: - <ip_address_pool_name> 2
次のコマンドを入力して設定を適用します。
$ oc apply -f l2advertisement.yaml
LoadBalancer
タイプのサービスを作成すると、MetalLB はサービスに外部 IP アドレスを追加します。metallb-loadbalancer-service.yaml
という名前の YAML ファイルを作成して、Ingress トラフィックを Ingress デプロイメントにルーティングする新しいロードバランサーサービスを設定します。kind: Service apiVersion: v1 metadata: annotations: metallb.universe.tf/address-pool: ingress-public-ip 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
-
metallb-loadbalancer-service.yaml
ファイルを保存します。 YAML 設定を適用するには、次のコマンドを入力します。
$ oc apply -f metallb-loadbalancer-service.yaml
次のコマンドを入力して、OpenShift Container Platform コンソールにアクセスします。
$ curl -kI https://console-openshift-console.apps.example.krnl.es
出力例
HTTP/1.1 200 OK
clusterversion
とclusteroperator
の値をチェックして、すべてが実行されていることを確認します。以下のコマンドを入力します。$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get clusterversion,co
出力例
NAME VERSION AVAILABLE PROGRESSING SINCE STATUS clusterversion.config.openshift.io/version 4.x.y True False 3m32s Cluster version is 4.x.y NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE clusteroperator.config.openshift.io/console 4.x.y True False False 3m50s clusteroperator.config.openshift.io/ingress 4.x.y True False False 53m
<4.x.y>
は、使用するサポート対象の OpenShift Container Platform バージョン (例:4.17.0-multi
) に置き換えます。
5.4.4. 非ベアメタルエージェントマシンでマシンのヘルスチェックを有効にする
ベアメタル上でマシンのヘルスチェックを有効にして、異常なマネージドクラスターノードを自動的に修復および置き換えることができます。マネージドクラスターにインストールする準備ができている追加のエージェントマシンが必要です。
マシンのヘルスチェックを有効にする前に、次の制限を考慮してください。
-
MachineHealthCheck
オブジェクトを変更することはできません。 -
マシンヘルスチェックでは、少なくとも 2 つのノードが 8 分以上
False
またはUnknown
ステータスのままである場合にのみ、ノードが置き換えられます。
マネージドクラスターノードのマシンヘルスチェックを有効にすると、ホストされたクラスターに MachineHealthCheck
オブジェクトが作成されます。
手順
ホストされたクラスターでマシンのヘルスチェックを有効にするには、NodePool
リソースを変更します。以下の手順を実行します。
NodePool
リソースのspec.nodeDrainTimeout
値が0s
より大きいことを確認します。<hosted_cluster_namespace>
をホストされたクラスター namespace の名前に置き換え、<nodepool_name>
をノードプール名に置き換えます。以下のコマンドを実行します。$ oc get nodepool -n <hosted_cluster_namespace> <nodepool_name> -o yaml | grep nodeDrainTimeout
出力例
nodeDrainTimeout: 30s
spec.nodeDrainTimeout
値が0s
より大きくない場合は、次のコマンドを実行して値を変更します。$ oc patch nodepool -n <hosted_cluster_namespace> <nodepool_name> -p '{"spec":{"nodeDrainTimeout": "30m"}}' --type=merge
NodePool
リソースでspec.management.autoRepair
フィールドをtrue
に設定して、マシンのヘルスチェックを有効にします。以下のコマンドを実行します。$ oc patch nodepool -n <hosted_cluster_namespace> <nodepool_name> -p '{"spec": {"management": {"autoRepair":true}}}' --type=merge
次のコマンドを実行して、
NodePool
リソースがautoRepair: true
値で更新されていることを確認します。$ oc get nodepool -n <hosted_cluster_namespace> <nodepool_name> -o yaml | grep autoRepair
5.4.5. 非ベアメタルエージェントマシンでマシンヘルスチェックを無効にする
マネージドクラスターノードのマシンのヘルスチェックを無効にするには、NodePool
リソースを変更します。
手順
NodePool
リソースでspec.management.autoRepair
フィールドをfalse
に設定して、マシンのヘルスチェックを無効にします。以下のコマンドを実行します。$ oc patch nodepool -n <hosted_cluster_namespace> <nodepool_name> -p '{"spec": {"management": {"autoRepair":false}}}' --type=merge
次のコマンドを実行して、
NodePool
リソースがautoRepair: false
値で更新されていることを確認します。$ oc get nodepool -n <hosted_cluster_namespace> <nodepool_name> -o yaml | grep autoRepair
関連情報