3.4. 使用自定义网络在 vSphere 上安装集群
在 OpenShift Container Platform 版本 4.16 中,您可以使用自定义的网络配置选项在 VMware vSphere 环境中安装集群。通过自定义网络配置,您的集群可以与环境中现有的 IP 地址分配共存,并与现有的 MTU 和 VXLAN 配置集成。
OpenShift Container Platform 支持将集群部署到单个 VMware vCenter 中。不支持在多个 vCenter 上使用机器/机器集部署集群。
您必须在安装过程中设置大多数网络配置参数,且您只能在正在运行的集群中修改 kubeProxy
配置参数。
执行用户置备的基础架构安装的步骤仅作为示例。使用您提供的基础架构安装集群需要了解 vSphere 平台和 OpenShift Container Platform 的安装过程。使用用户置备的基础架构安装说明作为指南 ; 您可以通过其他方法创建所需的资源。
3.4.1. 先决条件
- 您已完成了 使用用户置备的基础架构准备安装集群 中的任务。
- 您检查了 VMware 平台许可证。红帽不会对 VMware 许可证产生任何限制,但有些 VMware 基础架构组件需要许可。
- 您可以参阅有关 OpenShift Container Platform 安装和更新 流程的详细信息。
- 您可以阅读有关 选择集群安装方法的文档,并为用户准备它。
- 完成安装要求您在 vSphere 主机上上传 Red Hat Enterprise Linux CoreOS(RHCOS)OVA。完成此过程的机器需要访问 vCenter 和 ESXi 主机上的端口 443。验证是否可以访问端口 443。
- 如果您使用防火墙,您与管理员确认可以访问端口 443。control plane 节点必须能够通过端口 443 访问 vCenter 和 ESXi 主机,才能成功安装。
- 如果使用防火墙,则会 将其配置为允许集群需要访问的站点。
3.4.2. OpenShift Container Platform 互联网访问
在 OpenShift Container Platform 4.16 中,您需要访问互联网来安装集群。
您必须具有以下互联网访问权限:
- 访问 OpenShift Cluster Manager 以下载安装程序并执行订阅管理。如果集群可以访问互联网,并且没有禁用 Telemetry,该服务会自动授权您的集群。
- 访问 Quay.io,以获取安装集群所需的软件包。
- 获取执行集群更新所需的软件包。
如果您的集群无法直接访问互联网,则可以在置备的某些类型的基础架构上执行受限网络安装。在此过程中,您可以下载所需的内容,并使用它为镜像 registry 填充安装软件包。对于某些安装类型,集群要安装到的环境不需要访问互联网。在更新集群前,您要更新镜像 registry 的内容。
3.4.3. VMware vSphere 区域和区启用
您可以将 OpenShift Container Platform 集群部署到在单个 VMware vCenter 中运行的多个 vSphere 数据中心。每个数据中心都可以运行多个集群。此配置降低了导致集群失败的硬件故障或网络中断的风险。要启用区域和区域,您必须为 OpenShift Container Platform 集群定义多个故障域。
VMware vSphere 区域和区启用功能需要 vSphere Container Storage Interface (CSI) 驱动程序作为集群中的默认存储驱动程序。因此,这个功能只在新安装的集群中可用。
对于从上一版本升级的集群,您必须为集群启用 CSI 自动迁移。然后,您可以为升级的集群配置多个区域和区域。
默认安装配置将集群部署到单个 vSphere 数据中心。如果要将集群部署到多个 vSphere 数据中心,您必须创建一个启用地区和区功能的安装配置文件。
默认 install-config.yaml
文件包含 vcenters
和 failureDomains
字段,您可以在其中为 OpenShift Container Platform 集群指定多个 vSphere 数据中心和集群。如果要在由单个数据中心组成的 vSphere 环境中安装 OpenShift Container Platform 集群,您可以将这些字段留空。
以下列表描述了为集群定义区和区域相关的术语:
-
故障域:建立地区和区域之间的关系。您可以使用 vCenter 对象(如
datastore
对象)定义故障域。故障域定义 OpenShift Container Platform 集群节点的 vCenter 位置。 -
Region :指定 vCenter 数据中心。您可以使用
openshift-region
标签类别中的标签来定义区域。 -
Zone:指定一个 vCenter 集群。您可以使用
openshift-zone
标签类别中的标签来定义区。
如果您计划在 install-config.yaml
文件中指定多个故障域,则必须在创建配置文件前创建标签类别、区域标签和区域标签。
您必须为每个代表一个区域的 vCenter 数据中心创建一个 vCenter 标签。另外,您必须为比数据中心(代表一个区)中运行的每个集群创建一个 vCenter 标签。创建标签后,您必须将每个标签附加到对应的数据中心和集群。
下表概述了在单个 VMware vCenter 中运行的多个 vSphere 数据中心的区域、区域和标签之间的关系示例。
数据中心(区域) | 集群(区) | Tags |
---|---|---|
us-east | us-east-1 | us-east-1a |
us-east-1b | ||
us-east-2 | us-east-2a | |
us-east-2b | ||
us-west | us-west-1 | us-west-1a |
us-west-1b | ||
us-west-2 | us-west-2a | |
us-west-2b |
3.4.4. 手动创建安装配置文件
安装集群要求您手动创建安装配置文件。
Cloud Controller Manager Operator 在提供的主机名或 IP 地址上执行连接检查。确保为可访问的 vCenter 服务器指定主机名或 IP 地址。如果您向不存在的 vCenter 服务器提供元数据,集群安装会在 bootstrap 阶段失败。
先决条件
- 您在本地机器上有一个 SSH 公钥来提供给安装程序。该密钥将用于在集群节点上进行 SSH 身份验证,以进行调试和灾难恢复。
- 已获取 OpenShift Container Platform 安装程序和集群的 pull secret。
流程
创建一个安装目录来存储所需的安装资产:
$ mkdir <installation_directory>
重要您必须创建一个目录。有些安装资产,如 bootstrap X.509 证书的过期间隔较短,因此不得重复使用安装目录。如果要重复使用另一个集群安装中的单个文件,您可以将它们复制到您的目录中。但是,安装资产的文件名可能会在发行版本间有所变化。从以前的 OpenShift Container Platform 版本中复制安装文件时请小心。
自定义提供的
install-config.yaml
文件模板示例,并将其保存在<installation_directory>
中。注意此配置文件必须命名为
install-config.yaml
。备份
install-config.yaml
文件,以便您可以使用它安装多个集群。重要install-config.yaml
文件会在安装过程的下一步中使用。现在必须备份它。
其他资源
3.4.4.1. VMware vSphere 的 install-config.yaml
文件示例
您可以自定义 install-config.yaml
文件,以指定有关 OpenShift Container Platform 集群平台的更多详情,或修改所需参数的值。
additionalTrustBundlePolicy: Proxyonly apiVersion: v1 baseDomain: example.com 1 compute: 2 - architecture: amd64 name: <worker_node> platform: {} replicas: 0 3 controlPlane: 4 architecture: amd64 name: <parent_node> platform: {} replicas: 3 5 metadata: creationTimestamp: null name: test 6 networking: --- platform: vsphere: failureDomains: 7 - name: <failure_domain_name> region: <default_region_name> server: <fully_qualified_domain_name> topology: computeCluster: "/<data_center>/host/<cluster>" datacenter: <data_center> 8 datastore: "/<data_center>/datastore/<datastore>" 9 networks: - <VM_Network_name> resourcePool: "/<data_center>/host/<cluster>/Resources/<resourcePool>" 10 folder: "/<data_center_name>/vm/<folder_name>/<subfolder_name>" 11 zone: <default_zone_name> vcenters: - datacenters: - <data_center> password: <password> 12 port: 443 server: <fully_qualified_domain_name> 13 user: administrator@vsphere.local diskType: thin 14 fips: false 15 pullSecret: '{"auths": ...}' 16 sshKey: 'ssh-ed25519 AAAA...' 17
- 1
- 集群的基域。所有 DNS 记录都必须是这个基域的子域,并包含集群名称。
- 2 4
controlPlane
部分是一个单个映射,但 compute 部分是一系列映射。为满足不同数据结构的要求,compute
部分的第一行必须以连字符-
开头,controlPlane部分
的第一行则不以连字符开头。两个部分都定义单个机器池,因此只使用一个 control plane。OpenShift Container Platform 不支持定义多个计算池。- 3
replicas
参数的值必须设置为0
。此参数控制集群为您创建和管理的 worker 数量,在使用用户置备的基础架构时集群不会执行这些功能。在完成 OpenShift Container Platform 安装前,您必须手动为集群部署 worker 机器。- 5
- 您添加到集群的 control plane 机器数量。由于集群使用此值作为集群中的 etcd 端点数量,所以该值必须与您部署的 control plane 机器数量匹配。
- 6
- 您在 DNS 记录中指定的集群名称。
- 7
- 建立地区和区域之间的关系。您可以使用 vCenter 对象(如
datastore
对象)定义故障域。故障域定义 OpenShift Container Platform 集群节点的 vCenter 位置。 - 8
- vSphere 数据中心。
- 9
- 保存虚拟机文件、模板和 ISO 镜像的 vSphere 数据存储路径。重要
您可以指定数据存储集群中存在的任何数据存储路径。默认情况下,Storage vMotion 会自动为数据存储集群启用。红帽不支持 Storage vMotion,因此您必须禁用 Storage vMotion 以避免 OpenShift Container Platform 集群的数据丢失问题。
如果需要在多个数据存储间指定虚拟机,请使用
数据存储
对象在集群install-config.yaml
配置文件中指定故障域。如需更多信息,请参阅"VMware vSphere 区域和区启用"。 - 10
- 可选: 对于安装程序置备的基础架构,安装程序创建虚拟机的现有资源池的绝对路径,例如
/<data_center_name>/host/<cluster_name>/Resources/<resource_pool_name>/<optional_nested_resource_pool_name>
。如果没有指定值,资源会在集群/example_data_center/host/example_cluster/Resources
的根目录中安装。 - 11
- 可选: 对于安装程序置备的基础架构,安装程序创建虚拟机的现有文件夹的绝对路径,如
/<datacenter_name>/vm/<folder_name>/<subfolder_name>
。如果没有提供这个值,安装程序会在数据中心虚拟机文件夹中创建一个顶层文件夹,其名称为基础架构 ID。如果您为集群提供基础架构,且您不想使用默认的StorageClass
对象(名为thin
),您可以从install-config.yaml
文件中省略folder
参数。 - 12
- 与 vSphere 用户关联的密码。
- 13
- vCenter 服务器的完全限定主机名或 IP 地址。重要
Cloud Controller Manager Operator 在提供的主机名或 IP 地址上执行连接检查。确保为可访问的 vCenter 服务器指定主机名或 IP 地址。如果您向不存在的 vCenter 服务器提供元数据,集群安装会在 bootstrap 阶段失败。
- 14
- vSphere 磁盘置备方法。
- 15
- 是否启用或禁用 FIPS 模式。默认情况下不启用 FIPS 模式。如果启用了 FIPS 模式,运行 OpenShift Container Platform 的 Red Hat Enterprise Linux CoreOS(RHCOS)机器会绕过默认的 Kubernetes 加密套件,并使用由 RHCOS 提供的加密模块。重要
要为集群启用 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 核心组件使用 RHEL 加密库,在 x86_64、ppc64le 和 s390x 架构上提交到 NIST FIPS 140-2/140-3 Validation。
- 16
- 从 OpenShift Cluster Manager 获取的 pull secret。此 pull secret 允许您与所含授权机构提供的服务进行身份验证,这些服务包括为 OpenShift Container Platform 组件提供容器镜像的 Quay.io。
- 17
- Red Hat Enterprise Linux CoreOS(RHCOS)中
core
用户的默认 SSH 密钥的公钥部分。
3.4.4.2. 在安装过程中配置集群范围的代理
生产环境可能会拒绝直接访问互联网,而是提供 HTTP 或 HTTPS 代理。您可以通过在 install-config.yaml
文件中配置代理设置,将新的 OpenShift Container Platform 集群配置为使用代理。
先决条件
-
您有一个现有的
install-config.yaml
文件。 您检查了集群需要访问的站点,并确定它们中的任何站点是否需要绕过代理。默认情况下,所有集群出口流量都经过代理,包括对托管云供应商 API 的调用。如果需要,您将在
Proxy 对象的
spec.noProxy
字段中添加站点来绕过代理。注意Proxy
对象status.noProxy
字段使用安装配置中的networking.machineNetwork[].cidr
、networking.clusterNetwork[].cidr
和networking.serviceNetwork[]
字段的值填充。对于在 Amazon Web Services(AWS)、Google Cloud Platform(GCP)、Microsoft Azure 和 Red Hat OpenStack Platform(RHOSP)上安装,
Proxy
对象status.noProxy
字段也会使用实例元数据端点填充(169.254.169.254
)。
流程
编辑
install-config.yaml
文件并添加代理设置。例如:apiVersion: v1 baseDomain: my.domain.com proxy: httpProxy: http://<username>:<pswd>@<ip>:<port> 1 httpsProxy: https://<username>:<pswd>@<ip>:<port> 2 noProxy: example.com 3 additionalTrustBundle: | 4 -----BEGIN CERTIFICATE----- <MY_TRUSTED_CA_CERT> -----END CERTIFICATE----- additionalTrustBundlePolicy: <policy_to_add_additionalTrustBundle> 5
- 1
- 用于创建集群外 HTTP 连接的代理 URL。URL 方案必须是
http
。 - 2
- 用于创建集群外 HTTPS 连接的代理 URL。
- 3
- 要从代理中排除的目标域名、IP 地址或其他网络 CIDR 的逗号分隔列表。在域前面加上
.
以仅匹配子域。例如,.y.com
匹配x.y.com
,但不匹配y.com
。使用*
绕过所有目的地的代理。您必须包含 vCenter 的 IP 地址以及用于其机器的 IP 范围。 - 4
- 如果提供,安装程序会在
openshift-config
命名空间中生成名为user-ca-bundle
的配置映射,其包含代理 HTTPS 连接所需的一个或多个额外 CA 证书。然后,Cluster Network Operator 会创建trusted-ca-bundle
配置映射,将这些内容与 Red Hat Enterprise Linux CoreOS(RHCOS)信任捆绑包合并,Proxy
对象的trustedCA
字段中也会引用此配置映射。additionalTrustBundle
字段是必需的,除非代理的身份证书由来自 RHCOS 信任捆绑包的颁发机构签名。 - 5
- 可选:决定
Proxy
对象的配置以引用trustedCA
字段中user-ca-bundle
配置映射的策略。允许的值是Proxyonly
和Always
。仅在配置了http/https
代理时,使用Proxyonly
引用user-ca-bundle
配置映射。使用Always
始终引用user-ca-bundle
配置映射。默认值为Proxyonly
。
注意安装程序不支持代理的
readinessEndpoints
字段。注意如果安装程序超时,重启并使用安装程序的
wait-for
命令完成部署。例如:$ ./openshift-install wait-for install-complete --log-level debug
- 保存该文件并在安装 OpenShift Container Platform 时引用。
安装程序会创建一个名为 cluster 的集群范围代理,该代理 使用
提供的 install-config.yaml
文件中的代理设置。如果没有提供代理设置,仍然会创建一个 cluster
Proxy
对象,但它会有一个空 spec
。
只支持名为 cluster
的 Proxy
对象,且无法创建额外的代理。
3.4.4.3. 为 VMware vCenter 配置区域和区域
您可以修改默认安装配置文件,以便您可以将 OpenShift Container Platform 集群部署到在单个 VMware vCenter 中运行的多个 vSphere 数据中心。
之前版本的 OpenShift Container Platform 的默认 install-config.yaml
文件配置已弃用。您可以继续使用已弃用的默认配置,但 openshift-installer
会提示您显示在配置文件中已弃用字段的警告信息。
这个示例使用 govc
命令。govc
命令是 VMware 提供的开源命令;它不是红帽提供的。红帽支持团队不维护 govc
命令。有关下载和安装 govc
的说明,请参阅 VMware 文档网站
先决条件
您有一个现有的
install-config.yaml
安装配置文件。重要您必须为 OpenShift Container Platform 集群指定一个故障域,以便您可以为 VMware vCenter 服务器置备数据中心对象。如果您需要在不同的数据中心、集群、数据存储和其他组件中置备虚拟机节点,请考虑指定多个故障域。要启用区域和区域,您必须为 OpenShift Container Platform 集群定义多个故障域。
流程
输入以下
govc
命令行工具命令,以创建openshift-region
和openshift-zone
vCenter 标签类别:重要如果为
openshift-region
和openshift-zone
vCenter 标签类别指定不同的名称,OpenShift Container Platform 集群的安装会失败。$ govc tags.category.create -d "OpenShift region" openshift-region
$ govc tags.category.create -d "OpenShift zone" openshift-zone
要为您要部署集群的每个区域 vSphere 数据中心创建一个 region 标签,请在终端中输入以下命令:
$ govc tags.create -c <region_tag_category> <region_tag>
要为您要部署集群的每个 vSphere 集群创建一个区标签,请输入以下命令:
$ govc tags.create -c <zone_tag_category> <zone_tag>
输入以下命令将区域标签附加到每个 vCenter 数据中心对象:
$ govc tags.attach -c <region_tag_category> <region_tag_1> /<data_center_1>
输入以下命令将区域标签附加到每个 vCenter 数据中心对象:
$ govc tags.attach -c <zone_tag_category> <zone_tag_1> /<data_center_1>/host/vcs-mdcnc-workload-1
- 进入包含安装程序的目录,并根据您选择的安装要求初始化集群部署。
在 vSphere 数据中心中定义的多个数据中心的 install-config.yaml
文件示例
--- compute: --- vsphere: zones: - "<machine_pool_zone_1>" - "<machine_pool_zone_2>" --- controlPlane: --- vsphere: zones: - "<machine_pool_zone_1>" - "<machine_pool_zone_2>" --- platform: vsphere: vcenters: --- datacenters: - <data_center_1_name> - <data_center_2_name> failureDomains: - name: <machine_pool_zone_1> region: <region_tag_1> zone: <zone_tag_1> server: <fully_qualified_domain_name> topology: datacenter: <data_center_1> computeCluster: "/<data_center_1>/host/<cluster1>" networks: - <VM_Network1_name> datastore: "/<data_center_1>/datastore/<datastore1>" resourcePool: "/<data_center_1>/host/<cluster1>/Resources/<resourcePool1>" folder: "/<data_center_1>/vm/<folder1>" - name: <machine_pool_zone_2> region: <region_tag_2> zone: <zone_tag_2> server: <fully_qualified_domain_name> topology: datacenter: <data_center_2> computeCluster: "/<data_center_2>/host/<cluster2>" networks: - <VM_Network2_name> datastore: "/<data_center_2>/datastore/<datastore2>" resourcePool: "/<data_center_2>/host/<cluster2>/Resources/<resourcePool2>" folder: "/<data_center_2>/vm/<folder2>" ---
3.4.5. 网络配置阶段
OpenShift Container Platform 安装前有两个阶段,您可以在其中自定义网络配置。
- 第 1 阶段
在创建清单文件前,您可以自定义
install-config.yaml
文件中的以下与网络相关的字段:-
networking.networkType
-
networking.clusterNetwork
-
networking.serviceNetwork
networking.machineNetwork
如需更多信息,请参阅"安装配置参数"。
注意将
networking.machineNetwork
设置为与首选子网所在的无类别域间路由 (CIDR) 匹配。重要CIDR 范围
172.17.0.0/16
由libVirt
保留。对于集群中的网络,您无法使用与172.17.0.0/16
CIDR 范围重叠的任何其他 CIDR 范围。
-
- 第 2 阶段
-
运行
openshift-install create 清单创建
清单文件后,您可以只使用您要修改的字段定义自定义 Cluster Network Operator 清单。您可以使用 清单指定高级网络配置。
在阶段 2 中,您无法覆盖 install-config.yaml
文件中在第 1 阶段指定的值。但是,您可以在第 2 阶段自定义网络插件。
3.4.6. 指定高级网络配置
您可以使用网络插件的高级网络配置将集群集成到现有网络环境中。
您只能在安装集群前指定高级网络配置。
不支持通过修改安装程序创建的 OpenShift Container Platform 清单文件来自定义网络配置。支持应用您创建的清单文件,如以下流程中所示。
先决条件
-
您已创建
install-config.yaml
文件并完成对其所做的任何修改。
流程
进入包含安装程序的目录并创建清单:
$ ./openshift-install create manifests --dir <installation_directory> 1
- 1
<installation_directory>
指定包含集群的install-config.yaml
文件的目录名称。
在
<installation_directory>/manifests/
目录中为高级网络配置创建一个名为 cluster-network-03-config.yml
的 stub 清单文件:apiVersion: operator.openshift.io/v1 kind: Network metadata: name: cluster spec:
在
cluster-network-03-config.yml
文件中指定集群的高级网络配置,如下例所示:为 OVN-Kubernetes 网络供应商启用 IPsec
apiVersion: operator.openshift.io/v1 kind: Network metadata: name: cluster spec: defaultNetwork: ovnKubernetesConfig: ipsecConfig: mode: Full
-
可选:备份
manifests/cluster-network-03-config.yml
文件。创建 Ignition 配置文件时,安装程序会使用manifests/
目录。 删除定义 control plane 机器的 Kubernetes 清单文件和计算 machineSets:
$ rm -f openshift/99_openshift-cluster-api_master-machines-*.yaml openshift/99_openshift-cluster-api_worker-machineset-*.yaml
由于您要自行创建和管理这些资源,因此不必初始化这些资源。
- 您可以使用机器 API 保留 MachineSet 文件以创建计算机器,但您必须更新对它们的引用以匹配您的环境。
3.4.6.1. 为您的网络指定多个子网
在 vSphere 主机上安装 OpenShift Container Platform 集群前,您可以为网络实现指定多个子网,以便 vSphere 云控制器管理器 (CCM) 可以为给定网络情况选择适当的子网。vSphere 可以使用子网来管理集群中的 pod 和服务。
对于此配置,您必须在 vSphere CCM 配置中指定内部和外部无类别域间路由 (CIDR) 实现。每个 CIDR 实现都会列出 CCM 用来决定与来自内部和外部网络的流量交互的 IP 地址范围。
在 vSphere CCM 配置中配置内部和外部 CIDR 实现可能会导致 vSphere CCM 选择错误的子网。这种情况会导致以下错误:
ERROR Bootstrap failed to complete: timed out waiting for the condition ERROR Failed to wait for bootstrapping to complete. This error usually happens when there is a problem with control plane hosts that prevents the control plane operators from creating the control plane.
此配置可能会导致与 MachineSet
对象与单个子网关联的新节点变得不可用,因为每个新节点接收 node.cloudprovider.kubernetes.io/uninitialized
污点。这些情况可能会导致与 Kubernetes API 服务器的通信问题,这可能会导致集群安装失败。
先决条件
- 为 OpenShift Container Platform 集群创建 Kubernetes 清单文件。
流程
-
从存储 OpenShift Container Platform 集群清单文件的目录中,打开
manifests/cluster-infrastructure-02-config.yml
清单文件。 将
nodeNetworking
对象添加到文件,并为对象指定内部和外部网络子网 CIDR 实现。提示对于大多数网络情况,请考虑设置标准多子网配置。此配置要求您在
nodeNetworking.internal.networkSubnetCidr
和nodeNetworking.external.networkSubnetCidr
参数中设置相同的 IP 地址范围。配置了
cluster-infrastructure-02-config.yml
清单文件的示例apiVersion: config.openshift.io/v1 kind: Infrastructure metadata: name: cluster spec: cloudConfig: key: config name: cloud-provider-config platformSpec: type: VSphere vsphere: failureDomains: - name: generated-failure-domain ... nodeNetworking: external: networkSubnetCidr: - <machine_network_cidr_ipv4> - <machine_network_cidr_ipv6> internal: networkSubnetCidr: - <machine_network_cidr_ipv4> - <machine_network_cidr_ipv6> # ...
3.4.7. Cluster Network Operator 配置
集群网络的配置作为 Cluster Network Operator(CNO)配置的一部分指定,并存储在名为 cluster
的自定义资源(CR)对象中。CR 指定 operator.openshift.io
API 组中的 Network
API 的字段。
CNO 配置在集群安装过程中从 Network.config.openshift.io
API 组中的 Network
API 继承以下字段:
clusterNetwork
- 从中分配 Pod IP 地址的 IP 地址池。
serviceNetwork
- 服务的 IP 地址池.
defaultNetwork.type
-
集群网络插件。
OVNKubernetes
是安装期间唯一支持的插件。
您可以通过在名为 cluster
的 CNO 对象中设置 defaultNetwork
对象的字段来为集群指定集群网络插件配置。
3.4.7.1. Cluster Network Operator 配置对象
下表中描述了 Cluster Network Operator(CNO)的字段:
字段 | 类型 | 描述 |
---|---|---|
|
|
CNO 对象的名称。这个名称始终是 |
|
| 用于指定从哪些 IP 地址块分配 Pod IP 地址以及集群中每个节点的子网前缀长度的列表。例如: spec: clusterNetwork: - cidr: 10.128.0.0/19 hostPrefix: 23 - cidr: 10.128.32.0/19 hostPrefix: 23 |
|
| 服务的 IP 地址块。OpenShift SDN 和 OVN-Kubernetes 网络插件只支持服务网络的一个 IP 地址块。例如: spec: serviceNetwork: - 172.30.0.0/14
您只能在创建清单前在 |
|
| 为集群网络配置网络插件。 |
|
| 此对象的字段指定 kube-proxy 配置。如果使用 OVN-Kubernetes 集群网络供应商,则 kube-proxy 配置不会起作用。 |
defaultNetwork 对象配置
下表列出了 defaultNetwork
对象的值:
字段 | 类型 | 描述 |
---|---|---|
|
|
注意 OpenShift Container Platform 默认使用 OVN-Kubernetes 网络插件。OpenShift SDN 不再作为新集群的安装选择提供。 |
|
| 此对象仅对 OVN-Kubernetes 网络插件有效。 |
配置 OVN-Kubernetes 网络插件
下表描述了 OVN-Kubernetes 网络插件的配置字段:
字段 | 类型 | 描述 |
---|---|---|
|
| Geneve(通用网络虚拟化封装)覆盖网络的最大传输单元(MTU)。这根据主网络接口的 MTU 自动探测。您通常不需要覆盖检测到的 MTU。 如果自动探测的值不是您期望的值,请确认节点上主网络接口上的 MTU 是否正确。您不能使用这个选项更改节点上主网络接口的 MTU 值。
如果集群中不同节点需要不同的 MTU 值,则必须将此值设置为 |
|
|
用于所有 Geneve 数据包的端口。默认值为 |
|
| 指定用于自定义 IPsec 配置的配置对象。 |
|
| 为 IPv4 设置指定配置对象。 |
|
| 为 IPv6 设置指定配置对象。 |
|
| 指定用于自定义网络策略审计日志的配置对象。如果未设置,则使用默认的审计日志设置。 |
|
| 可选:指定一个配置对象来自定义如何将出口流量发送到节点网关。 注意 在迁移出口流量时,工作负载和服务流量会受到一定影响,直到 Cluster Network Operator (CNO) 成功推出更改。 |
字段 | 类型 | 描述 |
---|---|---|
| 字符串 |
如果您的现有网络基础架构与
默认值为 |
| 字符串 |
如果您的现有网络基础架构与
默认值为 |
字段 | 类型 | 描述 |
---|---|---|
| 字符串 |
如果您的现有网络基础架构与
默认值为 |
| 字符串 |
如果您的现有网络基础架构与
默认值为 |
字段 | 类型 | 描述 |
---|---|---|
| 整数 |
每个节点每秒生成一次的消息数量上限。默认值为每秒 |
| 整数 |
审计日志的最大大小,以字节为单位。默认值为 |
| 整数 | 保留的日志文件的最大数量。 |
| 字符串 | 以下附加审计日志目标之一:
|
| 字符串 |
syslog 工具,如 as |
字段 | 类型 | 描述 |
---|---|---|
|
|
将此字段设置为
此字段与 Open vSwitch 硬件卸载功能有交互。如果将此字段设置为 |
|
|
您可以使用 |
|
| 可选:指定一个对象来为主机配置内部 OVN-Kubernetes 伪装地址,以服务 IPv4 地址的流量。 |
|
| 可选:指定一个对象来为主机配置内部 OVN-Kubernetes 伪装地址,以服务 IPv6 地址的流量。 |
字段 | 类型 | 描述 |
---|---|---|
|
|
内部使用的伪装 IPv4 地址,以启用主机服务流量。主机配置了这些 IP 地址和共享网关网桥接口。默认值为 |
字段 | 类型 | 描述 |
---|---|---|
|
|
内部使用的伪装 IPv6 地址,以启用主机服务流量。主机配置了这些 IP 地址和共享网关网桥接口。默认值为 |
字段 | 类型 | 描述 |
---|---|---|
|
| 指定 IPsec 实现的行为。必须是以下值之一:
|
启用 IPSec 的 OVN-Kubernetes 配置示例
defaultNetwork: type: OVNKubernetes ovnKubernetesConfig: mtu: 1400 genevePort: 6081 ipsecConfig: mode: Full
使用 OVNKubernetes 可能会导致 IBM Power® 上的堆栈耗尽问题。
kubeProxyConfig 对象配置(仅限 OpenShiftSDN 容器网络接口)
kubeProxyConfig
对象的值在下表中定义:
字段 | 类型 | 描述 |
---|---|---|
|
|
注意
由于 OpenShift Container Platform 4.3 及更高版本中引进了性能改进,不再需要调整 |
|
|
刷新 kubeProxyConfig: proxyArguments: iptables-min-sync-period: - 0s |
3.4.8. 创建 Ignition 配置文件
由于您必须手动启动集群机器,因此您必须生成 Ignition 配置文件,集群需要这些配置文件来创建其机器。
-
安装程序生成的 Ignition 配置文件包含 24 小时后过期的证书,然后在该时进行续订。如果在更新证书前关闭集群,且集群在 24 小时后重启,集群会自动恢复过期的证书。一个例外是,您必须手动批准待处理的
node-bootstrapper
证书签名请求(CSR)来恢复 kubelet 证书。如需更多信息,请参阅从过期的 control plane 证书 中恢复的文档。 - 建议您在 Ignition 配置文件生成后的 12 小时内使用它们,因为 24 小时的证书会在集群安装后的 16 小时到 22 小时间进行轮转。通过在 12 小时内使用 Ignition 配置文件,您可以避免在安装过程中因为执行了证书更新而导致安装失败的问题。
先决条件
- 获取 OpenShift Container Platform 安装程序和集群的 pull secret。
流程
获取 Ignition 配置文件:
$ ./openshift-install create ignition-configs --dir <installation_directory> 1
- 1
- 对于
<installation_directory>
,请指定要存储安装程序创建的文件的目录名称。
重要如果创建了
install-config.yaml
文件,请指定包含该文件的目录。否则,指定一个空目录。有些安装资产,如 bootstrap X.509 证书的过期间隔较短,因此不得重复使用安装目录。如果要重复使用另一个集群安装中的单个文件,您可以将它们复制到您的目录中。但是,安装资产的文件名可能会在发行版本间有所变化。从以前的 OpenShift Container Platform 版本中复制安装文件时请小心。该目录中会生成以下文件:
. ├── auth │ ├── kubeadmin-password │ └── kubeconfig ├── bootstrap.ign ├── master.ign ├── metadata.json └── worker.ign
3.4.9. 提取基础架构名称
Ignition 配置文件包含一个唯一集群标识符,您可以使用它在 VMware vSphere 中唯一地标识您的集群。如果计划使用集群标识符作为虚拟机文件夹的名称,则必须提取它。
先决条件
- 已获取 OpenShift Container Platform 安装程序和集群的 pull secret。
- 已为集群生成 Ignition 配置文件。
-
已安装
jq
软件包。
3.4.10. 安装 RHCOS 并启动 OpenShift Container Platform bootstrap 过程
要在 VMware vSphere 上的用户置备的基础架构上安装 OpenShift Container Platform,您必须在 vSphere 主机上安装 Red Hat Enterprise Linux CoreOS(RHCOS)。安装 RHCOS 时,您必须为您要安装的机器类型提供 OpenShift Container Platform 安装程序生成的 Ignition 配置文件。如果您配置了适当的网络、DNS 和负载均衡基础架构,OpenShift Container Platform bootstrap 过程会在 RHCOS 机器重启后自动启动。
先决条件
- 已获取集群的 Ignition 配置文件。
- 具有 HTTP 服务器的访问权限,以便您可从计算机进行访问,并且您创建的机器也可访问此服务器。
- 您已创建了 vSphere 集群。
流程
-
将名为
<installation_directory>/bootstrap.ign
的 bootstrap Ignition 配置文件上传到 HTTP 服务器。注意此文件的 URL。 将 bootstrap 节点的以下辅助 Ignition 配置文件保存到计算机中,存为
<installation_directory>/merge-bootstrap.ign
:{ "ignition": { "config": { "merge": [ { "source": "<bootstrap_ignition_config_url>", 1 "verification": {} } ] }, "timeouts": {}, "version": "3.2.0" }, "networkd": {}, "passwd": {}, "storage": {}, "systemd": {} }
- 1
- 指定您托管的 bootstrap Ignition 配置文件的 URL。
为 bootstrap 机器创建虚拟机(VM)时,您要使用此 Ignition 配置文件。
找到安装程序创建的以下 Ignition 配置文件:
-
<installation_directory>/master.ign
-
<installation_directory>/worker.ign
-
<installation_directory>/merge-bootstrap.ign
-
将 Ignition 配置文件转换为 Base64 编码。在此流程中,您必须将这些文件添加到虚拟机中的额外配置参数
guestinfo.ignition.config.data
中。例如,如果使用 Linux 操作系统,您可以使用
base64
命令对文件进行编码。$ base64 -w0 <installation_directory>/master.ign > <installation_directory>/master.64
$ base64 -w0 <installation_directory>/worker.ign > <installation_directory>/worker.64
$ base64 -w0 <installation_directory>/merge-bootstrap.ign > <installation_directory>/merge-bootstrap.64
重要如果您计划在安装完成后在集群中添加更多计算机器,请不要删除这些文件。
获取 RHCOS OVA 镜像。镜像位于 RHCOS 镜像镜像页面。
重要RHCOS 镜像可能不会随着 OpenShift Container Platform 的每个发行版本而改变。您必须下载最高版本的镜像,其版本号应小于或等于您安装的 OpenShift Container Platform 版本。如果可用,请使用与 OpenShift Container Platform 版本匹配的镜像版本。
文件名包含 OpenShift Container Platform 版本号,格式为
rhcos-vmware.<architecture>.ova
。在 vSphere 客户端中,在数据中心中创建一个文件夹来存储虚拟机。
- 单击 VMs and Templates 视图。
- 右键点您的数据中心的名称。
-
点击 New Folder
New VM and Template Folder。 -
在显示的窗口中,输入文件夹名称。如果您没有在
install-config.yaml
文件中指定现有文件夹,请创建一个名称与基础架构 ID 相同的文件夹。您可以使用这个文件夹名称,因此 vCenter 会在适当的位置为 Workspace 配置动态置备存储。
在 vSphere 客户端中,为 OVA 镜像创建一个模板,然后根据需要克隆模板。
注意在以下步骤中,您将创建模板,然后克隆所有集群机器的模板。然后,您在置备虚拟机时为该克隆的机器类型提供 Ignition 配置文件的位置。
- 在 Hosts and Clusters 选项卡中,右键点击您的集群名称并选择 Deploy OVF Template。
- 在 Select an OVF 选项卡中,指定您下载的 RHCOS OVA 文件的名称。
-
在 Select a name and folder 选项卡中,为您的模板设置 虚拟机名称,如
Template-RHCOS
。点击 vSphere 集群的名称并选择您在上一步中创建的文件夹。 - 在 Select a compute resource 选项卡中,点击 vSphere 集群的名称。
在 Select storage 选项卡中,配置虚拟机的存储选项。
- 根据您的存储首选项,选择 Thin Provision 或 Thick Provision。
-
选择您在
install-config.yaml
文件中指定的数据存储。 - 如果要加密虚拟机,请选择 Encrypt this virtual machine。如需更多信息,请参阅标题为"加密虚拟机的要求"的部分。
- 在 Select network 选项卡中,指定您为集群配置的网络(如果可用)。
在创建 OVF 模板时,不要在 Customize template 选项卡上指定值,也不会进一步配置模板。
重要不要启动原始虚拟机模板。VM 模板必须保持关闭,必须为新的 RHCOS 机器克隆。启动虚拟机模板会将虚拟机模板配置为平台上的虚拟机,这样可防止它被用作计算机器集可应用配置的模板。
可选: 如果需要,更新 VM 模板中配置的虚拟硬件版本。如需更多信息 ,请参阅 VMware 文档中的将虚拟机升级到最新硬件版本。
重要如有必要,建议您在从虚拟机创建虚拟机前将虚拟机模板的硬件版本更新为版本 15。在 vSphere 上运行的集群节点使用硬件版本 13 现已弃用。如果您导入的模板默认为硬件版本 13,您必须在将 VM 模板升级到硬件版本 15 前确保 ESXi 主机为 6.7U3 或更高版本。如果您的 vSphere 版本小于 6.7U3,您可以跳过此升级步骤;但是,计划将来的 OpenShift Container Platform 版本删除对小于 6.7U3 的硬件版本 13 和 vSphere 版本的支持。
部署模板后,为集群中的机器部署虚拟机。
-
右键点击模板名称,再点击 Clone
Clone to Virtual Machine。 在 Select a name and folder 选项卡中,指定虚拟机的名称。您可以在名称中包含机器类型,如
control-plane-0 或
compute-1
。注意确保 vSphere 安装中的所有虚拟机名称都是唯一的。
- 在 Select a name and folder 选项卡中,选择您为集群创建的文件夹名称。
- 在 Select a compute resource 选项卡中,选择数据中心中的主机的名称。
- 在 Select clone options 选项卡中,选择 Customize this virtual machine's hardware。
在 Customize hardware 选项卡上,点 Advanced Parameters。
重要以下配置建议仅用于演示目的。作为集群管理员,您必须根据集群上的资源需求来配置资源。为了更好地管理集群资源,请考虑从集群的 root 资源池创建资源池。
可选:覆盖 vSphere 中的默认 DHCP 网络。启用静态 IP 网络:
设置静态 IP 配置:
示例命令
$ export IPCFG="ip=<ip>::<gateway>:<netmask>:<hostname>:<iface>:none nameserver=srv1 [nameserver=srv2 [nameserver=srv3 [...]]]"
示例命令
$ export IPCFG="ip=192.168.100.101::192.168.100.254:255.255.255.0:::none nameserver=8.8.8.8"
在从 vSphere 中的 OVA 引导虚拟机前,设置
guestinfo.afterburn.initrd.network-kargs
属性:示例命令
$ govc vm.change -vm "<vm_name>" -e "guestinfo.afterburn.initrd.network-kargs=${IPCFG}"
通过在 Attribute 和 Values 字段中指定数据来添加以下配置参数名称和值。确保为您创建的每个参数选择 Add 按钮。
-
guestinfo.ignition.config.data
:找到您在此流程中创建的 base-64 编码文件,并粘贴此机器类型的 base64 编码 Ignition 配置文件的内容。 -
guestinfo.ignition.config.data.encoding
:指定base64
。 -
disk.EnableUUID
:指定TRUE
。 -
stealclock.enable
:如果没有定义此参数,请添加它并指定TRUE
。 - 从集群的 root 资源池创建子资源池。执行此子资源池中的资源分配。
-
- 在 Customize hardware 选项卡的 Virtual Hardware 面板中,根据需要修改指定的值。确保 RAM、CPU 和磁盘存储的数量满足机器类型的最低要求。
- 完成剩余的配置步骤。点 Finish 按钮,您已完成克隆操作。
-
在 Virtual Machines 选项卡中,右键点您的虚拟机,然后选择 Power
Power On。 检查控制台输出,以验证 Ignition 是否运行。
示例命令
Ignition: ran on 2022/03/14 14:48:33 UTC (this boot) Ignition: user-provided config was applied
-
右键点击模板名称,再点击 Clone
后续步骤
对每台机器执行前面的步骤,为集群创建其余机器。
重要此时您必须创建 bootstrap 和 control plane 机器。由于计算机器上已默认部署了一些 Pod,因此还要在安装集群前至少创建两台计算机器。
3.4.11. 将更多计算机器添加到 vSphere 中的集群
您可以将更多计算机器添加到 VMware vSphere 上的用户置备的 OpenShift Container Platform 集群中。
在 OpenShift Container Platform 集群中部署 vSphere 模板后,您可以为该集群中的机器部署虚拟机(VM)。
先决条件
- 获取计算机器的 base64 编码 Ignition 文件。
- 您可以访问您为集群创建的 vSphere 模板。
流程
-
右键点击模板的名称,再点击 Clone
Clone to Virtual Machine。 在 Select a name and folder 选项卡中,指定虚拟机的名称。您可以在名称中包含机器类型,如
compute-1
。注意确保 vSphere 安装中的所有虚拟机名称都是唯一的。
- 在 Select a name and folder 选项卡中,选择您为集群创建的文件夹名称。
- 在 Select a compute resource 选项卡中,选择数据中心中的主机的名称。
- 在 Select storage 选项卡中,为您的配置和磁盘文件选择存储。
- 在 Select clone options 选项卡中,选择 Customize this virtual machine's hardware。
在 Customize hardware 选项卡上,点 Advanced Parameters。
通过在 Attribute 和 Values 字段中指定数据来添加以下配置参数名称和值。确保为您创建的每个参数选择 Add 按钮。
-
guestinfo.ignition.config.data
:粘贴此机器类型的 base64 编码计算 Ignition 配置文件的内容。 -
guestinfo.ignition.config.data.encoding
:指定base64
。 -
disk.EnableUUID
:指定TRUE
。
-
- 在 Customize hardware 选项卡的 Virtual Hardware 面板中,根据需要修改指定的值。确保 RAM、CPU 和磁盘存储的数量满足机器类型的最低要求。如果存在多个网络,请选择 Add New Device > Network Adapter,然后在 New Network 菜单项提供的字段中输入您的网络信息。
- 完成剩余的配置步骤。点 Finish 按钮,您已完成克隆操作。
-
在 Virtual Machines 选项卡中,右键点您的虚拟机,然后选择 Power
Power On。
后续步骤
- 继续为集群创建更多计算机器。
3.4.12. 磁盘分区
在大多数情况下,数据分区最初是由安装 RHCOS 而不是安装另一个操作系统来创建的。在这种情况下,OpenShift Container Platform 安装程序被允许配置磁盘分区。
但是,在安装 OpenShift Container Platform 节点时,在两种情况下您可能需要覆盖默认分区:
创建单独的分区: 要在空磁盘上进行 greenfield 安装,您可能需要在分区中添加单独的存储。这正式支持生成
/var 或 /var
的子目录,
如/var/lib/etcd
(独立分区),但不支持两者。重要对于大于 100GB 的磁盘大小,特别是磁盘大小大于 1TB,请创建一个独立的
/var
分区。如需更多信息,请参阅"创建独立/var
分区"和 红帽知识库文章。重要Kubernetes 仅支持两个文件系统分区。如果您在原始配置中添加多个分区,Kubernetes 无法监控所有这些分区。
-
保留现有分区:对于 brownfield 安装,您要在现有节点上重新安装 OpenShift Container Platform,并希望保留从之前的操作系统中安装的数据分区,对于
coreos-installer
来说,引导选项和选项都允许您保留现有数据分区。
创建独立 /var
分区
通常,OpenShift Container Platform 的磁盘分区应该保留给安装程序。然而,在有些情况下您可能需要在文件系统的一部分中创建独立分区。
OpenShift Container Platform 支持添加单个分区来将存储附加到 /var
分区或 /var
的子目录中。例如:
-
/var/lib/containers
:保存随着系统中添加更多镜像和容器而增长的容器相关内容。 -
/var/lib/etcd
:保存您可能希望独立保留的数据,比如 etcd 存储的性能优化。 /var
:保存您可能希望独立保留的数据,以满足审计等目的。重要对于大于 100GB 的磁盘大小,特别是磁盘大小大于 1TB,请创建一个独立的
/var
分区。
通过单独存储 /var
目录的内容,可以更轻松地根据需要为区域扩展存储,并在以后重新安装 OpenShift Container Platform,并保持该数据的完整性。使用这个方法,您不必再次拉取所有容器,在更新系统时也不必复制大量日志文件。
因为 /var
在进行一个全新的 Red Hat Enterprise Linux CoreOS(RHCOS)安装前必需存在,所以这个流程会在 OpenShift Container Platform 安装过程的 openshift-install
准备阶段插入一个创建的机器配置清单的机器配置来设置独立的 /var
分区。
流程
创建存放 OpenShift Container Platform 安装文件的目录:
$ mkdir $HOME/clusterconfig
运行
openshift-install
,以在manifest
和openshift
子目录中创建一组文件。在系统提示时回答系统问题:$ openshift-install create manifests --dir $HOME/clusterconfig ? SSH Public Key ... $ ls $HOME/clusterconfig/openshift/ 99_kubeadmin-password-secret.yaml 99_openshift-cluster-api_master-machines-0.yaml 99_openshift-cluster-api_master-machines-1.yaml 99_openshift-cluster-api_master-machines-2.yaml ...
创建用于配置额外分区的 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
分区时,如果不同的实例类型没有相同的设备名称,则无法为 worker 节点使用不同的实例类型。从 Butane 配置创建一个清单,并将它保存到
clusterconfig/openshift
目录中。例如,运行以下命令:$ butane $HOME/clusterconfig/98-var-partition.bu -o $HOME/clusterconfig/openshift/98-var-partition.yaml
再次运行
openshift-install
,从manifest
和openshift
子目录中的一组文件创建 Ignition 配置:$ openshift-install create ignition-configs --dir $HOME/clusterconfig $ ls $HOME/clusterconfig/ auth bootstrap.ign master.ign metadata.json worker.ign
现在,您可以使用 Ignition 配置文件作为 vSphere 安装程序的输入来安装 Red Hat Enterprise Linux CoreOS(RHCOS)系统。
3.4.13. 等待 bootstrap 过程完成
OpenShift Container Platform bootstrap 过程在集群节点首次引导到安装到磁盘的持久 RHCOS 环境后开始。通过 Ignition 配置文件提供的配置信息用于初始化 bootstrap 过程并在机器上安装 OpenShift Container Platform。您必须等待 bootstrap 过程完成。
先决条件
- 已为集群创建 Ignition 配置文件。
- 您已配置了适当的网络、DNS 和负载平衡基础架构。
- 已获得安装程序,并为集群生成 Ignition 配置文件。
- 已在集群机器上安装 RHCOS,并提供 OpenShift Container Platform 安装程序生成的 Ignition 配置文件。
- 您的机器可以直接访问互联网,或者有 HTTP 或 HTTPS 代理可用。
流程
监控 bootstrap 过程:
$ ./openshift-install --dir <installation_directory> wait-for bootstrap-complete \ 1 --log-level=info 2
输出示例
INFO Waiting up to 30m0s for the Kubernetes API at https://api.test.example.com:6443... INFO API v1.29.4 up INFO Waiting up to 30m0s for bootstrapping to complete... INFO It is now safe to remove the bootstrap resources
当 Kubernetes API 服务器提示已在 control plane 机器上引导它时,该命令会成功。
bootstrap 过程完成后,从负载均衡器中删除 bootstrap 机器。
重要此时您必须从负载均衡器中删除 bootstrap 机器。您还可以删除或重新格式化 bootstrap 机器本身。
3.4.14. 使用 CLI 登录集群
您可以通过导出集群 kubeconfig
文件,以默认系统用户身份登录集群。kubeconfig
文件包含有关集群的信息,供 CLI 用于将客户端连接到正确的集群和 API 服务器。该文件特定于集群,在 OpenShift Container Platform 安装过程中创建。
先决条件
- 已部署 OpenShift Container Platform 集群。
-
已安装
oc
CLI。
流程
导出
kubeadmin
凭证:$ export KUBECONFIG=<installation_directory>/auth/kubeconfig 1
- 1
- 对于
<installation_directory>
,请指定安装文件保存到的目录的路径。
验证您可以使用导出的配置成功运行
oc
命令:$ oc whoami
输出示例
system:admin
3.4.15. 批准机器的证书签名请求
当您将机器添加到集群时,会为您添加的每台机器生成两个待处理证书签名请求(CSR)。您必须确认这些 CSR 已获得批准,或根据需要自行批准。必须首先批准客户端请求,然后批准服务器请求。
先决条件
- 您已将机器添加到集群中。
流程
确认集群可以识别这些机器:
$ oc get nodes
输出示例
NAME STATUS ROLES AGE VERSION master-0 Ready master 63m v1.29.4 master-1 Ready master 63m v1.29.4 master-2 Ready master 64m v1.29.4
输出中列出了您创建的所有机器。
注意在有些 CSR 被批准前,前面的输出可能不包括计算节点(也称为 worker 节点)。
检查待处理的 CSR,并确保添加到集群中的每台机器都有
Pending
或Approved
状态的客户端请求:$ oc get csr
输出示例
NAME AGE REQUESTOR CONDITION csr-8b2br 15m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending csr-8vnps 15m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending ...
在本例中,两台机器加入集群。您可能会在列表中看到更多已批准的 CSR。
如果 CSR 没有获得批准,在您添加的机器的所有待处理 CSR 都处于
Pending 状态
后,请批准集群机器的 CSR:注意由于 CSR 会自动轮转,因此请在将机器添加到集群后一小时内批准您的 CSR。如果没有在一小时内批准它们,证书将会轮转,每个节点会存在多个证书。您必须批准所有这些证书。批准客户端 CSR 后,Kubelet 为服务证书创建一个二级 CSR,这需要手动批准。然后,如果 Kubelet 请求具有相同参数的新证书,则后续提供证书续订请求由
machine-approver
自动批准。注意对于在未启用机器 API 的平台上运行的集群,如裸机和其他用户置备的基础架构,您必须实施一种方法来自动批准 kubelet 提供证书请求(CSR)。如果没有批准请求,则
oc exec
、ocrsh
和oc logs
命令将无法成功,因为 API 服务器连接到 kubelet 时需要服务证书。与 Kubelet 端点联系的任何操作都需要此证书批准。该方法必须监视新的 CSR,确认 CSR 由 system:node
或system:admin
组中的node-bootstrapper
服务帐户提交,并确认节点的身份。要单独批准,请对每个有效的 CSR 运行以下命令:
$ oc adm certificate approve <csr_name> 1
- 1
<csr_name>
是当前 CSR 列表中 CSR 的名称。
要批准所有待处理的 CSR,请运行以下命令:
$ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs --no-run-if-empty oc adm certificate approve
注意在有些 CSR 被批准前,一些 Operator 可能无法使用。
现在,您的客户端请求已被批准,您必须查看添加到集群中的每台机器的服务器请求:
$ oc get csr
输出示例
NAME AGE REQUESTOR CONDITION csr-bfd72 5m26s system:node:ip-10-0-50-126.us-east-2.compute.internal Pending csr-c57lv 5m26s system:node:ip-10-0-95-157.us-east-2.compute.internal Pending ...
如果剩余的 CSR 没有被批准,且处于
Pending
状态,请批准集群机器的 CSR:要单独批准,请对每个有效的 CSR 运行以下命令:
$ oc adm certificate approve <csr_name> 1
- 1
<csr_name>
是当前 CSR 列表中 CSR 的名称。
要批准所有待处理的 CSR,请运行以下命令:
$ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs oc adm certificate approve
批准所有客户端和服务器 CSR 后,机器将
处于 Ready 状态
。运行以下命令验证:$ oc get nodes
输出示例
NAME STATUS ROLES AGE VERSION master-0 Ready master 73m v1.29.4 master-1 Ready master 73m v1.29.4 master-2 Ready master 74m v1.29.4 worker-0 Ready worker 11m v1.29.4 worker-1 Ready worker 11m v1.29.4
注意批准服务器 CSR 后可能需要几分钟时间让机器过渡到
Ready 状态
。
其他信息
- 如需有关 CSR 的更多信息,请参阅 证书签名请求。
3.4.15.1. 初始 Operator 配置
在 control plane 初始化后,您必须立即配置一些 Operator,以便它们都可用。
先决条件
- 您的 control plane 已初始化。
流程
观察集群组件上线:
$ watch -n5 oc get clusteroperators
输出示例
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE authentication 4.16.0 True False False 19m baremetal 4.16.0 True False False 37m cloud-credential 4.16.0 True False False 40m cluster-autoscaler 4.16.0 True False False 37m config-operator 4.16.0 True False False 38m console 4.16.0 True False False 26m csi-snapshot-controller 4.16.0 True False False 37m dns 4.16.0 True False False 37m etcd 4.16.0 True False False 36m image-registry 4.16.0 True False False 31m ingress 4.16.0 True False False 30m insights 4.16.0 True False False 31m kube-apiserver 4.16.0 True False False 26m kube-controller-manager 4.16.0 True False False 36m kube-scheduler 4.16.0 True False False 36m kube-storage-version-migrator 4.16.0 True False False 37m machine-api 4.16.0 True False False 29m machine-approver 4.16.0 True False False 37m machine-config 4.16.0 True False False 36m marketplace 4.16.0 True False False 37m monitoring 4.16.0 True False False 29m network 4.16.0 True False False 38m node-tuning 4.16.0 True False False 37m openshift-apiserver 4.16.0 True False False 32m openshift-controller-manager 4.16.0 True False False 30m openshift-samples 4.16.0 True False False 32m operator-lifecycle-manager 4.16.0 True False False 37m operator-lifecycle-manager-catalog 4.16.0 True False False 37m operator-lifecycle-manager-packageserver 4.16.0 True False False 32m service-ca 4.16.0 True False False 38m storage 4.16.0 True False False 37m
- 配置不可用的 Operator。
3.4.15.2. 安装过程中删除的镜像 registry
在不提供可共享对象存储的平台上,OpenShift Image Registry Operator bootstraps 本身为 Removed
。这允许 openshift-installer
在这些平台类型上完成安装。
安装后,您必须编辑 Image Registry Operator 配置,将 managementState
从 Removed
切换到 Managed
。完成此操作后,您必须配置存储。
3.4.15.3. 镜像 registry 存储配置
对于不提供默认存储的平台,Image Registry Operator 最初不可用。安装后,您必须将 registry 配置为使用存储,以便 Registry Operator 可用。
显示配置生产集群所需的持久性卷的说明。如果适用,显示有关将空目录配置为存储位置的说明,这仅适用于非生产集群。
提供了在升级过程中使用 Recreate
rollout 策略来允许镜像 registry 使用块存储类型的说明。
3.4.15.3.1. 为 VMware vSphere 配置块 registry 存储
要允许镜像 registry 在作为集群管理员升级过程中使用块存储类型,如 vSphere Virtual Machine Disk(VMDK),您可以使用 Recreate rollout 策略
。
支持块存储卷,但不建议在生产环境中用于镜像 registry。在块存储上配置 registry 的安装不具有高可用性,因为 registry 无法具有多个副本。
流程
输入以下命令将镜像 registry 存储设置为块存储类型,对 registry 进行补丁,使其使用
Recreate
rollout 策略,并只使用一个
副本运行:$ oc patch config.imageregistry.operator.openshift.io/cluster --type=merge -p '{"spec":{"rolloutStrategy":"Recreate","replicas":1}}'
为块存储设备置备 PV,并为该卷创建 PVC。请求的块卷使用 ReadWriteOnce(RWO)访问模式。
创建包含以下内容的
pvc.yaml
文件以定义 VMware vSpherePersistentVolumeClaim
对象:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: image-registry-storage 1 namespace: openshift-image-registry 2 spec: accessModes: - ReadWriteOnce 3 resources: requests: storage: 100Gi 4
输入以下命令从文件创建
PersistentVolumeClaim
对象:$ oc create -f pvc.yaml -n openshift-image-registry
输入以下命令编辑 registry 配置,使其引用正确的 PVC:
$ oc edit config.imageregistry.operator.openshift.io -o yaml
输出示例
storage: pvc: claim: 1
- 1
- 通过创建自定义 PVC,您可以将
claim
字段留空,以便默认自动创建image-registry-storage
PVC。
有关配置 registry 存储以便引用正确的 PVC 的说明,请参阅 为 vSphere 配置 registry。
3.4.16. 在用户置备的基础架构上完成安装
完成 Operator 配置后,可以在您提供的基础架构上完成集群安装。
先决条件
- 您的 control plane 已初始化。
- 已完成初始 Operator 配置。
流程
使用以下命令确认所有集群组件都在线:
$ watch -n5 oc get clusteroperators
输出示例
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE authentication 4.16.0 True False False 19m baremetal 4.16.0 True False False 37m cloud-credential 4.16.0 True False False 40m cluster-autoscaler 4.16.0 True False False 37m config-operator 4.16.0 True False False 38m console 4.16.0 True False False 26m csi-snapshot-controller 4.16.0 True False False 37m dns 4.16.0 True False False 37m etcd 4.16.0 True False False 36m image-registry 4.16.0 True False False 31m ingress 4.16.0 True False False 30m insights 4.16.0 True False False 31m kube-apiserver 4.16.0 True False False 26m kube-controller-manager 4.16.0 True False False 36m kube-scheduler 4.16.0 True False False 36m kube-storage-version-migrator 4.16.0 True False False 37m machine-api 4.16.0 True False False 29m machine-approver 4.16.0 True False False 37m machine-config 4.16.0 True False False 36m marketplace 4.16.0 True False False 37m monitoring 4.16.0 True False False 29m network 4.16.0 True False False 38m node-tuning 4.16.0 True False False 37m openshift-apiserver 4.16.0 True False False 32m openshift-controller-manager 4.16.0 True False False 30m openshift-samples 4.16.0 True False False 32m operator-lifecycle-manager 4.16.0 True False False 37m operator-lifecycle-manager-catalog 4.16.0 True False False 37m operator-lifecycle-manager-packageserver 4.16.0 True False False 32m service-ca 4.16.0 True False False 38m storage 4.16.0 True False False 37m
另外,当所有集群都可用时,以下命令会通知您。它还检索并显示凭证:
$ ./openshift-install --dir <installation_directory> wait-for install-complete 1
- 1
- 对于
<installation_directory>
,请指定安装文件保存到的目录的路径。
输出示例
INFO Waiting up to 30m0s for the cluster to initialize...
Cluster Version Operator 完成从 Kubernetes API 服务器部署 OpenShift Container Platform 集群时,该命令会成功。
重要-
安装程序生成的 Ignition 配置文件包含 24 小时后过期的证书,然后在该时进行续订。如果在更新证书前关闭集群,且集群在 24 小时后重启,集群会自动恢复过期的证书。一个例外是,您必须手动批准待处理的
node-bootstrapper
证书签名请求(CSR)来恢复 kubelet 证书。如需更多信息,请参阅从过期的 control plane 证书 中恢复的文档。 - 建议您在 Ignition 配置文件生成后的 12 小时内使用它们,因为 24 小时的证书会在集群安装后的 16 小时到 22 小时间进行轮转。通过在 12 小时内使用 Ignition 配置文件,您可以避免在安装过程中因为执行了证书更新而导致安装失败的问题。
确认 Kubernetes API 服务器正在与 pod 通信。
要查看所有 pod 的列表,请使用以下命令:
$ oc get pods --all-namespaces
输出示例
NAMESPACE NAME READY STATUS RESTARTS AGE openshift-apiserver-operator openshift-apiserver-operator-85cb746d55-zqhs8 1/1 Running 1 9m openshift-apiserver apiserver-67b9g 1/1 Running 0 3m openshift-apiserver apiserver-ljcmx 1/1 Running 0 1m openshift-apiserver apiserver-z25h4 1/1 Running 0 2m openshift-authentication-operator authentication-operator-69d5d8bf84-vh2n8 1/1 Running 0 5m ...
使用以下命令,查看上一命令的输出中所列 pod 的日志:
$ oc logs <pod_name> -n <namespace> 1
- 1
- 指定 pod 名称和命名空间,如上一命令的输出中所示。
如果 pod 日志显示,Kubernetes API 服务器可以与集群机器通信。
对于使用光纤通道协议(FCP)的安装,还需要额外的步骤才能启用多路径。不要在安装过程中启用多路径。
如需更多信息,请参阅 安装后机器配置任务 文档中的"使用 RHCOS 上使用内核参数启用多路径"。
您可以按照将计算机器 添加到 vSphere 的内容在集群安装后添加额外的计算机器。
3.4.17. 为 control plane 节点配置 vSphere DRS 反关联性规则
可将 vSphere 分布式资源调度程序 DRS) 关联性规则配置为支持 OpenShift Container Platform Control Plane 节点的高可用性。反关联性规则确保 OpenShift Container Platform Control Plane 节点的 vSphere 虚拟机没有调度到同一 vSphere 主机。
- 以下信息只适用于计算 DRS,不适用于存储 DRS。
-
govc
命令是 VMware 提供的开源命令;它不是红帽提供的。红帽不支持govc
命令。 -
有关下载和安装
govc
的说明,请参阅 VMware 文档网站。
运行以下命令来创建反关联性规则:
示例命令
$ govc cluster.rule.create \ -name openshift4-control-plane-group \ -dc MyDatacenter -cluster MyCluster \ -enable \ -anti-affinity master-0 master-1 master-2
创建规则后,您的 control plane 节点由 vSphere 自动迁移,以便它们不会在同一主机上运行。当 vSphere 协调新规则时,这可能需要一些时间。以下流程中会显示成功的命令完成。
迁移会自动进行,并可能导致 OpenShift API 中断或延迟,直到迁移完成为止。
当 control plane 虚拟机名称发生变化或迁移到新的 vSphere 集群时,需要手动更新 vSphere DRS 反关联性规则。
流程
运行以下命令来删除任何现有的 DRS 反关联性规则:
$ govc cluster.rule.remove \ -name openshift4-control-plane-group \ -dc MyDatacenter -cluster MyCluster
输出示例
[13-10-22 09:33:24] Reconfigure /MyDatacenter/host/MyCluster...OK
运行以下命令,使用更新的名称再次创建规则:
$ govc cluster.rule.create \ -name openshift4-control-plane-group \ -dc MyDatacenter -cluster MyOtherCluster \ -enable \ -anti-affinity master-0 master-1 master-2
3.4.18. OpenShift Container Platform 的 Telemetry 访问
在 OpenShift Container Platform 4.16 中,默认运行的 Telemetry 服务提供有关集群健康状况和成功更新的指标,需要访问互联网。如果您的集群连接到互联网,Telemetry 会自动运行,而且集群会注册到 OpenShift Cluster Manager。
确认 OpenShift Cluster Manager 清单正确后,可以由 Telemetry 自动维护,也可以使用 OpenShift Cluster Manager 手动维护,使用订阅监控来跟踪帐户或多集群级别的 OpenShift Container Platform 订阅。
其他资源
- 有关 Telemetry 服务的更多信息,请参阅关于 远程健康监控
3.4.19. 后续步骤
- 自定义集群。
- 如果需要,您可以选择 不使用远程健康报告。
- 设置 registry 并配置 registry 存储。
- 可选: 查看 vSphere 问题检测器 Operator 中的事件,以确定集群是否有权限或存储配置问题。
- 可选:如果您创建了加密的虚拟机,请创建一个加密的存储类。