×

关于基于代理的安装程序

基于代理的安装方法提供了灵活性,您可以通过任何您选择的方式启动本地服务器。它结合了辅助安装服务的易用性和脱机运行的能力,包括在隔离的环境中。基于代理的安装是 OpenShift Container Platform 安装程序的子命令。它生成一个可启动的 ISO 镜像,其中包含部署 OpenShift Container Platform 集群所需的所有信息,以及可用的发行版镜像。

配置格式与安装程序配置的基础架构和用户配置的基础架构安装方法相同。基于代理的安装程序还可以选择生成或接受零接触配置 (ZTP) 自定义资源。ZTP 允许您使用裸机设备的声明式配置来配置新的边缘站点。

表 1. 基于代理的安装程序支持的架构
CPU 架构 连接安装 断开连接安装

64 位 x86

64 位 ARM

ppc64le

s390x

了解基于代理的安装程序

作为 OpenShift Container Platform 用户,您可以在断开连接的环境中利用辅助安装程序托管服务的优势。

基于代理的安装包含一个可启动的 ISO,其中包含辅助发现代理和辅助服务。两者都是执行集群安装所必需的,但后者仅在一个主机上运行。

目前,IBM Z® (s390x) 上的 ISO 引导支持仅适用于 Red Hat Enterprise Linux (RHEL) KVM,它提供了选择基于 PXE 或 ISO 的安装的灵活性。对于使用 z/VM 和逻辑分区 (LPAR) 的安装,仅支持 PXE 引导。

openshift-install agent create image 子命令根据您提供的输入生成一个临时 ISO。您可以选择通过以下清单提供输入

首选

  • 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

基于Agent的安装流程

在引导过程开始时,其中一个控制平面主机运行 Assisted Service,最终成为引导主机。此节点称为**Rendezvous 主机**(节点 0)。Assisted Service 确保所有主机都满足要求,并触发 OpenShift Container Platform 集群部署。所有节点都将 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像写入磁盘。非引导节点重新引导并启动集群部署。节点重新引导后,Rendezvous 主机重新引导并加入集群。引导完成,集群部署完成。

Agent-based installer workflow
图 1. 节点安装流程

您可以通过openshift-install agent create image 子命令为以下拓扑安装断开连接的 OpenShift Container Platform 集群

  • **单节点 OpenShift Container Platform 集群 (SNO)**:充当主节点和工作节点的节点。

  • **三节点 OpenShift Container Platform 集群**: 一个紧凑型集群,具有三个也充当工作节点的主节点。

  • **高可用性 OpenShift Container Platform 集群 (HA)**:三个主节点和任意数量的工作节点。

以下拓扑的推荐集群资源

表 2. 推荐集群资源
拓扑 控制平面节点数 计算节点数 vCPU 内存 存储

单节点集群

1

0

8 个 vCPU

16 GB RAM

120 GB

紧凑型集群

3

0 或 1

8 个 vCPU

16 GB RAM

120 GB

HA 集群

3

2 个及以上

8 个 vCPU

16 GB RAM

120 GB

install-config.yaml中,指定要执行安装的平台。支持以下平台:

  • baremetal (裸机)

  • vsphere

  • none

    对于平台none

    • none选项要求您在集群中提供 DNS 名称解析和负载均衡基础设施。“附加资源”部分的“使用平台“none”选项的集群要求”中提供了更多信息。

    • 在尝试在虚拟化或云环境中安装 OpenShift Container Platform 集群之前,请查看在未经测试的平台上部署 OpenShift Container Platform 的指南中的信息。

关于 FIPS 合规性

对于许多 OpenShift Container Platform 客户而言,在任何系统投入生产之前,都需要某种程度的合规性或法规遵从性。这种合规性可能由国家标准、行业标准或组织的企业治理框架强制执行。联邦信息处理标准 (FIPS) 合规性是在高度安全的环境中确保仅允许使用受支持的加密技术的最关键组件之一。

要为您的集群启用 FIPS 模式,必须从配置为在 FIPS 模式下运行的 Red Hat Enterprise Linux (RHEL) 计算机运行安装程序。有关在 RHEL 上配置 FIPS 模式的更多信息,请参阅将 RHEL 切换到 FIPS 模式

在 FIPS 模式下启动 Red Hat Enterprise Linux (RHEL) 或 Red Hat Enterprise Linux CoreOS (RHCOS) 时,OpenShift Container Platform 核心组件仅在 x86_64、ppc64le 和 s390x 架构上使用已提交给 NIST 进行 FIPS 140-2/140-3 验证的 RHEL 加密库。

通过基于 Agent 的安装程序配置 FIPS

在集群部署期间,当在您的集群中部署 Red Hat Enterprise Linux CoreOS (RHCOS) 机器时,将应用联邦信息处理标准 (FIPS) 更改。对于 Red Hat Enterprise Linux (RHEL) 机器,您必须在计划用作工作机的机器上安装操作系统时启用 FIPS 模式。

您可以通过首选方法install-config.yamlagent-config.yaml启用 FIPS 模式。

  1. 您必须在install-config.yaml文件中将fips字段的值设置为True

    install-config.yaml 文件示例
    apiVersion: v1
    baseDomain: test.example.com
    metadata:
      name: sno-cluster
    fips: True
  2. 可选:如果您使用的是 GitOps ZTP 清单,则必须在agent-cluster-install.yaml文件中的Agent-install.openshift.io/install-config-overrides字段中将fips的值设置为True

    agent-cluster-install.yaml 文件示例
    apiVersion: extensions.hive.openshift.io/v1beta1
    kind: AgentClusterInstall
    metadata:
      annotations:
        agent-install.openshift.io/install-config-overrides: '{"fips": True}'
      name: sno-cluster
      namespace: sno-cluster-test

主机配置

您可以在agent-config.yaml文件中为集群上的每个主机进行其他配置,例如网络配置和根设备提示。

对于您配置的每个主机,您必须提供主机上接口的 MAC 地址以指定您正在配置的主机。

主机角色

集群中的每个主机都分配有masterworker的角色。您可以使用role参数在agent-config.yaml文件中为每个主机定义角色。如果您不为主机分配角色,则将在安装期间随机分配角色。

建议您明确定义主机角色。

必须将rendezvousIP分配给具有master角色的主机。这可以通过手动方式完成,也可以通过允许基于 Agent 的安装程序分配角色来完成。

您不需要为 Rendezvous 主机明确定义master角色,但是您不能创建与此分配冲突的配置。

例如,如果您有 4 个主机,其中 3 个主机明确定义为具有master角色,则在安装过程中自动分配worker角色的最后一个主机不能配置为 Rendezvous 主机。

agent-config.yaml 文件示例
apiVersion: v1beta1
kind: AgentConfig
metadata:
  name: example-cluster
rendezvousIP: 192.168.111.80
hosts:
  - hostname: master-1
    role: master
    interfaces:
      - name: eno1
        macAddress: 00:ef:44:21:e6:a5
  - hostname: master-2
    role: master
    interfaces:
      - name: eno1
        macAddress: 00:ef:44:21:e6:a6
  - hostname: master-3
    role: master
    interfaces:
      - name: eno1
        macAddress: 00:ef:44:21:e6:a7
  - hostname: worker-1
    role: worker
    interfaces:
      - name: eno1
        macAddress: 00:ef:44:21:e6:a8

关于根设备提示

rootDeviceHints参数使安装程序能够将 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像置备到特定设备。安装程序按发现设备的顺序检查设备,并将发现的值与提示值进行比较。安装程序使用第一个与提示值匹配的已发现设备。配置可以组合多个提示,但设备必须匹配所有提示才能使安装程序选择它。

表 3. 子字段
子字段 描述

deviceName

包含 Linux 设备名称(例如/dev/vda/dev/disk/by-path/)的字符串。建议使用指向存储位置的/dev/disk/by-path/链接。提示必须与实际值完全匹配。

hctl

包含 SCSI 总线地址(如0:0:0:0)的字符串。提示必须与实际值完全匹配。

model

包含供应商特定设备标识符的字符串。提示可以是实际值的子字符串。

vendor

包含设备供应商或制造商名称的字符串。提示可以是实际值的子字符串。

serialNumber

包含设备序列号的字符串。提示必须与实际值完全匹配。

minSizeGigabytes

表示设备以千兆字节为单位的最小大小的整数。

wwn

包含唯一存储标识符的字符串。提示必须与实际值完全匹配。如果您使用udevadm命令检索wwn值,并且该命令输出ID_WWN_WITH_EXTENSION的值,则必须使用此值来指定wwn子字段。

rotational

一个布尔值,指示设备是否应为旋转磁盘 (true) 或不是 (false)。

示例用法
     - name: master-0
       role: master
       rootDeviceHints:
         deviceName: "/dev/sda"

关于网络

生成 agent ISO 时必须知道 **Rendezvous IP**,以便在初始引导期间所有主机都可以检查辅助服务。如果使用动态主机配置协议 (DHCP) 服务器分配 IP 地址,则必须将 `rendezvousIP` 字段设置为将成为已部署控制平面一部分的主机之一的 IP 地址。在没有 DHCP 服务器的环境中,您可以静态定义 IP 地址。

除了静态 IP 地址外,您还可以应用任何 NMState 格式的网络配置。这包括 VLAN 和网卡绑定。

DHCP

首选方法:`install-config.yaml` 和 `agent-config.yaml`

您必须指定 `rendezvousIP` 字段的值。`networkConfig` 字段可以留空。

agent-config.yaml 文件示例
apiVersion: v1alpha1
kind: AgentConfig
metadata:
  name: sno-cluster
rendezvousIP: 192.168.111.80 (1)
1 Rendezvous 主机的 IP 地址。

静态网络

  1. 首选方法:`install-config.yaml` 和 `agent-config.yaml`

    agent-config.yaml 文件示例
    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
    1 如果未为 `rendezvousIP` 字段指定值,则将从 `networkConfig` 字段中指定的静态 IP 地址中选择一个地址。
    2 主机上接口的 MAC 地址,用于确定将配置应用于哪个主机。
    3 目标裸机主机的静态 IP 地址。
    4 目标裸机主机的静态 IP 地址的子网前缀。
    5 目标裸机主机的 DNS 服务器。
    6 节点流量的下一跳地址。这必须与为指定接口设置的 IP 地址位于同一子网中。
  2. 可选方法: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)
    1 目标裸机主机的静态 IP 地址。
    2 目标裸机主机的静态 IP 地址的子网前缀。
    3 目标裸机主机的 DNS 服务器。
    4 节点流量的下一跳地址。这必须与为指定接口设置的 IP 地址位于同一子网中。
    5 主机上接口的 MAC 地址,用于确定将配置应用于哪个主机。

Rendezvous IP 从 `config` 字段中指定的静态 IP 地址中选择。

使用平台“none”选项的集群的要求

本节介绍配置为使用平台 `none` 选项的基于 Agent 的 OpenShift Container Platform 安装的要求。

在尝试在虚拟化或云环境中安装 OpenShift Container Platform 集群之前,请查看在未经测试的平台上部署 OpenShift Container Platform 的指南中的信息。

平台“none”DNS 要求

在 OpenShift Container Platform 部署中,以下组件需要 DNS 名称解析

  • Kubernetes API

  • OpenShift Container Platform 应用通配符

  • 控制平面和计算机器

Kubernetes API、控制平面机器和计算机器也需要反向 DNS 解析。

DNS A/AAAA 或 CNAME 记录用于名称解析,PTR 记录用于反向名称解析。反向记录很重要,因为 Red Hat Enterprise Linux CoreOS (RHCOS) 使用反向记录设置所有节点的主机名,除非主机名由 DHCP 提供。此外,反向记录用于生成 OpenShift Container Platform 运行所需的证书签名请求 (CSR)。

建议使用 DHCP 服务器为每个集群节点提供主机名。

使用平台 `none` 选项的 OpenShift Container Platform 集群需要以下 DNS 记录,并且必须在安装之前到位。在每个记录中,`` 是集群名称,`` 是您在 `install-config.yaml` 文件中指定的基域。完整的 DNS 记录采用以下形式:`...`。

表 4. 必需的 DNS 记录
组件 记录 描述

Kubernetes API

api.<cluster_name>.<base_domain>.

一个 DNS A/AAAA 或 CNAME 记录和一个 DNS PTR 记录,用于标识 API 负载均衡器。集群外部的客户端和集群内的所有节点都必须能够解析这些记录。

api-int.<cluster_name>.<base_domain>.

一个 DNS A/AAAA 或 CNAME 记录和一个 DNS PTR 记录,用于在内部标识 API 负载均衡器。集群内的所有节点都必须能够解析这些记录。

API 服务器必须能够通过 Kubernetes 中记录的主机名解析工作节点。如果 API 服务器无法解析节点名称,则代理 API 调用可能会失败,并且您无法检索 Pod 日志。

路由

*.apps.<cluster_name>.<base_domain>.

一个通配符 DNS A/AAAA 或 CNAME 记录,它引用应用程序入口负载均衡器。应用程序入口负载均衡器以运行 Ingress Controller Pod 的机器为目标。Ingress Controller Pod 默认情况下运行在计算机器上。集群外部的客户端和集群内的所有节点都必须能够解析这些记录。

例如,`console-openshift-console.apps.<cluster_name>.<base_domain>` 用作指向 OpenShift Container Platform 控制台的通配符路由。

控制平面机器

<master><n>.<cluster_name>.<base_domain>.

DNS A/AAAA 或 CNAME 记录和 DNS PTR 记录,用于标识每个控制平面节点的机器。集群内的节点必须能够解析这些记录。

计算机器

<worker><n>.<cluster_name>.<base_domain>.

DNS A/AAAA 或 CNAME 记录和 DNS PTR 记录,用于标识每个工作节点的机器。集群内的节点必须能够解析这些记录。

在 OpenShift Container Platform 4.4 及更高版本中,您无需在 DNS 配置中指定 etcd 主机和 SRV 记录。

您可以使用 `dig` 命令来验证名称和反向名称解析。

平台“none”集群的 DNS 配置示例

本节提供满足使用平台 `none` 选项部署 OpenShift Container Platform 的 DNS 要求的 A 和 PTR 记录配置示例。这些示例并非旨在提供有关选择一种 DNS 解决方案而不是另一种解决方案的建议。

在示例中,集群名称为 `ocp4`,基域为 `example.com`。

平台“none”集群的 DNS A 记录配置示例

以下示例是一个 BIND 区域文件,它显示了使用平台 `none` 选项的集群中名称解析的示例 A 记录。

DNS 区域数据库示例
$TTL 1W
@	IN	SOA	ns1.example.com.	root (
			2019070700	; serial
			3H		; refresh (3 hours)
			30M		; retry (30 minutes)
			2W		; expiry (2 weeks)
			1W )		; minimum (1 week)
	IN	NS	ns1.example.com.
	IN	MX 10	smtp.example.com.
;
;
ns1.example.com.		IN	A	192.168.1.5
smtp.example.com.		IN	A	192.168.1.5
;
helper.example.com.		IN	A	192.168.1.5
helper.ocp4.example.com.	IN	A	192.168.1.5
;
api.ocp4.example.com.		IN	A	192.168.1.5 (1)
api-int.ocp4.example.com.	IN	A	192.168.1.5 (2)
;
*.apps.ocp4.example.com.	IN	A	192.168.1.5 (3)
;
master0.ocp4.example.com.	IN	A	192.168.1.97 (4)
master1.ocp4.example.com.	IN	A	192.168.1.98 (4)
master2.ocp4.example.com.	IN	A	192.168.1.99 (4)
;
worker0.ocp4.example.com.	IN	A	192.168.1.11 (5)
worker1.ocp4.example.com.	IN	A	192.168.1.7 (5)
;
;EOF
1 提供 Kubernetes API 的名称解析。该记录引用 API 负载均衡器的 IP 地址。
2 提供 Kubernetes API 的名称解析。该记录引用 API 负载均衡器的 IP 地址,并用于内部集群通信。
3 提供通配符路由的名称解析。该记录引用应用程序入口负载均衡器的 IP 地址。应用程序入口负载均衡器以运行 Ingress Controller Pod 的机器为目标。Ingress Controller Pod 默认情况下运行在计算机器上。

示例中,Kubernetes API 和应用程序入口流量使用相同的负载均衡器。在生产环境中,您可以分别部署 API 和应用程序入口负载均衡器,以便您可以独立地扩展每个负载均衡器的基础设施。

4 为控制平面机器提供名称解析。
5 为计算机器提供名称解析。
平台“none”集群的示例 DNS PTR 记录配置

下面的示例 BIND 区域文件显示了使用平台none选项的集群中反向名称解析的示例 PTR 记录。

反向记录的示例 DNS 区域数据库
$TTL 1W
@	IN	SOA	ns1.example.com.	root (
			2019070700	; serial
			3H		; refresh (3 hours)
			30M		; retry (30 minutes)
			2W		; expiry (2 weeks)
			1W )		; minimum (1 week)
	IN	NS	ns1.example.com.
;
5.1.168.192.in-addr.arpa.	IN	PTR	api.ocp4.example.com. (1)
5.1.168.192.in-addr.arpa.	IN	PTR	api-int.ocp4.example.com. (2)
;
97.1.168.192.in-addr.arpa.	IN	PTR	master0.ocp4.example.com. (3)
98.1.168.192.in-addr.arpa.	IN	PTR	master1.ocp4.example.com. (3)
99.1.168.192.in-addr.arpa.	IN	PTR	master2.ocp4.example.com. (3)
;
11.1.168.192.in-addr.arpa.	IN	PTR	worker0.ocp4.example.com. (4)
7.1.168.192.in-addr.arpa.	IN	PTR	worker1.ocp4.example.com. (4)
;
;EOF
1 为 Kubernetes API 提供反向 DNS 解析。PTR 记录引用 API 负载均衡器的记录名称。
2 为 Kubernetes API 提供反向 DNS 解析。PTR 记录引用 API 负载均衡器的记录名称,并用于内部集群通信。
3 为控制平面机器提供反向 DNS 解析。
4 为计算机器提供反向 DNS 解析。

OpenShift Container Platform 应用程序通配符不需要 PTR 记录。

平台“none”负载均衡要求

在安装 OpenShift Container Platform 之前,您必须预配 API 和应用程序入口负载均衡基础设施。在生产环境中,您可以分别部署 API 和应用程序入口负载均衡器,以便您可以独立地扩展每个负载均衡器的基础设施。

这些要求不适用于使用平台none选项的单节点 OpenShift 集群。

如果您想使用 Red Hat Enterprise Linux (RHEL) 实例部署 API 和应用程序入口负载均衡器,则必须单独购买 RHEL 订阅。

负载均衡基础设施必须满足以下要求

  1. API 负载均衡器:为用户(包括人和机器)提供一个与平台交互和配置平台的通用端点。配置以下条件

    • 仅限 4 层负载均衡。这可以称为原始 TCP、SSL 直通或 SSL Bridge 模式。如果您使用 SSL Bridge 模式,则必须为 API 路由启用服务器名称指示 (SNI)。

    • 无状态负载均衡算法。选项根据负载均衡器的实现而有所不同。

    不要为 API 负载均衡器配置会话持久性。

    在负载均衡器的前面和后面配置以下端口

    表 5. API 负载均衡器
    端口 后端机器(池成员) 内部 外部 描述

    6443

    控制平面。您必须为 API 服务器运行状况检查探针配置/readyz端点。

    X

    X

    Kubernetes API 服务器

    22623

    控制平面。

    X

    机器配置服务器

    负载均衡器必须配置为在 API 服务器关闭/readyz端点到从池中删除 API 服务器实例的时间内最多花费 30 秒。在/readyz返回错误或恢复正常后的时间范围内,必须已删除或添加了端点。以 5 或 10 秒为间隔进行探测,两次成功的请求才能恢复正常,三次才能变为不正常,这些都是经过良好测试的值。

  2. 应用程序入口负载均衡器:为从集群外部流入的应用程序流量提供入口点。OpenShift Container Platform 集群需要 Ingress 路由器的正常配置。

    配置以下条件

    • 仅限 4 层负载均衡。这可以称为原始 TCP、SSL 直通或 SSL Bridge 模式。如果您使用 SSL Bridge 模式,则必须为入口路由启用服务器名称指示 (SNI)。

    • 建议基于可用的选项和将在平台上托管的应用程序类型,使用基于连接或基于会话的持久性。

    如果应用程序入口负载均衡器可以看到客户端的真实 IP 地址,则启用基于源 IP 的会话持久性可以提高使用端到端 TLS 加密的应用程序的性能。

    在负载均衡器的前面和后面配置以下端口

    表 6. 应用程序入口负载均衡器
    端口 后端机器(池成员) 内部 外部 描述

    443

    默认情况下运行 Ingress Controller Pod 的机器,计算或工作节点。

    X

    X

    HTTPS 流量

    80

    默认情况下运行 Ingress Controller Pod 的机器,计算或工作节点。

    X

    X

    HTTP 流量

    如果您要部署一个具有零计算节点的三节点集群,则 Ingress Controller Pod 将在控制平面节点上运行。在三节点集群部署中,您必须将应用程序入口负载均衡器配置为将 HTTP 和 HTTPS 流量路由到控制平面节点。

平台“none”集群的示例负载均衡器配置

本节提供了一个示例 API 和应用程序入口负载均衡器配置,该配置满足使用平台none选项的集群的负载均衡要求。该示例是 HAProxy 负载均衡器的/etc/haproxy/haproxy.cfg配置。该示例并非旨在提供关于选择一种负载均衡解决方案而不是另一种解决方案的建议。

示例中,Kubernetes API 和应用程序入口流量使用相同的负载均衡器。在生产环境中,您可以分别部署 API 和应用程序入口负载均衡器,以便您可以独立地扩展每个负载均衡器的基础设施。

如果您使用 HAProxy 作为负载均衡器并且 SELinux 设置为enforcing,则必须确保 HAProxy 服务可以通过运行setsebool -P haproxy_connect_any=1来绑定到配置的 TCP 端口。

示例 API 和应用程序入口负载均衡器配置
global
  log         127.0.0.1 local2
  pidfile     /var/run/haproxy.pid
  maxconn     4000
  daemon
defaults
  mode                    http
  log                     global
  option                  dontlognull
  option http-server-close
  option                  redispatch
  retries                 3
  timeout http-request    10s
  timeout queue           1m
  timeout connect         10s
  timeout client          1m
  timeout server          1m
  timeout http-keep-alive 10s
  timeout check           10s
  maxconn                 3000
listen api-server-6443 (1)
  bind *:6443
  mode tcp
  server master0 master0.ocp4.example.com:6443 check inter 1s
  server master1 master1.ocp4.example.com:6443 check inter 1s
  server master2 master2.ocp4.example.com:6443 check inter 1s
listen machine-config-server-22623 (2)
  bind *:22623
  mode tcp
  server master0 master0.ocp4.example.com:22623 check inter 1s
  server master1 master1.ocp4.example.com:22623 check inter 1s
  server master2 master2.ocp4.example.com:22623 check inter 1s
listen ingress-router-443 (3)
  bind *:443
  mode tcp
  balance source
  server worker0 worker0.ocp4.example.com:443 check inter 1s
  server worker1 worker1.ocp4.example.com:443 check inter 1s
listen ingress-router-80 (4)
  bind *:80
  mode tcp
  balance source
  server worker0 worker0.ocp4.example.com:80 check inter 1s
  server worker1 worker1.ocp4.example.com:80 check inter 1s
1 端口6443处理 Kubernetes API 流量并指向控制平面机器。
2 端口22623处理机器配置服务器流量并指向控制平面机器。
3 端口443处理 HTTPS 流量并指向运行 Ingress Controller Pod 的机器。Ingress Controller Pod 默认情况下在计算机器上运行。
4 端口80处理 HTTP 流量并指向运行 Ingress Controller Pod 的机器。Ingress Controller Pod 默认情况下在计算机器上运行。

如果您要部署一个具有零计算节点的三节点集群,则 Ingress Controller Pod 将在控制平面节点上运行。在三节点集群部署中,您必须将应用程序入口负载均衡器配置为将 HTTP 和 HTTPS 流量路由到控制平面节点。

如果您使用 HAProxy 作为负载均衡器,则可以通过在 HAProxy 节点上运行netstat -nltupe来检查haproxy进程是否正在侦听端口64432262344380

示例:Bond 和 VLAN 接口节点网络配置

以下agent-config.yaml文件是 bond 和 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 (1)
            type: bond (3)
            state: up
            mac-address: 00:21:50:90:c0:10 (4)
            ipv4:
              enabled: false
            ipv6:
              enabled: false
            link-aggregation:
              mode: active-backup (5)
              options:
                miimon: "150" (6)
              port:
               - enp0s4
               - enp0s5
        dns-resolver: (7)
          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 (8)
              next-hop-interface: bond0.300 (9)
              table-id: 254
1 接口名称。
2 接口类型。此示例创建一个 VLAN。
3 接口类型。此示例创建一个 bond。
4 接口的 MAC 地址。
5 mode属性指定绑定模式。
6 指定 MII 链路监控频率(毫秒)。此示例每 150 毫秒检查一次 bond 链路。
7 可选:指定 DNS 服务器的搜索和服务器设置。
8 节点流量的下一跳地址。这必须与为指定接口设置的 IP 地址位于同一子网中。
9 节点流量的下一跳接口。

示例:Bond 和 SR-IOV 双网卡节点网络配置

以下agent-config.yaml文件是具有 bond 和 SR-IOV 接口的双端口网卡清单的示例

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字段包含有关主机网络配置的信息,其子字段包括interfacesdns-resolverroutes
2 interfaces字段是为主机定义的网络接口数组。
3 接口名称。
4 接口类型。此示例创建一个以太网接口。
5 如果不需要,将其设置为false以禁用物理功能 (PF) 的 DHCP。
6 将其设置为要实例化的 SR-IOV 虚拟功能 (VF) 的数量。
7 将其设置为up
8 将其设置为false以禁用连接到 bond 的 VF 的 IPv4寻址。
9 设置 VF 的最小传输速率(以 Mbps 为单位)。此示例值设置速率为 100 Mbps。
  • 此值必须小于或等于最大传输速率。

  • 英特尔网卡不支持min-tx-rate参数。更多信息,请参见BZ#1772847

10 设置 VF 的最大传输速率(以 Mbps 为单位)。此示例值设置速率为 200 Mbps。
11 设置所需的绑定模式。
12 设置绑定接口的首选端口。主设备是第一个使用的绑定接口,除非它发生故障,否则不会被放弃。当绑定接口中的一个网卡速度更快,因此能够处理更大的负载时,此设置特别有用。此设置仅在绑定接口处于active-backup模式(模式 1)和balance-tlb(模式 5)时有效。
13 为绑定接口设置静态 IP 地址。这是节点 IP 地址。
14 bond0设置为默认路由的网关。
附加资源

裸机install-config.yaml文件示例

您可以自定义install-config.yaml文件以指定有关 OpenShift Container Platform 集群平台的更多详细信息,或修改所需参数的值。

apiVersion: v1
baseDomain: example.com (1)
compute: (2)
- name: worker
  replicas: 0 (3)
controlPlane: (2)
  name: master
  replicas: 1 (4)
metadata:
  name: sno-cluster (5)
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14 (6)
    hostPrefix: 23 (7)
  networkType: OVNKubernetes (8)
  serviceNetwork: (9)
  - 172.30.0.0/16
platform:
  none: {} (10)
fips: false (11)
pullSecret: '{"auths": ...}' (12)
sshKey: 'ssh-ed25519 AAAA...' (13)
1 集群的基本域名。所有 DNS 记录都必须为此基本域名的子域名,并且包含集群名称。
2 controlPlane部分是一个单一映射,但compute部分是一系列映射。为了满足不同数据结构的要求,compute部分的第一行必须以连字符-开头,而controlPlane部分的第一行则不能。只使用一个控制平面池。
3 此参数控制基于代理的安装在触发安装过程之前等待发现的计算机的数量。这是必须使用生成的 ISO 启动的计算机的数量。

如果您要安装一个三节点集群,请不要在安装 Red Hat Enterprise Linux CoreOS (RHCOS) 机器时部署任何计算机器。

4 您添加到集群的控制平面机器的数量。由于集群使用这些值作为集群中 etcd 端点的数量,因此该值必须与您部署的控制平面机器的数量相匹配。
5 您在 DNS 记录中指定的集群名称。
6 分配 Pod IP 地址的 IP 地址块。此块不得与现有物理网络重叠。这些 IP 地址用于 Pod 网络。如果您需要从外部网络访问 Pod,则必须配置负载均衡器和路由器来管理流量。

E 类 CIDR 范围保留供将来使用。要使用 E 类 CIDR 范围,您必须确保您的网络环境接受 E 类 CIDR 范围内的 IP 地址。

7 分配给每个节点的子网前缀长度。例如,如果hostPrefix设置为23,则每个节点都将从给定的cidr分配一个/23子网,这允许 510 (2^(32 - 23) - 2) 个 Pod IP 地址。如果您需要从外部网络访问节点,请配置负载均衡器和路由器来管理流量。
8 要安装的集群网络插件。默认值OVNKubernetes是唯一受支持的值。
9 用于服务 IP 地址的 IP 地址池。您只能输入一个 IP 地址池。此块不得与现有物理网络重叠。如果您需要从外部网络访问服务,则必须配置负载均衡器和路由器来管理流量。
10 对于单节点集群,您必须将平台设置为none。对于多节点集群,您可以将平台设置为vspherebaremetalnone

如果您将平台设置为vspherebaremetal,则可以通过三种方式配置集群节点的 IP 地址端点

  • IPv4

  • IPv6

  • 并行使用 IPv4 和 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
11 是否启用或禁用 FIPS 模式。默认情况下,FIPS 模式未启用。如果启用了 FIPS 模式,则运行 OpenShift Container Platform 的 Red Hat Enterprise Linux CoreOS (RHCOS) 机器将绕过默认的 Kubernetes 加密套件,并改用 RHCOS 提供的加密模块。

在 FIPS 模式下启动 Red Hat Enterprise Linux (RHEL) 或 Red Hat Enterprise Linux CoreOS (RHCOS) 时,OpenShift Container Platform 核心组件仅在 x86_64、ppc64le 和 s390x 架构上使用已提交给 NIST 进行 FIPS 140-2/140-3 验证的 RHEL 加密库。

12 此拉取密钥允许您向包含的授权机构(包括提供 OpenShift Container Platform 组件的容器映像的 Quay.io)提供的服务进行身份验证。
13 Red Hat Enterprise Linux CoreOS (RHCOS) 中core用户的 SSH 公钥。

对于要执行安装调试或灾难恢复的生产 OpenShift Container Platform 集群,请指定您的ssh-agent进程使用的 SSH 密钥。

创建代理 ISO 之前的验证检查

基于代理的安装程序在创建 ISO 之前会对用户定义的 YAML 文件执行验证检查。验证成功后,将创建代理 ISO。

install-config.yaml
  • 支持baremetalvspherenone平台。

  • 对于none平台,networkType参数必须为OVNKubernetes

  • 对于裸机和 vSphere 平台,必须设置apiVIPsingressVIPs参数。

  • 裸机平台配置中的一些主机特定字段在agent-config.yaml文件中具有等效项,将被忽略。如果设置了这些字段,则会记录警告消息。

agent-config.yaml
  • 每个接口都必须定义一个 MAC 地址。此外,所有接口都必须具有不同的 MAC 地址。

  • 每个主机必须至少定义一个接口。

  • 根设备提示中不支持 WWN (World Wide Name) 供应商扩展。

  • host对象中的role参数必须具有masterworker的值。

ZTP 清单

agent-cluster-install.yaml
  • 对于 IPv6,networkType参数唯一支持的值是OVNKubernetesOpenshiftSDN值只能用于 IPv4。

cluster-image-set.yaml
  • ReleaseImage参数必须与安装程序中定义的版本匹配。