16.4. 部署单节点 OpenShift 集群
16.4.1. 关于用于管理的单节点 OpenShift 的基于镜像的部署
当使用基于镜像的安装预装了单节点 OpenShift 的主机时,技术人员可以在几分钟内轻松重新配置和部署主机。
对于具有 hub 和spoke 架构的集群,要完成预安装主机的部署,您必须首先为每个主机在 hub 集群上定义特定于站点的配置资源。这些资源包含配置信息,如裸机主机的属性、身份验证详情和其他部署和网络信息。
Image Based Install (IBI) Operator 从这些资源创建一个配置 ISO,然后使用附加配置 ISO 启动主机。主机挂载配置 ISO 并运行重新配置过程。重新配置完成后,单节点 OpenShift 集群已就绪。
您必须为每个裸机主机创建不同的配置资源。
请参阅以下高级别步骤,在带有 hub 和spoke 架构的集群中部署预安装的主机:
- 在 hub 集群上安装 IBI Operator。
- 在 hub 集群中为每个主机创建特定于站点的配置资源。
- IBI Operator 从这些资源创建配置 ISO,并使用附加配置 ISO 启动目标主机。
- 主机挂载配置 ISO 并运行重新配置过程。重新配置完成后,单节点 OpenShift 集群已就绪。
另外,您可以手动为集群部署预安装的主机,而无需使用 hub 集群。您必须定义 ImageBasedConfig
资源和安装清单,并将其作为 openshift-install
安装程序的输入。如需更多信息,请参阅"使用 openshift-install
程序部署单节点 OpenShift 集群"。
16.4.1.1. 安装 Image Based Install Operator
Image Based Install (IBI) Operator 是裸机主机上预安装的单节点 OpenShift 部署工作流的一部分。
IBI Operator 是 MCE 版本 2.7 的 Kubernetes Operator 的多集群引擎的一部分。
先决条件
-
以具有
cluster-admin
权限的用户身份登录。 - 您已部署了 Red Hat Advanced Cluster Management (RHACM) hub 集群,或为 Kubernetes Operator 部署多集群引擎。
- 您在"基于镜像安装的软件先决条件"部分中查看了所需的软件组件版本。
流程
运行以下命令,将
MultiClusterEngine
资源中基于 image-install-operator
组件的启用
的规格设置为true
:$ oc patch multiclusterengines.multicluster.openshift.io multiclusterengine --type json \ --patch '[{"op": "add", "path":"/spec/overrides/components/-", "value": {"name":"image-based-install-operator","enabled": true}}]'
验证
运行以下命令,检查 Image Based Install Operator pod 是否正在运行:
$ oc get pods -A | grep image-based
输出示例
multicluster-engine image-based-install-operator-57fb8sc423-bxdj8 2/2 Running 0 5m
16.4.1.2. 使用 IBI Operator 部署受管单节点 OpenShift 集群
在 hub 集群中创建特定于站点的配置资源,以启动预安装主机的基于镜像的部署。
当您在 hub 集群中创建这些配置资源时,Image Based Install (IBI) Operator 会生成配置 ISO,并将其附加到目标主机以开始特定于站点的配置过程。配置过程完成后,单节点 OpenShift 集群已就绪。
有关在 hub 集群中配置配置资源的更多信息,请参阅"用于部署预安装主机的集群配置资源"。
先决条件
- 已使用基于镜像的安装,预安装了单节点 OpenShift 的主机。
-
以具有
cluster-admin
权限的用户身份登录。 - 您已部署了 Red Hat Advanced Cluster Management (RHACM) hub 集群,或部署了 multicluster engine for Kubernetes operator (MCE)。
- 您已在 hub 集群上安装了 IBI Operator。
- 您创建了 pull secret 以验证拉取请求。如需更多信息,请参阅"使用镜像 pull secret"。
流程
运行以下命令来创建
ibi-ns
命名空间:$ oc create namespace ibi-ns
为您的镜像 registry 创建
Secret
资源:创建为镜像 registry 定义
Secret
资源的 YAML 文件:secret-image-registry.yaml
文件示例apiVersion: v1 kind: Secret metadata: name: ibi-image-pull-secret namespace: ibi-ns stringData: .dockerconfigjson: <base64-docker-auth-code> 1 type: kubernetes.io/dockerconfigjson
- 1
- 您必须提供 base64 编码的凭证详情。有关使用镜像 pull secret 的更多信息,请参阅"添加资源"部分。
运行以下命令,为您的镜像 registry 创建
Secret
资源:$ oc create -f secret-image-registry.yaml
可选:为主机配置静态网络:
以
nmstate
格式创建一个包含静态网络配置的Secret
资源:host-network-config-secret.yaml
文件示例apiVersion: v1 kind: Secret metadata: name: host-network-config-secret 1 namespace: ibi-ns type: Opaque stringData: nmstate: | 2 interfaces: - name: ens1f0 3 type: ethernet state: up ipv4: enabled: true address: - ip: 192.168.200.25 prefix-length: 24 dhcp: false 4 ipv6: enabled: false dns-resolver: config: server: - 192.168.15.47 5 - 192.168.15.48 routes: config: 6 - destination: 0.0.0.0/0 metric: 150 next-hop-address: 192.168.200.254 next-hop-interface: ens1f0 table-id: 254
创建
BareMetalHost
和Secret
资源:创建定义
BareMetalHost
和Secret
资源的 YAML 文件:ibi-bmh.yaml
文件示例apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: name: ibi-bmh 1 namespace: ibi-ns spec: online: false 2 bootMACAddress: 00:a5:12:55:62:64 3 bmc: address: redfish-virtualmedia+http://192.168.111.1:8000/redfish/v1/Systems/8a5babac-94d0-4c20-b282-50dc3a0a32b5 4 credentialsName: ibi-bmh-bmc-secret 5 preprovisioningNetworkDataName: host-network-config-secret 6 automatedCleaningMode: disabled 7 externallyProvisioned: true 8 --- apiVersion: v1 kind: Secret metadata: name: ibi-bmh-secret 9 namespace: ibi-ns type: Opaque data: username: <user_name> 10 password: <password> 11
- 1
- 指定
BareMetalHost
资源的名称。 - 2
- 指定主机是否应在线。
- 3
- 指定主机引导 MAC 地址。
- 4
- 指定 BMC 地址。您只能使用支持虚拟介质网络引导的裸机主机驱动程序,如 redfish-virtualmedia 和 idrac-virtualmedia。
- 5
- 指定裸机主机
Secret
资源的名称。 - 6
- 可选:如果您需要主机静态网络配置,请指定包含配置的
Secret
资源的名称。 - 7
- 您必须指定
automatedCleaningMode:disabled
,以防止置备服务在磁盘检查过程中删除所有预安装工件,如 seed 镜像。 - 8
- 您必须指定
externallyProvisioned: true
,才能启用主机从预安装的磁盘引导,而不是配置 ISO。 - 9
- 指定
Secret
资源的名称。 - 10
- 指定用户名。
- 11
- 指定密码。
运行以下命令来创建
BareMetalHost
和Secret
资源:$ oc create -f ibi-bmh.yaml
创建
ClusterImageSet
资源:创建定义
ClusterImageSet
资源的 YAML 文件:ibi-cluster-image-set.yaml
文件示例apiVersion: hive.openshift.io/v1 kind: ClusterImageSet metadata: name: ibi-img-version-arch 1 spec: releaseImage: ibi.example.com:path/to/release/images:version-arch 2
运行以下命令来创建
ClusterImageSet
资源:$ oc apply -f ibi-cluster-image-set.yaml
创建
ImageClusterInstall
资源:创建定义
ImageClusterInstall
资源的 YAML 文件:ibi-image-cluster-install.yaml
文件示例apiVersion: extensions.hive.openshift.io/v1alpha1 kind: ImageClusterInstall metadata: name: ibi-image-install 1 namespace: ibi-ns spec: bareMetalHostRef: name: ibi-bmh 2 namespace: ibi-ns clusterDeploymentRef: name: ibi-cluster-deployment 3 hostname: ibi-host 4 imageSetRef: name: ibi-img-version-arch 5 machineNetwork: 10.0.0.0/24 6 proxy: 7 httpProxy: "http://proxy.example.com:8080" #httpsProxy: "http://proxy.example.com:8080" #noProxy: "no_proxy.example.com"
重要如果您的集群部署需要代理配置,您必须执行以下操作:
- 从带有代理配置的 seed 集群创建 seed 镜像。代理配置不必相互匹配。
-
在安装清单中配置
machineNetwork
字段。
运行以下命令来创建
ImageClusterInstall
资源:$ oc create -f ibi-image-cluster-install.yaml
创建
ClusterDeployment
资源:创建定义
ClusterDeployment
资源的 YAML 文件:ibi-cluster-deployment.yaml
文件示例apiVersion: hive.openshift.io/v1 kind: ClusterDeployment metadata: name: ibi-cluster-deployment 1 namespace: ibi-ns 2 spec: baseDomain: example.com 3 clusterInstallRef: group: extensions.hive.openshift.io kind: ImageClusterInstall name: ibi-image-install 4 version: v1alpha1 clusterName: ibi-cluster 5 platform: none: {} pullSecretRef: name: ibi-image-pull-secret 6
运行以下命令来创建
ClusterDeployment
资源:$ oc apply -f ibi-cluster-deployment.yaml
创建
ManagedCluster
资源:
验证
运行以下命令,检查 hub 集群中
ImageClusterInstall
的状态,以监控目标主机安装的进度:$ oc get imageclusterinstall
输出示例
NAME REQUIREMENTSMET COMPLETED BAREMETALHOSTREF target-0 HostValidationSucceeded ClusterInstallationSucceeded ibi-bmh
警告如果
ImageClusterInstall
资源被删除,IBI Operator 会重新附加BareMetalHost
资源并重启机器。安装完成后,您可以运行以下命令来检索
kubeconfig
secret 以登录到受管集群:$ oc extract secret/<cluster_name>-admin-kubeconfig -n <cluster_namespace> --to - > <directory>/<cluster_name>-kubeconfig
-
<CLUSTER_
NAME> 是集群的名称。 -
<cluster_namespace
> 是集群的命名空间。 -
<
directory> 是在其中创建文件的目录。
-
16.4.1.2.1. 用于部署预安装主机的集群配置资源
要在远程站点完成预安装主机的部署,您必须在 hub 集群中为每个裸机主机配置以下 site-specifc 集群配置资源。
资源 | 描述 |
---|---|
| 受管单节点 OpenShift 集群的命名空间。 |
| 描述物理主机及其属性,如置备和硬件配置。 |
裸机主机的 secret | 主机 BMC 的凭证。 |
裸机主机静态网络配置的 secret | 可选:描述目标主机的静态网络配置。 |
镜像 registry 的 secret |
镜像 registry 的凭证。镜像 registry 的 secret 必须是 |
| 引用裸机主机、部署和镜像设置资源。 |
| 描述用于集群的发行镜像。 |
| 描述网络、身份验证和特定于平台的设置。 |
| 描述启用 Red Hat Advanced Cluster Management (RHACM)来注册和管理的集群详情。 |
| 可选:描述集群部署的额外配置,如为主机添加可信证书的捆绑包,以确保集群服务的可信通信。 |
16.4.1.2.2. ImageClusterInstall 资源 API 规格
以下内容描述了 ImageClusterInstall
资源的 API 规格。此资源是 Image Based Install Operator 的端点。
规格 | 类型 | 描述 |
---|---|---|
|
|
指定为部署定义发行镜像的 |
|
| 指定集群的主机名。 |
|
| 指定 SSH 密钥,以提供到目标主机的 SSH 访问。 |
规格 | 类型 | 描述 |
---|---|---|
|
|
指定要用于目标主机的镜像安装的 |
|
|
部署完成后,此规格会自动填充有关集群的元数据信息,包括用于登录到集群的 |
|
| 指定 release-image 内容的源或软件仓库,例如: imageDigestSources: - mirrors: - "registry.example.com:5000/ocp4/openshift4" source: "quay.io/openshift-release-dev/ocp-release" |
|
|
指定包含要应用到目标集群的额外清单的 |
|
|
指定用于集群部署的 |
|
| 指定外部网络的公共 CIDR (Classless Inter-Domain Routing)。 |
|
| 指定集群的代理设置,例如: proxy: httpProxy: "http://proxy.example.com:8080" httpsProxy: "http://proxy.example.com:8080" noProxy: "no_proxy.example.com" |
|
|
指定包含主机可信证书捆绑包的 |
16.4.1.3. 额外清单的 ConfigMap 资源
您可以选择创建 ConfigMap
资源,为受管单节点 OpenShift 集群在基于镜像的部署中定义其他清单。
创建 ConfigMap
资源后,在 ImageClusterInstall
资源中引用它。在部署过程中,IBI Operator 在部署中包括额外的清单。
16.4.1.3.1. 创建 ConfigMap 资源以在基于镜像的部署中添加额外的清单
您可以使用 ConfigMap
资源在单节点 OpenShift 集群的基于镜像的部署中添加额外的清单。
以下示例将单根 I/O 虚拟化 (SR-IOV) 网络添加到部署中。
额外清单的文件名不能超过 30 个字符。较长的文件名可能会导致部署失败。
先决条件
- 已使用基于镜像的安装,预安装了单节点 OpenShift 的主机。
-
以具有
cluster-admin
权限的用户身份登录。
流程
创建
SriovNetworkNodePolicy
和SriovNetwork
资源:创建定义资源的 YAML 文件:
sriov-extra-manifest.yaml
文件示例apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: "example-sriov-node-policy" namespace: openshift-sriov-network-operator spec: deviceType: vfio-pci isRdma: false nicSelector: pfNames: [ens1f0] nodeSelector: node-role.kubernetes.io/master: "" mtu: 1500 numVfs: 8 priority: 99 resourceName: example-sriov-node-policy --- apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: "example-sriov-network" namespace: openshift-sriov-network-operator spec: ipam: |- { } linkState: auto networkNamespace: sriov-namespace resourceName: example-sriov-node-policy spoofChk: "on" trust: "off"
运行以下命令来创建
ConfigMap
资源:$ oc create configmap sr-iov-extra-manifest --from-file=sriov-extra-manifest.yaml -n ibi-ns 1
- 1
- 指定具有
ImageClusterInstall
资源的命名空间。
输出示例
configmap/sr-iov-extra-manifest created
在
ImageClusterInstall
资源的spec.extraManifestsRefs
字段中引用ConfigMap
资源:#... spec: extraManifestsRefs: - name: sr-iov-extra-manifest #...
16.4.1.3.2. 创建 ConfigMap 资源,以便在基于镜像的部署中添加 CA 捆绑包
您可以使用 ConfigMap
资源将证书颁发机构(CA)捆绑包添加到主机,以确保集群服务的可信通信。
创建 ConfigMap
资源后,在 ImageClusterInstall
资源的 spec.caBundleRef
字段中引用它。
先决条件
- 已使用基于镜像的安装,预安装了单节点 OpenShift 的主机。
-
以具有
cluster-admin
权限的用户身份登录。
流程
创建名为
tls-ca-bundle.pem
的 CA 捆绑包文件:tls-ca-bundle.pem
文件示例-----BEGIN CERTIFICATE----- MIIDXTCCAkWgAwIBAgIJAKmjYKJbIyz3MA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV ...Custom CA certificate bundle... 4WPl0Qb27Sb1xZyAsy1ww6MYb98EovazUSfjYr2EVF6ThcAPu4/sMxUV7He2J6Jd cA8SMRwpUbz3LXY= -----END CERTIFICATE-----
运行以下命令来创建
ConfigMap
对象:$ oc create configmap custom-ca --from-file=tls-ca-bundle.pem -n ibi-ns
-
custom-ca
指定ConfigMap
资源的名称。 -
tls-ca-bundle.pem
定义ConfigMap
资源中data
条目的密钥。您必须使用tls-ca-bundle.pem
键包含数据
条目。 ibi-ns
指定具有ImageClusterInstall
资源的命名空间。输出示例
configmap/custom-ca created
-
在
ImageClusterInstall
资源的spec.caBundleRef
字段中引用ConfigMap
资源:#... spec: caBundleRef: name: custom-ca #...
16.4.2. 关于单节点 OpenShift 的基于镜像的部署
您可以使用 openshift-install
程序手动生成配置 ISO。将配置 ISO 附加到预安装的目标主机以完成部署。
16.4.2.1. 使用 openshift-install 程序部署单节点 OpenShift 集群
您可以使用 openshift-install
程序配置和部署预安装了基于镜像的安装的主机。要使用特定于站点的详情配置目标主机,您必须创建以下资源:
-
install-config.yaml
安装清单 -
image-based-config.yaml
清单
openshift-install
程序使用这些资源来生成一个配置 ISO,您将它附加到预安装的目标主机来完成部署。
如需有关 image-based-config.yaml
清单规格的更多信息,请参阅"image-based-config.yaml manifest 清单参考规格"。
先决条件
- 已使用基于镜像的安装,预安装了单节点 OpenShift 的主机。
-
下载了
openshift-install
程序的最新版本。 - 您创建了 pull secret 以验证拉取请求。如需更多信息,请参阅"使用镜像 pull secret"。
流程
运行以下命令来创建工作目录:
$ mkdir ibi-config-iso-workdir 1
- 1
- 将
ibi-config-iso-workdir
替换为工作目录的名称。
创建安装清单:
创建定义
install-config
清单的 YAML 文件:install-config.yaml
文件示例apiVersion: v1 metadata: name: sno-cluster-name baseDomain: host.example.com compute: - architecture: amd64 hyperthreading: Enabled name: worker replicas: 0 controlPlane: architecture: amd64 hyperthreading: Enabled name: master replicas: 1 networking: clusterNetwork: - cidr: 10.128.0.0/14 hostPrefix: 23 machineNetwork: - cidr: 192.168.200.0/24 networkType: OVNKubernetes serviceNetwork: - 172.30.0.0/16 platform: none: {} fips: false cpuPartitioningMode: "AllNodes" pullSecret: '{"auths":{"<your_pull_secret>"}}}' sshKey: 'ssh-rsa <your_ssh_pub_key>'
重要如果您的集群部署需要代理配置,您必须执行以下操作:
- 从带有代理配置的 seed 集群创建 seed 镜像。代理配置不必相互匹配。
- 在安装清单中配置 machineNetwork 字段。
- 将文件保存到工作目录中。
可选。运行以下命令,在工作目录中创建配置模板:
$ openshift-install image-based create config-template --dir ibi-config-iso-workdir/
输出示例
INFO Config-Template created in: ibi-config-iso-workdir
该命令在工作目录中创建
image-based-config.yaml
配置模板:# # Note: This is a sample ImageBasedConfig file showing # which fields are available to aid you in creating your # own image-based-config.yaml file. # apiVersion: v1beta1 kind: ImageBasedConfig metadata: name: example-image-based-config additionalNTPSources: - 0.rhel.pool.ntp.org - 1.rhel.pool.ntp.org hostname: change-to-hostname releaseRegistry: quay.io # networkConfig contains the network configuration for the host in NMState format. # See https://nmstate.io/examples.html for examples. networkConfig: interfaces: - name: eth0 type: ethernet state: up mac-address: 00:00:00:00:00:00 ipv4: enabled: true address: - ip: 192.168.122.2 prefix-length: 23 dhcp: false
编辑配置文件:
image-based-config.yaml
文件示例# # Note: This is a sample ImageBasedConfig file showing # which fields are available to aid you in creating your # own image-based-config.yaml file. # apiVersion: v1beta1 kind: ImageBasedConfig metadata: name: sno-cluster-name additionalNTPSources: - 0.rhel.pool.ntp.org - 1.rhel.pool.ntp.org hostname: host.example.com releaseRegistry: quay.io # networkConfig contains the network configuration for the host in NMState format. # See https://nmstate.io/examples.html for examples. networkConfig: interfaces: - name: ens1f0 type: ethernet state: up ipv4: enabled: true dhcp: false auto-dns: false address: - ip: 192.168.200.25 prefix-length: 24 ipv6: enabled: false dns-resolver: config: server: - 192.168.15.47 - 192.168.15.48 routes: config: - destination: 0.0.0.0/0 metric: 150 next-hop-address: 192.168.200.254 next-hop-interface: ens1f0
运行以下命令,在工作目录中创建配置 ISO:
$ openshift-install image-based create config-image --dir ibi-config-iso-workdir/
输出示例
INFO Adding NMConnection file <ens1f0.nmconnection> INFO Consuming Install Config from target directory INFO Consuming Image-based Config ISO configuration from target directory INFO Config-Image created in: ibi-config-iso-workdir/auth
查看工作目录中的输出:
输出示例
ibi-config-iso-workdir/ ├── auth │ ├── kubeadmin-password │ └── kubeconfig └── imagebasedconfig.iso
-
使用您首选的方法将
imagebasedconfig.iso
附加到预安装的主机,然后重新启动主机以完成配置过程并部署集群。
验证
当配置过程在主机上完成时,访问集群以验证其状态。
运行以下命令,将
kubeconfig
环境变量导出到 kubeconfig 文件中:$ export KUBECONFIG=ibi-config-iso-workdir/auth/kubeconfig
运行以下命令验证集群是否响应:
$ oc get nodes
输出示例
NAME STATUS ROLES AGE VERSION node/sno-cluster-name.host.example.com Ready control-plane,master 5h15m v1.30.3
16.4.2.1.1. image-based-config.yaml 清单的规格参考
以下内容介绍了 image-based-config.yaml
清单的规格。
openshift-install
程序使用 image-based-config.yaml
清单为基于镜像的单节点 OpenShift 部署创建特定于站点的配置 ISO。
规格 | 类型 | 描述 |
---|---|---|
|
| 为单节点 OpenShift 集群定义节点的名称。 |
规格 | 类型 | 描述 |
---|---|---|
|
| 指定主机的网络配置,例如: networkConfig: interfaces: - name: ens1f0 type: ethernet state: up ...
如果需要静态网络,您必须在创建实时安装 ISO 的主机上安装 重要 接口的名称必须与操作系统中显示的实际 NIC 名称匹配。 |
|
| 指定所有集群主机的 NTP 源列表。这些 NTP 源会添加到集群中的任何现有 NTP 源中。您可以将主机名或 IP 地址用于 NTP 源。 |
|
| 指定用于 seed 集群的发行镜像的容器镜像 registry。 |
|
| 为单节点 OpenShift 节点指定自定义节点标签,例如: nodeLabels: node-role.kubernetes.io/edge: true environment: production |
16.4.2.2. 为额外清单配置资源
您可以选择为单节点 OpenShift 集群在基于镜像的部署中定义其他资源。
在具有相同工作目录中的 extra-manifests
文件夹中创建其他资源,该资源具有 install-config.yaml
和 基于镜像的-config.yaml
清单。
extra-manifests
目录中其他资源的文件名不能超过 30 个字符。较长的文件名可能会导致部署失败。
16.4.2.2.1. 在 extra-manifests 文件夹中创建资源
您可以在工作目录的 extra-manifests
文件夹中创建资源,以便在单节点 OpenShift 集群的基于镜像的部署中添加额外的清单。
以下示例将单根 I/O 虚拟化 (SR-IOV) 网络添加到部署中。
先决条件
-
已使用
install-config.yaml
和image-based-config.yaml
清单创建了工作目录
流程
进入您的工作目录并创建
extra-manifests
文件夹:$ mkdir extra-manifests
在
extra-manifests
文件夹中创建SriovNetworkNodePolicy
和SriovNetwork
资源:创建定义资源的 YAML 文件:
sriov-extra-manifest.yaml
文件示例apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: "example-sriov-node-policy" namespace: openshift-sriov-network-operator spec: deviceType: vfio-pci isRdma: false nicSelector: pfNames: [ens1f0] nodeSelector: node-role.kubernetes.io/master: "" mtu: 1500 numVfs: 8 priority: 99 resourceName: example-sriov-node-policy --- apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: "example-sriov-network" namespace: openshift-sriov-network-operator spec: ipam: |- { } linkState: auto networkNamespace: sriov-namespace resourceName: example-sriov-node-policy spoofChk: "on" trust: "off"
验证
在创建配置 ISO 时,您可以在工作目录中查看
.openshift_install_state.json
文件中的额外清单的引用:"*configimage.ExtraManifests": { "FileList": [ { "Filename": "extra-manifests/sriov-extra-manifest.yaml", "Data": "YXBFDFFD..." } ] }