环境信息:
K3s 版本: v1.27.3+k3s1
节点 CPU 架构、操作系统和版本:Linux shk3s-3 5.4.0-153-generic #170-Ubuntu SMP Fri Jun 16 13:43:31 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
集群配置: 3 servers
问题描述:
在集群里运行一个3 replicas的服务(例如 redis),一个serveice在正常情况下关联了3个endpoints,如下:
❯ kubectl describe endpoints/redis
Name: redis
Namespace: dbs
Labels: app.kubernetes.io/component=node
app.kubernetes.io/instance=redis
app.kubernetes.io/managed-by=Helm
app.kubernetes.io/name=redis
helm.sh/chart=redis-18.0.2
Annotations: <none>
Subsets:
Addresses: 10.42.0.23,10.42.1.37,10.42.2.22
NotReadyAddresses: <none>
Ports:
Name Port Protocol
---- ---- --------
tcp-redis 6379 TCP
tcp-sentinel 26379 TCP
Events: <none>
使用 kubectl delete po/redis-node-0
可以发现,其endpoint很快地从列表里被移除,但是当关闭某个节点(shutdown -h now)时,观察endpoints列表,却要等待大概30s - 1min的时间才会被移除,这样就会导致业务访问服务时,还会将流量分配到已经失败了的pod上,导致错误。
k3s server 的启动参数请看下面。
请问该如何优化k3s集群对节点关机的检查时延?
复现步骤:
- 安装 K3s 的命令:
k3s server --prefer-bundled-bin \
--disable local-storage \
--write-kubeconfig-mode 644 \
--kube-apiserver-arg default-not-ready-toleration-seconds=30 \
--kube-apiserver-arg default-unreachable-toleration-seconds=30 \
--kube-controller-manager-arg node-monitor-grace-period=10s
预期结果:
加速集群发现节点关闭,然后快速删除该节点上的pod,以更新服务的endpoints列表。
实际结果:
比较慢。
附加上下文/日志:
日志