11.3. 使用基于代理的安装程序安装 OpenShift Container Platform 集群
使用以下步骤使用基于代理的安装程序安装 OpenShift Container Platform 集群。
11.3.1. 先决条件
- 您可以参阅有关 OpenShift Container Platform 安装和更新 流程的详细信息。
- 您可以阅读选择集群安装方法并为用户准备它的文档。
- 如果使用防火墙或代理,将其配置为允许集群需要访问的站点。
11.3.2. 使用基于代理的安装程序安装 OpenShift Container Platform
以下流程在断开连接的环境中部署单节点 OpenShift Container Platform。您可以使用这些步骤作为基础,并根据您的要求进行修改。
11.3.2.1. 下载基于代理的安装程序
使用这个流程下载安装所需的基于代理的安装程序和 CLI。
流程
- 使用您的登录凭证登录到 OpenShift Container Platform web 控制台。
- 进入到 Datacenter。
- 在本地点 Run Agent-based Installer。
- 为 OpenShift Installer 和命令行界面选择操作系统和架构。
- 点 Download Installer 下载并提取安装程序。
- 通过点 Download pull secret 或 Copy pull secret 下载或复制 pull secret。
-
点 Download command-line tools,将
openshift-install
二进制文件放在PATH
中的目录中。
11.3.2.2. 验证基于代理的安装支持的构架
在使用基于代理的安装程序安装 OpenShift Container Platform 集群前,您可以验证要在其上安装集群的支持的架构。这个过程是可选的。
先决条件
-
已安装 OpenShift CLI(
oc
)。 - 您已下载了安装程序。
流程
-
登录 OpenShift CLI (
oc
)。 运行以下命令检查您的发行镜像有效负载:
$ ./openshift-install version
输出示例
./openshift-install 4.16.0 built from commit abc123def456 release image quay.io/openshift-release-dev/ocp-release@sha256:123abc456def789ghi012jkl345mno678pqr901stu234vwx567yz0 release architecture amd64
如果您使用带有
multi
有效负载的发行镜像,这个命令的输出中显示的发行架构
是默认的架构。要检查有效负载的架构,请运行以下命令:
$ oc adm release info <release_image> -o jsonpath="{ .metadata.metadata}" 1
- 1
- 将
<release_image>
替换为发行镜像。例如:quay.io/openshift-release-dev/ocp-release@sha256:123abc456def789ghi012jkl345mno678pqr901stu234vwx567yz0
。
当发行镜像使用
multi
有效负载时的输出示例:{"release.openshift.io architecture":"multi"}
如果使用带有
multi
有效负载的发行镜像,则可以在不同的架构上安装集群,如arm64
,amd64
,s390x
, 和ppc64le
。否则,您只能在openshift-install version
命令的输出中所显示的发行构架
上安装集群。
11.3.2.3. 创建首选配置输入
使用这个流程创建用于创建代理镜像的首选配置输入。
流程
运行以下命令来安装
nmstate
依赖项:$ sudo dnf install /usr/bin/nmstatectl -y
-
将
openshift-install
二进制文件放到 PATH 中的目录中。 运行以下命令,创建一个目录来存储安装配置:
$ mkdir ~/<directory_name>
注意这是基于代理的安装的首选方法。使用 GitOps ZTP 清单是可选的。
运行以下命令来创建
install-config.yaml
文件:$ cat << EOF > ./my-cluster/install-config.yaml apiVersion: v1 baseDomain: test.example.com compute: - architecture: amd64 1 hyperthreading: Enabled name: worker replicas: 0 controlPlane: architecture: amd64 hyperthreading: Enabled name: master replicas: 1 metadata: name: sno-cluster 2 networking: clusterNetwork: - cidr: 10.128.0.0/14 hostPrefix: 23 machineNetwork: - cidr: 192.168.0.0/16 networkType: OVNKubernetes 3 serviceNetwork: - 172.30.0.0/16 platform: 4 none: {} pullSecret: '<pull_secret>' 5 sshKey: '<ssh_pub_key>' 6 EOF
- 1
- 指定系统架构。有效值为
amd64
,arm64
,ppc64le
, 和s390x
。如果使用带有
multi
有效负载的发行镜像,则可以在不同的架构上安装集群,如arm64
,amd64
,s390x
, 和ppc64le
。否则,您只能在openshift-install version
命令的输出中所显示的发行构架
上安装集群。如需更多信息,请参阅"验证安装基于代理的安装程序集群的受支持架构"。 - 2
- 必需。指定集群名称。
- 3
- 要安装的集群网络插件。默认值
OVNKubernetes
是唯一支持的值。 - 4
- 指定您的平台。注意
对于裸机平台,默认使用
install-config.yaml
文件的 platform 部分中进行的主机设置,除非它们被agent-config.yaml
文件中的配置覆盖。 - 5
- 指定 pull secret。
- 6
- 指定 SSH 公钥。
注意如果将平台设置为
vSphere
或baremetal
,您可以使用三种方式为集群节点配置 IP 地址端点:- IPv4
- IPv6
- IPv4 和 IPv6 并行 (dual-stack)
IPv6 仅在裸机平台上被支持。
双栈网络示例
networking: clusterNetwork: - cidr: 172.21.0.0/16 hostPrefix: 23 - cidr: fd02::/48 hostPrefix: 64 machineNetwork: - cidr: 192.168.11.0/16 - cidr: 2001:DB8::/32 serviceNetwork: - 172.22.0.0/16 - fd03::/112 networkType: OVNKubernetes platform: baremetal: apiVIPs: - 192.168.11.3 - 2001:DB8::4 ingressVIPs: - 192.168.11.4 - 2001:DB8::5
注意使用断开连接的镜像 registry 时,您必须将之前为镜像 registry 创建的证书文件添加到
install-config.yaml
文件的additionalTrustBundle
字段中。运行以下命令来创建
agent-config.yaml
文件:$ cat > agent-config.yaml << EOF apiVersion: v1beta1 kind: AgentConfig metadata: name: sno-cluster rendezvousIP: 192.168.111.80 1 hosts: 2 - hostname: master-0 3 interfaces: - name: eno1 macAddress: 00:ef:44:21:e6:a5 rootDeviceHints: 4 deviceName: /dev/sdb networkConfig: 5 interfaces: - name: eno1 type: ethernet state: up mac-address: 00:ef:44:21:e6:a5 ipv4: enabled: true address: - ip: 192.168.111.80 prefix-length: 23 dhcp: false dns-resolver: config: server: - 192.168.111.1 routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.168.111.2 next-hop-interface: eno1 table-id: 254 EOF
- 1
- 此 IP 地址用于确定哪些节点执行 bootstrap 过程,以及运行
assisted-service
组件。当您没有在networkConfig
参数中指定至少一个主机的 IP 地址时,您必须提供 rendezvous IP 地址。如果没有提供此地址,则会从提供的主机的networkConfig
中选择一个 IP 地址。 - 2
- 可选:主机配置。定义的主机数量不能超过
install-config.yaml
文件中定义的主机总数,这是compute.replicas
和controlPlane.replicas
参数的值的总和。 - 3
- 可选:覆盖从动态主机配置协议(DHCP)或反向 DNS 查找中获取的主机名。每个主机必须具有由这些方法提供的唯一主机名。
- 4
- 启用将 Red Hat Enterprise Linux CoreOS (RHCOS)镜像置备到特定设备。安装程序会按照发现设备的顺序检查设备,并将发现的值与 hint 值进行比较。它使用第一个与 hint 值匹配的发现设备。
- 5
- 可选:以 NMState 格式配置主机的网络接口。
11.3.2.4. 创建其他清单文件
作为可选任务,您可以创建额外的清单,以便在 install-config.yaml
和 agent-config.yaml
文件中可用的配置外进一步配置集群。
11.3.2.4.1. 创建包含额外清单的目录
如果创建额外的清单,以在 install-config.yaml
和 agent-config.yaml
文件外配置基于 Agent 的安装,则必须在安装目录中创建 openshift
子目录。所有附加机器配置都必须位于此子目录中。
您可以添加的附加清单的最常见类型是 MachineConfig
对象。有关您可以在基于代理的安装过程中添加的 MachineConfig
对象示例,请参阅"添加资源"部分中的"使用 MachineConfig 对象来配置节点"。
流程
在安装主机上,运行以下命令在安装目录中创建一个
openshift
子目录:$ mkdir <installation_directory>/openshift
11.3.2.4.2. 磁盘分区
通常,您应该使用在 RHCOS 安装过程中创建的默认磁盘分区。然而,在有些情况下您可能需要为预期增长的目录创建独立分区。
OpenShift Container Platform 支持添加单个分区将存储附加到 /var
目录或 /var
的子目录中。例如:
-
/var/lib/containers
:保存随着系统中添加更多镜像和容器而增长的容器相关内容。 -
/var/lib/etcd
:保存您可能希望独立保留的数据,比如 etcd 存储的性能优化。 /var
:保存您可能希望独立保留的数据,以满足审计等目的。重要对于大于 100GB 的磁盘大小,特别是磁盘大小大于 1TB,请创建一个独立的
/var
分区。
通过单独存储 /var
目录的内容,可以更轻松地根据需要为区域扩展存储,并在以后重新安装 OpenShift Container Platform,并保持该数据的完整性。使用这个方法,您不必再次拉取所有容器,在更新系统时也不必复制大量日志文件。
将独立分区用于 /var
目录或 /var
的子目录也会防止分区目录中的数据增加填充根文件系统。
以下流程通过添加机器配置清单来设置独立的 /var
分区,该清单会在安装准备阶段封装到节点类型的 Ignition 配置文件中。
先决条件
-
您已在安装目录中创建了
openshift
子目录。
流程
创建用于配置额外分区的 Butane 配置。例如,将文件命名为
$HOME/clusterconfig/98-var-partition.bu
,将磁盘设备名称改为worker
系统上存储设备的名称,并根据情况设置存储大小。这个示例将/var
目录放在一个单独的分区中:variant: openshift version: 4.16.0 metadata: labels: machineconfiguration.openshift.io/role: worker name: 98-var-partition storage: disks: - device: /dev/disk/by-id/<device_name> 1 partitions: - label: var start_mib: <partition_start_offset> 2 size_mib: <partition_size> 3 number: 5 filesystems: - device: /dev/disk/by-partlabel/var path: /var format: xfs mount_options: [defaults, prjquota] 4 with_mount_unit: true
注意在创建单独的
/var
分区时,如果不同的实例类型没有相同的设备名称,则无法将不同的实例类型用于计算节点。从 Butane 配置创建一个清单,并将它保存到
clusterconfig/openshift
目录中。例如,运行以下命令:$ butane $HOME/clusterconfig/98-var-partition.bu -o $HOME/clusterconfig/openshift/98-var-partition.yaml
11.3.2.5. 使用 ZTP 清单
作为可选任务,您可以使用 GitOps Zero Touch Provisioning (ZTP) 清单在通过 install-config.yaml
和 agent-config.yaml
文件提供的选项之外配置安装。
GitOps ZTP 清单可以使用或不提前配置 install-config.yaml
和 agent-config.yaml
文件生成。如果您选择配置 install-config.yaml
和 agent-config.yaml
文件,则配置会在生成时导入到 ZTP 集群清单中。
先决条件
-
您已将
openshift-install
二进制文件放在PATH
中的目录中。 -
可选:您已创建并配置了
install-config.yaml
和agent-config.yaml
文件。
流程
运行以下命令来生成 ZTP 集群清单:
$ openshift-install agent create cluster-manifests --dir <installation_directory>
重要如果您已创建了
install-config.yaml
和agent-config.yaml
文件,则这些文件将被删除,并替换为通过这个命令生成的集群清单。在运行
openshift-install agent create cluster-manifests
命令时,对install-config.yaml
和agent-config.yaml
文件所做的任何配置都会导入到 ZTP 集群清单中。运行以下命令,进入
cluster-manifests
目录:$ cd <installation_directory>/cluster-manifests
-
在
cluster-manifests
目录中配置清单文件。如需示例文件,请参阅 "Sample GitOps ZTP 自定义资源" 部分。 断开连接的集群: 如果您在生成 ZTP 清单前没有在
install-config.yaml
文件中定义镜像配置,请执行以下步骤:运行以下命令来进入
mirror
目录:$ cd ../mirror
-
在
mirror
目录中配置清单文件。
其他资源
- GitOps ZTP 自定义资源示例。
- 请参阅网络边缘的挑战,以了解更多有关 GitOps 零接触置备 (ZTP) 的信息。
11.3.2.6. 加密磁盘
作为一个可选任务,在使用基于代理的安装程序安装 OpenShift Container Platform 时,您可以使用此流程加密磁盘或分区。
先决条件
-
您已创建并配置了
install-config.yaml
和agent-config.yaml
文件,除非您使用 ZTP 清单。 -
您已将
openshift-install
二进制文件放在PATH
中的目录中。
流程
运行以下命令来生成 ZTP 集群清单:
$ openshift-install agent create cluster-manifests --dir <installation_directory>
重要如果您已创建了
install-config.yaml
和agent-config.yaml
文件,则这些文件将被删除,并替换为通过这个命令生成的集群清单。在运行
openshift-install agent create cluster-manifests
命令时,对install-config.yaml
和agent-config.yaml
文件所做的任何配置都会导入到 ZTP 集群清单中。注意如果您已经生成了 ZTP 清单,请跳过这一步。
运行以下命令,进入
cluster-manifests
目录:$ cd <installation_directory>/cluster-manifests
在
agent-cluster-install.yaml
文件中添加以下部分:diskEncryption: enableOn: all 1 mode: tang 2 tangServers: "server1": "http://tang-server-1.example.com:7500" 3
其他资源
11.3.2.7. 创建并引导代理镜像
使用这个流程在机器上引导代理镜像。
流程
运行以下命令来创建代理镜像:
$ openshift-install --dir <install_directory> agent create image
注意Red Hat Enterprise Linux CoreOS (RHCOS) 支持主磁盘上的多路径,允许对硬件故障进行更强大的弹性,以实现更高的主机可用性。在代理 ISO 镜像中默认启用多路径,默认
/etc/multipath.conf
配置。-
在裸机机器上引导
agent.x86_64.iso
,agent.aarch64.iso
, 或agent.s390x.iso
镜像。
11.3.2.8. 使用 RHEL KVM 添加 IBM Z 代理
使用以下步骤使用 RHEL KVM 手动添加 IBM Z® 代理。仅将此流程用于带有 RHEL KVM 的 IBM Z® 集群。
流程
- 引导 RHEL KVM 机器。
要部署虚拟服务器,请使用以下参数运行
virt-install
命令:$ virt-install --name <vm_name> \ --autostart \ --memory=<memory> \ --cpu host \ --vcpus=<vcpus> \ --cdrom <agent_iso_image> \ 1 --disk pool=default,size=<disk_pool_size> \ --network network:default,mac=<mac_address> \ --graphics none \ --noautoconsole \ --os-variant rhel9.0 \ --wait=-1
- 1
- 对于
--cdrom
参数,指定 HTTP 或 HTTPS 服务器中的 ISO 镜像的位置。
11.3.2.9. 验证当前安装主机是否可以拉取发行镜像
引导代理镜像和网络服务可用于主机后,代理控制台应用会执行拉取检查,以验证当前主机是否可以检索发行镜像。
如果主拉取检查通过,您可以退出应用程序以继续安装。如果拉取检查失败,应用程序会执行额外的检查,如 TUI 的额外检查
部分中所示,以帮助您对问题进行故障排除。只要主拉取检查成功,则对任何其他检查失败不一定至关重要。
如果有可能导致安装失败的主机网络配置问题,您可以使用控制台应用程序调整网络配置。
如果代理控制台应用程序检测到主机网络配置问题,则安装工作流将停止,直到用户手动停止控制台应用程序并信号继续操作。
流程
- 等待代理控制台应用程序检查是否可以从 registry 中拉取配置的发行镜像。
如果代理控制台应用程序指出安装程序连接检查已通过,请等待提示符超时。
注意您仍然可以选择查看或更改网络配置设置,即使连接检查已通过了。
但是,如果您选择与代理控制台应用程序交互,而不是让其超时,您必须手动退出 TUI 才能继续安装。
如果代理控制台应用程序检查失败(由
发行镜像 URL
pull 检查旁的红色图标表示),请按照以下步骤重新配置主机的网络设置:阅读 TUI 的
检查错误
部分。本节显示特定于失败检查的错误消息。- 选择 Configure network 以启动 NetworkManager TUI。
- 选择 Edit a connection 并选择您要重新配置的连接。
- 编辑配置并选择 OK 保存您的更改。
- 选择 Back 返回到 NetworkManager TUI 的主屏幕。
- 选择 Activate a Connection。
- 选择重新配置的网络来取消激活它。
- 再次选择重新配置的网络来重新激活它。
- 选择 Back,然后选择 Quit 以返回到代理控制台应用程序。
- 至少等待五秒,以便持续网络检查使用新的网络配置重新启动。
-
如果
Release image URL
pull 检查成功,并显示 URL 旁边的绿色图标,请选择 Quit 退出代理控制台应用程序并继续安装。
11.3.2.10. 跟踪并验证安装进度
使用以下步骤跟踪安装进度并验证安装是否成功。
先决条件
- 您已为 Kubernetes API 服务器配置了 DNS 记录。
流程
可选: 要了解 bootstrap 主机(渲染主机)何时重启,请运行以下命令:
$ ./openshift-install --dir <install_directory> agent wait-for bootstrap-complete \1 --log-level=info 2
输出示例
................................................................... ................................................................... INFO Bootstrap configMap status is complete INFO cluster bootstrap is complete
当 Kubernetes API 服务器提示已在 control plane 机器上引导它时,该命令会成功。
要跟踪进度并验证安装是否成功,请运行以下命令:
$ openshift-install --dir <install_directory> agent wait-for install-complete 1
- 1
- 对于
<install_directory>
目录,请指定到生成代理 ISO 的目录的路径。
输出示例
................................................................... ................................................................... INFO Cluster is installed INFO Install complete! INFO To access the cluster as the system:admin user when using 'oc', run INFO export KUBECONFIG=/home/core/installer/auth/kubeconfig INFO Access the OpenShift web-console here: https://console-openshift-console.apps.sno-cluster.test.example.com
如果使用可选的 GitOps ZTP 清单方法,您可以以三种方式通过 AgentClusterInstall.yaml
文件为集群节点配置 IP 地址端点:
- IPv4
- IPv6
- IPv4 和 IPv6 并行 (dual-stack)
IPv6 仅在裸机平台上被支持。
双栈网络示例
apiVIP: 192.168.11.3 ingressVIP: 192.168.11.4 clusterDeploymentRef: name: mycluster imageSetRef: name: openshift-4.16 networking: clusterNetwork: - cidr: 172.21.0.0/16 hostPrefix: 23 - cidr: fd02::/48 hostPrefix: 64 machineNetwork: - cidr: 192.168.11.0/16 - cidr: 2001:DB8::/32 serviceNetwork: - 172.22.0.0/16 - fd03::/112 networkType: OVNKubernetes
其他资源
- 请参阅使用双栈网络进行部署。
- 请参阅配置 install-config yaml 文件。
- 请参阅配置三节点集群以在裸机环境中部署三节点集群。
- 请参阅关于 root 设备提示。
- 请参阅 NMState 状态示例。
11.3.3. GitOps ZTP 自定义资源示例
您可以使用 GitOps Zero Touch Provisioning (ZTP) 自定义资源 (CR) 对象来使用基于代理的安装程序安装 OpenShift Container Platform 集群。
您可以自定义以下 GitOps ZTP 自定义资源,以指定有关 OpenShift Container Platform 集群的更多详情。以下 GitOps ZTP 自定义资源示例是单节点集群。
agent-cluster-install.yaml
文件示例
apiVersion: extensions.hive.openshift.io/v1beta1 kind: AgentClusterInstall metadata: name: test-agent-cluster-install namespace: cluster0 spec: clusterDeploymentRef: name: ostest imageSetRef: name: openshift-4.16 networking: clusterNetwork: - cidr: 10.128.0.0/14 hostPrefix: 23 serviceNetwork: - 172.30.0.0/16 provisionRequirements: controlPlaneAgents: 1 workerAgents: 0 sshPublicKey: <ssh_public_key>
cluster-deployment.yaml
文件示例
apiVersion: hive.openshift.io/v1 kind: ClusterDeployment metadata: name: ostest namespace: cluster0 spec: baseDomain: test.metalkube.org clusterInstallRef: group: extensions.hive.openshift.io kind: AgentClusterInstall name: test-agent-cluster-install version: v1beta1 clusterName: ostest controlPlaneConfig: servingCertificates: {} platform: agentBareMetal: agentSelector: matchLabels: bla: aaa pullSecretRef: name: pull-secret
cluster-image-set.yaml
文件示例
apiVersion: hive.openshift.io/v1 kind: ClusterImageSet metadata: name: openshift-4.16 spec: releaseImage: registry.ci.openshift.org/ocp/release:4.16.0-0.nightly-2022-06-06-025509
infra-env.yaml
文件示例
apiVersion: agent-install.openshift.io/v1beta1 kind: InfraEnv metadata: name: myinfraenv namespace: cluster0 spec: clusterRef: name: ostest namespace: cluster0 cpuArchitecture: aarch64 pullSecretRef: name: pull-secret sshAuthorizedKey: <ssh_public_key> nmStateConfigLabelSelector: matchLabels: cluster0-nmstate-label-name: cluster0-nmstate-label-value
nmstateconfig.yaml
文件示例
apiVersion: agent-install.openshift.io/v1beta1 kind: NMStateConfig metadata: name: master-0 namespace: openshift-machine-api labels: cluster0-nmstate-label-name: cluster0-nmstate-label-value spec: config: interfaces: - name: eth0 type: ethernet state: up mac-address: 52:54:01:aa:aa:a1 ipv4: enabled: true address: - ip: 192.168.122.2 prefix-length: 23 dhcp: false dns-resolver: config: server: - 192.168.122.1 routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.168.122.1 next-hop-interface: eth0 table-id: 254 interfaces: - name: "eth0" macAddress: 52:54:01:aa:aa:a1
pull-secret.yaml
文件示例
apiVersion: v1 kind: Secret type: kubernetes.io/dockerconfigjson metadata: name: pull-secret namespace: cluster0 stringData: .dockerconfigjson: <pull_secret>
其他资源
- 请参阅网络边缘的挑战,以了解更多有关 GitOps 零接触置备 (ZTP) 的信息。
11.3.4. 从基于代理的安装收集日志数据
使用以下步骤收集有关基于代理的安装失败的日志数据,以便为支持问题单提供。
先决条件
- 您已为 Kubernetes API 服务器配置了 DNS 记录。
流程
运行以下命令并收集输出:
$ ./openshift-install --dir <installation_directory> agent wait-for bootstrap-complete --log-level=debug
错误信息示例
... ERROR Bootstrap failed to complete: : bootstrap process timed out: context deadline exceeded
如果上一命令的输出显示失败,或者 bootstrap 没有进展,请运行以下命令连接到 rendezvous 主机并收集输出:
$ ssh core@<node-ip> agent-gather -O >agent-gather.tar.xz
注意红帽支持可以使用 rendezvous 主机收集的数据诊断大多数问题,但如果某些主机无法注册,从每个主机收集这些数据可能会很有用。
如果 bootstrap 完成且集群节点重启,请运行以下命令并收集输出:
$ ./openshift-install --dir <install_directory> agent wait-for install-complete --log-level=debug
如果上一命令的输出显示失败,请执行以下步骤:
运行以下命令,将
kubeconfig
文件导出到您的环境:$ export KUBECONFIG=<install_directory>/auth/kubeconfig
运行以下命令为调试收集信息:
$ oc adm must-gather
运行以下命令,从工作目录中刚刚创建的
must-gather
目录创建一个压缩文件:$ tar cvaf must-gather.tar.gz <must_gather_directory>
-
排除
/auth
子目录,将部署期间使用的安装目录附加到红帽客户门户上的支持问题单中。 - 将从此流程收集的所有其他数据添加到您的支持问题单中。