$ oc get managedclusters local-cluster
您可以通过将集群配置为管理集群来部署托管控制平面。管理集群是托管控制平面的OpenShift Container Platform集群。在某些情况下,管理集群也称为*托管*集群。
管理集群与托管集群并非同一概念。托管集群是指由中心集群管理的集群。 |
托管控制平面功能默认启用。
多集群引擎 Operator 只支持默认的 local-cluster
(一个受管理的中心集群)和作为管理集群的中心集群。如果您已安装 Red Hat Advanced Cluster Management,则可以使用托管中心集群(也称为 local-cluster
)作为管理集群。
托管集群 是一个 OpenShift Container Platform 集群,其 API 端点和控制平面托管在管理集群上。托管集群包含控制平面及其相应的数据平面。您可以使用多集群引擎 Operator 控制台或托管控制平面命令行界面 hcp
创建托管集群。
托管集群会自动导入为托管集群。如果您想禁用此自动导入功能,请参见禁用将托管集群自动导入多集群引擎 Operator。
准备在裸机上部署托管控制平面时,请考虑以下信息:
对于托管控制平面,请在同一平台上运行管理集群和工作节点。
所有裸机主机都需要使用中央基础设施管理提供的 Discovery Image ISO 进行手动启动。您可以手动启动主机,也可以通过使用 Cluster-Baremetal-Operator
进行自动化启动。每个主机启动后,都会运行一个 Agent 进程来发现主机详细信息并完成安装。一个 Agent
自定义资源代表每个主机。
配置托管控制平面的存储时,请考虑推荐的 etcd 实践。为确保满足延迟要求,请将快速存储设备专用于在每个控制平面节点上运行的所有托管控制平面 etcd 实例。您可以使用 LVM 存储为托管 etcd pod 配置本地存储类。有关更多信息,请参见“推荐的 etcd 实践”和“使用逻辑卷管理器存储的持久性存储”。
您需要在 OpenShift Container Platform 集群上安装 Kubernetes Operator 2.2 或更高版本的多集群引擎。您可以从 OpenShift Container Platform OperatorHub 安装多集群引擎 Operator 作为 Operator。
多集群引擎 Operator 必须至少拥有一个托管的 OpenShift Container Platform 集群。local-cluster
在多集群引擎 Operator 2.2 及更高版本中会自动导入。有关 local-cluster
的更多信息,请参见 Red Hat Advanced Cluster Management 文档中的高级配置。您可以运行以下命令检查中心集群的状态:
$ oc get managedclusters local-cluster
您必须将 topology.kubernetes.io/zone
标签添加到管理集群上的裸机主机。否则,所有托管控制平面 pod 都将调度到单个节点上,从而导致单点故障。
要在裸机上配置托管控制平面,您可以使用 Agent 平台。Agent 平台使用中央基础设施管理服务将工作节点添加到托管集群。有关更多信息,请参见启用中央基础设施管理服务。
您需要安装托管控制平面命令行界面。
您必须满足防火墙、端口和服务要求,以便端口可以在管理集群、控制平面和托管集群之间进行通信。
服务在其默认端口上运行。但是,如果您使用 |
使用防火墙规则、安全组或其他访问控制来限制仅允许所需来源访问。除非必要,否则避免公开端口。对于生产部署,请使用负载均衡器通过单个 IP 地址简化访问。
如果您的中心集群具有代理配置,请确保它可以通过将所有托管集群 API 端点添加到 Proxy
对象的 noProxy
字段来访问托管集群 API 端点。有关更多信息,请参见“配置集群范围的代理”。
托管控制平面在裸机上公开以下服务:
APIServer
APIServer
服务默认在 6443 端口上运行,并且需要入口访问才能在控制平面组件之间进行通信。
如果您使用 MetalLB 负载均衡,请允许对用于负载均衡器 IP 地址的 IP 范围进行入口访问。
OAuthServer
当您使用路由和入口来公开服务时,OAuthServer
服务默认在 443 端口上运行。
如果您使用 NodePort
发布策略,请为 OAuthServer
服务使用防火墙规则。
Konnectivity
当您使用路由和入口来公开服务时,Konnectivity
服务默认在 443 端口上运行。
Konnectivity
代理建立反向隧道以允许控制平面访问托管集群的网络。代理使用出口连接到 Konnectivity
服务器。服务器通过在 443 端口上使用路由或手动分配的 NodePort
来公开。
如果集群 API 服务器地址是内部 IP 地址,请允许从工作负载子网访问 6443 端口上的 IP 地址。
如果地址是外部 IP 地址,请允许节点上 6443 端口上的出口到该外部 IP 地址。
Ignition
当您使用路由和入口来公开服务时,Ignition
服务默认在 443 端口上运行。
如果您使用 NodePort
发布策略,请为 Ignition
服务使用防火墙规则。
您不需要在裸机上使用以下服务:
OVNSbDb
OIDC
托管集群的 API 服务器作为 NodePort
服务公开。必须存在指向 API 服务器可访问位置的 api.<hosted_cluster_name>.<base_domain>
的 DNS 条目。
DNS 条目可以很简单,只是一个指向运行托管控制平面的管理集群中一个节点的记录。该条目也可以指向部署的负载均衡器,以将传入流量重定向到入口 pod。
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
如果您正在为 IPv6 网络上的断开连接的环境配置 DNS,则配置如下例所示。
api.example.krnl.es. IN A 2620:52:0:1306::5
api.example.krnl.es. IN A 2620:52:0:1306::6
api.example.krnl.es. IN A 2620:52:0:1306::7
api-int.example.krnl.es. IN A 2620:52:0:1306::5
api-int.example.krnl.es. IN A 2620:52:0:1306::6
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 条目。
host-record=api-int.hub-dual.dns.base.domain.name,192.168.126.10
host-record=api.hub-dual.dns.base.domain.name,192.168.126.10
address=/apps.hub-dual.dns.base.domain.name/192.168.126.11
dhcp-host=aa:aa:aa:aa:10:01,ocp-master-0,192.168.126.20
dhcp-host=aa:aa:aa:aa:10:02,ocp-master-1,192.168.126.21
dhcp-host=aa:aa:aa:aa:10:03,ocp-master-2,192.168.126.22
dhcp-host=aa:aa:aa:aa:10:06,ocp-installer,192.168.126.25
dhcp-host=aa:aa:aa:aa:10:07,ocp-bootstrap,192.168.126.26
host-record=api-int.hub-dual.dns.base.domain.name,2620:52:0:1306::2
host-record=api.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]
dhcp-host=aa:aa:aa:aa:10:02,ocp-master-1,[2620:52:0:1306::6]
dhcp-host=aa:aa:aa:aa:10:03,ocp-master-2,[2620:52:0:1306::7]
dhcp-host=aa:aa:aa:aa:10:06,ocp-installer,[2620:52:0:1306::8]
dhcp-host=aa:aa:aa:aa:10:07,ocp-bootstrap,[2620:52:0:1306::9]
使用 Agent 平台创建托管集群时,HyperShift 会在托管控制平面命名空间中安装 Agent Cluster API 提供程序。您可以在裸机上创建托管集群或导入一个集群。
创建托管集群时,请记住以下准则
每个托管集群必须具有集群范围内的唯一名称。为了让多集群引擎 Operator 进行管理,托管集群名称不能与任何现有的托管集群名称相同。
不要使用 clusters
作为托管集群名称。
无法在多集群引擎 Operator 管理的集群的命名空间中创建托管集群。
最常见的服务发布策略是通过负载均衡器公开服务。该策略是公开 Kubernetes API 服务器的首选方法。如果您使用 Web 控制台或 Red Hat Advanced Cluster Management 创建托管集群,要为 Kubernetes API 服务器以外的服务设置发布策略,则必须在 HostedCluster
自定义资源中手动指定 servicePublishingStrategy
信息。
输入以下命令创建托管控制平面命名空间
$ oc create ns <hosted_cluster_namespace>-<hosted_cluster_name>
将 <hosted_cluster_namespace>
替换为您的托管集群命名空间名称,例如 clusters
。将 <hosted_cluster_name>
替换为您的托管集群名称。
验证您是否已为集群配置了默认存储类。否则,您可能会看到挂起的 PVC。运行以下命令
$ 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_public_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> (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 | 指定 etcd 存储类名称,例如 lvm-storageclass 。 |
7 | 指定您的 SSH 公钥路径。默认文件路径为 ~/.ssh/id_rsa.pub 。 |
8 | 指定您的托管集群命名空间。 |
9 | 指定托管控制平面组件的可用性策略。支持的选项为 SingleReplica 和 HighlyAvailable 。默认值为 HighlyAvailable 。 |
10 | 指定要使用的受支持的 OpenShift Container Platform 版本,例如 4.17.0-multi 。如果您使用的是断开连接的环境,请将 <ocp_release_image> 替换为摘要镜像。要提取 OpenShift Container Platform 发布镜像摘要,请参见《提取 OpenShift Container Platform 发布镜像摘要》。 |
片刻之后,输入以下命令验证您的托管控制平面 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
要使用控制台创建托管集群,请完成以下步骤。
打开 OpenShift Container Platform Web 控制台,并输入您的管理员凭据登录。有关打开控制台的说明,请参见《访问 Web 控制台》。
在控制台标题中,确保已选择**所有集群**。
单击**基础设施→集群**。
单击**创建集群→主机清单→托管控制平面**。
将显示**创建集群**页面。
在**创建集群**页面上,按照提示输入有关集群、节点池、网络和自动化的详细信息。
输入集群详细信息时,您可能会发现以下提示很有用
|
查看您的条目并单击**创建**。
将显示**托管集群**视图。
在**托管集群**视图中监控托管集群的部署。
如果您没有看到有关托管集群的信息,请确保已选择**所有集群**,然后单击集群名称。
等待控制平面组件准备就绪。此过程可能需要几分钟。
要查看节点池状态,请滚动到**NodePool** 部分。安装节点的过程大约需要 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-control-plane-namespace> secret/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 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
您也可以通过输入以下命令查看托管集群上正在运行的 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-node-tuning-operator tuned-dhw5p 1/1 Running 0 109s 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-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-kfqnh 2/2 Running 0 113s