$ oc get managedclusters local-cluster
您可以通过配置集群充当托管集群来部署托管控制平面。托管集群是托管控制平面的 OpenShift Container Platform 集群。托管集群也称为管理集群。
非裸机代理机器上的托管控制平面仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能提供对即将推出的产品功能的早期访问,使客户能够在开发过程中测试功能并提供反馈。 有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围。 |
管理集群与托管集群不同。托管集群是由中心集群管理的集群。 |
托管控制平面功能默认启用。
多集群引擎 Operator 仅支持默认的 local-cluster
托管中心集群。在 Red Hat Advanced Cluster Management (RHACM) 2.10 上,您可以使用 local-cluster
托管中心集群作为托管集群。
托管集群是一个 OpenShift Container Platform 集群,其 API 端点和控制平面托管在托管集群上。托管集群包括控制平面及其相应的数据平面。您可以使用多集群引擎 Operator 控制台或 hcp
命令行界面 (CLI) 创建托管集群。
托管集群会自动作为托管集群导入。如果您想禁用此自动导入功能,请参阅“禁用将托管集群自动导入多集群引擎 Operator”。
在准备在裸机上部署托管控制平面时,请考虑以下信息
您可以使用 Agent 平台将代理机器作为工作节点添加到托管集群。代理机器表示使用 Discovery Image 启动并准备作为 OpenShift Container Platform 节点进行配置的主机。Agent 平台是中央基础架构管理服务的一部分。有关更多信息,请参阅 启用中央基础架构管理服务。
所有非裸机主机都需要使用中央基础架构管理提供的 Discovery Image ISO 手动启动。
扩展节点池时,将为每个副本创建一个机器。对于每台机器,集群 API 提供程序都会查找并安装一个已批准、通过验证、当前未使用且满足节点池规范中指定的配置要求的 Agent。您可以通过检查其状态和条件来监控 Agent 的安装。
缩减节点池时,Agent 将与相应的集群解除绑定。在您可以重复使用 Agent 之前,必须使用 Discovery image 重新启动它们。
配置托管控制平面的存储时,请考虑推荐的 etcd 实践。为确保满足延迟要求,请将快速存储设备专用于在每个控制平面节点上运行的所有托管控制平面 etcd 实例。您可以使用 LVM 存储为托管 etcd pod 配置本地存储类。有关更多信息,请参阅 OpenShift Container Platform 文档中的“推荐 etcd 实践”和“使用逻辑卷管理器存储的持久性存储”。
在非裸机代理机器上部署托管控制平面之前,请确保满足以下前提条件
您必须在 OpenShift Container Platform 集群上安装 Kubernetes Operator 2.5 或更高版本的 multicluster engine。您可以从 OpenShift Container Platform OperatorHub 安装 multicluster engine Operator 作为 Operator。
您必须至少有一个用于多集群引擎 Operator 的托管 OpenShift Container Platform 集群。local-cluster
管理集群会自动导入。有关 local-cluster
的更多信息,请参阅 Red Hat Advanced Cluster Management 文档中的 高级配置。您可以运行以下命令来检查管理集群的状态
$ oc get managedclusters local-cluster
您已启用中央基础架构管理。有关更多信息,请参阅 Red Hat Advanced Cluster Management 文档中的 启用中央基础架构管理服务。
您已安装 hcp
命令行界面。
您的托管集群具有集群范围的唯一名称。
您在同一基础架构上运行管理集群和工作节点。
您必须满足防火墙和端口要求,以便端口可以在管理集群、控制平面和托管集群之间进行通信。
服务在其默认端口上运行。但是,如果您使用 |
使用防火墙规则、安全组或其他访问控制来限制仅允许所需来源访问。除非必要,否则避免公开端口。对于生产部署,请使用负载均衡器通过单个 IP 地址简化访问。
托管控制平面在非裸机代理机上公开以下服务
APIServer
APIServer
服务默认在6443端口上运行,并且需要控制平面组件之间的入站访问。
如果您使用 MetalLB 负载均衡,请允许访问用于负载均衡器 IP 地址的 IP 范围。
OAuthServer
当您使用路由和入口来公开服务时,OAuthServer
服务默认在443端口上运行。
如果您使用NodePort
发布策略,请为OAuthServer
服务使用防火墙规则。
Konnectivity
当您使用路由和入口来公开服务时,Konnectivity
服务默认在443端口上运行。
Konnectivity
代理建立反向隧道,允许控制平面访问托管集群的网络。代理使用出站连接到Konnectivity
服务器。服务器通过在443端口上使用路由或手动分配的NodePort
来公开。
如果集群 API 服务器地址是内部 IP 地址,请允许工作负载子网从该 IP 地址的6443端口访问。
如果地址是外部 IP 地址,请允许节点在6443端口上向该外部 IP 地址发出出站流量。
Ignition
当您使用路由和入口来公开服务时,Ignition
服务默认在443端口上运行。
如果您使用NodePort
发布策略,请为Ignition
服务使用防火墙规则。
非裸机代理机不需要以下服务
OVNSbDb
OIDC
托管集群的 API 服务器公开为NodePort
服务。必须存在指向 API 服务器可访问目标的api.<hosted_cluster_name>.<basedomain>
DNS 条目。
DNS 条目可以只是一个指向运行托管控制平面的托管集群中一个节点的记录。该条目也可以指向部署以将传入流量重定向到入口 Pod 的负载均衡器。
如果您正在为 IPv4 网络上的连接环境配置 DNS,请参阅以下 DNS 配置示例
api-int.example.krnl.es. IN A 192.168.122.22
`*`.apps.example.krnl.es. IN A 192.168.122.23
如果您正在为 IPv6 网络上的断开连接的环境配置 DNS,请参阅以下 DNS 配置示例
api-int.example.krnl.es. IN A 2620:52:0:1306::7
`*`.apps.example.krnl.es. IN A 2620:52:0:1306::10
如果您正在为双栈网络上的断开连接的环境配置 DNS,请确保包含 IPv4 和 IPv6 的 DNS 条目。请参阅以下 DNS 配置示例
host-record=api-int.hub-dual.dns.base.domain.name,2620:52:0:1306::2
address=/apps.hub-dual.dns.base.domain.name/2620:52:0:1306::3
dhcp-host=aa:aa:aa:aa:10:01,ocp-master-0,[2620:52:0:1306::5]
当您使用 Agent 平台创建托管集群时,HyperShift Operator 会在托管控制平面命名空间中安装 Agent Cluster API 提供程序。您可以创建裸机上的托管集群或导入一个托管集群。
创建托管集群时,请查看以下指南:
每个托管集群必须具有集群范围的唯一名称。为了让多集群引擎 Operator 管理托管集群,托管集群名称不能与任何现有的托管集群相同。
不要使用clusters
作为托管集群名称。
不能在多集群引擎 Operator 管理的集群的命名空间中创建托管集群。
通过输入以下命令创建托管控制平面命名空间:
$ oc create ns <hosted_cluster_namespace>-<hosted_cluster_name> (1)
1 | 将<hosted_cluster_namespace> 替换为您的托管集群命名空间名称,例如clusters 。将<hosted_cluster_name> 替换为您的托管集群名称。 |
通过输入以下命令创建托管集群:
$ 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=<basedomain> \(4)
--api-server-address=api.<hosted_cluster_name>.<basedomain> \(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> (10)
1 | 指定托管集群的名称,例如example 。 |
2 | 指定拉取密钥的路径,例如/user/name/pullsecret 。 |
3 | 指定您的托管控制平面命名空间,例如clusters-example 。使用oc get agent -n <hosted-control-plane-namespace> 命令确保此命名空间中存在代理。 |
4 | 指定您的基础域名,例如krnl.es 。 |
5 | --api-server-address 标志定义用于托管集群中 Kubernetes API 通信的 IP 地址。如果您未设置--api-server-address 标志,则必须登录才能连接到管理集群。 |
6 | 验证您是否已为集群配置了默认存储类。否则,您最终可能会遇到挂起的 PVC。指定 etcd 存储类名称,例如lvm-storageclass 。 |
7 | 指定 SSH 公钥的路径。默认文件路径为~/.ssh/id_rsa.pub 。 |
8 | 指定托管集群命名空间。 |
9 | 指定托管控制平面组件的可用性策略。支持的选项为SingleReplica 和HighlyAvailable 。默认值为HighlyAvailable 。 |
10 | 指定要使用的受支持的 OpenShift Container Platform 版本,例如4.17.0-multi 。 |
片刻之后,通过输入以下命令验证您的托管控制平面 Pod 是否正在运行:
$ oc -n <hosted_control_plane_namespace> get pods
NAME READY STATUS RESTARTS AGE
catalog-operator-6cd867cc7-phb2q 2/2 Running 0 2m50s
control-plane-operator-f6b4c8465-4k5dh 1/1 Running 0 4m32s
您可以使用 OpenShift Container Platform Web 控制台在非裸机代理机上创建托管集群。
您可以使用cluster-admin
权限访问集群。
您可以访问 OpenShift Container Platform Web 控制台。
打开 OpenShift Container Platform Web 控制台,并输入您的管理员凭据登录。
在控制台标题中,选择**所有集群**。
单击**基础设施→集群**。
单击**创建集群主机清单→托管控制平面**。
将显示**创建集群**页面。
在**创建集群**页面上,按照提示输入有关集群、节点池、网络和自动化的详细信息。
输入有关集群的详细信息时,您可能会发现以下提示很有用:
如果您想使用预定义值自动填充控制台中的字段,您可以创建一个主机清单凭据。有关更多信息,请参见为本地环境创建凭据。
在**集群详情**页面,拉取密钥是您用于访问 OpenShift Container Platform 资源的 OpenShift Container Platform 拉取密钥。如果您选择了主机清单凭据,则会自动填充拉取密钥。
在**节点池**页面,命名空间包含节点池的主机。如果您使用控制台创建了主机清单,则控制台会创建一个专用命名空间。
在**网络**页面,您需要选择一个 API 服务器发布策略。托管集群的 API 服务器可以通过使用现有负载均衡器或作为NodePort
类型的服务来公开。必须存在一个指向 API 服务器可访问目标的api.<hosted_cluster_name>.<basedomain>
设置的 DNS 条目。此条目可以是一个指向管理集群中一个节点的记录,也可以是一个指向将传入流量重定向到 Ingress Pod 的负载均衡器的记录。
检查您的输入,然后单击**创建**。
将显示**托管集群**视图。
在**托管集群**视图中监控托管集群的部署。如果您没有看到有关托管集群的信息,请确保已选择**所有集群**,然后单击集群名称。等待控制平面组件就绪。此过程可能需要几分钟。
要查看节点池状态,请滚动到**节点池**部分。安装节点的过程大约需要 10 分钟。您也可以单击**节点**以确认节点是否已加入托管集群。
要访问 Web 控制台,请参阅访问 Web 控制台。
您可以使用镜像注册表在裸机上创建托管集群,方法是在hcp create cluster
命令中指定--image-content-sources
标志。
创建一个 YAML 文件来定义镜像内容源策略 (ICSP)。请参阅以下示例
- mirrors:
- brew.registry.redhat.io
source: registry.redhat.io
- mirrors:
- brew.registry.redhat.io
source: registry.stage.redhat.io
- mirrors:
- brew.registry.redhat.io
source: registry-proxy.engineering.redhat.com
将文件保存为icsp.yaml
。此文件包含您的镜像注册表。
要使用您的镜像注册表创建托管集群,请运行以下命令
$ 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=<basedomain> \(4)
--api-server-address=api.<hosted_cluster_name>.<basedomain> \(5)
--image-content-sources icsp.yaml \(6)
--ssh-key <path_to_ssh_key> \(7)
--namespace <hosted_cluster_namespace> \(8)
--release-image=quay.io/openshift-release-dev/ocp-release:<ocp_release_image> (9)
1 | 指定托管集群的名称,例如example 。 |
2 | 指定拉取密钥的路径,例如/user/name/pullsecret 。 |
3 | 指定您的托管控制平面命名空间,例如clusters-example 。使用oc get agent -n <hosted-control-plane-namespace> 命令确保此命名空间中存在代理。 |
4 | 指定您的基础域名,例如krnl.es 。 |
5 | --api-server-address 标志定义用于托管集群中 Kubernetes API 通信的 IP 地址。如果您未设置--api-server-address 标志,则必须登录才能连接到管理集群。 |
6 | 指定定义 ICSP 和镜像注册表的icsp.yaml 文件。 |
7 | 指定 SSH 公钥的路径。默认文件路径为~/.ssh/id_rsa.pub 。 |
8 | 指定托管集群命名空间。 |
9 | 指定您要使用的受支持的 OpenShift Container Platform 版本,例如4.17.0-multi 。如果您使用的是断开连接的环境,请将<ocp_release_image> 替换为摘要镜像。要提取 OpenShift Container Platform 发布镜像摘要,请参阅提取 OpenShift Container Platform 发布镜像摘要。 |
要创建在使用控制台创建托管集群时可以重复使用的凭据,请参阅为本地环境创建凭据。
要访问托管集群,请参阅访问托管集群。
要使用发现镜像将主机添加到主机清单,请参阅使用发现镜像将主机添加到主机清单。
要提取 OpenShift Container Platform 发布镜像摘要,请参阅提取 OpenShift Container Platform 发布镜像摘要。
部署过程完成后,您可以验证托管集群是否已成功创建。创建托管集群几分钟后,请按照以下步骤操作。
通过输入以下命令获取新托管集群的kubeconfig
文件
$ oc extract -n <hosted_cluster_namespace> secret/<hosted_cluster_name>-admin-kubeconfig --to=- > kubeconfig-<hosted_cluster_name>
使用kubeconfig
文件查看托管集群的集群运算符。输入以下命令
$ oc get co --kubeconfig=kubeconfig-<hosted_cluster_name>
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
通过输入以下命令查看托管集群上运行的 Pod
$ oc get pods -A --kubeconfig=kubeconfig-<hosted_cluster_name>
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system konnectivity-agent-khlqv 0/1 Running 0 3m52s
openshift-cluster-samples-operator cluster-samples-operator-6b5bcb9dff-kpnbc 2/2 Running 0 20m
openshift-monitoring alertmanager-main-0 6/6 Running 0 100s
openshift-monitoring openshift-state-metrics-677b9fb74f-qqp6g 3/3 Running 0 104s