我正在使用 Helm Chart 在 4 个 RHEL9 Minimal Build VM(一个控制器,三个工作线程)上部署我的 kubernetes 1.27 集群。集群似乎已部署,但所有 Pod 均因连接问题而陷入崩溃循环。 Redis 无法初始化。该集群在 RHEL8 和 RHEL7 虚拟机上运行良好。 Redis 6.2.12 错误:
Initializing config..
/readonly-config/init.sh: line 84: Could not resolve the announce ip for this pod: not found
Error from server (BadRequest): container "sentinel" in pod "xio-redis-ha-server-0" is waiting to start: PodInitializing
*** FATAL CONFIG FILE ERROR (Redis 6.2.12) ***
Reading the configuration file, at line 2
>>> 'sentinel down-after-milliseconds mymaster 10000'
No such master with specified name.
来自其他 Pod 的一般连接错误:
Caused by: java.util.concurrent.CompletionException: io.netty.channel.AbstractChannel$AnnotatedNoRouteToHostException: No route to host: name-redis-ha.default.svc.cluster.local/10.42.0.22:6379
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: name-redis-ha.default.svc.cluster.local/10.42.2.27:6379
Caused by: java.net.ConnectException: Connection refused
Caused by: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: name-redis-ha.default.svc.cluster.local/10.42.2.27:6379
我尝试过打开所有端口、重新启动服务器、重新启动 docker 服务以及我在各种博客和帖子中找到的 20 个其他内容。 pod 内的冰壶服务间歇性地工作。重新启动 firewalld 允许从 Pod 内进行卷曲,但 Pod 仍然无法相互连接。我尝试将 iptablesBackend 更改为firewalld.conf 中的各种不同选项,以防这是各种防火墙接口相互冲突的问题。集群 Canal Pod 表示它们已设置为自动检测防火墙后端。
我为此苦苦挣扎了好几天,所以我最终列出了我必须在 RHEL 9 中更改的所有设置的列表,以便能够使用 Redis 成功运行 kubernetes 集群。这是清单!我在本地 VMware 环境中运行此程序:
firewalld 已知与集群冲突(已知问题 REF1)。如果 Pod 在安装后崩溃,请在所有节点上重新启动 Firewalld 和 docker,然后删除崩溃的 Pod 可能会解决问题:
sudo service firewalld status
sudo service firewalld restart
sudo service docker restart
如果问题仍然存在,可能需要停止所有节点上的firewalld并重新启动docker服务:
sudo service firewalld stop
sudo service docker restart
如果实施了本故障排除指南中的其他步骤,则之后需要重复这些防火墙步骤。
如果启用了 selinux,可能会导致连接问题和 pod 崩溃。可能需要禁用 selinux,或将其设置为宽松。一定要覆盖SELINUX原来的值:
sudo vi /etc/selinux/config
SELINUX=permissive
sudo reboot
VMware SecureBoot 功能可能会干扰集群的运行:
Network Manager 已知与 RKE 集群冲突(已知问题 REF1),并可能导致连接问题和 pod 崩溃。可能需要在每个节点上创建包含以下内容的 /etc/NetworkManager/conf.d/canal.conf 文件,然后重新加载 NetworkManager 并重新启动每个节点:
sudo systemctl status NetworkManager
sudo vi /etc/NetworkManager/conf.d/canal.conf
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:flannel*
sudo systemctl reload NetworkManager
sudo reboot
可能需要在每个节点上创建包含以下内容的 /etc/sysctl.d/90-override.conf 文件,然后重新启动每个节点(这会覆盖 /etc/sysctl.d/99 中的破坏性 STIG 设置) -sysctl.conf 文件,由 CCE-84008-2 规定):
sudo vi /etc/sysctl.d/90-override.conf
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
sudo reboot
在每个节点上:
sudo systemctl disable --now nm-cloud-setup.service nm-cloud-setup.timer
参考文献: