第 12 章 使用基于代理的安装程序安装内部集群
12.1. 准备使用基于代理的安装程序安装
12.1.1. 关于基于代理的安装程序
基于代理的安装方法提供了以任何方式引导内部服务器的灵活性。它将辅助安装服务的使用与离线运行的功能相结合,包括在 air-gapped 环境中。基于代理的安装是 OpenShift Container Platform 安装程序的子命令。它生成一个可引导的 ISO 镜像,其中包含使用可用发行镜像部署 OpenShift Container Platform 集群所需的所有信息。
配置的格式与安装程序置备的基础架构和用户置备的基础架构安装方法相同。基于代理的安装程序也可以选择生成或接受 Zero Touch Provisioning (ZTP) 自定义资源。ZTP 允许您使用裸机设备声明配置来置备新的边缘站点。
12.1.2. 了解基于代理的安装程序
作为 OpenShift Container Platform 用户,您可以在断开连接的环境中利用 Assisted Installer 托管服务的优势。
基于代理的安装包含一个可引导 ISO,其中包含辅助发现代理和辅助服务。两者都需要执行集群安装,但后者仅在其中一个主机上运行。
openshift-install agent create image
子命令会根据您提供的输入生成一个临时 ISO。您可以选择通过以下清单提供输入:
Preferred:
-
install-config.yaml
-
agent-config.yaml
或
可选:ZTP 清单
-
cluster-manifests/cluster-deployment.yaml
-
cluster-manifests/agent-cluster-install.yaml
-
cluster-manifests/pull-secret.yaml
-
cluster-manifests/infraenv.yaml
-
cluster-manifests/cluster-image-set.yaml
-
cluster-manifests/nmstateconfig.yaml
-
mirror/registries.conf
-
mirror/ca-bundle.crt
12.1.2.1. 基于代理的安装程序工作流
其中一个 control plane 主机在引导过程中运行 Assisted Service,最终成为 bootstrap 主机。此节点称为 rendezvous 主机 (node 0)。Assisted Service 确保所有主机都满足要求,并触发 OpenShift Container Platform 集群部署。所有节点都将 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像写入磁盘。非引导节点重新引导并启动集群部署。节点重启后,rendezvous 主机会重启并加入集群。bootstrap 已完成,并部署了集群。
图 12.1. 节点安装工作流
您可以通过 openshift-install agent create image
子命令为以下拓扑安装断开连接的 OpenShift Container Platform 集群:
- 单节点 OpenShift Container Platform 集群 (SNO) :一个 master 和 worker 的节点。
- 三节点 OpenShift Container Platform 集群 :一个紧凑集群,它有三个 master 节点,也是 worker 节点。
- 高可用性 OpenShift Container Platform 集群 (HA) :具有任意数量的 worker 节点的 master 节点。
12.1.2.2. 拓扑的建议资源
为以下拓扑推荐的集群资源:
Topology | master 节点数量 | worker 节点数量 | vCPU | memory | 存储 |
---|---|---|---|---|---|
单节点集群 | 1 | 0 | 8 个 vCPU | 16GB RAM | 120GB |
紧凑集群 | 3 | 0 或 1 | 8 个 vCPU | 16GB RAM | 120GB |
HA 集群 | 3 | 2 及更高版本 | 8 个 vCPU | 16GB RAM | 120GB |
支持以下平台:
-
baremetal
-
vsphere
none
注意none
选项只支持带有OVNKubernetes
网络类型的单节点 OpenShift 集群。
其他资源
12.1.3. 关于网络
在生成代理 ISO 时,必须知道 rendezvous IP,以便在初始引导过程中,所有主机都可以检查辅助服务。如果使用动态主机配置协议 (DHCP) 服务器分配 IP 地址,则必须将 rendezvousIP
字段设置为将成为部署 control plane 一部分的主机的 IP 地址。在没有 DHCP 服务器的环境中,您可以静态定义 IP 地址。
除了静态 IP 地址外,您还可以应用任何采用 NMState 格式的网络配置。这包括 VLAN 和 NIC 绑定。
12.1.3.1. DHCP
首选方法:install-config.yaml
和 agent-config.yaml
您必须为 rendezvousIP
字段指定值。networkConfig
字段可以留空:
agent-config.yaml.file 示例
apiVersion: v1alpha1
kind: AgentConfig
metadata:
name: sno-cluster
rendezvousIP: 192.168.111.80 1
- 1
- rendezvous 主机的 IP 地址。
12.1.3.2. 静态网络
首选方法:
install-config.yaml
和agent-config.yaml
agent-config.yaml.file 示例
cat > agent-config.yaml << EOF apiVersion: v1alpha1 kind: AgentConfig metadata: name: sno-cluster rendezvousIP: 192.168.111.80 1 hosts: - hostname: master-0 interfaces: - name: eno1 macAddress: 00:ef:44:21:e6:a5 2 networkConfig: interfaces: - name: eno1 type: ethernet state: up mac-address: 00:ef:44:21:e6:a5 ipv4: enabled: true address: - ip: 192.168.111.80 3 prefix-length: 23 4 dhcp: false dns-resolver: config: server: - 192.168.111.1 5 routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.168.111.1 6 next-hop-interface: eno1 table-id: 254 EOF
可选方法:GitOps ZTP 清单
GitOps ZTP 自定义资源的可选方法包含 6 个自定义资源 ; 您可以在
nmstateconfig.yaml
文件中配置静态 IP。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 1 prefix-length: 23 2 dhcp: false dns-resolver: config: server: - 192.168.122.1 3 routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.168.122.1 4 next-hop-interface: eth0 table-id: 254 interfaces: - name: eth0 macAddress: 52:54:01:aa:aa:a1 5
rendezvous IP 从 config
字段中指定的静态 IP 地址中选择。
12.1.4. 示例:绑定和 VLAN 接口节点网络配置
以下 agent-config.yaml
文件是绑定和 VLAN 接口的清单示例。
apiVersion: v1alpha1 kind: AgentConfig rendezvousIP: 10.10.10.14 hosts: - hostname: master0 role: master interfaces: - name: enp0s4 macAddress: 00:21:50:90:c0:10 - name: enp0s5 macAddress: 00:21:50:90:c0:20 networkConfig: interfaces: - name: bond0.300 1 type: vlan 2 state: up vlan: base-iface: bond0 id: 300 ipv4: enabled: true address: - ip: 10.10.10.14 prefix-length: 24 dhcp: false - name: bond0 3 type: bond 4 state: up mac-address: 00:21:50:90:c0:10 5 ipv4: enabled: false ipv6: enabled: false link-aggregation: mode: active-backup 6 options: miimon: "150" 7 port: - enp0s4 - enp0s5 dns-resolver: 8 config: server: - 10.10.10.11 - 10.10.10.12 routes: config: - destination: 0.0.0.0/0 next-hop-address: 10.10.10.10 9 next-hop-interface: bond0.300 10 table-id: 254
12.1.5. 示例:绑定和 SR-IOV 双节点网络配置
支持与为 SR-IOV 设备启用 NIC 分区关联的第 1 天操作只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
以下 agent-config.yaml
文件是带有绑定和 SR-IOV 接口的双端口 NIC 的清单示例:
apiVersion: v1alpha1 kind: AgentConfig rendezvousIP: 10.10.10.14 hosts: - hostname: worker-1 interfaces: - name: eno1 macAddress: 0c:42:a1:55:f3:06 - name: eno2 macAddress: 0c:42:a1:55:f3:07 networkConfig: 1 interfaces: 2 - name: eno1 3 type: ethernet 4 state: up mac-address: 0c:42:a1:55:f3:06 ipv4: enabled: true dhcp: false 5 ethernet: sr-iov: total-vfs: 2 6 ipv6: enabled: false - name: sriov:eno1:0 type: ethernet state: up 7 ipv4: enabled: false 8 ipv6: enabled: false dhcp: false - name: sriov:eno1:1 type: ethernet state: down - name: eno2 type: ethernet state: up mac-address: 0c:42:a1:55:f3:07 ipv4: enabled: true ethernet: sr-iov: total-vfs: 2 ipv6: enabled: false - name: sriov:eno2:0 type: ethernet state: up ipv4: enabled: false ipv6: enabled: false - name: sriov:eno2:1 type: ethernet state: down - name: bond0 type: bond state: up min-tx-rate: 100 9 max-tx-rate: 200 10 link-aggregation: mode: active-backup 11 options: primary: sriov:eno1:0 12 port: - sriov:eno1:0 - sriov:eno2:0 ipv4: address: - ip: 10.19.16.57 13 prefix-length: 23 dhcp: false enabled: true ipv6: enabled: false dns-resolver: config: server: - 10.11.5.160 - 10.2.70.215 routes: config: - destination: 0.0.0.0/0 next-hop-address: 10.19.17.254 next-hop-interface: bond0 14 table-id: 254
- 1
networkConfig
字段包含有关主机的网络配置的信息,子字段包括接口
、dns-resolver
和routes
。- 2
interfaces
字段是为主机定义的网络接口数组。- 3
- 接口的名称。
- 4
- 接口的类型。这个示例创建了一个以太网接口。
- 5
- 如果物理功能 (PF) 没有严格要求,则将其设置为
false
以禁用 DHCP。 - 6
- 把它设置为要实例化的 SR-IOV 虚拟功能 (VF) 的数量。
- 7
- 把它设置为
up
。 - 8
- 把它设置为
false
,以禁用附加到绑定的 VF 的 IPv4 寻址。 - 9
- 为 VF 设置最小传输率(以 Mbps 为单位)。这个示例值设置 100 Mbps 的速度。
- 这个值必须小于或等于最大传输率。
-
Intel NIC 不支持
min-tx-rate
参数。如需更多信息,请参阅 BZ#1772847。
- 10
- 为 VF 设置最大传输率(以 Mbps 为单位)。此示例值设置 200 Mbps 的速度。
- 11
- 设置所需的绑定模式。
- 12
- 设置绑定接口的首选端口。主设备是要使用的绑定接口的第一个,除非失败,否则不会被取消。当绑定接口中的一个 NIC 速度更快时,此设置特别有用,因此可以处理较大的负载。只有在绑定接口处于
active-backup
模式(模式 1)和balance-tlb
(模式 5)时,此设置才有效。 - 13
- 为绑定接口设置静态 IP 地址。这是节点 IP 地址。
- 14
- 将
bond0
设置为默认路由的网关。
其他资源
12.1.6. 裸机 install-config.yaml 文件示例
您可以自定义 install-config.yaml
文件,以指定有关 OpenShift Container Platform 集群平台的更多详情,或修改所需参数的值。
apiVersion: v1 baseDomain: example.com 1 compute: 2 - name: worker replicas: 0 3 controlPlane: 4 name: master replicas: 1 5 metadata: name: sno-cluster 6 networking: clusterNetwork: - cidr: 10.128.0.0/14 7 hostPrefix: 23 8 networkType: OVNKubernetes 9 serviceNetwork: 10 - 172.30.0.0/16 platform: none: {} 11 fips: false 12 pullSecret: '{"auths": ...}' 13 sshKey: 'ssh-ed25519 AAAA...' 14
- 1
- 集群的基域。所有 DNS 记录都必须是这个基域的子域,并包含集群名称。
- 2 4
controlPlane
部分是一个单个映射,但compute
部分是一系列映射。为满足不同数据结构的要求,compute
部分的第一行必须以连字符-
开头,controlPlane部分
的第一行则不以连字符开头。仅使用一个 control plane 池。- 3
- 此参数控制基于代理的安装在触发安装过程前等待发现的计算机器数量。它是必须使用生成的 ISO 引导的计算机器数量。注意
如果要安装一个三节点集群,在安装 Red Hat Enterprise Linux CoreOS(RHCOS)机器时不要部署任何计算机器。
- 5
- 您添加到集群的 control plane 机器数量。由于集群使用这些值作为集群中的 etcd 端点数量,所以该值必须与您部署的 control plane 机器数量匹配。
- 6
- 您在 DNS 记录中指定的集群名称。
- 7
- 从中分配 Pod IP 地址的 IP 地址块。此块不得与现有物理网络重叠。这些 IP 地址用于 pod 网络。如果需要从外部网络访问 pod,您必须配置负载均衡器和路由器来管理流量。注意
类 E CIDR 范围被保留以供以后使用。要使用 Class E CIDR 范围,您必须确保您的网络环境接受 Class E CIDR 范围内的 IP 地址。
- 8
- 分配给每个节点的子网前缀长度。例如,如果
hostPrefix 设为
23
,则每个节点从 givencidr
中分配 a/23
子网,这样就能有 510(2^(32 - 23)- 2)个 pod IP 地址。如果需要从外部网络访问节点,请配置负载均衡器和路由器来管理流量。 - 9
- 要安装的集群网络插件。支持的值有
OVNKubernetes
(默认值)和OpenShiftSDN
。 - 10
- 用于服务 IP 地址的 IP 地址池。您只能输入一个 IP 地址池。此块不得与现有物理网络重叠。如果您需要从外部网络访问服务,请配置负载均衡器和路由器来管理流量。
- 11
- 对于单节点集群,您必须将平台设置为
none
。您可以为多节点集群将平台设置为vsphere
或baremetal
。注意如果将平台设置为
vsphere
或baremetal
,您可以以三种方式为集群节点配置 IP 地址端点:- IPv4
- IPv6
- IPv4 和 IPv6 并行 (dual-stack)
双栈网络示例
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
- 12
- 是否启用或禁用 FIPS 模式。默认情况下不启用 FIPS 模式。重要
OpenShift Container Platform 4.13 基于 Red Hat Enterprise Linux (RHEL) 9.2。RHEL 9.2 加密模块尚未经过 FIPS 验证。如需更多信息,请参阅 4.13 OpenShift Container Platform 发行注记 中的 "About this release"。
- 13
- 此 pull secret 允许您与所含授权机构提供的服务进行身份验证,这些服务包括为 OpenShift Container Platform 组件提供容器镜像的 Quay.io。
- 14
- Red Hat Enterprise Linux CoreOS(RHCOS)中
core
用户的 SSH 公钥。注意对于您要在其上执行安装调试或灾难恢复的生产环境 OpenShift Container Platform 集群,请指定
ssh-agent
进程使用的 SSH 密钥。
12.1.7. 在代理 ISO 创建前验证检查
基于代理的安装程序在创建 ISO 之前对用户定义的 YAML 文件执行验证检查。验证成功后,会创建代理 ISO。
install-config.yaml
-
支持
裸机
,vsphere
和none
平台。 -
如果平台为
none
,控制平面的副本需要为1
,worker 副本的总数为0
。 -
如果平台为
none
,则networkType
参数需要为OVNKubernetes
。 -
如果是裸机和 vSphere 平台,则需要设置
apiVIPs
和ingressVIPs
参数。 -
在
agent-config.yaml
文件中,裸机平台配置中有一些特定于主机的字段将被忽略。如果设置了这些字段,则会记录警告消息。
agent-config.yaml
- 每个接口都必须有一个定义的 MAC 地址。另外,所有接口都必须具有不同的 MAC 地址。
- 每个主机必须至少定义一个接口。
- root 设备提示不支持全局名称 (WWN) 供应商扩展。
-
host
对象中的role
参数的值必须是master
或worker
。
12.1.7.1. ZTP 清单
agent-cluster-install.yaml
-
对于 IPv6,
networkType
参数唯一支持的值是OVNKubernetes
。OpenshiftSDN
值只能用于 IPv4。
cluster-image-set.yaml
-
ReleaseImage
参数必须与安装程序中定义的发行版本匹配。
12.1.8. 关于 root 设备提示
rootDeviceHints
参数可让安装程序将 Red Hat Enterprise Linux CoreOS(RHCOS)镜像置备到特定的设备。安装程序会按照发现设备的顺序检查设备,并将发现的值与 hint 值进行比较。安装程序使用第一个与 hint 值匹配的发现设备。配置可以组合多个 hint,但设备必须与所有提示匹配,以便安装程序进行选择。
子字段 | 描述 |
---|---|
|
包含 Linux 设备名称的字符串(如 |
|
包含类似 |
| 包含特定厂商的设备标识符的字符串。hint 可以是实际值的子字符串。 |
| 包含该设备厂商或制造商名称的字符串。hint 可以是实际值的子字符串。 |
| 包含设备序列号的字符串。hint 必须与实际值完全匹配。 |
| 以 GB 为单位代表设备的最小大小的整数。 |
| 包含唯一存储标识符的字符串。hint 必须与实际值完全匹配。 |
| 指明该设备为旋转磁盘(true)还是非旋转磁盘(false)的布尔值。 |
用法示例
- name: master-0 role: master rootDeviceHints: deviceName: "/dev/sda"