我目前正在Azure Kubernetes中为生产环境创建一个Kubernetes集群。在我的集群中,节点池中将有两个节点- pool1。
现在,我想部署2个应用程序,但是两个应用程序都将使用容器端口5000,由于某些原因,我无法更改端口。
为了简单起见,除了部署的名称之外,我为这两个部署保留了相同的清单。
部署清单- 1:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment-1
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16.1
ports:
- containerPort: 5000部署清单- 2:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment-2
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16.1
ports:
- containerPort: 5000由于这两个部署都使用相同的containerPort,第二个部署失败了,因为它部署在部署第一个应用程序的同一个节点上。
我想实施一个策略,在Azure Kubernetes中,每个节点只允许一个部署(但不限制代理、sidecar等)。
最后,部署-1应该去节点-x和部署-2去节点-y,请建议.
发布于 2020-10-20 11:35:09
在您的情况下,您可以使用的是nodeSelector
nodeSelector是最简单的节点选择约束形式。nodeSelector是PodSpec的一个领域。它指定了键值对的映射。为了使pod有资格在节点上运行,节点必须将每个指定的键值对作为标签(它也可以有附加的标签)。最常见的用法是一个键值对。
nodeSelector是节点选择约束的一种形式。nodeSelector是PodSpec的一个领域。这是一个简单的Pod调度特性,它允许将Pod调度到其标签与用户指定的nodeSelector标签匹配的节点上。
您还可以考虑使用亲和力与反亲和力和荚间亲和力和抗亲和力。请注意,更实用的用例应该适合您的需求:
当Interpod
Affinity和AntiAffinity与更高级别的集合(如ReplicaSets、StatefulSets、AntiAffinity等)一起使用时,它们可能更有用。人们可以很容易地配置一组工作负载应该在相同定义的拓扑中共存,例如,相同的节点。
您可以在链接文档中找到更多的细节和示例。
https://stackoverflow.com/questions/64329183
复制相似问题