1.7. 托管 control plane(技术预览)
使用 multicluster engine operator 集群管理,您可以使用两个不同的 control plane 配置部署 OpenShift Container Platform 集群:独立或托管的 control plane。独立配置使用专用虚拟机或物理机器来托管 OpenShift Container Platform control plane。使用 OpenShift Container Platform 托管 control plane,您可以在托管集群中创建 pod 作为 control plane,而无需为每个 control plane 专用物理机器。
为 OpenShift Container Platform 托管 control plane 作为 Amazon Web Services (AWS)和裸机上的技术预览功能提供。您可以在 OpenShift Container Platform 版本 4.10.7 及更高版本中托管 control plane。
注: 在托管 control plane 的同一平台上运行 hub 集群和 worker。
control plane 作为单一命名空间中包含的 pod 运行,并与托管的 control plane 集群关联。当 OpenShift Container Platform 创建这种类型的托管集群时,它会创建一个独立于 control plane 的 worker 节点。
托管 control plane 集群有几个优点:
- 通过删除对专用 control plane 节点的需求来降低成本
- 引入 control plane 和工作负载的隔离,改进了隔离并减少可能需要更改的配置错误
- 通过删除 control plane 节点 bootstrap 的要求来减少集群创建时间
- 支持 turn-key 部署或完全自定义的 OpenShift Container Platform 置备
有关托管 control plane 的更多信息,请继续阅读以下主题:
1.7.1. 在 AWS 上配置托管集群(技术预览)
要配置托管的 control plane,您需要托管集群和一个托管的集群。通过使用 hypershift-addon
受管集群附加组件在现有受管集群上部署 HyperShift operator,您可以将该集群启用为托管集群,并开始创建托管集群。
multicluster engine operator 2.2 仅支持默认的 local-cluster
和 hub 集群作为托管集群。
托管 control plane 是一个技术预览功能,因此相关组件默认是禁用的。
您可以通过将现有集群配置为充当托管集群来部署托管 control plane。托管集群是托管 control plane 的 Red Hat OpenShift Container Platform 集群。Red Hat Advanced Cluster Management 2.7 可以使用 hub 集群(也称为 local-cluster
)作为托管集群。请参阅以下主题以了解如何将 local-cluster
配置为托管集群。
最佳实践: 确保在托管 control plane 的同一平台上运行 hub 集群和 worker。
1.7.1.1. 先决条件
您必须具有以下先决条件才能配置托管集群:
- Kubernetes operator 2.2 及更新版本的多集群引擎安装在 OpenShift Container Platform 集群中。安装 Red Hat Advanced Cluster Management 时会自动安装 multicluster engine operator。在没有 Red Hat Advanced Cluster Management 作为来自 OpenShift Container Platform OperatorHub 的 Operator 的情况下,也可以安装 multicluster engine operator。
multicluster engine operator 必须至少有一个受管 OpenShift Container Platform 集群。
local-cluster
在多集群引擎 operator 2.2 及更新的版本中自动导入。有关local-cluster
的更多信息,请参阅高级配置。您可以运行以下命令来检查 hub 集群的状态:oc get managedclusters local-cluster
- 托管集群至少有 3 个 worker 节点来运行 HyperShift Operator。
- AWS 命令行界面。
1.7.1.2. 创建 Amazon Web Services S3 存储桶和 S3 OIDC secret
如果您计划在 AWS 上创建和管理托管集群,请完成以下步骤:
创建一个 S3 存储桶,其具有集群托管 OIDC 发现文档的公共访问权限。
要在 us-east-1 区域中创建存储桶,请输入以下代码:
BUCKET_NAME=<your_bucket_name> aws s3api create-bucket --bucket $BUCKET_NAME aws s3api delete-public-access-block --bucket $BUCKET_NAME echo '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::${BUCKET_NAME}/*" } ] }' | envsubst > policy.json aws s3api put-bucket-policy --bucket $BUCKET_NAME --policy file://policy.json
要在 us-east-1 区域以外的区域中创建存储桶,请输入以下代码:
BUCKET_NAME=your-bucket-name REGION=us-east-2 aws s3api create-bucket --bucket $BUCKET_NAME \ --create-bucket-configuration LocationConstraint=$REGION \ --region $REGION aws s3api delete-public-access-block --bucket $BUCKET_NAME echo '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::${BUCKET_NAME}/*" } ] }' | envsubst > policy.json aws s3api put-bucket-policy --bucket $BUCKET_NAME --policy file://policy.json
-
为 HyperShift Operator 创建名为
hypershift-operator-oidc-provider-s3-credentials
的 OIDC S3 secret。 -
将 secret 保存到
local-cluster
命名空间中。 请参阅下表来验证 secret 是否包含以下字段:
字段名称 描述 bucket
包含对 HyperShift 集群托管 OIDC 发现文档的公共访问权限的 S3 存储桶。
credentials
对包含可以访问存储桶的
default
配置集凭证的文件的引用。默认情况下,HyperShift 仅使用default
配置集来运行bucket
。region
指定 S3 存储桶的区域。
以下示例显示了 AWS secret 模板示例:
oc create secret generic hypershift-operator-oidc-provider-s3-credentials --from-file=credentials=$HOME/.aws/credentials --from-literal=bucket=<s3-bucket-for-hypershift> --from-literal=region=<region> -n local-cluster
注:不会自动启用 secret 的恢复备份。运行以下命令添加启用
hypershift-operator-oidc-provider-s3-credentials
secret 的标签,以便为灾难恢复进行备份:oc label secret hypershift-operator-oidc-provider-s3-credentials -n local-cluster cluster.open-cluster-management.io/backup=true
1.7.1.3. 创建可路由的公共区
要访问客户机集群中的应用程序,必须路由公共区。如果 public 区域存在,请跳过这一步。否则,公共区将影响现有功能。
运行以下命令为集群 DNS 记录创建一个公共区:
BASE_DOMAIN=www.example.com aws route53 create-hosted-zone --name $BASE_DOMAIN --caller-reference $(whoami)-$(date --rfc-3339=date)
1.7.1.4. 启用外部 DNS
如果您计划使用服务级别 DNS (外部 DNS)置备托管的 control plane 集群,请完成以下步骤:
-
为 HyperShift Operator 创建一个 AWS 凭证 secret,并在
local-cluster
命名空间中将其命名为hypershift-operator-external-dns-credentials
。 请参阅下表来验证 secret 是否包含所需字段:
字段名称 描述 可选或必需的 provider
管理服务级别 DNS 区的 DNS 提供程序。
必需
domain-filter
服务级别域。
必需
credentials
支持所有外部 DNS 类型的凭据文件。
使用 AWS 密钥时的可选
aws-access-key-id
凭证访问密钥 id。
使用 AWS DNS 服务时的可选
aws-secret-access-key
凭证访问密钥 secret。
使用 AWS DNS 服务时的可选
如需更多信息,请参阅 HyperShift 文档中的 外部 DNS。以下示例显示了
hypershift-operator-external-dns-credentials
secret 模板示例:oc create secret generic hypershift-operator-external-dns-credentials --from-literal=provider=aws --from-literal=domain-filter=service.my.domain.com --from-file=credentials=<credentials-file> -n local-cluster
注:不会自动启用 secret 的恢复备份。运行以下命令添加启用
hypershift-operator-external-dns-credentials
secret 的标签,以便备份灾难恢复:oc label secret hypershift-operator-external-dns-credentials -n local-cluster cluster.open-cluster-management.io/backup=""
1.7.1.5. 启用 AWS PrivateLink
如果您计划使用 PrivateLink 在 AWS 平台上置备托管的 control plane 集群,请完成以下步骤:
-
为 HyperShift Operator 创建一个 AWS 凭证 secret,并将其命名为
hypershift-operator-private-link-credentials
。secret 必须驻留在受管集群命名空间中,该命名空间用作托管集群。如果使用local-cluster
,请在local-cluster
命名空间中创建 secret。 请参阅下表确认 secret 包含必填字段:
字段名称
描述
可选或必需的
region
用于私有链接的区域
必填
aws-access-key-id
凭证访问密钥 id。
必填
aws-secret-access-key
凭证访问密钥 secret。
必填
如需更多信息,请参阅 HyperShift 文档中的 部署 AWS 私有集群。以下示例显示了
hypershift-operator-private-link-credentials
secret 模板示例:oc create secret generic hypershift-operator-private-link-credentials --from-literal=aws-access-key-id=<aws-access-key-id> --from-literal=aws-secret-access-key=<aws-secret-access-key> --from-literal=region=<region> -n local-cluster
注:不会自动启用 secret 的恢复备份。运行以下命令添加启用
hypershift-operator-private-link-credentials
secret 的标签,以便备份灾难恢复:oc label secret hypershift-operator-private-link-credentials -n local-cluster cluster.open-cluster-management.io/backup=""
1.7.1.6. 启用托管的 control plane 功能
托管的 control plane 功能默认禁用。启用该功能还会自动启用 hypershift-addon
受管集群附加组件。您可以运行以下命令来启用该功能:
oc patch mce multiclusterengine --type=merge -p '{"spec":{"overrides":{"components":[{"name":"hypershift-preview","enabled": true}]}}}'
运行以下命令,以验证 MultiClusterEngine
自定义资源中是否启用了 hypershift-preview
和 hypershift-local-hosting
功能。
oc get mce multiclusterengine -o yaml
apiVersion: multicluster.openshift.io/v1 kind: MultiClusterEngine metadata: name: multiclusterengine spec: overrides: components: - name: hypershift-preview enabled: true - name: hypershift-local-hosting enabled: true
1.7.1.6.1. 为 local-cluster 手动启用 hypershift-addon 受管集群附加组件
启用托管的 control plane 功能会自动启用 hypershift-addon
受管集群附加组件。如果您需要手动启用 hypershift-addon
受管集群附加组件,请完成以下步骤,使用 hypershift-addon
在 local-cluster
上安装 HyperShift Operator:
通过创建一个类似以下示例的文件来创建
ManagedClusterAddon
HyperShift 附加组件:apiVersion: addon.open-cluster-management.io/v1alpha1 kind: ManagedClusterAddOn metadata: name: hypershift-addon namespace: local-cluster spec: installNamespace: open-cluster-management-agent-addon
运行以下命令来应用该文件:
oc apply -f <filename>
使用您创建的文件的名称替换
filename
。运行以下命令确认已安装
hypershift-addon
:oc get managedclusteraddons -n local-cluster hypershift-addon
如果安装了附加组件,输出类似以下示例:
NAME AVAILABLE DEGRADED PROGRESSING hypershift-addon True
您的 HyperShift 附加组件已安装,托管集群可用于创建和管理 HyperShift 集群。
1.7.1.7. 安装托管的 control plane CLI
托管的 control plane (HyperShift) CLI 用于创建和管理 OpenShift Container Platform 托管 control plane 集群。启用托管的 control plane 功能后,您可以通过完成以下步骤来安装托管的 control plane CLI:
- 在 OpenShift Container Platform 控制台中点 Help 图标 > Command Line Tools。
为您的平台点 Download hypershift CLI。
注: 下载只有在启用了
hypershift-preview
功能时才可见。运行以下命令来解包下载的归档:
tar xvzf hypershift.tar.gz
运行以下命令使二进制文件可执行:
chmod +x hypershift
运行以下命令,将二进制文件移到路径的目录中:
sudo mv hypershift /usr/local/bin/.
现在,您可以使用 hypershift create cluster
命令来创建和管理托管集群。使用以下命令列出可用的参数:
hypershift create cluster aws --help
1.7.1.8. 其他资源
- 如需有关 AWS 凭证 secret 的更多信息,请参阅 HyperShift 文档中的 部署 AWS 私有集群。
- 有关外部 DNS 的更多信息,请参阅 HyperShift 文档中的 外部 DNS。
- 现在,您可以部署 SR-IOV Operator。请参阅为托管 control plane 部署 SR-IOV Operator,以了解更多有关部署 SR-IOV Operator 的信息。
1.7.2. 在 AWS 上管理托管的 control plane 集群(技术预览)
您可以使用 multicluster engine for Kubernetes operator 控制台创建 Red Hat OpenShift Container Platform 托管的集群。托管 control plane 在 Amazon Web Services (AWS)上作为技术预览提供。如果在 AWS 上使用托管的 control plane,您可以使用控制台创建托管集群,也可以使用控制台或 CLI 导入托管集群。
1.7.2.1. 先决条件
您必须先配置托管的 control plane,然后才能创建托管的 control plane 集群。如需更多信息,请参阅配置托管的 control plane (技术预览)。
1.7.2.2. 使用控制台在 AWS 上创建托管的 control plane 集群
要从多集群引擎 operator 控制台创建托管的 control plane 集群,请进入到 Infrastructure > Clusters。在 Clusters 页面中,点 Create cluster > Amazon Web Services > Hosted 并完成控制台中的步骤。
注: 在到达控制台后,使用提供的基本信息来在命令行中创建集群。
1.7.2.3. 使用命令行在 AWS 上部署托管集群
设置 HyperShift 命令行界面并将 local-cluster
启用为托管集群后,您可以通过完成以下步骤在 AWS 上部署托管集群:
按如下方式设置环境变量,根据需要将变量替换为您的凭证:
export REGION=us-east-1 export CLUSTER_NAME=clc-name-hs1 export INFRA_ID=clc-name-hs1 export BASE_DOMAIN=dev09.red-chesterfield.com export AWS_CREDS=$HOME/name-aws export PULL_SECRET=/Users/username/pull-secret.txt export BUCKET_NAME=acmqe-hypershift export BUCKET_REGION=us-east-1
验证
CLUSTER_NAME
和INFRA_ID
是否有相同的值,否则集群可能无法在 Kubernetes operator 控制台的多集群引擎中显示。要查看每个变量的描述,请运行以下命令hypershift create cluster aws --help
- 验证您是否已登录到 hub 集群。
运行以下命令来创建托管集群:
hypershift create cluster aws \ --name $CLUSTER_NAME \ --infra-id $INFRA_ID \ --aws-creds $AWS_CREDS \ --pull-secret $PULL_SECRET \ --region $REGION \ --generate-ssh \ --node-pool-replicas 3 \ --namespace <hypershift-hosting-service-cluster>
注: 默认情况下,所有
HostedCluster
和NodePool
自定义资源都是在集群
命名空间中创建的。如果指定了--namespace <namespace&
gt; 参数,则会在您选择的命名空间中创建HostedCluster
和NodePool
自定义资源。您可以运行以下命令来检查托管集群的状态:
oc get hostedclusters -n <hypershift-hosting-service-cluster>
1.7.2.4. 在 AWS 上导入托管的 control plane 集群
您可以使用控制台导入托管的 control plane 集群。
- 进入 Infrastructure > Clusters 并选择您要导入的托管集群。
点 Import hosted cluster。
注: 对于 发现的 托管集群,您还可以从控制台导入,但集群必须处于可升级状态。如果托管集群没有处于可升级状态,则在集群中导入会被禁用,因为托管的 control plane 不可用。点 Import 开始进程。当集群接收更新时,状态为
Importing
,然后变为Ready
。
您还可以通过完成以下步骤,使用 CLI 在 AWS 上导入托管的 control plane 集群:
运行以下命令,在
HostedCluster
自定义资源中添加注解:oc edit hostedcluster <cluster_name> -n clusters
将
<cluster_name
> 替换为托管集群的名称。运行以下命令,将注解添加到
HostedCluster
自定义资源中:cluster.open-cluster-management.io/hypershiftdeployment: local-cluster/<cluster_name> cluster.open-cluster-management.io/managedcluster-name: <cluster_name>
将
<cluster_name
> 替换为托管集群的名称。使用以下示例 YAML 文件创建
ManagedCluster
资源:apiVersion: cluster.open-cluster-management.io/v1 kind: ManagedCluster metadata: annotations: import.open-cluster-management.io/hosting-cluster-name: local-cluster import.open-cluster-management.io/klusterlet-deploy-mode: Hosted open-cluster-management/created-via: other labels: cloud: auto-detect cluster.open-cluster-management.io/clusterset: default name: <cluster_name> vendor: OpenShift name: <cluster_name> spec: hubAcceptsClient: true leaseDurationSeconds: 60
将
<cluster_name
> 替换为托管集群的名称。运行以下命令以应用资源:
oc apply -f <file_name>
将 <file_name> 替换为您在上一步中创建的 YAML 文件名。
使用以下示例 YAML 文件创建
KlusterletAddonConfig
资源。这只适用于 Red Hat Advanced Cluster Management。如果您只安装了 multicluster engine operator,请跳过这一步:apiVersion: agent.open-cluster-management.io/v1 kind: KlusterletAddonConfig metadata: name: <cluster_name> namespace: <cluster_name> spec: clusterName: <cluster_name> clusterNamespace: <cluster_name> clusterLabels: cloud: auto-detect vendor: auto-detect applicationManager: enabled: true certPolicyController: enabled: true iamPolicyController: enabled: true policyController: enabled: true searchCollector: enabled: false
将
<cluster_name
> 替换为托管集群的名称。运行以下命令以应用资源:
oc apply -f <file_name>
将 <file_name> 替换为您在上一步中创建的 YAML 文件名。
导入过程完成后,您的托管集群会在控制台中可见。您还可以运行以下命令来检查托管集群的状态:
oc get managedcluster <cluster_name>
1.7.2.5. 访问 AWS 上的托管集群
托管 control plane 集群的访问 secret 存储在 hypershift-management-cluster
命名空间中。了解以下 secret 名称格式:
-
kubeconfig
secret: <hostingNamespace>-<name>-admin-kubeconfig
(clusters-hypershift-demo-admin-kubeconfig) -
kubeadmin
password secret: <hostingNamespace>-<name>-kubeadmin-password
(clusters-hypershift-demo-kubeadmin-password)
1.7.2.6. 销毁 AWS 上的托管集群
要销毁托管的集群及其受管集群资源,请完成以下步骤:
运行以下命令来删除托管集群及其后端资源:
hypershift destroy cluster aws --name <cluster_name> --infra-id <infra_id> --aws-creds <aws-credentials> --base-domain <base_domain> --destroy-cloud-resources
根据需要替换名称。
运行以下命令,删除 multicluster engine operator 上的受管集群资源:
oc delete managedcluster <cluster_name>
将
cluster_name
替换为集群的名称。
1.7.3. 在裸机上配置托管集群(技术预览)
要配置托管的 control plane,您需要一个 hosting(进行托管)的集群和一个 hosted(被托管)的集群。您可以使用 hypershift
附加组件将受管集群启用为托管集群,以将 HyperShift Operator 部署到该集群中。然后,您可以开始创建托管集群。
multicluster engine operator 2.2 仅支持默认的 local-cluster
和 hub 集群作为托管集群。
托管 control plane 是一个技术预览功能,因此相关组件默认是禁用的。
您可以通过将集群配置为充当托管集群来部署托管 control plane。托管的集群是托管 control plane 的 OpenShift Container Platform 集群。
在 Red Hat Advanced Cluster Management 2.7 中,您可以使用受管 hub 集群(也称为 local-cluster
),作为托管集群。
重要:
- 在托管 control plane 的同一平台上运行 hub 集群和 worker。
- 要在裸机上置备托管的 control plane,您可以使用 Agent 平台。Agent 平台使用中央基础架构管理服务将 worker 节点添加到托管集群。
-
每个裸机主机都必须使用中央基础架构管理提供的发现镜像启动。您可以使用
Cluster-Baremetal-Operator
手动启动主机或通过自动化启动主机。每个主机启动后,它运行一个 Agent 进程来发现主机详情并完成安装。Agent
自定义资源代表每个主机。 - 当使用 Agent 平台创建托管集群时,HyperShift 在托管的 control plane 命名空间中安装 Agent Cluster API 供应商。
- 当您扩展节点池时,会创建一个机器。Cluster API 供应商找到一个经过批准的代理,正在传递验证,当前没有被使用,并满足节点池规格中指定的要求。您可以通过检查其状态和条件来监控代理的安装。
当您缩减节点池时,代理会从对应的集群中绑定。在重复使用集群前,您必须使用 Discovery 镜像更新节点数量来重启它们。
1.7.3.1. 先决条件
您必须具有以下先决条件才能配置托管集群:
- 您需要 multicluster engine for Kubernetes operator 2.2 及之后的版本安装在 OpenShift Container Platform 集群中。安装 Red Hat Advanced Cluster Management 时会自动安装 multicluster engine operator。您还可以在没有 Red Hat Advanced Cluster Management 作为 OpenShift Container Platform OperatorHub 的 Operator 的情况下安装 multicluster engine operator。
您需要 multicluster engine operator,必须至少有一个受管 OpenShift Container Platform 集群。
local-cluster
在多集群引擎 operator 2.2 及更新的版本中自动导入。有关local-cluster
的更多信息,请参阅高级配置。您可以运行以下命令来检查 hub 集群的状态:oc get managedclusters local-cluster
- 您需要至少 3 个 worker 节点的托管集群来运行 HyperShift Operator。
- 您必须启用托管的 control plane 功能。如需更多信息,请参阅启用托管的 control plane 功能。
1.7.3.2. 配置 DNS
托管集群的 API 服务器作为 NodePort
服务公开。必须存在 api.${HOSTED_CLUSTER_NAME}.${BASEDOMAIN}
的 DNS 条目,指向可访问 API 服务器的目的地。
DNS 条目可以像一个记录一样简单,指向运行托管 control plane 的受管集群中的一个节点。该条目也可以指向部署的负载均衡器,以将传入的流量重定向到 Ingress pod。
请参见以下 DNS 配置示例:
api.example.krnl.es. IN A 192.168.122.20 api.example.krnl.es. IN A 192.168.122.21 api.example.krnl.es. IN A 192.168.122.22 api-int.example.krnl.es. IN A 192.168.122.20 api-int.example.krnl.es. IN A 192.168.122.21 api-int.example.krnl.es. IN A 192.168.122.22 `*`.apps.example.krnl.es. IN A 192.168.122.23
1.7.3.3. 其他资源
- 有关中央基础架构管理服务简介,请参阅 Kube API - 入门指南。
- 有关负载均衡器的更多信息,请参阅 用户置备的基础架构的负载平衡要求。
- 现在,您可以部署 SR-IOV Operator。请参阅为托管 control plane 部署 SR-IOV Operator,以了解更多有关部署 SR-IOV Operator 的信息。
1.7.4. 在裸机上管理托管的 control plane 集群(技术预览)
您可以使用 Kubernetes operator 的多集群引擎来创建和管理 Red Hat OpenShift Container Platform 托管的集群。托管 control plane 在 Amazon Web Services (AWS)和裸机上作为技术预览提供。
1.7.4.1. 先决条件
您必须先为裸机配置托管的 control plane,然后才能创建托管的 control plane 集群。如需更多信息 ,请参阅在裸机上配置托管集群(技术预览)。
1.7.4.2. 使用控制台在裸机代理上创建托管的 control plane 集群
要从多集群引擎 operator 控制台创建托管的 control plane 集群,请进入到 Infrastructure > Clusters。在 Clusters 页面中,点 Create cluster > Host Inventory > Hosted control plane,并完成控制台中的步骤。
重要: 当您创建集群时,多集群引擎 operator 控制器为集群及其资源创建一个命名空间。确保只在该命名空间中包含该集群实例的资源。销毁集群会删除命名空间和所有资源。
如果要将集群添加到现有的集群集中,则需要在集群设置上具有正确的权限来添加它。如果在创建集群时没有 cluster-admin
权限,则必须选择一个具有 clusterset-admin
权限的集群集。如果您在指定的集群集中没有正确的权限,集群创建会失败。如果您没有任何集群设置选项,请联络您的集群管理员,为您提供 clusterset-admin
权限。
每个受管集群都必须与受管集群集关联。如果您没有将受管集群分配给 ManagedClusterSet
,则会自动添加到 default
受管集群集中。
发行镜像标识用于创建集群的 OpenShift Container Platform 镜像的版本。托管的 control plane 集群必须使用其中一个提供的发行镜像。
基础架构环境中提供的代理信息会自动添加到代理字段中。您可以使用现有信息,覆盖它,或者添加信息(如果要启用代理)。以下列表包含创建代理所需的信息:
-
HTTP 代理 URL:用作
HTTP
流量的代理的 URL。 -
HTTPS 代理 URL:用于
HTTPS
流量的安全代理 URL。如果没有提供值,则使用相同的值HTTP Proxy URL
,用于HTTP
和HTTPS
。 -
无代理域:应当绕过代理的以逗号分隔的域列表。使用一个句点 (
.
) 开始的域名,包含该域中的所有子域。添加一个星号*
以绕过所有目的地的代理。 - Additional trust bundle:访问镜像 registry 所需的证书文件内容。
注: 您必须运行随集群提供的集群详情的 oc
命令,以导入集群。创建集群时,它不会使用 Red Hat Advanced Cluster Management 管理自动配置。
1.7.4.3. 使用命令行在裸机上创建托管集群
验证您是否为集群配置了默认存储类。否则,可能会以待处理的 PVC 结束。
输入以下命令:
export CLUSTERS_NAMESPACE="clusters" export HOSTED_CLUSTER_NAME="example" export HOSTED_CONTROL_PLANE_NAMESPACE="${CLUSTERS_NAMESPACE}-${HOSTED_CLUSTER_NAME}" export BASEDOMAIN="krnl.es" export PULL_SECRET_FILE=$PWD/pull-secret export MACHINE_CIDR=192.168.122.0/24 # Typically the namespace is created by the hypershift-operator # but agent cluster creation generates a capi-provider role that # needs the namespace to already exist oc create ns ${HOSTED_CONTROL_PLANE_NAMESPACE} hypershift create cluster agent \ --name=${HOSTED_CLUSTER_NAME} \ --pull-secret=${PULL_SECRET_FILE} \ --agent-namespace=${HOSTED_CONTROL_PLANE_NAMESPACE} \ --base-domain=${BASEDOMAIN} \ --api-server-address=api.${HOSTED_CLUSTER_NAME}.${BASEDOMAIN} \
片刻后,输入以下命令验证托管的 control plane pod 是否正在运行:
oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get pods
输出示例
NAME READY STATUS RESTARTS AGE capi-provider-7dcf5fc4c4-nr9sq 1/1 Running 0 4m32s catalog-operator-6cd867cc7-phb2q 2/2 Running 0 2m50s certified-operators-catalog-884c756c4-zdt64 1/1 Running 0 2m51s cluster-api-f75d86f8c-56wfz 1/1 Running 0 4m32s cluster-autoscaler-7977864686-2rz4c 1/1 Running 0 4m13s cluster-network-operator-754cf4ffd6-lwfm2 1/1 Running 0 2m51s cluster-policy-controller-784f995d5-7cbrz 1/1 Running 0 2m51s cluster-version-operator-5c68f7f4f8-lqzcm 1/1 Running 0 2m51s community-operators-catalog-58599d96cd-vpj2v 1/1 Running 0 2m51s control-plane-operator-f6b4c8465-4k5dh 1/1 Running 0 4m32s etcd-0 1/1 Running 0 4m13s hosted-cluster-config-operator-c4776f89f-dt46j 1/1 Running 0 2m51s ignition-server-7cd8676fc5-hjx29 1/1 Running 0 4m22s ingress-operator-75484cdc8c-zhdz5 1/2 Running 0 2m51s konnectivity-agent-c5485c9df-jsm9s 1/1 Running 0 4m13s konnectivity-server-85dc754888-7z8vm 1/1 Running 0 4m13s kube-apiserver-db5fb5549-zlvpq 3/3 Running 0 4m13s kube-controller-manager-5fbf7b7b7b-mrtjj 1/1 Running 0 90s kube-scheduler-776c59d757-kfhv6 1/1 Running 0 3m12s machine-approver-c6b947895-lkdbk 1/1 Running 0 4m13s oauth-openshift-787b87cff6-trvd6 2/2 Running 0 87s olm-operator-69c4657864-hxwzk 2/2 Running 0 2m50s openshift-apiserver-67f9d9c5c7-c9bmv 2/2 Running 0 89s openshift-controller-manager-5899fc8778-q89xh 1/1 Running 0 2m51s openshift-oauth-apiserver-569c78c4d-568v8 1/1 Running 0 2m52s packageserver-ddfffb8d7-wlz6l 2/2 Running 0 2m50s redhat-marketplace-catalog-7dd77d896-jtxkd 1/1 Running 0 2m51s redhat-operators-catalog-d66b5c965-qwhn7 1/1 Running 0 2m51s
1.7.4.4. 创建 InfraEnv
InfraEnv
是启动实时 ISO 的主机可以加入为代理的环境。在这种情况下,代理会在与您托管的 control plane 相同的命名空间中创建。
要创建
InfraEnv
,请输入以下命令:export SSH_PUB_KEY=$(cat $HOME/.ssh/id_rsa.pub) envsubst <<"EOF" | oc apply -f - apiVersion: agent-install.openshift.io/v1beta1 kind: InfraEnv metadata: name: ${HOSTED_CLUSTER_NAME} namespace: ${HOSTED_CONTROL_PLANE_NAMESPACE} spec: pullSecretRef: name: pull-secret sshAuthorizedKey: ${SSH_PUB_KEY} EOF
要生成允许虚拟机或裸机作为代理加入的 live ISO,请输入以下命令:
oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get InfraEnv ${HOSTED_CLUSTER_NAME} -ojsonpath="{.status.isoDownloadURL}"
1.7.4.5. 添加代理
您可以通过手动将机器配置为使用 live ISO 或使用 Metal3 来添加代理。
要手动添加代理,请按照以下步骤执行:
-
下载 live ISO,并使用它来启动节点(裸机或虚拟机)。在启动时,节点与 Assisted Service 通信,并注册为与
InfraEnv
相同的命名空间中的代理。 创建每个代理后,您可以选择在 spec 中设置
install_disk_id
和hostname
。然后,批准它以指示代理可供使用。oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agents
输出示例
NAME CLUSTER APPROVED ROLE STAGE 86f7ac75-4fc4-4b36-8130-40fa12602218 auto-assign e57a637f-745b-496e-971d-1abbf03341ba auto-assign
oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} patch agent 86f7ac75-4fc4-4b36-8130-40fa12602218 -p '{"spec":{"installation_disk_id":"/dev/sda","approved":true,"hostname":"worker-0.example.krnl.es"}}' --type merge oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} patch agent 23d0c614-2caa-43f5-b7d3-0b3564688baa -p '{"spec":{"installation_disk_id":"/dev/sda","approved":true,"hostname":"worker-1.example.krnl.es"}}' --type merge
oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agents
输出示例
NAME CLUSTER APPROVED ROLE STAGE 86f7ac75-4fc4-4b36-8130-40fa12602218 true auto-assign e57a637f-745b-496e-971d-1abbf03341ba true auto-assign
-
下载 live ISO,并使用它来启动节点(裸机或虚拟机)。在启动时,节点与 Assisted Service 通信,并注册为与
要使用 Metal3 添加代理,请按照以下步骤操作:
使用 Assisted Service 创建自定义 ISO 和 Baremetal Operator 来执行安装。
重要: 因为
BareMetalHost
对象是在裸机 Operator 命名空间外创建的,所以您必须将 Operator 配置为监视所有命名空间。oc patch provisioning provisioning-configuration --type merge -p '{"spec":{"watchAllNamespaces": true }}'
metal3
pod 在openshift-machine-api
命名空间中重启。等待
metal3
pod 再次就绪:until oc wait -n openshift-machine-api $(oc get pods -n openshift-machine-api -l baremetal.openshift.io/cluster-baremetal-operator=metal3-state -o name) --for condition=containersready --timeout 10s >/dev/null 2>&1 ; do sleep 1 ; done
创建
BareMetalHost
对象。您需要配置几个启动裸机节点所需的变量。-
BMC_USERNAME
:连接到 BMC 的用户名。 -
BMC_PASSWORD
:连接到 BMC 的密码。 -
BMC_IP
: Metal3 用来连接到 BMC 的 IP。 -
WORKER_NAME
: BaremetalHost 对象的名称(该值也用作主机名) -
BOOT_MAC_ADDRESS
:连接到 MachineNetwork 的 NIC 的 MAC 地址。 -
UUID
:Redfish UUID,通常为1
。如果您使用 sushy-tools,这个值是一个较长的 UUID。如果您使用 iDrac,则该值为System.Embedded.1
。您可能需要与供应商进行检查。 -
Red HatFISH_SCHEME
: 要使用的 Redfish 供应商。如果您使用使用标准 Redfish 实现的硬件,您可以将此值设置为redfish-virtualmedia
. iDRAC 使用idrac-virtualmedia
。iLO5 使用ilo5-virtualmedia
。您可能需要与供应商进行检查。 Red HatFISH
: Redfish 连接端点。export BMC_USERNAME=$(echo -n "root" | base64 -w0) export BMC_PASSWORD=$(echo -n "calvin" | base64 -w0) export BMC_IP="192.168.124.228" export WORKER_NAME="ocp-worker-0" export BOOT_MAC_ADDRESS="aa:bb:cc:dd:ee:ff" export UUID="1" export REDFISH_SCHEME="redfish-virtualmedia" export REDFISH="${REDFISH_SCHEME}://${BMC_IP}/redfish/v1/Systems/${UUID}"
-
按照以下步骤创建
BareMetalHost
:创建 BMC Secret:
oc apply -f - apiVersion: v1 data: password: ${BMC_PASSWORD} username: ${BMC_USERNAME} kind: Secret metadata: name: ${WORKER_NAME}-bmc-secret namespace: ${HOSTED_CONTROL_PLANE_NAMESPACE} type: Opaque
创建 BMH:
注:
infraenvs.agent-install.openshift.io
标签用于指定用于启动 BMH 的InfraEnv
。bmac.agent-install.openshift.io/hostname
标签用于手动设置主机名。如果要手动指定安装磁盘,您可以使用 BMH 规格中的
rootDeviceHints
。如果没有提供rootDeviceHints
,代理会选择最适合安装要求的安装磁盘。有关rootDeviceHints
的更多信息,请参阅BareMetalHost
文档中的 rootDeviceHints 部分。oc apply -f - apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: name: ${WORKER_NAME} namespace: ${HOSTED_CONTROL_PLANE_NAMESPACE} labels: infraenvs.agent-install.openshift.io: ${HOSTED_CLUSTER_NAME} annotations: inspect.metal3.io: disabled bmac.agent-install.openshift.io/hostname: ${WORKER_NAME} spec: automatedCleaningMode: disabled bmc: disableCertificateVerification: True address: ${REDFISH} credentialsName: ${WORKER_NAME}-bmc-secret bootMACAddress: ${BOOT_MAC_ADDRESS} online: true
代理被自动批准。如果没有批准,请确认
bootMACAddress
正确。置备 BMH:
oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get bmh
输出示例
NAME STATE CONSUMER ONLINE ERROR AGE ocp-worker-0 provisioning true 2m50s
BMH 最终达到
置备状态
:oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get bmh
输出示例
NAME STATE CONSUMER ONLINE ERROR AGE ocp-worker-0 provisioned true 72s
provisioned 意味着节点被配置为从 virtualCD 正确启动。显示代理需要一些时间:
oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agent
输出示例
NAME CLUSTER APPROVED ROLE STAGE 4dac1ab2-7dd5-4894-a220-6a3473b67ee6 true auto-assign
代理被自动批准。
对其他两个节点重复此过程:
oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agent
输出示例
NAME CLUSTER APPROVED ROLE STAGE 4dac1ab2-7dd5-4894-a220-6a3473b67ee6 true auto-assign d9198891-39f4-4930-a679-65fb142b108b true auto-assign da503cf1-a347-44f2-875c-4960ddb04091 true auto-assign
1.7.4.6. 访问托管集群
托管 control plane 正在运行,代理已准备好加入托管集群。在代理加入托管集群前,您需要访问托管集群。
输入以下命令生成 kubeconfig :
hypershift create kubeconfig --namespace ${CLUSTERS_NAMESPACE} --name ${HOSTED_CLUSTER_NAME} > ${HOSTED_CLUSTER_NAME}.kubeconfig
如果访问集群,您可以看到您没有任何节点,并且 ClusterVersion 正在尝试协调 Red Hat OpenShift Container Platform 发行版本:
oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get clusterversion,nodes
输出示例
NAME VERSION AVAILABLE PROGRESSING SINCE STATUS clusterversion.config.openshift.io/version False True 8m6s Unable to apply 4.12z: some cluster operators have not yet rolled out
要让集群正在运行,您需要向其添加节点。
1.7.4.7. 扩展 NodePool 对象
您可以通过扩展 NodePool 对象将节点添加到托管集群。
将 NodePool 对象扩展到两个节点:
oc -n ${CLUSTERS_NAMESPACE} scale nodepool ${NODEPOOL_NAME} --replicas 2
ClusterAPI 代理供应商随机选择两个代理,然后分配给托管集群。这些代理通过不同的状态,最后将托管集群作为 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
代理到达 add
-to-existing-cluster
状态后,验证您可以看到 OpenShift Container Platform 节点:oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig 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
clusteroperators 开始通过将工作负载添加到节点来协调。您还可以看到扩展
NodePool
对象时创建了两台机器: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.12z hypercluster1-c96b6f675-tl42p hypercluster1-b2qhl ocp-worker-2 agent://4dac1ab2-7dd5-4894-a220-6a3473b67ee6 Running 15m 4.12z
clusterversion
协调最终到达缺少 Ingress 和 Console 集群 Operator 的点:oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get clusterversion,co NAME VERSION AVAILABLE PROGRESSING SINCE STATUS clusterversion.config.openshift.io/version False True 40m Unable to apply 4.12z: 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 clusteroperator.config.openshift.io/image-registry 4.12z True False False 9m5s clusteroperator.config.openshift.io/ingress 4.12z True False True 39m The "default" ingress controller reports Degraded=True: DegradedConditions: One or more other status conditions indicate a degraded state: CanaryChecksSucceeding=False (CanaryChecksRepetitiveFailures: Canary route checks for the default ingress controller are failing) clusteroperator.config.openshift.io/insights 4.12z True False False 11m clusteroperator.config.openshift.io/kube-apiserver 4.12z True False False 40m clusteroperator.config.openshift.io/kube-controller-manager 4.12z True False False 40m clusteroperator.config.openshift.io/kube-scheduler 4.12z True False False 40m clusteroperator.config.openshift.io/kube-storage-version-migrator 4.12z True False False 10m clusteroperator.config.openshift.io/monitoring 4.12z True False False 7m38s clusteroperator.config.openshift.io/network 4.12z True False False 11m clusteroperator.config.openshift.io/openshift-apiserver 4.12z True False False 40m clusteroperator.config.openshift.io/openshift-controller-manager 4.12z True False False 40m clusteroperator.config.openshift.io/openshift-samples 4.12z True False False 8m54s clusteroperator.config.openshift.io/operator-lifecycle-manager 4.12z True False False 40m clusteroperator.config.openshift.io/operator-lifecycle-manager-catalog 4.12z True False False 40m clusteroperator.config.openshift.io/operator-lifecycle-manager-packageserver 4.12z True False False 40m clusteroperator.config.openshift.io/service-ca 4.12z True False False 11m clusteroperator.config.openshift.io/storage 4.12z True False False 11m
1.7.4.8. 处理入口
每个 OpenShift Container Platform 集群都会设置有一个默认的应用程序入口控制器,该控制器预期关联有外部 DNS 记录。例如,如果您创建一个名为 example
的 HyperShift 集群,其基域为 krnl.es
,您可以预期通配符域 *.apps.example.krnl.es
可以被路由。
您可以为 If apps
设置负载均衡器和通配符 DNS 记录。此过程需要部署 MetalLB,配置路由到入口部署的新负载均衡器服务,并将通配符 DNS 条目分配给负载均衡器 IP 地址。
设置 MetalLB,以便在创建
LoadBalancer
类型的服务时,MetalLB 为该服务添加外部 IP 地址。cat <<"EOF" | oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig apply -f - --- 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
Operator 运行后,创建 MetalLB 实例:
cat <<"EOF" | oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig apply -f - apiVersion: metallb.io/v1beta1 kind: MetalLB metadata: name: metallb namespace: metallb EOF
通过创建具有单个 IP 地址的
IPAddressPool
来配置 MetalLB Operator。此 IP 地址必须与集群节点使用的网络位于同一个子网中。重要: 更改
INGRESS_IP
环境变量以匹配您的环境地址。export INGRESS_IP=192.168.122.23 envsubst <<"EOF" | oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig apply -f - apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: ingress-public-ip namespace: metallb spec: protocol: layer2 autoAssign: false addresses: - ${INGRESS_IP}-${INGRESS_IP} --- apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: ingress-public-ip namespace: metallb spec: ipAddressPools: - ingress-public-ip EOF
按照以下步骤,通过 MetalLB 公开 OpenShift Container Platform Router:
设置将入口流量路由到入口部署的 LoadBalancer 服务。
cat <<"EOF" | oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig apply -f - 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 EOF
输入以下命令访问 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.12z True False 3m32s Cluster version is 4.12z NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE clusteroperator.config.openshift.io/console 4.12z True False False 3m50s clusteroperator.config.openshift.io/csi-snapshot-controller 4.12z True False False 25m clusteroperator.config.openshift.io/dns 4.12z True False False 23m clusteroperator.config.openshift.io/image-registry 4.12z True False False 23m clusteroperator.config.openshift.io/ingress 4.12z True False False 53m clusteroperator.config.openshift.io/insights 4.12z True False False 25m clusteroperator.config.openshift.io/kube-apiserver 4.12z True False False 54m clusteroperator.config.openshift.io/kube-controller-manager 4.12z True False False 54m clusteroperator.config.openshift.io/kube-scheduler 4.12z True False False 54m clusteroperator.config.openshift.io/kube-storage-version-migrator 4.12z True False False 25m clusteroperator.config.openshift.io/monitoring 4.12z True False False 21m clusteroperator.config.openshift.io/network 4.12z True False False 25m clusteroperator.config.openshift.io/openshift-apiserver 4.12z True False False 54m clusteroperator.config.openshift.io/openshift-controller-manager 4.12z True False False 54m clusteroperator.config.openshift.io/openshift-samples 4.12z True False False 23m clusteroperator.config.openshift.io/operator-lifecycle-manager 4.12z True False False 54m clusteroperator.config.openshift.io/operator-lifecycle-manager-catalog 4.12z True False False 54m clusteroperator.config.openshift.io/operator-lifecycle-manager-packageserver 4.12z True False False 54m clusteroperator.config.openshift.io/service-ca 4.12z True False False 25m clusteroperator.config.openshift.io/storage 4.12z True False False 25m
1.7.4.9. 为托管集群启用节点自动扩展
当托管集群和备用代理中需要更多容量时,您可以启用自动扩展来安装新代理。
要启用自动扩展,请输入以下命令。在这种情况下,最少的节点数量为 2,最大数量为 5。
oc -n ${CLUSTERS_NAMESPACE} patch nodepool ${HOSTED_CLUSTER_NAME} --type=json -p '[{"op": "remove", "path": "/spec/replicas"},{"op":"add", "path": "/spec/autoScaling", "value": { "max": 5, "min": 2 }}]'
如果 10 分钟通过不需要额外容量,则代理将停用,并再次放在备用队列中。
创建需要新节点的工作负载。
cat <<EOF | oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig apply -f - 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: {} EOF
输入以下命令验证剩余的代理是否已部署。在本例中,置备备用代理
d9198891-39f4-4930-a679-65fb142b108b
: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: added-to-existing-cluster BMH: ocp-worker-0 Agent: d9198891-39f4-4930-a679-65fb142b108b State: installing-in-progress BMH: ocp-worker-1 Agent: da503cf1-a347-44f2-875c-4960ddb04091 State: added-to-existing-cluster
如果输入以下命令来检查节点,则输出中会显示新节点。在本例中,
ocp-worker-0
添加到集群中:oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get nodes
输出示例
NAME STATUS ROLES AGE VERSION ocp-worker-0 Ready worker 35s v1.24.0+3882f8f ocp-worker-1 Ready worker 40m v1.24.0+3882f8f ocp-worker-2 Ready worker 41m v1.24.0+3882f8f
要删除节点,请输入以下命令删除工作负载:
oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig -n default delete deployment reversewords
输入以下命令等待 10 分钟,并确认节点已被删除:
oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get nodes
输出示例
NAME STATUS ROLES AGE VERSION ocp-worker-1 Ready worker 51m v1.24.0+3882f8f ocp-worker-2 Ready worker 52m v1.24.0+3882f8f
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: added-to-existing-cluster BMH: ocp-worker-0 Agent: d9198891-39f4-4930-a679-65fb142b108b State: known-unbound BMH: ocp-worker-1 Agent: da503cf1-a347-44f2-875c-4960ddb04091 State: added-to-existing-cluster
1.7.4.10. 验证托管集群创建
部署过程完成后,您可以验证托管集群是否已成功创建。在创建托管集群后,按照以下步骤操作。
输入 extract 命令获取新托管集群的 kubeconfig :
oc extract -n kni21 secret/kni21-admin-kubeconfig --to=- > kubeconfig-kni21 # kubeconfig
使用 kubeconfig 查看托管集群的集群 Operator。输入以下命令:
oc get co --kubeconfig=kubeconfig-kni21
输出示例
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE console 4.10.26 True False False 2m38s csi-snapshot-controller 4.10.26 True False False 4m3s dns 4.10.26 True False False 2m52s image-registry 4.10.26 True False False 2m8s ingress 4.10.26 True False False 22m kube-apiserver 4.10.26 True False False 23m kube-controller-manager 4.10.26 True False False 23m kube-scheduler 4.10.26 True False False 23m kube-storage-version-migrator 4.10.26 True False False 4m52s monitoring 4.10.26 True False False 69s network 4.10.26 True False False 4m3s node-tuning 4.10.26 True False False 2m22s openshift-apiserver 4.10.26 True False False 23m openshift-controller-manager 4.10.26 True False False 23m openshift-samples 4.10.26 True False False 2m15s operator-lifecycle-manager 4.10.26 True False False 22m operator-lifecycle-manager-catalog 4.10.26 True False False 23m operator-lifecycle-manager-packageserver 4.10.26 True False False 23m service-ca 4.10.26 True False False 4m41s storage 4.10.26 True False False 4m43s
您还可以输入以下命令查看托管集群中运行的 pod:
oc get pods -A --kubeconfig=kubeconfig-kni21
输出示例
NAMESPACE NAME READY STATUS RESTARTS AGE kube-system konnectivity-agent-khlqv 0/1 Running 0 3m52s kube-system konnectivity-agent-nrbvw 0/1 Running 0 4m24s kube-system konnectivity-agent-s5p7g 0/1 Running 0 4m14s kube-system kube-apiserver-proxy-asus3-vm1.kni.schmaustech.com 1/1 Running 0 5m56s kube-system kube-apiserver-proxy-asus3-vm2.kni.schmaustech.com 1/1 Running 0 6m37s kube-system kube-apiserver-proxy-asus3-vm3.kni.schmaustech.com 1/1 Running 0 6m17s openshift-cluster-node-tuning-operator cluster-node-tuning-operator-798fcd89dc-9cf2k 1/1 Running 0 20m openshift-cluster-node-tuning-operator tuned-dhw5p 1/1 Running 0 109s openshift-cluster-node-tuning-operator tuned-dlp8f 1/1 Running 0 110s openshift-cluster-node-tuning-operator tuned-l569k 1/1 Running 0 109s openshift-cluster-samples-operator cluster-samples-operator-6b5bcb9dff-kpnbc 2/2 Running 0 20m openshift-cluster-storage-operator cluster-storage-operator-5f784969f5-vwzgz 1/1 Running 1 (113s ago) 20m openshift-cluster-storage-operator csi-snapshot-controller-6b7687b7d9-7nrfw 1/1 Running 0 3m8s openshift-cluster-storage-operator csi-snapshot-controller-6b7687b7d9-csksg 1/1 Running 0 3m9s openshift-cluster-storage-operator csi-snapshot-controller-operator-7f4d9fc5b8-hkvrk 1/1 Running 0 20m openshift-cluster-storage-operator csi-snapshot-webhook-6759b5dc8b-7qltn 1/1 Running 0 3m12s openshift-cluster-storage-operator csi-snapshot-webhook-6759b5dc8b-f8bqk 1/1 Running 0 3m12s openshift-console-operator console-operator-8675b58c4c-flc5p 1/1 Running 1 (96s ago) 20m openshift-console console-5cbf6c7969-6gk6z 1/1 Running 0 119s openshift-console downloads-7bcd756565-6wj5j 1/1 Running 0 4m3s openshift-dns-operator dns-operator-77d755cd8c-xjfbn 2/2 Running 0 21m openshift-dns dns-default-jwjkz 2/2 Running 0 113s openshift-dns dns-default-kfqnh 2/2 Running 0 113s openshift-dns dns-default-xlqsm 2/2 Running 0 113s openshift-dns node-resolver-jzxnd 1/1 Running 0 110s openshift-dns node-resolver-xqdr5 1/1 Running 0 110s openshift-dns node-resolver-zl6h4 1/1 Running 0 110s openshift-image-registry cluster-image-registry-operator-64fcfdbf5-r7d5t 1/1 Running 0 20m openshift-image-registry image-registry-7fdfd99d68-t9pq9 1/1 Running 0 53s openshift-image-registry node-ca-hkfnr 1/1 Running 0 56s openshift-image-registry node-ca-vlsdl 1/1 Running 0 56s openshift-image-registry node-ca-xqnsw 1/1 Running 0 56s openshift-ingress-canary ingress-canary-86z6r 1/1 Running 0 4m13s openshift-ingress-canary ingress-canary-8jhxk 1/1 Running 0 3m52s openshift-ingress-canary ingress-canary-cv45h 1/1 Running 0 4m24s openshift-ingress router-default-6bb8944f66-z2lxr 1/1 Running 0 20m openshift-kube-storage-version-migrator-operator kube-storage-version-migrator-operator-56b57b4844-p9zgp 1/1 Running 1 (2m16s ago) 20m openshift-kube-storage-version-migrator migrator-58bb4d89d5-5sl9w 1/1 Running 0 3m30s openshift-monitoring alertmanager-main-0 6/6 Running 0 100s openshift-monitoring cluster-monitoring-operator-5bc5885cd4-dwbc4 2/2 Running 0 20m openshift-monitoring grafana-78f798868c-wd84p 3/3 Running 0 94s openshift-monitoring kube-state-metrics-58b8f97f6c-6kp4v 3/3 Running 0 104s openshift-monitoring node-exporter-ll7cp 2/2 Running 0 103s openshift-monitoring node-exporter-tgsqg 2/2 Running 0 103s openshift-monitoring node-exporter-z99gr 2/2 Running 0 103s openshift-monitoring openshift-state-metrics-677b9fb74f-qqp6g 3/3 Running 0 104s openshift-monitoring prometheus-adapter-f69fff5f9-7tdn9 0/1 Running 0 17s openshift-monitoring prometheus-k8s-0 6/6 Running 0 93s openshift-monitoring prometheus-operator-6b9d4fd9bd-tqfcx 2/2 Running 0 2m2s openshift-monitoring telemeter-client-74d599658c-wqw5j 3/3 Running 0 101s openshift-monitoring thanos-querier-64c8757854-z4lll 6/6 Running 0 98s openshift-multus multus-additional-cni-plugins-cqst9 1/1 Running 0 6m14s openshift-multus multus-additional-cni-plugins-dbmkj 1/1 Running 0 5m56s openshift-multus multus-additional-cni-plugins-kcwl9 1/1 Running 0 6m14s openshift-multus multus-admission-controller-22cmb 2/2 Running 0 3m52s openshift-multus multus-admission-controller-256tn 2/2 Running 0 4m13s openshift-multus multus-admission-controller-mz9jm 2/2 Running 0 4m24s openshift-multus multus-bxgvr 1/1 Running 0 6m14s openshift-multus multus-dmkdc 1/1 Running 0 6m14s openshift-multus multus-gqw2f 1/1 Running 0 5m56s openshift-multus network-metrics-daemon-6cx4x 2/2 Running 0 5m56s openshift-multus network-metrics-daemon-gz4jp 2/2 Running 0 6m13s openshift-multus network-metrics-daemon-jq9j4 2/2 Running 0 6m13s openshift-network-diagnostics network-check-source-8497dc8f86-cn4nm 1/1 Running 0 5m59s openshift-network-diagnostics network-check-target-d8db9 1/1 Running 0 5m58s openshift-network-diagnostics network-check-target-jdbv8 1/1 Running 0 5m58s openshift-network-diagnostics network-check-target-zzmdv 1/1 Running 0 5m55s openshift-network-operator network-operator-f5b48cd67-x5dcz 1/1 Running 0 21m openshift-sdn sdn-452r2 2/2 Running 0 5m56s openshift-sdn sdn-68g69 2/2 Running 0 6m openshift-sdn sdn-controller-4v5mv 2/2 Running 0 5m56s openshift-sdn sdn-controller-crscc 2/2 Running 0 6m1s openshift-sdn sdn-controller-fxtn9 2/2 Running 0 6m1s openshift-sdn sdn-n5jm5 2/2 Running 0 6m openshift-service-ca-operator service-ca-operator-5bf7f9d958-vnqcg 1/1 Running 1 (2m ago) 20m openshift-service-ca service-ca-6c54d7944b-v5mrw 1/1 Running 0 3m8s
1.7.4.11. 在裸机上销毁托管集群
您可以使用控制台销毁裸机托管集群。完成以下步骤以在裸机上销毁托管集群:
- 在控制台中,进入到 Infrastructure > Clusters。
- 在 Clusters 页面中,选择要销毁的集群。
- 在 Actions 菜单中,选择 Destroy 集群 来删除集群。
1.7.4.12. 其他资源
- 如需有关 MetalLB 的更多信息,请参阅 OpenShift Container Platform 文档中的 关于 MetalLB 和 MetalLB Operator。
-
有关
rootDeviceHints
的更多信息,请参阅BareMetalHost
文档中的 rootDeviceHints 部分。
1.7.5. 禁用托管的 control plane 功能
您可以卸载 HyperShift Operator 并禁用托管的 control plane。禁用托管的 control plane 集群功能时,您必须销毁托管集群以及 multicluster engine operator 上的受管集群资源,如 管理托管的 control plane 集群 主题 中所述。
1.7.5.1. 卸载 HyperShift Operator
要卸载 HyperShift Operator 并从 local-cluster
禁用 hypershift-addon
,请完成以下步骤:
运行以下命令,以确保没有托管集群正在运行:
oc get hostedcluster -A
重要: 如果托管集群正在运行,则 HyperShift Operator 不会卸载,即使
hypershift-addon
被禁用。运行以下命令来禁用
hypershift-addon
:oc patch mce multiclusterengine --type=merge -p '{"spec":{"overrides":{"components":[{"name":"hypershift-local-hosting","enabled": false}]}}}'
提示: 在禁用
hypershift-addon
后,您还可以从 multicluster engine operator 控制台为local-cluster
禁用hypershift-addon
。
1.7.5.2. 禁用托管的 control plane 功能
在禁用托管的 control plane 功能前,您必须首先卸载 HyperShift Operator。运行以下命令来禁用托管的 control plane 功能:
oc patch mce multiclusterengine --type=merge -p '{"spec":{"overrides":{"components":[{"name":"hypershift-preview","enabled": false}]}}}'
您可以运行以下命令来验证 MultiClusterEngine
自定义资源中禁用了 hypershift-preview
和 hypershift-local-hosting
功能:
oc get mce multiclusterengine -o yaml
请参阅以下示例,其中 hypershift-preview
和 hypershift-local-hosting
的 enabled:
标记设为 false
:
apiVersion: multicluster.openshift.io/v1 kind: MultiClusterEngine metadata: name: multiclusterengine spec: overrides: components: - name: hypershift-preview enabled: false - name: hypershift-local-hosting enabled: false