$ oc get managedclusters local-cluster
您可以通过将集群配置为管理集群来部署托管控制平面。管理集群是托管控制平面的 OpenShift Container Platform 集群。管理集群也称为 *托管* 集群。
*管理* 集群不是 *被管理* 集群。被管理集群是由中心集群管理的集群。 |
您可以使用 `hypershift` 附加组件将 HyperShift 运算符部署到该集群,从而将被管理集群转换为管理集群。然后,您可以开始创建托管集群。
多集群引擎运算符仅支持默认的 `local-cluster`(这是一个被管理的中心集群)以及中心集群作为管理集群。
要配置裸机上的托管控制平面,可以使用 Agent 平台。Agent 平台使用中央基础设施管理服务将工作节点添加到托管集群。有关更多信息,请参阅“启用中央基础设施管理服务”。
每个 IBM Z 系统主机必须使用中央基础设施管理提供的 PXE 镜像启动。每个主机启动后,它都会运行一个 Agent 进程来发现主机的详细信息并完成安装。一个 Agent 自定义资源代表每个主机。
当您使用 Agent 平台创建托管集群时,HyperShift Operator 会在托管控制平面命名空间中安装 Agent 集群 API 提供程序。
必须在 OpenShift Container Platform 集群上安装 Kubernetes Operator 2.5 或更高版本的多分支引擎。您可以从 OpenShift Container Platform OperatorHub 安装多分支引擎 Operator。
多分支引擎 Operator 必须至少拥有一个受管 OpenShift Container Platform 集群。local-cluster
会在多分支引擎 Operator 2.5 及更高版本中自动导入。有关 local-cluster
的更多信息,请参阅 Red Hat Advanced Cluster Management 文档中的“高级配置”。您可以运行以下命令来检查您的中心集群的状态
$ oc get managedclusters local-cluster
您需要一个至少具有三个工作节点的主机集群来运行 HyperShift Operator。
您需要启用中央基础设施管理服务。更多信息,请参阅《启用中央基础设施管理服务》。
您需要安装托管控制平面命令行界面。更多信息,请参阅《安装托管控制平面命令行界面》。
Agent 平台不会创建任何基础设施,但需要以下基础设施资源
Agent:一个Agent 代表一个使用发现镜像(或 PXE 镜像)启动并准备作为 OpenShift Container Platform 节点进行配置的主机。
DNS:API 和 Ingress 端点必须可路由。
托管控制平面功能默认启用。如果您禁用了此功能并想手动启用它,或者如果您需要禁用此功能,请参阅《启用或禁用托管控制平面功能》。
托管集群的 API 服务器作为 NodePort
服务公开。必须存在指向 API 服务器可访问位置的 api.<托管集群名称>.<基础域名>
的 DNS 条目。
DNS 条目可以只是一个指向运行托管控制平面的受管集群中一个节点的记录。
该条目也可以指向已部署的负载均衡器,以将传入流量重定向到 Ingress Pod。
请参见以下 DNS 配置示例
$ cat /var/named/<example.krnl.es.zone>
$ TTL 900
@ IN SOA bastion.example.krnl.es.com. hostmaster.example.krnl.es.com. (
2019062002
1D 1H 1W 3H )
IN NS bastion.example.krnl.es.com.
;
;
api IN A 1xx.2x.2xx.1xx (1)
api-int IN A 1xx.2x.2xx.1xx
;
;
*.apps IN A 1xx.2x.2xx.1xx
;
;EOF
1 | 该记录指的是处理托管控制平面入口和出口流量的 API 负载均衡器的 IP 地址。 |
对于 IBM z/VM,请添加与 Agent IP 地址相对应的 IP 地址。
compute-0 IN A 1xx.2x.2xx.1yy
compute-1 IN A 1xx.2x.2xx.1yy
当您使用 Agent 平台创建托管集群时,HyperShift 会在托管控制平面命名空间中安装 Agent 集群 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>
将 <托管集群命名空间>
替换为您托管集群的命名空间名称,例如 clusters
。将 <托管集群名称>
替换为您托管集群的名称。
验证您是否为集群配置了默认存储类。否则,您可能会看到挂起的 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 <托管控制平面命名空间> 命令确保此命名空间中存在 agent。 |
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
InfraEnv
是一个环境,使用 PXE 镜像启动的主机可以作为 agent 加入其中。在这种情况下,agent 会在与托管控制平面相同的命名空间中创建。
创建一个 YAML 文件来包含配置。请参见以下示例
apiVersion: agent-install.openshift.io/v1beta1
kind: InfraEnv
metadata:
name: <hosted_cluster_name>
namespace: <hosted_control_plane_namespace>
spec:
cpuArchitecture: s390x
pullSecretRef:
name: pull-secret
sshAuthorizedKey: <ssh_public_key>
将文件保存为 infraenv-config.yaml
。
输入以下命令应用配置
$ oc apply -f infraenv-config.yaml
要获取下载 PXE 镜像(例如 initrd.img
、kernel.img
或 rootfs.img
)的 URL,这些镜像允许 IBM Z 机器作为 agent 加入,请输入以下命令:
$ oc -n <hosted_control_plane_namespace> get InfraEnv <hosted_cluster_name> -o json
要将计算节点附加到托管控制平面,请创建有助于扩展节点池的 agent。在 IBM Z 环境中添加 agent 需要额外的步骤,本节将详细介绍。
除非另有说明,否则这些过程适用于 IBM Z 和 IBM LinuxONE 上的 z/VM 和 RHEL KVM 安装。
对于具有 KVM 的 IBM Z,请运行以下命令以使用从 InfraEnv
资源下载的 PXE 镜像启动您的 IBM Z 环境。创建 Agent 后,主机将与 Assisted Service 通信并在管理集群上的 InfraEnv
资源与相同的命名空间中注册。
运行以下命令
virt-install \
--name "<vm_name>" \ (1)
--autostart \
--ram=16384 \
--cpu host \
--vcpus=4 \
--location "<path_to_kernel_initrd_image>,kernel=kernel.img,initrd=initrd.img" \ (2)
--disk <qcow_image_path> \ (3)
--network network:macvtap-net,mac=<mac_address> \ (4)
--graphics none \
--noautoconsole \
--wait=-1
--extra-args "rd.neednet=1 nameserver=<nameserver> coreos.live.rootfs_url=http://<http_server>/rootfs.img random.trust_cpu=on rd.luks.options=discard ignition.firstboot ignition.platform.id=metal console=tty1 console=ttyS1,115200n8 coreos.inst.persistent-kargs=console=tty1 console=ttyS1,115200n8" (5)
1 | 指定虚拟机的名称。 |
2 | 指定 kernel_initrd_image 文件的位置。 |
3 | 指定磁盘映像路径。 |
4 | 指定MAC地址。 |
5 | 指定代理的服务器名称。 |
对于ISO引导,请从InfraEnv
资源下载ISO镜像,并运行以下命令引导节点
virt-install \
--name "<vm_name>" \ (1)
--autostart \
--memory=16384 \
--cpu host \
--vcpus=4 \
--network network:macvtap-net,mac=<mac_address> \ (2)
--cdrom "<path_to_image.iso>" \ (3)
--disk <qcow_image_path> \
--graphics none \
--noautoconsole \
--os-variant <os_version> \ (4)
--wait=-1
1 | 指定虚拟机的名称。 |
2 | 指定MAC地址。 |
3 | 指定image.iso 文件的位置。 |
4 | 指定您正在使用的操作系统版本。 |
您可以将IBM Z或IBM LinuxONE上的逻辑分区(LPAR)作为计算节点添加到托管控制平面。
为代理创建引导参数文件
rd.neednet=1 cio_ignore=all,!condev \
console=ttysclp0 \
ignition.firstboot ignition.platform.id=metal
coreos.live.rootfs_url=http://<http_server>/rhcos-<version>-live-rootfs.<architecture>.img \(1)
coreos.inst.persistent-kargs=console=ttysclp0
ip=<ip>::<gateway>:<netmask>:<hostname>::none nameserver=<dns> \(2)
rd.znet=qeth,<network_adaptor_range>,layer2=1
rd.<disk_type>=<adapter> \(3)
zfcp.allow_lun_scan=0
ai.ip_cfg_override=1 \(4)
random.trust_cpu=on rd.luks.options=discard
1 | 对于coreos.live.rootfs_url 工件,请指定与您正在启动的kernel 和initramfs 匹配的rootfs 工件。仅支持HTTP和HTTPS协议。 |
2 | 对于ip 参数,请根据《在IBM Z和IBM LinuxONE上使用z/VM安装集群》中的说明手动分配IP地址。 |
3 | 对于DASD类型磁盘的安装,请使用rd.dasd 指定安装Red Hat Enterprise Linux CoreOS (RHCOS)的DASD。对于FCP类型磁盘的安装,请使用rd.zfcp=<adapter>,<wwpn>,<lun> 指定安装RHCOS的FCP磁盘。 |
4 | 当您使用开放系统适配器(OSA)或HiperSockets时,请指定此参数。 |
从InfraEnv
资源下载.ins
和initrd.img.addrsize
文件。
默认情况下,.ins
和initrd.img.addrsize
文件的URL在InfraEnv
资源中不可用。您必须编辑URL才能获取这些工件。
运行以下命令更新内核URL端点以包含ins-file
$ curl -k -L -o generic.ins "< url for ins-file >"
https://…/boot-artifacts/ins-file?arch=s390x&version=4.17.0
更新initrd
URL端点以包含s390x-initrd-addrsize
https://…./s390x-initrd-addrsize?api_key=<api-key>&arch=s390x&version=4.17.0
将initrd
、kernel
、generic.ins
和initrd.img.addrsize
参数文件传输到文件服务器。有关如何使用FTP和引导传输文件的更多信息,请参见“在LPAR中安装”。
启动机器。
对集群中的所有其他机器重复此过程。
如果您想为z/VM虚拟机使用静态IP,则必须配置z/VM代理的NMStateConfig
属性,以便IP参数在第二次启动时保持不变。
完成以下步骤以使用从InfraEnv
资源下载的PXE镜像启动您的IBM Z环境。创建代理后,主机将与辅助服务通信,并在与管理集群上的InfraEnv
资源相同的命名空间中注册。
更新参数文件以添加rootfs_url
、network_adaptor
和disk_type
值。
rd.neednet=1 cio_ignore=all,!condev \
console=ttysclp0 \
ignition.firstboot ignition.platform.id=metal \
coreos.live.rootfs_url=http://<http_server>/rhcos-<version>-live-rootfs.<architecture>.img \(1)
coreos.inst.persistent-kargs=console=ttysclp0
ip=<ip>::<gateway>:<netmask>:<hostname>::none nameserver=<dns> \(2)
rd.znet=qeth,<network_adaptor_range>,layer2=1
rd.<disk_type>=<adapter> \(3)
zfcp.allow_lun_scan=0
ai.ip_cfg_override=1 \(4)
1 | 对于coreos.live.rootfs_url 工件,请指定与您正在启动的kernel 和initramfs 匹配的rootfs 工件。仅支持HTTP和HTTPS协议。 |
2 | 对于ip 参数,请根据《在IBM Z和IBM LinuxONE上使用z/VM安装集群》中的说明手动分配IP地址。 |
3 | 对于DASD类型磁盘的安装,请使用rd.dasd 指定安装Red Hat Enterprise Linux CoreOS (RHCOS)的DASD。对于FCP类型磁盘的安装,请使用rd.zfcp=<adapter>,<wwpn>,<lun> 指定安装RHCOS的FCP磁盘。 |
4 | 当您使用开放系统适配器(OSA)或HiperSockets时,请指定此参数。 |
运行以下命令将initrd
、内核镜像和参数文件移动到虚拟机:
vmur pun -r -u -N kernel.img $INSTALLERKERNELLOCATION/<image name>
vmur pun -r -u -N generic.parm $PARMFILELOCATION/paramfilename
vmur pun -r -u -N initrd.img $INSTALLERINITRAMFSLOCATION/<image name>
从虚拟机控制台运行以下命令:
cp ipl c
要列出代理及其属性,请输入以下命令:
$ oc -n <hosted_control_plane_namespace> get agents
NAME CLUSTER APPROVED ROLE STAGE
50c23cda-cedc-9bbd-bcf1-9b3a5c75804d auto-assign
5e498cd3-542c-e54f-0c58-ed43e28b568a auto-assign
运行以下命令批准代理。
$ oc -n <hosted_control_plane_namespace> patch agent \
50c23cda-cedc-9bbd-bcf1-9b3a5c75804d -p \
'{"spec":{"installation_disk_id":"/dev/sda","approved":true,"hostname":"worker-zvm-0.hostedn.example.com"}}' \(1)
--type merge
1 | 可选地,您可以在规范中设置代理ID <installation_disk_id> 和<hostname> 。 |
运行以下命令以验证代理是否已批准
$ oc -n <hosted_control_plane_namespace> get agents
NAME CLUSTER APPROVED ROLE STAGE
50c23cda-cedc-9bbd-bcf1-9b3a5c75804d true auto-assign
5e498cd3-542c-e54f-0c58-ed43e28b568a true auto-assign
创建托管集群时会创建NodePool
对象。通过扩展NodePool
对象,您可以向托管控制平面添加更多计算节点。
当您扩展节点池时,将创建一个机器。集群API提供程序会找到一个已批准的、通过验证的、当前未使用的并且满足节点池规范中指定的条件的代理。您可以通过检查其状态和条件来监控代理的安装。
当您缩减节点池时,代理将与相应的集群解除绑定。在重用集群之前,必须使用PXE镜像引导集群以更新节点数。
运行以下命令将NodePool
对象扩展到两个节点:
$ oc -n <clusters_namespace> scale nodepool <nodepool_name> --replicas 2
集群API代理提供程序会随机选择两个代理,然后将其分配给托管集群。这些代理将经历不同的状态,最终作为OpenShift Container Platform节点加入托管集群。代理将按照以下顺序经过转换阶段:
绑定(binding)
发现(discovering)
不足(insufficient)
安装(installing)
安装中(installing-in-progress)
添加到现有集群(added-to-existing-cluster)
运行以下命令查看特定已扩展代理的状态:
$ 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: Agent: 50c23cda-cedc-9bbd-bcf1-9b3a5c75804d State: known-unbound
BMH: Agent: 5e498cd3-542c-e54f-0c58-ed43e28b568a State: insufficient
运行以下命令查看转换阶段:
$ oc -n <hosted_control_plane_namespace> get agent
NAME CLUSTER APPROVED ROLE STAGE
50c23cda-cedc-9bbd-bcf1-9b3a5c75804d hosted-forwarder true auto-assign
5e498cd3-542c-e54f-0c58-ed43e28b568a true auto-assign
da503cf1-a347-44f2-875c-4960ddb04091 hosted-forwarder true auto-assign
运行以下命令生成访问托管集群的kubeconfig
文件:
$ hcp create kubeconfig --namespace <clusters_namespace> --name <hosted_cluster_namespace> > <hosted_cluster_name>.kubeconfig
代理达到added-to-existing-cluster
状态后,通过输入以下命令验证您是否可以看到OpenShift Container Platform节点:
$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
NAME STATUS ROLES AGE VERSION
worker-zvm-0.hostedn.example.com Ready worker 5m41s v1.24.0+3882f8f
worker-zvm-1.hostedn.example.com Ready worker 6m3s v1.24.0+3882f8f
集群操作员开始通过向节点添加工作负载进行协调。
输入以下命令以验证在扩展NodePool
对象时是否创建了两个机器:
$ oc -n <hosted_control_plane_namespace> get machine.cluster.x-k8s.io
NAME CLUSTER NODENAME PROVIDERID PHASE AGE VERSION
hosted-forwarder-79558597ff-5tbqp hosted-forwarder-crqq5 worker-zvm-0.hostedn.example.com agent://50c23cda-cedc-9bbd-bcf1-9b3a5c75804d Running 41h 4.15.0
hosted-forwarder-79558597ff-lfjfk hosted-forwarder-crqq5 worker-zvm-1.hostedn.example.com agent://5e498cd3-542c-e54f-0c58-ed43e28b568a Running 41h 4.15.0
运行以下命令检查集群版本:
$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get clusterversion,co
NAME VERSION AVAILABLE PROGRESSING SINCE STATUS
clusterversion.config.openshift.io/version 4.15.0-ec.2 True False 40h Cluster version is 4.15.0-ec.2
运行以下命令检查集群操作员状态:
$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get clusteroperators
对于集群的每个组件,输出将显示以下集群操作员状态:NAME
、VERSION
、AVAILABLE
、PROGRESSING
、DEGRADED
、SINCE
和MESSAGE
。
有关输出示例,请参见《初始操作员配置》。