返回

Nacos 架设于 Kubernetes,攻克 "No preemption victims found for incoming pod" 难题

后端

Nacos 简介

Nacos 是一个致力于服务发现、服务配置和服务管理的开源平台。它提供了丰富的功能,例如服务注册、服务发现、配置管理、服务健康检查等,帮助您轻松构建可扩展、可靠的微服务架构。

Kubernetes 简介

Kubernetes 是一个开源的容器编排系统,用于自动部署、扩展和管理容器化应用程序。它提供了一个平台,让您轻松地管理容器化应用程序的生命周期,并确保它们始终处于运行状态。

问题

在 Kubernetes 集群中架设 Nacos 时,您可能会遇到以下错误:

No preemption victims found for incoming pod

此错误表明在集群中没有可驱逐的 Pod,以腾出资源来运行新的 Pod。这通常是由于 Pod 预留配置不当造成的。

解决方案

要解决此问题,您需要修改 deploy/nfs/class.yaml 文件中的存储类配置。具体步骤如下:

  1. 找到 deploy/nfs/class.yaml 文件。
  2. 在文件中找到以下内容:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-client
provisioner: kubernetes.io/nfs
parameters:
  path: /nfs/pvc
  server: nfs-server.example.com
  1. path 参数值更改为您的 NFS 共享路径。
  2. server 参数值更改为您的 NFS 服务器地址。
  3. 保存文件并重新运行 Nacos。

其他注意事项

除了修改存储类配置之外,您还需要确保 Pod 预留配置正确。您可以通过以下命令查看 Pod 预留配置:

kubectl describe pod [pod-name]

在输出结果中,找到 NominatedNodeName 字段。如果此字段为空,则表明 Pod 没有预留到任何节点。您可以使用以下命令为 Pod 预留节点:

kubectl annotate pod [pod-name] scheduler.alpha.kubernetes.io/affinity-pod-anti-affinity-weight=10

此命令将为 Pod 预留到与其他 Pod 相同节点的可能性增加 10 倍。

总结

通过修改存储类配置和 Pod 预留配置,您可以解决 "No preemption victims found for incoming pod" 错误,并成功在 Kubernetes 集群中搭建 Nacos。