安装双节点 OpenShift 集群
在单一节点上安装 OpenShift Container Platform
摘要
第 1 章 带有 Arbiter 的双节点 复制链接链接已复制到粘贴板!
有两个 control plane 节点的 OpenShift Container Platform 集群,一个本地仲裁程序节点是一个紧凑、经济的 OpenShift Container Platform 拓扑。仲裁程序节点存储完整的 etcd 数据,维护一个 etcd 仲裁并阻止出现脑裂的问题。arbiter 节点不会运行额外的 control plane 组件 kube-apiserver 和 kube-controller-manager,也不会运行工作负载。
要安装有两个 control plane 节点和一个本地仲裁节点的集群,请将仲裁角色分配给至少一个节点,并将集群的 control plane 节点数设置为 2。虽然 OpenShift Container Platform 目前不会对仲裁节点数量施加限制,但典型的部署仅包含一个,以最大程度降低硬件资源的使用。
安装后,您可以向有两个 control plane 节点和一个本地仲裁节点在集群中添加额外的仲裁程序节点(但不适用于标准多节点集群)。还无法在带有本地节点仲裁程序和标准拓扑的双节点 OpenShift 集群之间进行转换。
您可以使用以下方法之一安装有两个 control plane 节点和一个本地仲裁节点的集群:
- 在裸机上安装:配置本地仲裁程序节点
- 使用基于代理的安装程序安装:配置本地仲裁节点
第 2 章 带有隔离的双节点 复制链接链接已复制到粘贴板!
2.1. 准备安装带有隔离的双节点 OpenShift 集群 复制链接链接已复制到粘贴板!
带有隔离的双节点 OpenShift 集群只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅以下链接:
具有隔离的双节点 OpenShift 集群提供可用性(HA),且对硬件的要求较小。此配置是为部署完整的三节点 control plane 集群的分布式或边缘环境而设计的。
双节点集群不包括计算节点。除了管理集群外,两个 control plane 机器还运行用户工作负载。
隔离由 Pacemaker 管理,它可以使用节点的 Baseboard Management Console (BMC) 来隔离无响应的节点。在隔离无响应节点后,剩余的节点可以安全地继续运行集群,而不会造成资源崩溃的风险。
您可以使用用户置备的基础架构方法或安装程序置备的基础架构方法部署带有隔离的双节点 OpenShift 集群。
带有隔离的双节点 OpenShift 集群需要以下主机:
| 主机 | 描述 |
|---|---|
| 两个 control plane 机器 | control plane 机器运行组成 control plane 的 Kubernetes 和 OpenShift Container Platform 服务。 |
| 一个临时 bootstrap 机器 | 您需要一个 bootstrap 机器,在 control plane 机器上部署 OpenShift Container Platform 集群。您可在安装集群后删除 bootstrap 机器。 |
bootstrap 和 control plane 机器必须使用 Red Hat Enterprise Linux CoreOS(RHCOS)作为操作系统。有关安装 RHCOS 并启动 bootstrap 过程的说明,请参阅安装 RHCOS 并启动 OpenShift Container Platform bootstrap 过程
使用 RHCOS 的要求只适用于用户置备的基础架构部署。对于安装程序置备的基础架构部署,安装程序会自动置备 bootstrap 和 control plane 机器,您不需要手动安装 RHCOS。
2.1.1. 安装带有隔离的双节点 OpenShift 集群的最低资源要求 复制链接链接已复制到粘贴板!
每台集群机器都必须满足以下最低要求:
| 机器 | 操作系统 | CPU [1] | RAM | Storage | Input/Output Per Second (IOPS) [1] |
|---|---|---|---|---|---|
| bootstrap | RHCOS | 4 | 16 GB | 120 GB | 300 |
| Control plane(控制平面) | RHCOS | 4 | 16 GB | 120 GB | 300 |
- 当未启用并发多线程 (SMT) 或超线程时,一个 CPU 相当于一个物理内核。启用后,使用以下公式来计算对应的比例:(每个内核数的线程)× sockets = CPU。
- OpenShift Container Platform 和 Kubernetes 对磁盘性能敏感,建议使用更快的存储,特别是 control plane 节点上的 etcd。请注意,在许多云平台上,存储大小和 IOPS 可一起扩展,因此您可能需要过度分配存储卷来获取足够的性能。
2.1.2. 用户置备的 DNS 要求 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 部署中,以下组件需要 DNS 名称解析:
- The Kubernetes API
- OpenShift Container Platform 应用程序通配符
- bootstrap 和 control plane 机器
Kubernetes API、bootstrap 机器和 control plane 机器也需要反向 DNS 解析。
DNS A/AAAA 或 CNAME 记录用于名称解析,PTR 记录用于反向名称解析。反向记录很重要,因为 Red Hat Enterprise Linux CoreOS(RHCOS)使用反向记录为所有节点设置主机名,除非 DHCP 提供主机名。另外,反向记录用于生成 OpenShift Container Platform 需要操作的证书签名请求(CSR)。
建议使用 DHCP 服务器为每个群集节点提供主机名。如需更多信息,请参阅用户置备的基础架构部分的 DHCP 建议。
用户置备的 OpenShift Container Platform 集群需要以下 DNS 记录,这些记录必须在安装前就位。在每个记录中,<cluster_name> 是集群名称,<base_domain> 是您在 install-config.yaml 文件中指定的基域。完整的 DNS 记录采用以下形式: <component>.<cluster_name>.<base_domain>.。
| 组件 | 记录 | 描述 |
|---|---|---|
| Kubernetes API |
| DNS A/AAAA 或 CNAME 记录,以及用于标识 API 负载均衡器的 DNS PTR 记录。这些记录必须由集群外的客户端和集群中的所有节点解析。 |
|
| DNS A/AAAA 或 CNAME 记录,以及用于内部标识 API 负载均衡器的 DNS PTR 记录。这些记录必须可以从集群中的所有节点解析。 重要 API 服务器必须能够根据 Kubernetes 中记录的主机名解析 worker 节点。如果 API 服务器无法解析节点名称,则代理的 API 调用会失败,且您无法从 pod 检索日志。 | |
| Routes |
| 通配符 DNS A/AAAA 或 CNAME 记录,指向应用程序入口负载均衡器。应用程序入口负载均衡器以运行 Ingress Controller Pod 的机器为目标。默认情况下,Ingress Controller pod 在计算节点上运行。在没有专用计算节点的集群拓扑中,如双节点或三节点集群,control plane 节点也会执行 worker 标签,因此 Ingress pod 会调度到 control plane 节点上。这些记录必须由集群外的客户端和集群中的所有节点解析。
例如,console |
| bootstrap 机器 |
| DNS A/AAAA 或 CNAME 记录,以及用于标识 bootstrap 机器的 DNS PTR 记录。这些记录必须由集群中的节点解析。 |
| control plane 机器 |
| DNS A/AAAA 或 CNAME 记录,以识别 control plane 节点的每台机器。这些记录必须由集群中的节点解析。 |
在 OpenShift Container Platform 4.4 及更新的版本中,您不需要在 DNS 配置中指定 etcd 主机和 SRV 记录。
您可以使用 dig 命令验证名称和反向名称解析。如需了解详细的 验证步骤,请参阅为用户置备的基础架构验证 DNS 解析 一节。
2.1.2.1. 用户置备的集群的 DNS 配置示例 复制链接链接已复制到粘贴板!
本节提供 A 和 PTR 记录配置示例,它们满足了在用户置备的基础架构上部署 OpenShift Container Platform 的 DNS 要求。样本不是为选择一个 DNS 解决方案提供建议。
在这个示例中,集群名称为 ocp4,基域是 example.com。
在带有隔离的双节点集群中,control plane 机器也是可调度的 worker 节点。因此,DNS 配置必须只包含两个 control plane 节点。如果您稍后添加计算机器,请为它们提供对应的 A 和 PTR 记录,就像在标准用户置备的安装中一样。
用户置备的集群的 DNS A 记录配置示例
以下示例是 BIND 区域文件,其中显示了用户置备的集群中名称解析的 A 记录示例。
例 2.1. 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
api-int.ocp4.example.com. IN A 192.168.1.5
;
*.apps.ocp4.example.com. IN A 192.168.1.5
;
bootstrap.ocp4.example.com. IN A 192.168.1.96
;
control-plane0.ocp4.example.com. IN A 192.168.1.97
control-plane1.ocp4.example.com. IN A 192.168.1.98
;
;
;EOF
-
api.ocp4.example.com.: 为 Kubernetes API 提供名称解析。记录引用 API 负载均衡器的 IP 地址。 -
api-int.ocp4.example.com.: 为 Kubernetes API 提供名称解析。记录引用 API 负载均衡器的 IP 地址,用于内部集群通信。 8.apps.ocp4.example.com.: 为通配符路由提供名称解析。记录引用应用程序入口负载均衡器的 IP 地址。应用程序入口负载均衡器以运行 Ingress Controller Pod 的机器为目标。注意在这个示例中,将相同的负载均衡器用于 Kubernetes API 和应用入口流量。在生产环境中,您可以单独部署 API 和应用程序入口负载均衡器,以便可以隔离扩展每个负载均衡器基础架构。
-
bootstrap.ocp4.example.com.: 为 bootstrap 机器提供名称解析。 -
control-plane0.ocp4.example.com.: 为 control plane 机器提供名称解析。
用户置备的集群的 DNS PTR 记录配置示例
以下示例 BIND 区域文件显示了用户置备的集群中反向名称解析的 PTR 记录示例。
例 2.2. 反向记录的 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.
5.1.168.192.in-addr.arpa. IN PTR api-int.ocp4.example.com.
;
96.1.168.192.in-addr.arpa. IN PTR bootstrap.ocp4.example.com.
;
97.1.168.192.in-addr.arpa. IN PTR control-plane0.ocp4.example.com.
98.1.168.192.in-addr.arpa. IN PTR control-plane1.ocp4.example.com.
;
;
;EOF
-
api.ocp4.example.com.: 为 Kubernetes API 提供反向 DNS 解析。PTR 记录引用 API 负载均衡器的记录名称。 -
api-int.ocp4.example.com.: 为 Kubernetes API 提供反向 DNS 解析。PTR 记录引用 API 负载均衡器的记录名称,用于内部集群通信。 -
bootstrap.ocp4.example.com.: 为 bootstrap 机器提供反向 DNS 解析。 -
control-plane0.ocp4.example.com.: 为 control plane 机器提供 rebootstrap.ocp4.example.com.verse DNS 解析。
OpenShift Container Platform 应用程序通配符不需要 PTR 记录。
2.1.3. 安装程序置备的 DNS 要求 复制链接链接已复制到粘贴板!
客户端通过 baremetal 网络访问 OpenShift Container Platform 集群节点。网络管理员必须配置子域或子区,其中规范名称扩展是集群名称。
<cluster_name>.<base_domain>
例如:
test-cluster.example.com
OpenShift Container Platform 包含使用集群成员资格信息来生成 A/AAAA 记录的功能。这会将节点名称解析为其 IP 地址。使用 API 注册节点后,集群可以在不使用 CoreDNS-mDNS 的情况下分散节点信息。这可消除与多播 DNS 关联的网络流量。
CoreDNS 需要 TCP 和 UDP 连接到上游 DNS 服务器才能正常工作。确保上游 DNS 服务器可以从 OpenShift Container Platform 集群节点接收 TCP 和 UDP 连接。
在 OpenShift Container Platform 部署中,以下组件需要 DNS 名称解析:
- The Kubernetes API
- OpenShift Container Platform 应用程序通配符入口 API
A/AAAA 记录用于名称解析,而 PTR 记录用于反向名称解析。Red Hat Enterprise Linux CoreOS(RHCOS)使用反向记录或 DHCP 为所有节点设置主机名。
安装程序置备的安装包括使用集群成员资格信息生成 A/AAAA 记录的功能。这会将节点名称解析为其 IP 地址。在每个记录中,<cluster_name> 是集群名称,<base_domain> 是您在 install-config.yaml 文件中指定的基域。完整的 DNS 记录采用以下形式: <component>.<cluster_name>.<base_domain>.。
| 组件 | 记录 | 描述 |
|---|---|---|
| Kubernetes API |
| A/AAAA 记录和 PTR 记录可识别 API 负载均衡器。这些记录必须由集群外的客户端和集群中的所有节点解析。 |
| Routes |
| 通配符 A/AAAA 记录指的是应用程序入口负载均衡器。应用程序入口负载均衡器以运行 Ingress Controller pod 的节点为目标。默认情况下,Ingress Controller pod 在 worker 节点上运行。这些记录必须由集群外的客户端和集群中的所有节点解析。
例如,console |
您可以使用 dig 命令验证 DNS 解析。
2.1.4. 为带有隔离的双节点集群配置 Ingress 负载均衡器 复制链接链接已复制到粘贴板!
在安装带有隔离的双节点 OpenShift 集群前,您必须配置外部入口负载均衡器(LB)。Ingress LB 将外部应用程序流量转发到 control plane 节点上运行的 Ingress Controller pod。两个节点都可以主动接收流量。
先决条件
- 您有两个启用了隔离功能的 control plane 节点。
- 您有从负载均衡器到两个 control plane 节点的网络连接。
-
为
api.<cluster_name>.<base_domain>和*.apps.<cluster_name>.<base_domain>创建 DNS 记录。 - 您有一个支持端点上的健康检查的外部负载均衡器。
流程
将负载均衡器配置为转发以下端口的流量:
-
6443: Kubernetes API 服务器 80和443:应用程序入口您必须将流量转发到两个 control plane 节点。
-
- 在负载平衡器上配置健康检查。您必须监控后端端点,以便负载均衡器仅将流量发送到响应的节点。
配置负载均衡器,将流量转发到两个 control plane 节点。以下示例演示了如何配置两个 control plane 节点:
frontend api_frontend bind *:6443 mode tcp default_backend api_backend backend api_backend mode tcp balance roundrobin server cp0 <cp0_ip>:6443 check server cp1 <cp1_ip>:6443 check frontend ingress_frontend bind *:80 bind *:443 mode tcp default_backend ingress_backend backend ingress_backend mode tcp balance roundrobin server cp0 <cp0_ip>:80 check server cp1 <cp1_ip>:80 check server cp0 <cp0_ip>:443 check server cp1 <cp1_ip>:443 check验证负载均衡器配置:
在外部客户端中运行以下命令:
$ curl -k https://api.<cluster_name>.<base_domain>:6443/version从外部客户端,运行以下命令来访问应用程序路由:
$ curl https://<app>.<cluster_name>.<base_domain>
您可以关闭 control plane 节点,并验证负载均衡器是否在其他节点继续服务请求时停止向该节点发送流量。
2.1.5. 为自定义 br-ex 网桥创建清单对象 复制链接链接已复制到粘贴板!
您必须创建一个清单对象,以在安装后修改集群的网络配置。清单配置 br-ex 网桥,后者管理集群的外部网络连接。
有关创建此清单的说明,请参阅"为自定义 br-ex 网桥创建清单文件"。
2.2. 使用隔离安装双节点 OpenShift 集群 复制链接链接已复制到粘贴板!
带有隔离的双节点 OpenShift 集群只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅以下链接:
您可以使用安装程序置备的基础架构或用户置备的基础架构安装方法部署带有隔离的双节点 OpenShift 集群。以下示例提供了这两种方法的 install-config.yaml 配置示例。
2.2.1. 带有隔离的双节点安装程序置备的基础架构集群的 install-config.yaml 示例 复制链接链接已复制到粘贴板!
您可以使用安装程序置备的基础架构方法,使用以下 install-config.yaml 配置作为部署带有隔离的双节点 OpenShift 集群的模板:
在继续操作前进行 etcd 备份,以确保在出现问题时可以恢复集群。
install-config.yaml 配置示例
apiVersion: v1
baseDomain: example.com
compute:
- name: worker
replicas: 0
controlPlane:
name: master
replicas: 2
fencing:
credentials:
- hostname: <control_0_hostname>
address: https://<redfish-api-url>
username: <username>
password: <password>
certificateVerification: Disabled
- hostname: <control_1_hostname>
address: https://<redfish-api-url>
username: <username>
password: <password>
certificateVerification: Enabled
metadata:
name: <cluster_name>
featureSet: TechPreviewNoUpgrade
platform:
baremetal:
apiVIPs:
- <api_ip>
ingressVIPs:
- <wildcard_ip>
hosts:
- name: <control_0_hostname>
role: master
bmc:
address: <bmc_address>
username: <bmc_username>
password: <bmc_password>
bootMACAddress: <boot_mac>
- name: <control_1_hostname>
role: master
bmc:
address: <bmc_address>
username: <bmc_username>
password: <bmc_password>
bootMACAddress: <boot_mac>
pullSecret: '<pull_secret>'
sshKey: '<ssh_public_key>'
-
compute.replicas: 将此字段设置为0,因为双节点隔离集群不包括 worker 节点。 -
controlPlane.replicas:为双节点隔离部署将此字段设置为2。 -
fencing.credentials.hostname:为每个 control plane 节点提供 Baseboard Management Console (BMC)凭 证。节点隔离需要这些凭证,并防止脑裂的情况。 -
fencing.credentials.certificateVerification:如果您的 Redfish URL 使用自签名证书,则此字段设置为Disabled,这对内部托管端点是通用的。对于具有有效 CA 签名证书的 URL,将此字段设置为Enabled。 -
metadata.name、:集群名称用作主机名和 DNS 记录的前缀。 -
featureSet:将此字段设置为TechPreviewNoUpgrade以启用双节点 OpenShift 集群部署。 -
platform.baremetal.apiVIPs和platform.baremetal.ingressVIPs: API 和 Ingress 端点的虚拟 IP。确保它们可以被所有节点和外部客户端访问。 -
pullSecret:包含拉取集群组件的容器镜像所需的凭证。 -
sshKey:安装后访问集群节点的 SSH 公钥。
2.2.2. 带有隔离的双节点用户置备的基础架构集群 install-config.yaml 示例 复制链接链接已复制到粘贴板!
您可以使用用户置备的基础架构方法,使用以下 install-config.yaml 配置作为部署带有隔离的双节点 OpenShift 集群的模板:
在继续操作前进行 etcd 备份,以确保在出现问题时可以恢复集群。
install-config.yaml 配置示例
apiVersion: v1
baseDomain: example.com
compute:
- name: worker
replicas: 0
controlPlane:
name: master
replicas: 2
fencing:
credentials:
- hostname: <control_0_hostname>
address: https://<redfish-api-url>
username: <username>
password: <password>
- hostname: <control_1_hostname>
address: https://<redfish-api-url>
username: <username>
password: <password>
metadata:
name: <cluster_name>
featureSet: TechPreviewNoUpgrade
platform:
none: {}
pullSecret: '<pull_secret>'
sshKey: '<ssh_public_key>'
-
compute.replicas: 将此字段设置为0,因为双节点隔离集群不包括 worker 节点。 -
controlPlane.replicas:为双节点隔离部署将此字段设置为2。 -
fencing.credentials.hostname:为每个 control plane 节点提供 BMC 凭证。 -
metadata.name:集群名称用作主机名和 DNS 记录的前缀。 -
featureSet:启用双节点 OpenShift 集群部署。 -
对于用户置备的基础架构部署,
platform.none将平台设置为none。裸机主机在安装程序外预置备。 -
pullSecret:包含拉取集群组件的容器镜像所需的凭证。 -
sshKey:安装后访问集群节点的 SSH 公钥。
2.3. 安装后进行故障排除和恢复 复制链接链接已复制到粘贴板!
带有隔离的双节点 OpenShift 集群只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅以下链接:
使用以下小节帮助您通过隔离在双节点 OpenShift 集群中恢复问题。
2.3.3. 使用隔离替换双节点 OpenShift 集群中的 control plane 节点 复制链接链接已复制到粘贴板!
您可以替换双节点 OpenShift 集群中失败的 control plane 节点。替换节点必须使用与故障节点相同的主机名和 IP 地址。
先决条件
- 您有一个可正常工作的 survivor control plane 节点。
- 您已确认机器没有运行,或者该节点未就绪。
-
您可以使用具有
cluster-admin角色的用户访问集群。 - 您知道故障节点的主机名和 IP 地址。
在继续操作前进行 etcd 备份,以确保在出现问题时可以恢复集群。
流程
运行以下命令检查仲裁状态:
$ sudo pcs quorum status输出示例
Quorum information ------------------ Date: Fri Oct 3 14:15:31 2025 Quorum provider: corosync_votequorum Nodes: 2 Node ID: 1 Ring ID: 1.16 Quorate: Yes Votequorum information ---------------------- Expected votes: 2 Highest expected: 2 Total votes: 2 Quorum: 1 Flags: 2Node Quorate WaitForAll Membership information ---------------------- Nodeid Votes Qdevice Name 1 1 NR master-0 (local) 2 1 NR master-1如果 quorum 丢失,且一个 control plane 节点仍在运行,请运行以下命令在 survivor 节点上手动恢复仲裁:
$ sudo pcs quorum unblock如果只有一个节点失败,请运行以下命令验证 etcd 是否在 survivor 节点上运行:
$ sudo pcs resource status etcd如果 etcd 没有运行,请运行以下命令重启 etcd:
$ sudo pcs resource cleanup etcd如果 etcd 仍然没有启动,手动在存活的节点上强制启动,跳过隔离:
重要在运行此命令前,请确保被替换的节点无法访问。否则,会面临 etcd 被破坏的风险。
$ sudo pcs resource debug-stop etcd$ sudo OCF_RESKEY_CRM_meta_notify_start_resource='etcd' pcs resource debug-start etcd恢复后,etcd 必须在存活的节点上成功运行。
运行以下命令,为故障节点删除 etcd secret:
$ oc project openshift-etcd$ oc delete secret etcd-peer-<node_name>$ oc delete secret etcd-serving-<node_name>$ oc delete secret etcd-serving-metrics-<node_name>注意要替换失败的节点,需要首先删除其 etcd secret。当 etcd 运行时,API 服务器可能需要一些时间才能响应这些命令。
删除故障节点的资源:
如果您有
BareMetalHost(BMH)对象,请运行以下命令来识别您要替换的主机:$ oc get bmh -n openshift-machine-api运行以下命令,删除故障节点的 BMH 对象:
$ oc delete bmh/<bmh_name> -n openshift-machine-api运行以下命令,列出
Machine对象来识别映射到您要替换的节点的对象:$ oc get machines.machine.openshift.io -n openshift-machine-api运行以下命令,从
Machine对象获取带有机器哈希值的标签:$ oc get machines.machine.openshift.io/<machine_name> -n openshift-machine-api \ -o jsonpath='Machine hash label: {.metadata.labels.machine\.openshift\.io/cluster-api-cluster}{"\n"}'将
<machine_name>替换为集群中的Machine对象的名称。例如:ostest-bfs7w-ctrlplane-0。您需要此标签来置备新的
Machine对象。运行以下命令,删除故障节点的
Machine对象:$ oc delete machines.machine.openshift.io/<machine_name>-<failed nodename> -n openshift-machine-api注意在删除
Machine对象后,节点对象会被自动删除。
使用相同的名称和 IP 地址重新创建失败的主机:
重要只有在使用安装程序置备的基础架构或 Machine API 创建原始节点时,才需要执行此步骤。有关替换失败的裸机 control plane 节点的详情,请参考"在裸机中替换不健康的 etcd 成员"。
-
删除 BMH 和
Machine对象。机器控制器自动删除节点对象。 使用以下示例配置置备新机器:
Machine对象配置示例apiVersion: machine.openshift.io/v1beta1 kind: Machine metadata: annotations: metal3.io/BareMetalHost: openshift-machine-api/{bmh_name} finalizers: - machine.machine.openshift.io labels: machine.openshift.io/cluster-api-cluster: {machine_hash_label} machine.openshift.io/cluster-api-machine-role: master machine.openshift.io/cluster-api-machine-type: master name: {machine_name} namespace: openshift-machine-api spec: authoritativeAPI: MachineAPI metadata: {} providerSpec: value: apiVersion: baremetal.cluster.k8s.io/v1alpha1 customDeploy: method: install_coreos hostSelector: {} image: checksum: "" url: "" kind: BareMetalMachineProviderSpec metadata: creationTimestamp: null userData: name: master-user-data-managed-
metadata.annotations.metal3.io/BareMetalHost: 将{bmh_name}替换为与您要替换的主机关联的 BMH 对象的名称。 -
labels.machine.openshift.io/cluster-api-cluster: 将{machine_hash_label}替换为从您删除的机器中获取的标签。 -
metadata.name:将{machine_name}替换为您删除的机器的名称。
-
运行以下命令,创建新的 BMH 对象和 secret 来存储 BMC 凭证:
cat <<EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret_name> namespace: openshift-machine-api data: password: <password> username: <username> type: Opaque --- apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: name: {bmh_name} namespace: openshift-machine-api spec: automatedCleaningMode: disabled bmc: address: <redfish_url>/{uuid} credentialsName: <name> disableCertificateVerification: true bootMACAddress: {boot_mac_address} bootMode: UEFI externallyProvisioned: false online: true rootDeviceHints: deviceName: /dev/disk/by-id/scsi-<serial_number> userData: name: master-user-data-managed namespace: openshift-machine-api EOF-
metadata.name:指定 secret 的名称。 -
metadata.name:将{bmh_name}替换为您删除的 BMH 对象的名称。 -
BMC.address: 将{uuid}替换为您创建的节点的 UUID。 -
BMC.credentialsName:将name替换为您创建的 secret 的名称。 -
bootMACAddress:指定 provisioning 网络接口的 MAC 地址。这是节点在调配期间与 Ironic 通信时使用的 MAC 地址。
-
-
删除 BMH 和
运行以下命令验证新节点是否已达到
Provisioned状态:$ oc get bmh -o wide此命令输出中的
STATUS列的值必须是Provisioned。注意完成置备过程可能需要 10 到 20 分钟。
运行以下命令,验证两个 control plane 节点都处于
Ready状态:$ oc get nodes此命令输出中的
STATUS列值对于两个节点都必须是Ready。运行以下命令,将
detached注解应用到 BMH 对象以防止 Machine API 管理它:$ oc annotate bmh <bmh_name> -n openshift-machine-api baremetalhost.metal3.io/detached='' --overwrite运行以下命令,将替换节点重新加入到 pacemaker 集群中:
注意在存活的 control plane 节点上运行以下命令,而不是被替换的节点。
$ sudo pcs cluster node remove <node_name>$ sudo pcs cluster node add <node_name> addr=<node_ip> --start --enable运行以下命令,删除故障节点的过时作业:
$ oc project openshift-etcd$ oc delete job tnf-auth-job-<node_name>$ oc delete job tnf-after-setup-job-<node_name>
验证
有关验证 control plane 节点和 etcd 是否正常运行的详情,请参考"使用隔离在双节点 OpenShift 集群中验证 etcd 健康状况"。
2.3.5. 在带有隔离的双节点 OpenShift 集群中验证 etcd 健康状况 复制链接链接已复制到粘贴板!
完成节点恢复或维护过程后,验证 control plane 节点和 etcd 是否在正确运行。
先决条件
-
您可以使用具有
cluster-admin权限的用户访问集群。 - 您可以通过 SSH 访问至少一个 control plane 节点。
流程
运行以下命令检查整个节点状态:
$ oc get nodes此命令验证 control plane 节点是否处于
Ready状态,表示它们是否可以接收调度的工作负载。运行以下命令,验证
cluster-etcd-operator的状态:$ oc describe co/etcdcluster-etcd-operator管理并报告 etcd 设置的健康状况。查看其状态可帮助您识别任何持续的问题或降级条件。运行以下命令来查看 etcd 成员列表:
$ oc rsh -n openshift-etcd <etcd_pod> etcdctl member list -w table此命令显示当前的 etcd 成员及其角色。查找标记为
learner的任何节点,这表示它们正在成为投票成员。在 control plane 节点上运行以下命令来查看 Pacemaker 资源状态:
$ sudo pcs status --full此命令提供 Pacemaker 管理的所有资源的详细概述。您必须确保满足以下条件:
- 两个节点都在线。
-
kubelet和etcd资源正在运行。 - 两个节点的隔离都正确配置。
Legal Notice
复制链接链接已复制到粘贴板!
Copyright © Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of the OpenJS Foundation.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.