26.6. 从 OpenShift SDN 网络插件迁移
作为集群管理员,您可以从 OpenShift 软件定义型网络(SDN)插件迁移到 OVN-Kubernetes 网络插件。
可以使用以下方法从 OpenShift SDN 网络插件迁移到 OVN-Kubernetes 插件:
- Ansible playbook
- Ansible playbook 方法自动化离线迁移方法步骤。此方法使用与手动离线迁移方法相同的使用场景。
- 离线迁移
- 这是一个手动过程,会包括一些停机时间。此方法主要用于自我管理的 OpenShift Container Platform 部署,当您无法执行有限实时迁移到 OVN-Kubernetes 网络插件时,请考虑使用此方法。
- 有限的实时迁移(首选方法)
- 这是一个自动过程,将集群从 OpenShift SDN 迁移到 OVN-Kubernetes。
对于有限的实时迁移方法,不要使用脚本或另一个工具(如 Red Hat Ansible Automation Platform)自动从 OpenShift SDN 迁移到 OVN-Kubernetes。这可能导致 OpenShift Container Platform 集群中断或崩溃。
26.6.1. 有限实时迁移到 OVN-Kubernetes 网络插件概述 复制链接链接已复制到粘贴板!
有限的实时迁移方法是在不中断服务的情况下将 OpenShift SDN 网络插件及其网络配置、连接和相关资源迁移到 OVN-Kubernetes 网络插件的过程。对于 OpenShift Container Platform 4.15,它可用于版本 4.15.31 及更新的版本。它是从 OpenShift SDN 迁移到 OVN-Kubernetes 的首选方法。如果无法执行有限的实时迁移,您可以使用离线迁移方法。
在将 OpenShift Container Platform 集群迁移到使用 OVN-Kubernetes 网络插件前,将集群更新至最新的 z-stream 版本,以便所有最新的程序错误修复都应用到集群。
它不适用于托管 control plane 部署类型。这个迁移方法对于需要持续服务可用性的部署类型非常重要,并具有以下优点:
- 持续服务可用性
- 最小化停机时间
- 自动节点重新引导
- 从 OpenShift SDN 网络插件无缝过渡到 OVN-Kubernetes 网络插件
虽然提供了一个回滚过程,但有限的实时迁移通常被认为是一个单向过程。
从 OpenShift Container Platform 4.14 开始,OpenShift SDN CNI 已被弃用。自 OpenShift Container Platform 4.15 起,网络插件不是新安装的选项。在以后的发行版本中,计划删除 OpenShift SDN 网络插件,并不再被支持。红帽将在删除前对这个功能提供程序错误修正和支持,但不会再改进这个功能。作为 OpenShift SDN CNI 的替代选择,您可以使用 OVN Kubernetes CNI。
以下小节提供了有关有限实时迁移方法的更多信息。
26.6.1.1. 使用有限实时迁移方法时支持的平台 复制链接链接已复制到粘贴板!
下表提供了有关有限实时迁移类型的支持的平台信息。
| 平台 | 有限实时迁移 |
|---|---|
| 裸机硬件 | ✓ |
| Amazon Web Services (AWS) | ✓ |
| Google Cloud | ✓ |
| IBM Cloud® | ✓ |
| Microsoft Azure | ✓ |
| Red Hat OpenStack Platform(RHOSP) | ✓ |
| VMware vSphere | ✓ |
| Nutanix | ✓ |
每个列出的平台都支持在安装程序置备的基础架构和用户置备的基础架构上安装 OpenShift Container Platform 集群。
26.6.1.2. 有限实时迁移到 OVN-Kubernetes 网络插件的最佳实践 复制链接链接已复制到粘贴板!
有关迁移到使用有限实时迁移方法的 OVN-Kubernetes 网络插件时的最佳实践列表,请参阅 Limited Live Migration from OpenShift SDN to OVN-Kubernetes。
26.6.1.3. 有限实时迁移到 OVN-Kubernetes 网络插件的注意事项 复制链接链接已复制到粘贴板!
在使用有限实时迁移方法到 OVN-Kubernetes 网络插件之前,集群管理员应考虑以下信息:
- 启用 OpenShift SDN 多租户模式的集群不支持有限的实时迁移步骤。
- 出口路由器 pod 会阻止有限的实时迁移过程。在开始有限的实时迁移过程前,必须删除它们。
- 在迁移过程中,当使用 OVN-Kubernetes 和 OpenShift SDN 运行集群时,两个 CNI 会临时禁用多播和出口 IP 地址。出口防火墙正常工作。
- 迁移旨在成为单向过程。但是,对于希望回滚到 OpenShift-SDN 的用户,从 OpenShift-SDN 迁移到 OVN-Kubernetes 必须已成功。用户可以按照以下步骤从 OVN-Kubernetes 网络插件迁移到 OpenShift SDN 网络插件。
- HyperShift 集群中不支持有限的实时迁移。
- OpenShift SDN 不支持 IPsec。迁移后,集群管理员可以启用 IPsec。
- OpenShift SDN 不支持 IPv6。迁移后,集群管理员可以启用双栈。
-
OpenShift SDN 插件允许
NodeNetworkConfigurationPolicy(NNCP)自定义资源(CR)的应用程序到节点上的主接口。OVN-Kubernetes 网络插件没有此功能。 集群 MTU 是 pod 接口的 MTU 值。它始终小于硬件 MTU,以考虑集群网络覆盖开销。OVN-Kubernetes 的开销为 100 字节,OpenShift SDN 是 50 字节。
在有限的实时迁移过程中,OVN-Kubernetes 和 OpenShift SDN 并行运行。OVN-Kubernetes 管理某些节点的集群网络,而 OpenShift SDN 管理其他用户的集群网络。为确保跨 CNI 流量保持正常工作,Cluster Network Operator 会更新可路由的 MTU,以确保两个 CNI 共享相同的覆盖 MTU。因此,在迁移完成后,集群 MTU 小于 50 字节。
-
OVN-Kubernetes 会保留
100.64.0.0/16和100.88.0.0/16IP 地址范围。这些子网不能与任何其他内部或外部网络重叠。如果 OpenShift SDN 使用这些 IP 地址,或者任何可能会与此集群通信的外部网络,则您必须在启动有限的实时迁移前使用不同的 IP 地址范围。如需更多信息,请参阅"选择 OVN-Kubernetes 地址范围"。 -
如果您的带有 Precision Time Protocol (PTP) 的
openshift-sdn集群使用 User Datagram Protocol (UDP) 进行硬件时间戳,且迁移到 OVN-Kubernetes 插件,则硬件时间戳无法应用到主接口设备,如 Open vSwitch (OVS) 网桥。因此,UDP 版本 4 配置无法使用br-ex接口。 - 在大多数情况下,有限的实时迁移独立于 Multus CNI 插件创建的 pod 的二级接口。但是,如果这些二级接口在主机的默认网络接口控制器 (NIC) 上设置,例如,使用 MACVLAN、IPVLAN、SR-IOV 或桥接接口作为控制节点,则 OVN-Kubernetes 可能会遇到故障。在继续有限的实时迁移前,用户应删除此配置。
- 当主机中存在多个 NIC 时,且默认路由不在具有 Kubernetes NodeIP 的接口上,则必须使用离线迁移。
-
在启动有限实时迁移前,必须删除
openshift-sdn命名空间中的所有DaemonSet对象(不受 Cluster Network Operator (CNO) 管理。这些非受管守护进程集可能会导致迁移状态在未正确处理时保持不完整。 -
如果您运行 Operator 或您已配置了 pod 中断预算,您可能会在升级过程中遇到中断。如果在
PodDisruptionBudget中将minAvailable设置为 1,则节点会排空以应用可能会阻止驱除过程的待处理机器配置。如果重启了几个节点,则所有 pod 只能有一个节点上运行,PodDisruptionBudget字段可能会阻止节点排空。 与 OpenShift SDN 一样,OVN-Kubernetes 资源(如
EgressFirewall资源)需要ClusterAdmin权限。从 OpenShift SDN 迁移到 OVN-Kubernetes 不会自动更新 role-base 访问控制(RBAC)资源。通过aggregate-to-adminClusterRole授予项目管理员的 OpenShift SDN 资源必须手动检查并调整,因为这些更改不会包含在迁移过程中。迁移后,需要手动验证 RBAC 资源。有关迁移后设置
aggregate-to-adminClusterRole 的详情,请参考 How to allow project admins to manage Egressfirewall resources in RHOCP4 中的示例。-
当集群依赖于主机网络中的静态路由或路由策略时,pod 可以到达某些目的地,在迁移过程中用户应将
gatewayConfig中的routingViaHostspec 设置为true,并将ipForwarding设置为Global。这将为主机内核卸载路由决策。如需更多信息,请参阅 Openshift SDN 网络插件迁移到 OVNKubernetes 插件前的建议实践 (Red Hat Knowledgebase),并在启动有限的实时迁移前"检查集群资源的第 5 步。
26.6.1.4. 有限的实时迁移过程是如何工作的 复制链接链接已复制到粘贴板!
下表总结了有限实时迁移过程,具体是流程中用户发起的步骤与迁移脚本在响应中执行的操作之间的部分。
| 用户发起的步骤 | 迁移操作 |
|---|---|
|
通过将 |
|
26.6.1.5. 使用有限的实时迁移方法迁移到 OVN-Kubernetes 网络插件 复制链接链接已复制到粘贴板!
使用有限的实时迁移方法迁移到 OVN-Kubernetes 网络插件是一个步骤,要求用户检查出口 IP 资源、出口防火墙资源和多播启用的命名空间的行为。管理员还必须查看其部署中的任何网络策略,并删除出口路由器资源,然后才能启动有限的实时迁移过程。以下流程应该连续使用。
26.6.1.5.1. 在启动有限实时迁移前检查集群资源 复制链接链接已复制到粘贴板!
在使用有限的实时迁移功能迁移到 OVN-Kubernetes 之前,您应该在 OpenShift SDN 部署中检查出口 IP 资源、出口防火墙资源和多播启用的命名空间。您还应检查部署中的任何网络策略。如果您在迁移前发现集群有这些资源,您应该在迁移后检查其行为,以确保它们按预期工作。
以下流程演示了如何检查出口 IP 资源、出口防火墙资源、多播支持的命名空间、网络策略和 NNCP。检查这些资源后不需要任何操作。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。
流程
作为 OpenShift Container Platform 集群管理员,检查出口防火墙资源。您可以使用
ocCLI 或 OpenShift Container Platform Web 控制台进行此操作。使用
ocCLI 工具检查出口防火墙资源:要检查出口防火墙资源,请输入以下命令:
$ oc get egressnetworkpolicies.network.openshift.io -A输出示例
NAMESPACE NAME AGE <namespace> <example_egressfirewall> 5d您可以使用
-o yaml标志检查出口防火墙资源的预期行为。例如:$ oc get egressnetworkpolicy <example_egressfirewall> -n <namespace> -o yaml输出示例
apiVersion: network.openshift.io/v1 kind: EgressNetworkPolicy metadata: name: <example_egress_policy> namespace: <namespace> spec: egress: - type: Allow to: cidrSelector: 0.0.0.0/0 - type: Deny to: cidrSelector: 10.0.0.0/8
使用 OpenShift Container Platform Web 控制台检查出口防火墙资源:
-
在 OpenShift Container Platform web 控制台中点 Observe
Metrics。 -
在 Expression 框中,键入
sdn_controller_num_egress_firewalls,然后点 Run queries。如果您有出口防火墙资源,则会在 Expression 框中返回。
-
在 OpenShift Container Platform web 控制台中点 Observe
检查集群是否有出口 IP 资源。您可以使用
ocCLI 或 OpenShift Container Platform Web 控制台进行此操作。使用
ocCLI 工具检查出口 IP:要列出带有出口 IP 资源的命名空间,请输入以下命令
$ oc get netnamespace -A | awk '$3 != ""'输出示例
NAME NETID EGRESS IPS namespace1 14173093 ["10.0.158.173"] namespace2 14173020 ["10.0.158.173"]
使用 OpenShift Container Platform Web 控制台检查出口 IP:
-
在 OpenShift Container Platform web 控制台中点 Observe
Metrics。 -
在 Expression 框中,键入
sdn_controller_num_egress_ips,然后点 Run queries。如果您有出口防火墙资源,则会在 Expression 框中返回。
-
在 OpenShift Container Platform web 控制台中点 Observe
检查集群是否有启用多播的命名空间。您可以使用
ocCLI 或 OpenShift Container Platform Web 控制台进行此操作。使用
ocCLI 工具检查启用多播的命名空间:要找到启用多播的命名空间,请输入以下命令:
$ oc get netnamespace -o json | jq -r '.items[] | select(.metadata.annotations."netnamespace.network.openshift.io/multicast-enabled" == "true") | .metadata.name'输出示例
namespace1 namespace3
使用 OpenShift Container Platform Web 控制台检查多播启用的命名空间:
-
在 OpenShift Container Platform web 控制台中点 Observe
Metrics。 -
在 Expression 框中,键入
sdn_controller_num_multicast_enabled_namespaces,然后点 Run queries。如果您启用了多播的命名空间,则会在 Expression 框中返回它们。
-
在 OpenShift Container Platform web 控制台中点 Observe
检查集群是否有网络策略。您可以使用
ocCLI 完成此操作。要使用
ocCLI 工具检查网络策略,请输入以下命令:$ oc get networkpolicy -n <namespace>输出示例
NAME POD-SELECTOR AGE allow-multicast app=my-app 11m
可选:如果您的集群在主机网络中使用静态路由或路由策略,请在迁移过程中将
gatewayConfig对象中的routingViaHostspec 设置为true,将ipForwardingspec 设置为Global。$ oc patch Network.operator.openshift.io cluster --type=merge \ --patch '{ "spec":{ "defaultNetwork":{ "ovnKubernetesConfig":{ "gatewayConfig": { "ipForwarding": "Global", "routingViaHost": true }}}}}'运行以下命令,验证
ipForwardingspec 是否已设置为Global,routingViaHostspec 被设置为true:$ oc get networks.operator.openshift.io cluster -o yaml | grep -A 5 "gatewayConfig"输出示例
apiVersion: operator.openshift.io/v1 kind: Network metadata: name: cluster # ... gatewayConfig: ipForwarding: Global ipv4: {} ipv6: {} routingViaHost: true genevePort: 6081 # ...
26.6.1.5.2. 在启动有限实时迁移前删除出口路由器 pod 复制链接链接已复制到粘贴板!
在启动有限的实时迁移前,您必须检查并移除任何出口路由器 pod。如果在执行有限的实时迁移时集群中有一个出口路由器 pod,Network Operator 会阻断迁移并返回以下错误:
The cluster configuration is invalid (network type limited live migration is not supported for pods with `pod.network.openshift.io/assign-macvlan` annotation.
Please remove all egress router pods). Use `oc edit network.config.openshift.io cluster` to fix.
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。
流程
要找到集群中的出口路由 pod,请输入以下命令:
$ oc get pods --all-namespaces -o json | jq '.items[] | select(.metadata.annotations."pod.network.openshift.io/assign-macvlan" == "true") | {name: .metadata.name, namespace: .metadata.namespace}'输出示例
{ "name": "egress-multi", "namespace": "egress-router-project" }另外,您还可以查询 OpenShift Container Platform Web 控制台上的指标。
-
在 OpenShift Container Platform web 控制台中点 Observe
Metrics。 -
在 Expression 框中,输入
network_attachment_definition_instances{networks="egress-router"}。然后,点 Add。
-
在 OpenShift Container Platform web 控制台中点 Observe
要删除出口路由器 pod,请输入以下命令:
$ oc delete pod <egress_pod_name> -n <egress_router_project>
26.6.1.5.3. 启动有限的实时迁移过程 复制链接链接已复制到粘贴板!
在检查了出口 IP 资源、出口防火墙资源和多播启用命名空间的行为后,并删除了任何出口路由器资源,您可以启动有限的实时迁移过程。
先决条件
- 在网络策略隔离模式下,使用 OpenShift SDN CNI 网络插件配置集群。
-
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
cluster-admin角色的用户访问集群。 - 您已创建了 etcd 数据库的最新备份。
- 集群处于已知良好状态,且没有任何错误。
-
在迁移到 OVN-Kubernetes 之前,必须有一条安全组规则,以允许所有云平台上所有节点的 UDP 数据包在端口
6081上。 -
如果 OpenShift-SDN 之前使用
100.64.0.0/16和100.88.0.0/16地址范围,则代表已修补它们。流程中的步骤检查这些地址范围是否在使用。如果在使用它们,请参阅"使用 OVN-Kubernetes 地址范围"。 - 您已检查出口 IP 资源、出口防火墙资源和多播启用的命名空间。
- 在开始有限的实时迁移前,您已删除了任何出口路由器 pod。如需有关出口路由器 pod 的更多信息,请参阅"以重定向模式部署出口路由器 pod"。
- 您已参阅本文档的"正在考虑的有限实时迁移"部分。
流程
要修补集群级别的网络配置,并启动从 OpenShift SDN 到 OVN-Kubernetes 的迁移:
$ oc patch Network.config.openshift.io cluster --type='merge' --patch '{"metadata":{"annotations":{"network.openshift.io/network-type-migration":""}},"spec":{"networkType":"OVNKubernetes"}}'运行此命令后,迁移过程将开始。在此过程中,Machine Config Operator 会重启集群中的节点两次。在集群升级过程中,迁移大约需要进行两次。
重要此
oc patch命令检查 OpenShift SDN 使用的重叠 CIDR。如果检测到重叠的 CIDR,您必须在有限的实时迁移进程启动前对它们进行补丁。如需更多信息,请参阅"使用 OVN-Kubernetes 地址范围"。可选: 要确保迁移过程已完成,并检查
network.config的状态,您可以输入以下命令:$ oc get network.config.openshift.io cluster -o jsonpath='{.status.networkType}'$ oc get network.config cluster -o=jsonpath='{.status.conditions}' | jq .您可以检查有限的实时迁移指标,以进行故障排除。如需更多信息,请参阅"检查有限的实时迁移指标"。
成功迁移操作后,输入以下命令从
network.config自定义资源中删除network.openshift.io/network-type-migration-注解:$ oc annotate network.config cluster network.openshift.io/network-type-migration-
26.6.1.5.4. 修补 OVN-Kubernetes 地址范围 复制链接链接已复制到粘贴板!
OVN-Kubernetes 保留以下 IP 地址范围:
-
100.64.0.0/16。默认情况下,此 IP 地址范围用于 OVN-Kubernetes 的internalJoinSubnet参数。 -
100.88.0.0/16。默认情况下,此 IP 地址范围用于 OVN-Kubernetes 的internalTransSwitchSubnet参数。
如果 OpenShift SDN 使用这些 IP 地址,或者任何可能会与此集群通信的外部网络,则您必须在启动有限的实时迁移前使用不同的 IP 地址范围。
如果迁移最初被阻止,则可以使用以下步骤来修补 OpenShift SDN 使用的 CIDR 范围。
这是一个可选的流程,只有在使用 oc patch Network.config.openshift.io cluster --type='merge' --patch '{"metadata":{"annotations":{"network.openshift.io/network-type-migration":""}},"spec":{"networkType":"OVNKubernetes"}}' 命令来"初始有限的实时迁移过程"时迁移被阻止的情况下使用。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。
流程
如果已使用
100.64.0.0/16IP 地址范围,请输入以下命令将其修补为不同的范围。以下示例使用100.70.0.0/16。$ oc patch network.operator.openshift.io cluster --type='merge' -p='{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"ipv4":{"internalJoinSubnet": "100.70.0.0/16"}}}}}'如果已使用
100.88.0.0/16IP 地址范围,请输入以下命令将其修补为不同的范围。以下示例使用100.99.0.0/16。$ oc patch network.operator.openshift.io cluster --type='merge' -p='{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"ipv4":{"internalTransitSwitchSubnet": "100.99.0.0/16"}}}}}'
在修补 100.64.0.0/16 和 100.88.0.0/16 IP 地址范围后,您可以启动有限的实时迁移。
26.6.1.5.5. 启动有限实时迁移后检查集群资源 复制链接链接已复制到粘贴板!
以下流程演示了如何在使用 OVN-Kubernetes 时检查出口 IP 资源、出口防火墙资源、多播启用的命名空间和网络策略。如果您在 OpenShift SDN 上有这些资源,您应该在迁移后检查它们,以确保它们正常工作。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。 - 您已使用有限的实时迁移成功从 OpenShift SDN 迁移到 OVN-Kubernetes。
流程
作为 OpenShift Container Platform 集群管理员,检查出口防火墙资源。您可以使用
ocCLI 或 OpenShift Container Platform Web 控制台进行此操作。使用
ocCLI 工具检查出口防火墙资源:要检查出口防火墙资源,请输入以下命令:
$ oc get egressfirewalls.k8s.ovn.org -A输出示例
NAMESPACE NAME AGE <namespace> <example_egressfirewall> 5d您可以使用
-o yaml标志检查出口防火墙资源的预期行为。例如:$ oc get egressfirewall <example_egressfirewall> -n <namespace> -o yaml输出示例
apiVersion: k8s.ovn.org/v1 kind: EgressFirewall metadata: name: <example_egress_policy> namespace: <namespace> spec: egress: - type: Allow to: cidrSelector: 192.168.0.0/16 - type: Deny to: cidrSelector: 0.0.0.0/0确保此资源的行为是预期的,因为它可能会在迁移后有所变化。有关出口防火墙的更多信息,请参阅"配置项目的出口防火墙"。
使用 OpenShift Container Platform Web 控制台检查出口防火墙资源:
-
在 OpenShift Container Platform web 控制台中点 Observe
Metrics。 -
在 Expression 框中,键入
ovnkube_controller_num_egress_firewall_rules,然后点 Run queries。如果您有出口防火墙资源,则会在 Expression 框中返回。
-
在 OpenShift Container Platform web 控制台中点 Observe
检查集群是否有出口 IP 资源。您可以使用
ocCLI 或 OpenShift Container Platform Web 控制台进行此操作。使用
ocCLI 工具检查出口 IP:要列出带有出口 IP 资源的命名空间,请输入以下命令:
$ oc get egressip输出示例
NAME EGRESSIPS ASSIGNED NODE ASSIGNED EGRESSIPS egress-sample 192.0.2.10 ip-10-0-42-79.us-east-2.compute.internal 192.0.2.10 egressip-sample-2 192.0.2.14 ip-10-0-42-79.us-east-2.compute.internal 192.0.2.14要提供有关出口 IP 的详细信息,请输入以下命令:
$ oc get egressip <egressip_name> -o yaml输出示例
apiVersion: k8s.ovn.org/v1 kind: EgressIP metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"k8s.ovn.org/v1","kind":"EgressIP","metadata":{"annotations":{},"name":"egressip-sample"},"spec":{"egressIPs":["192.0.2.12","192.0.2.13"],"namespaceSelector":{"matchLabels":{"name":"my-namespace"}}}} creationTimestamp: "2024-06-27T15:48:36Z" generation: 7 name: egressip-sample resourceVersion: "125511578" uid: b65833c8-781f-4cc9-bc96-d970259a7631 spec: egressIPs: - 192.0.2.12 - 192.0.2.13 namespaceSelector: matchLabels: name: my-namespace对所有出口 IP 重复此操作。确保每个资源的行为都是预期的,因为它可能会在迁移后有所变化。有关 EgressIPs 的更多信息,请参阅"配置 EgressIP 地址"。
使用 OpenShift Container Platform Web 控制台检查出口 IP:
-
在 OpenShift Container Platform web 控制台中点 Observe
Metrics。 -
在 Expression 框中,键入
ovnkube_clustermanager_num_egress_ips,然后点 Run queries。如果您有出口防火墙资源,则会在 Expression 框中返回。
-
在 OpenShift Container Platform web 控制台中点 Observe
检查集群是否有启用多播的命名空间。您只能使用
ocCLI 完成此操作。要找到启用多播的命名空间,请输入以下命令:
$ oc get namespace -o json | jq -r '.items[] | select(.metadata.annotations."k8s.ovn.org/multicast-enabled" == "true") | .metadata.name'输出示例
namespace1 namespace3要描述每个启用多播的命名空间,请输入以下命令:
$ oc describe namespace <namespace>输出示例
Name: my-namespace Labels: kubernetes.io/metadata.name=my-namespace pod-security.kubernetes.io/audit=restricted pod-security.kubernetes.io/audit-version=v1.24 pod-security.kubernetes.io/warn=restricted pod-security.kubernetes.io/warn-version=v1.24 Annotations: k8s.ovn.org/multicast-enabled: true openshift.io/sa.scc.mcs: s0:c25,c0 openshift.io/sa.scc.supplemental-groups: 1000600000/10000 openshift.io/sa.scc.uid-range: 1000600000/10000 Status: Active确保正确配置多播功能,并在每个命名空间中按预期工作。如需更多信息,请参阅"为项目启用多播"。
检查集群的网络策略。您只能使用
ocCLI 完成此操作。要获取命名空间中网络策略的信息,请输入以下命令:
$ oc get networkpolicy -n <namespace>输出示例
NAME POD-SELECTOR AGE allow-multicast app=my-app 11m要提供有关网络策略的详细信息,请输入以下命令:
$ oc describe networkpolicy allow-multicast -n <namespace>输出示例
Name: allow-multicast Namespace: my-namespace Created on: 2024-07-24 14:55:03 -0400 EDT Labels: <none> Annotations: <none> Spec: PodSelector: app=my-app Allowing ingress traffic: To Port: <any> (traffic allowed to all ports) From: IPBlock: CIDR: 224.0.0.0/4 Except: Allowing egress traffic: To Port: <any> (traffic allowed to all ports) To: IPBlock: CIDR: 224.0.0.0/4 Except: Policy Types: Ingress, Egress确保网络策略的行为如预期。对网络策略的优化因 SDN 和 OVN-K 而异,因此用户可能需要调整其策略以便为不同的 CNI 实现最佳性能。如需更多信息,请参阅"关于网络策略"。
26.6.1.6. 检查有限的实时迁移指标 复制链接链接已复制到粘贴板!
可用于监控有限实时迁移的进度。可以在 OpenShift Container Platform Web 控制台中或使用 oc CLI 查看指标。
先决条件
- 您已启动了一个有限实时迁移到 OVN-Kubernetes。
流程
在 OpenShift Container Platform Web 控制台中查看有限的实时迁移指标:
-
点 Observe
Metrics。 - 在 Expression 框中,键入 openshift_network 并点 openshift_network_operator_live_migration_condition 选项。
-
点 Observe
使用
ocCLI 查看指标:输入以下命令为
openshift-monitoring命名空间中的prometheus-k8s服务帐户生成令牌:$ token=`oc create token prometheus-k8s -n openshift-monitoring`输入以下命令请求有关
openshift_network_operator_live_migration_condition指标的信息:$ oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -k -H "Authorization: Bearer $token" 'https://thanos-querier.openshift-monitoring.svc:9091/api/v1/query?' --data-urlencode 'query=openshift_network_operator_live_migration_condition' | jq输出示例
"status": "success", "data": { "resultType": "vector", "result": [ { "metric": { "__name__": "openshift_network_operator_live_migration_condition", "container": "network-operator", "endpoint": "metrics", "instance": "10.0.83.62:9104", "job": "metrics", "namespace": "openshift-network-operator", "pod": "network-operator-6c87754bc6-c8qld", "prometheus": "openshift-monitoring/k8s", "service": "metrics", "type": "NetworkTypeMigrationInProgress" }, "value": [ 1717653579.587, "1" ] }, ...
"Information about limited live migration metrics" 中的表显示可用的指标,以及 openshift_network_operator_live_migration_condition 表达式填充的标签值。使用这些信息来监控进度或对迁移进行故障排除。
26.6.1.6.1. 关于有限实时迁移指标的信息 复制链接链接已复制到粘贴板!
下表显示了可用的指标以及从 openshift_network_operator_live_migration_condition 表达式填充的标签值。使用这些信息来监控进度或对迁移进行故障排除。
| 指标 | 标签值 |
|---|---|
|
|
|
|
26.6.3. 离线迁移到 OVN-Kubernetes 网络插件概述 复制链接链接已复制到粘贴板!
离线迁移方法是一个手动过程,其中包括一些停机时间,在此期间集群无法访问。您可以使用 Ansible playbook 自动离线迁移步骤,以便您可以节省时间。此方法主要用于自我管理的 OpenShift Container Platform 部署,它是有限的实时迁移步骤的替代选择。只有在无法执行有限实时迁移到 OVN-Kubernetes 网络插件时,才使用这些方法。
虽然提供了一个回滚过程,但离线迁移通常被认为是一个单向过程。
从 OpenShift Container Platform 4.14 开始,OpenShift SDN CNI 已被弃用。自 OpenShift Container Platform 4.15 起,网络插件不是新安装的选项。在以后的发行版本中,计划删除 OpenShift SDN 网络插件,并不再被支持。红帽将在删除前对这个功能提供程序错误修正和支持,但不会再改进这个功能。作为 OpenShift SDN CNI 的替代选择,您可以使用 OVN Kubernetes CNI。
以下小节提供了有关离线迁移方法的更多信息。
26.6.3.1. 使用离线迁移方法时支持的平台 复制链接链接已复制到粘贴板!
下表提供了有关手动离线迁移类型的支持的平台信息。
| 平台 | 离线迁移 |
|---|---|
| 裸机硬件 (IPI 和 UPI) | ✓ |
| Amazon Web Services (AWS) (IPI 和 UPI) | ✓ |
| Google Cloud Platform (GCP) (IPI 和 UPI) | ✓ |
| IBM Cloud® (IPI and UPI) | ✓ |
| Microsoft Azure (IPI 和 UPI) | ✓ |
| Red Hat OpenStack Platform (RHOSP) (IPI 和 UPI) | ✓ |
| VMware vSphere (IPI 和 UPI) | ✓ |
| AliCloud (IPI 和 UPI) | ✓ |
| Nutanix (IPI 和 UPI) | ✓ |
26.6.3.2. 离线迁移方法到 OVN-Kubernetes 网络插件的注意事项 复制链接链接已复制到粘贴板!
如果您在 OpenShift Container Platform 集群中有超过 150 个节点,请创建一个支持问题单,供您迁移到 OVN-Kubernetes 网络插件。
迁移过程中不会保留分配给节点的子网以及分配给各个 pod 的 IP 地址。
虽然 OVN-Kubernetes 网络插件实现 OpenShift SDN 网络插件中存在的许多功能,但配置并不相同。
如果您的集群使用以下 OpenShift SDN 网络插件功能,您必须在 OVN-Kubernetes 网络插件中手动配置相同的功能:
- 命名空间隔离
- 出口路由器 pod
-
在迁移到 OVN-Kubernetes 之前,请确保不使用以下 IP 地址范围:
100.64.0.0/16,169.254.169.0/29,100.88.0.0/16,fd98::/64,fd69::/125, 和fd97::/64。OVN-Kubernetes 在内部使用这些范围。不要在集群或基础架构的任何其他 CIDR 定义中包含这些范围。 -
如果您的带有 Precision Time Protocol (PTP) 的
openshift-sdn集群使用 User Datagram Protocol (UDP) 进行硬件时间戳,且迁移到 OVN-Kubernetes 插件,则硬件时间戳无法应用到主接口设备,如 Open vSwitch (OVS) 网桥。因此,UDP 版本 4 配置无法使用br-ex接口。 与 OpenShift SDN 一样,OVN-Kubernetes 资源需要
ClusterAdmin权限。从 OpenShift SDN 迁移到 OVN-Kubernetes 不会自动更新 role-base 访问控制(RBAC)资源。通过aggregate-to-adminClusterRole授予项目管理员的 OpenShift SDN 资源必须手动检查并调整,因为这些更改不会包含在迁移过程中。迁移后,需要手动验证 RBAC 资源。
以下小节重点介绍了上述功能在 OVN-Kubernetes 和 OpenShift SDN 网络插件中的配置差异。
26.6.3.2.1. 主网络接口 复制链接链接已复制到粘贴板!
OpenShift SDN 插件允许 NodeNetworkConfigurationPolicy (NNCP)自定义资源(CR)的应用程序到节点上的主接口。OVN-Kubernetes 网络插件没有此功能。
如果您的 NNCP 应用到主接口,则必须在迁移到 OVN-Kubernetes 网络插件前删除 NNCP。删除 NNCP 不会从主接口中删除配置,但使用 OVN-Kubernetes,Kubernetes NMState 无法管理此配置。相反,configure-ovs.sh shell 脚本管理附加到这个接口的主接口和配置。
26.6.3.2.2. 命名空间隔离 复制链接链接已复制到粘贴板!
OVN-Kubernetes 仅支持网络策略隔离模式。
对于使用在多租户或子网隔离模式下配置的 OpenShift SDN 的集群,您仍然可以迁移到 OVN-Kubernetes 网络插件。请注意,在迁移操作后,多租户隔离模式会被丢弃,因此您必须手动配置网络策略,以便为 Pod 和服务达到相同的项目级别的隔离。
26.6.3.2.3. 出口 IP 地址 复制链接链接已复制到粘贴板!
OpenShift SDN 支持两种不同的 Egress IP 模式:
- 在自动分配方法中,给节点分配一个出口 IP 地址范围。
- 在手动分配方法中,给节点分配包含一个或多个出口 IP 地址的列表。
迁移过程支持迁移使用自动分配模式的 Egress IP 配置。
下表中描述了在 OVN-Kubernetes 和 OpenShift SDN 配置出口 IP 地址的不同:
| OVN-Kubernetes | OpenShift SDN |
|---|---|
|
|
有关在 OVN-Kubernetes 中使用出口 IP 地址的更多信息,请参阅"配置出口 IP 地址"。
26.6.3.2.4. 出口网络策略 复制链接链接已复制到粘贴板!
下表中描述在 OVN-Kubernetes 和 OpenShift SDN 间配置出口网络策略(也称为出口防火墙)的不同之处:
| OVN-Kubernetes | OpenShift SDN |
|---|---|
|
|
由于 EgressFirewall 对象的名称只能设置为 default,在迁移后,所有迁移的 EgressNetworkPolicy 对象都会命名为 default,而无论在 OpenShift SDN 下的名称是什么。
如果您随后回滚到 OpenShift SDN,则所有 EgressNetworkPolicy 对象都会命名为 default,因为之前的名称已丢失。
有关在 OVN-Kubernetes 中使用出口防火墙的更多信息,请参阅"配置项目出口防火墙"。
26.6.3.2.5. 出口路由器 pod 复制链接链接已复制到粘贴板!
OVN-Kubernetes 支持重定向模式的出口路由器 pod。OVN-Kubernetes 不支持 HTTP 代理模式或 DNS 代理模式的出口路由器 pod。
使用 Cluster Network Operator 部署出口路由器时,您无法指定节点选择器来控制用于托管出口路由器 pod 的节点。
26.6.3.2.6. 多播 复制链接链接已复制到粘贴板!
下表中描述了在 OVN-Kubernetes 和 OpenShift SDN 上启用多播流量的区别:
| OVN-Kubernetes | OpenShift SDN |
|---|---|
|
|
有关在 OVN-Kubernetes 中使用多播的更多信息,请参阅"启用项目多播"。
26.6.3.2.7. 网络策略 复制链接链接已复制到粘贴板!
OVN-Kubernetes 在 networking.k8s.io/v1 API 组中完全支持 Kubernetes NetworkPolicy API。从 OpenShift SDN 进行迁移时,网络策略不需要更改。
26.6.3.3. 离线迁移过程如何工作 复制链接链接已复制到粘贴板!
下表对迁移过程进行了概述,它分为操作中的用户发起的步骤,以及在响应过程中迁移过程要执行的操作。
| 用户发起的步骤 | 迁移操作 |
|---|---|
|
将名为 |
|
|
更新 |
|
| 重新引导集群中的每个节点。 |
|
26.6.3.4. 使用 Ansible playbook 迁移到 OVN-Kubernetes 网络插件 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 Ansible 集合 network.offline_migration_sdn_to_ovnk 从 OpenShift SDN Container Network Interface (CNI)网络插件迁移到集群的 OVN-Kubernetes 插件。Ansible 集合包括以下 playbook:
-
playbooks/playbook-migration.yml:包含按顺序执行的 playbook,每个 playbook 代表迁移过程中的一个步骤。 -
playbooks/playbook-rollback.yml:包含按顺序执行的 playbook,其中每个 playbook 代表回滚过程中的一个步骤。
先决条件
-
已安装
python3软件包,最小版本 3.10。 -
已安装
jmespath和jq软件包。 - 已登陆到 Red Hat Hybrid Cloud Console 并打开 Ansible Automation Platform web 控制台。
-
您创建了一条安全组规则,允许所有云平台上所有节点的端口
6081上用户数据报协议(UDP)数据包。如果没有此任务,您的集群可能无法调度 pod。 检查集群是否在主机网络中使用静态路由或路由策略。
-
如果为 true,则后续步骤需要将
routingViaHost参数设置为true,在playbooks/playbook-migration.yml文件的gatewayConfig部分中将ipForwarding参数设置为Global。
-
如果为 true,则后续步骤需要将
-
如果 OpenShift-SDN 插件使用
100.64.0.0/16和100.88.0.0/16地址范围,则您修补了地址范围。如需更多信息,请参阅附加资源部分中的 "Patching OVN-Kubernetes address ranges"。
流程
安装
ansible-core软件包,最低为 2.15 版本。以下示例命令演示了如何在 Red Hat Enterprise Linux (RHEL)上安装ansible-core软件包:$ sudo dnf install -y ansible-core创建
ansible.cfg文件,并将类似以下示例的信息添加到该文件中。确保该文件存在于与ansible-galaxy命令和 playbook 运行相同的目录中。$ cat << EOF >> ansible.cfg [galaxy] server_list = automation_hub, validated [galaxy_server.automation_hub] url=https://console.redhat.com/api/automation-hub/content/published/ auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token token= #[galaxy_server.release_galaxy] #url=https://galaxy.ansible.com/ [galaxy_server.validated] url=https://console.redhat.com/api/automation-hub/content/validated/ auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token token= EOF在 Ansible Automation Platform web 控制台中进入 Connect to Hub 页并完成以下步骤:
- 在页的离线令牌部分中,点 Load token 按钮。
- 在令牌加载后,点 Copy to clipboard 图标。
-
打开
ansible.cfg文件,并将 API 令牌粘贴到token=参数中。对ansible.cfg文件中指定的服务器 URL 进行身份验证需要 API 令牌。
输入以下
ansible-galaxy命令,安装network.offline_migration_sdn_to_ovnkAnsible 集合:$ ansible-galaxy collection install network.offline_migration_sdn_to_ovnk验证您系统上是否安装了
network.offline_migration_sdn_to_ovnkAnsible 集合:$ ansible-galaxy collection list | grep network.offline_migration_sdn_to_ovnk输出示例
network.offline_migration_sdn_to_ovnk 1.0.2network.offline_migration_sdn_to_ovnkAnsible 集合保存在~/.ansible/collections/ansible_collections/network/offline_migration_sdn_to_ovnk/的默认路径中。在
playbook/playbook-migration.yml文件中配置迁移功能:# ... migration_interface_name: eth0 migration_disable_auto_migration: true migration_egress_ip: false migration_egress_firewall: false migration_multicast: false migration_routing_via_host: true migration_ip_forwarding: Global migration_cidr: "10.240.0.0/14" migration_prefix: 23 migration_mtu: 1400 migration_geneve_port: 6081 migration_ipv4_subnet: "100.64.0.0/16" # ...migration_interface_name-
如果您在主接口上使用
NodeNetworkConfigurationPolicy(NNCP)资源,请在migration-playbook.yml文件中指定接口名称,以便在迁移过程中在主接口上删除 NNCP 资源。 migration_disable_auto_migration-
禁用 OpenShift SDN CNI 插件的自动迁移功能到 OVN-Kubernetes 插件。如果禁用功能的自动迁移,还必须将
migration_egress_ip、migration_egress_firewall和migration_multicast参数设置为false。如果您需要启用功能的自动迁移,请将 参数设置为false。 migration_routing_via_host-
设置为
true,以配置本地网关模式或false,来为集群中的节点配置共享网关模式。默认值为false。在本地网关模式中,流量通过主机网络堆栈路由。在共享网关模式中,流量不会通过主机网络堆栈路由。 migration_ip_forwarding-
如果您配置了本地网关模式,如果您需要节点的主机网络充当与 OVN-Kubernetes 相关的流量的路由器,请将 IP 转发设置为
Global。 migration_cidr-
为集群指定无类别域间路由(CIDR) IP 地址块。您不能使用任何与
10064.0.0/16CIDR 块重叠的 CIDR 块,因为 OVN-Kubernetes 网络供应商在内部使用此块。 migration_prefix- 确保指定了一个前缀值,这是集群中每个节点的 CIDR 块的片段。
migration_mtu- 可选参数,在迁移过程后将特定的最大传输单元(MTU)设置为集群网络。
migration_geneve_port-
为 OVN-Kubernetes 设置 Geneve 端口的可选参数。默认端口为
6081。 migration_ipv4_subnet-
可选参数,用于为 OVN-Kubernetes 内部设置 IPv4 地址范围。参数的默认值为
100.64.0.0/16。
要运行
playbooks/playbook-migration.yml文件,请输入以下命令:$ ansible-playbook -v playbooks/playbook-migration.yml
26.6.3.5. 使用离线迁移方法迁移到 OVN-Kubernetes 网络插件 复制链接链接已复制到粘贴板!
作为集群管理员,您可以将集群的网络插件更改为 OVN-Kubernetes。在迁移过程中,您必须重新引导集群中的每个节点。
在进行迁移时,集群不可用,工作负载可能会中断。仅在服务中断可以接受时才执行迁移。
先决条件
- 您已在网络策略隔离模式下使用 OpenShift SDN CNI 网络插件配置集群。
-
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
cluster-admin角色的用户访问集群。 - 您有最新的 etcd 数据库备份。
- 您可以手动重新引导每个节点。
- 您检查集群是否处于已知良好状态,且没有任何错误。
-
您创建了一条安全组规则,允许所有云平台上所有节点的端口
6081上用户数据报协议(UDP)数据包。 - 已删除 Webhook。或者,您可以为每个 webhook 设置超时值,这在流程中详细介绍。如果您没有完成这些任务之一,您的集群可能无法调度 pod。
流程
如果您没有删除 Webhook,请通过创建
ValidatingWebhookConfiguration自定义资源,然后指定timeoutSeconds参数的超时值,将每个 webhook 的超时值设置为3秒:oc patch ValidatingWebhookConfiguration <webhook_name> --type='json' \1 -p '[{"op": "replace", "path": "/webhooks/0/timeoutSeconds", "value": 3}]'- 1
- 其中
<webhook_name>是 webhook 的名称。
要备份集群网络的配置,请输入以下命令:
$ oc get Network.config.openshift.io cluster -o yaml > cluster-openshift-sdn.yaml运行以下命令,验证
OVN_SDN_MIGRATION_TIMEOUT环境变量是否已设置,并等于0s:#!/bin/bash if [ -n "$OVN_SDN_MIGRATION_TIMEOUT" ] && [ "$OVN_SDN_MIGRATION_TIMEOUT" = "0s" ]; then unset OVN_SDN_MIGRATION_TIMEOUT fi #loops the timeout command of the script to repeatedly check the cluster Operators until all are available. co_timeout=${OVN_SDN_MIGRATION_TIMEOUT:-1200s} timeout "$co_timeout" bash <<EOT until oc wait co --all --for='condition=AVAILABLE=True' --timeout=10s && \ oc wait co --all --for='condition=PROGRESSING=False' --timeout=10s && \ oc wait co --all --for='condition=DEGRADED=False' --timeout=10s; do sleep 10 echo "Some ClusterOperators Degraded=False,Progressing=True,or Available=False"; done EOT运行以下命令,从 Cluster Network Operator (CNO) 配置对象中删除配置:
$ oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{"spec":{"migration":null}}'.通过完成以下步骤,删除
NodeNetworkConfigurationPolicy(NNCP)自定义资源(CR)定义 OpenShift SDN 网络插件的主网络接口:输入以下命令检查现有 NNCP CR 是否将主接口绑定到集群:
$ oc get nncp输出示例
NAME STATUS REASON bondmaster0 Available SuccessfullyConfiguredNetwork Manager 将绑定的主接口的连接配置文件存储在
/etc/NetworkManager/system-connections系统路径中。从集群中删除 NNCP:
$ oc delete nncp <nncp_manifest_filename>
要为迁移准备所有节点,请运行以下命令在 CNO 配置对象上设置
migration字段:$ oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{ "spec": { "migration": { "networkType": "OVNKubernetes" } } }'注意此步骤不会立即部署 OVN-Kubernetes。相反,指定
migration字段会触发 Machine Config Operator(MCO)将新机器配置应用到集群中的所有节点,以准备 OVN-Kubernetes 部署。运行以下命令检查重启是否已完成:
$ oc get mcp运行以下命令,检查所有集群 Operator 是否可用:
$ oc get co另外:您可以禁用将几个 OpenShift SDN 功能自动迁移到 OVN-Kubernetes 等效功能:
- 出口 IP
- 出口防火墙
- 多播
要为之前记录的 OpenShift SDN 功能禁用配置自动迁移,请指定以下键:
$ oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{ "spec": { "migration": { "networkType": "OVNKubernetes", "features": { "egressIP": <bool>, "egressFirewall": <bool>, "multicast": <bool> } } } }'其中:
bool:指定是否启用功能的迁移。默认值是true。
可选: 您可以自定义 OVN-Kubernetes 的以下设置,以满足您的网络基础架构要求:
最大传输单元 (MTU)。在为这个可选步骤自定义 MTU 前请考虑以下几点:
- 如果您使用默认 MTU,并且要在迁移期间保留默认 MTU,则可以忽略这一步。
- 如果您使用自定义 MTU,并且要在迁移过程中保留自定义 MTU,则必须在此步骤中声明自定义 MTU 值。
如果要在迁移过程中更改 MTU 值,此步骤将无法正常工作。相反,您必须首先按照"选择集群 MTU"的说明进行操作。然后,您可以通过执行此步骤并声明自定义 MTU 值来保留自定义 MTU 值。
注意OpenShift-SDN 和 OVN-Kubernetes 具有不同的覆盖(overlay)开销。MTU 值应遵循在 "MTU 值选择" 页面中找到的准则来选择。
- Geneve(Generic Network Virtualization Encapsulation)覆盖网络端口
- OVN-Kubernetes IPv4 内部子网
要自定义之前记录的设置之一,请输入以下命令。如果您不需要更改默认值,请从补丁中省略该键。
$ oc patch Network.operator.openshift.io cluster --type=merge \ --patch '{ "spec":{ "defaultNetwork":{ "ovnKubernetesConfig":{ "mtu":<mtu>, "genevePort":<port>, "ipv4": "InternalJoinSubnet": "<ipv4_subnet>" }}}}'其中:
mtu-
Geneve 覆盖网络的 MTU。这个值通常是自动配置的;但是,如果集群中的节点没有都使用相同的 MTU,那么您必须将此值明确设置为比最小节点 MTU 的值小
100。 port-
Geneve 覆盖网络的 UDP 端口。如果没有指定值,则默认为
6081。端口不能与 OpenShift SDN 使用的 VXLAN 端口相同。VXLAN 端口的默认值为4789。 ipv4_subnet-
OVN-Kubernetes 内部使用的 IPv4 地址范围。您必须确保 IP 地址范围没有与 OpenShift Container Platform 安装使用的任何其他子网重叠。IP 地址范围必须大于可添加到集群的最大节点数。默认值为
100.64.0.0/16。
更新
mtu字段的 patch 命令示例$ oc patch Network.operator.openshift.io cluster --type=merge \ --patch '{ "spec":{ "defaultNetwork":{ "ovnKubernetesConfig":{ "mtu":1200 }}}}'当 MCO 更新每个机器配置池中的机器时,它会逐一重启每个节点。您必须等到所有节点都已更新。输入以下命令检查机器配置池状态:
$ oc get mcp成功更新的节点具有以下状态:
UPDATED=true、UPDATING=false、DEGRADED=false。注意默认情况下,MCO 会一次在一个池中更新一个机器,从而导致迁移总时间随着集群大小的增加而增加。
确认主机上新机器配置的状态:
要列出机器配置状态和应用的机器配置名称,请输入以下命令:
$ oc describe node | egrep "hostname|machineconfig"输出示例
kubernetes.io/hostname=master-0 machineconfiguration.openshift.io/currentConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/desiredConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/reason: machineconfiguration.openshift.io/state: Done验证以下语句是否正确:
-
machineconfiguration.openshift.io/state字段的值为Done。 -
machineconfiguration.openshift.io/currentConfig字段的值等于machineconfiguration.openshift.io/desiredConfig字段的值。
-
要确认机器配置正确,请输入以下命令:
$ oc get machineconfig <config_name> -o yaml | grep ExecStart这里的
<config_name>是machineconfiguration.openshift.io/currentConfig字段中机器配置的名称。机器配置必须包括以下对 systemd 配置的更新:
ExecStart=/usr/local/bin/configure-ovs.sh OVNKubernetes如果节点一直处于
NotReady状态,检查机器配置守护进程 pod 日志并解决所有错误。运行以下命令列出 pod:
$ oc get pod -n openshift-machine-config-operator输出示例
NAME READY STATUS RESTARTS AGE machine-config-controller-75f756f89d-sjp8b 1/1 Running 0 37m machine-config-daemon-5cf4b 2/2 Running 0 43h machine-config-daemon-7wzcd 2/2 Running 0 43h machine-config-daemon-fc946 2/2 Running 0 43h machine-config-daemon-g2v28 2/2 Running 0 43h machine-config-daemon-gcl4f 2/2 Running 0 43h machine-config-daemon-l5tnv 2/2 Running 0 43h machine-config-operator-79d9c55d5-hth92 1/1 Running 0 37m machine-config-server-bsc8h 1/1 Running 0 43h machine-config-server-hklrm 1/1 Running 0 43h machine-config-server-k9rtx 1/1 Running 0 43h配置守护进程 pod 的名称使用以下格式:
machine-config-daemon-<seq>。<seq>值是一个随机的五个字符的字母数字序列。使用以下命令,输出在上一个输出中显示的第一个机器配置守护进程 pod 的 pod 日志:
$ oc logs <pod> -n openshift-machine-config-operator其中
pod是机器配置守护进程 pod 的名称。- 解决上一命令输出中显示的日志中的任何错误。
要启动迁移,请使用以下命令配置 OVN-Kubernetes 网络插件:
要指定网络供应商而不更改集群网络 IP 地址块,请输入以下命令:
$ oc patch Network.config.openshift.io cluster \ --type='merge' --patch '{ "spec": { "networkType": "OVNKubernetes" } }'要指定不同的集群网络 IP 地址块,请输入以下命令:
$ oc patch Network.config.openshift.io cluster \ --type='merge' --patch '{ "spec": { "clusterNetwork": [ { "cidr": "<cidr>", "hostPrefix": <prefix> } ], "networkType": "OVNKubernetes" } }'其中
cidr是 CIDR 块,prefix是集群中每个节点的 CIDR 块的分片。您不能使用任何与10064.0.0/16CIDR 块重叠的 CIDR 块,因为 OVN-Kubernetes 网络供应商在内部使用此块。重要您无法在迁移过程中更改服务网络地址块。
在继续执行后续步骤前,验证 Multus 守护进程集的 rollout 是否已完成:
$ oc -n openshift-multus rollout status daemonset/multusMultus pod 的名称采用
multus-<xxxxx>的形式,其中<xxxxx>是由字母组成的随机序列。pod 可能需要一些时间才能重启。输出示例
Waiting for daemon set "multus" rollout to finish: 1 out of 6 new pods have been updated... ... Waiting for daemon set "multus" rollout to finish: 5 of 6 updated pods are available... daemon set "multus" successfully rolled out要完成更改网络插件,请重新引导集群中的每个节点。您可以使用以下方法之一重新引导集群中的节点:
重要以下脚本同时重新引导集群中的所有节点。这可能导致集群不稳定。另一种选择是,每次只手动重新引导一个节点。逐一重新引导节点会导致,在具有多个节点的集群中出现大量停机时间。
在重新引导节点前,集群 Operator 无法正常工作。
使用
oc rsh命令,您可以使用类似如下的 bash 脚本:#!/bin/bash readarray -t POD_NODES <<< "$(oc get pod -n openshift-machine-config-operator -o wide| grep daemon|awk '{print $1" "$7}')" for i in "${POD_NODES[@]}" do read -r POD NODE <<< "$i" until oc rsh -n openshift-machine-config-operator "$POD" chroot /rootfs shutdown -r +1 do echo "cannot reboot node $NODE, retry" && sleep 3 done done通过
ssh命令,您可以使用类似如下的 bash 脚本:该脚本假设您已将 sudo 配置为不提示输入密码。#!/bin/bash for ip in $(oc get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}') do echo "reboot node $ip" ssh -o StrictHostKeyChecking=no core@$ip sudo shutdown -r -t 3 done
确认迁移成功完成:
要确认网络插件是 OVN-Kubernetes,请输入以下命令。
status.networkType的值必须是OVNKubernetes。$ oc get network.config/cluster -o jsonpath='{.status.networkType}{"\n"}'要确认集群节点处于
Ready状态,请输入以下命令:$ oc get nodes要确认您的 pod 不在错误状态,请输入以下命令:
$ oc get pods --all-namespaces -o wide --sort-by='{.spec.nodeName}'如果节点上的 pod 处于错误状态,请重新引导该节点。
要确认所有集群 Operator 没有处于异常状态,请输入以下命令:
$ oc get co每个集群 Operator 的状态必须是:
AVAILABLE="True"、PROGRESSING="False"和DEGRADED="False"。如果 Cluster Operator 不可用或降级,请检查集群 Operator 的日志以了解更多信息。
只有在迁移成功且集群处于良好状态时完成以下步骤:
要从 CNO 配置对象中删除迁移配置,请输入以下命令:
$ oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{ "spec": { "migration": null } }'要删除 OpenShift SDN 网络供应商的自定义配置,请输入以下命令:
$ oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{ "spec": { "defaultNetwork": { "openshiftSDNConfig": null } } }'要删除 OpenShift SDN 网络供应商命名空间,请输入以下命令:
$ oc delete namespace openshift-sdn成功迁移操作后,输入以下命令从
network.config自定义资源中删除network.openshift.io/network-type-migration-注解:$ oc annotate network.config cluster network.openshift.io/network-type-migration-
后续步骤
- 可选:在集群迁移后,您可以将 IPv4 单堆栈集群转换为支持 IPv4 和 IPv6 地址系列的双网络集群网络。如需更多信息,请参阅"协调 IPv4/IPv6 双栈网络"。
26.6.4. 了解 OVN-Kubernetes 中外部 IP 行为的更改 复制链接链接已复制到粘贴板!
当从 OpenShift SDN 迁移到 OVN-Kubernetes (OVN-K)时,使用外部 IP 的服务可能会因为网络策略强制而在命名空间中无法访问。
在 OpenShift SDN 中,外部 IP 默认可在命名空间间访问。但是,在 OVN-K 中,网络策略严格强制执行多租户隔离,从而防止访问通过外部 IP 从其他命名空间公开的服务。
为确保访问,请考虑以下替代方案:
- 使用入口或路由 :使用外部 IP 公开服务,在保持安全控制时配置入口或路由来允许外部访问。
-
调整
NetworkPolicy自定义资源(CR):修改NetworkPolicyCR 以明确允许从所需命名空间中访问,并确保允许流量访问指定的服务端口。如果没有明确允许到所需端口的流量,访问可能仍然被阻止,即使允许命名空间。 -
使用
LoadBalancer服务:如果适用,部署LoadBalancer服务而不是依赖于外部 IP。有关配置 "NetworkPolicy 和 external IP in OVN-Kubernetes" 的更多信息。