我目前在Azure Kubernetes中为生产环境创建Kubernetes集群。在我的集群中,节点池中将有2个节点-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中的每个节点仅允许一个部署(但不限制其他Pod,例如代理,sidecar)。
最后,请建议将部署1移至节点x,将部署2移至节点y。
答案 0 :(得分:0)
您可以使用的是nodeSelector:
nodeSelector
是推荐的最简单的节点选择形式 约束。nodeSelector
是PodSpec
的字段。它指定一张地图 键值对。为了使Pod有资格在节点上运行, 节点必须将每个指示的键值对作为标签(它可以 也有其他标签)。最常见的用法是 键值对。
nodeSelector
是节点选择约束的形式之一。 nodeSelector
是PodSpec的一个字段。这是一项简单的Pod调度功能,可将Pod调度到其标签与用户指定的nodeSelector
标签相匹配的节点上。
您还可以考虑使用Affinity and anti-affinity和Inter-pod affinity and anti-affinity。请注意More Practical Use-cases,因为它应该符合您的要求:
Interpod
Affinity
和AntiAffinity
的使用可能会更加有用 用于更高级别的集合,例如ReplicaSets, StatefulSet,部署等。您可以轻松地配置一组 工作负载应位于同一定义的拓扑中,例如, 同一节点。
您可以在链接的文档中找到更多详细信息和示例。