kubernetes - Kubernetes PodAffinity 无法部署 pod
问题描述
所以我有这个问题,并尝试实施podAffinity
来解决它。
我有 3 个节点,想在同一个节点上部署 2 个 pod。在我拥有的YAMLDeployment
文件中,以下是关联设置:service:git
metadata.labels
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: service
operator: In
values:
- git
topologyKey: kubernetes.io/hostname
但是 pod 未能部署,我收到以下错误:
0/3 nodes are available: 3 node(s) didn't match pod affinity rules, 3 node(s) didn't match pod affinity/anti-affinity.
我的配置有问题吗?
如果不是,我猜可能是因为在部署第一个 pod 时,系统会尝试找到一个包含带有标签的 pod 的节点service: git
并失败(因为它是第一个),而另一个 pod 也因为同样的原因。这个对吗?
但是然后如何解决问题(不诉诸变通办法)?
解决方案
- 您正在使用“requiredDuringSchedulingIgnoredDuringExecution:”,因此它将寻找一个带有标签“服务:git”的“正在运行(已经)”的吊舱,并且您似乎还没有任何带有该标签的吊舱。因此,遵循 a 是一种快速解决方法,其中将创建一个带有标签 "service: git" 的测试 pod。这样 podAffinity 规则将找到一个目标节点(这将是该 testpod 将运行的节点)
kubectl run testpod --image=busybox --labels="service=git" -- sleep infinite
一旦上面的 pod 是 UP .. 部署中的所有 pod 也应该被创建。如果没有删除部署并重新应用它。
如果您需要一个优雅的解决方案,那么您可以考虑使用“preferredDuringSchedulingIgnoredDuringExecution”而不是“requiredDuringSchedulingIgnoredDuringExecution”
推荐阅读
- sql-server - 如何验证 Azure SQL 数据库中的登录
- jquery - datepicker 在表单提交上更改日期格式
- c# - 嵌套的 UnitOfWork 在 Asp.net 应用程序中不起作用
- sonarqube - Sonar 7.x LTS 发布时间表
- python - conda 安装商业包
- c# - Setting up Mock IMember Object in Umbraco 7.5.10 for Unit Testing
- angular - Angular Material中将matRowDef定义为Nested Json的子元素数组
- kubernetes - 在 Kubernetes 内部使用“kubectl delete pods X”
- angular - TypeScript 错误:无法调用类型缺少调用签名的表达式
- javascript - 如何将自定义 C++ 模块集成到 NodeJS 的自定义版本中?