Azure Kubernetes-每个节点仅执行一个部署?

时间:2020-10-13 05:40:29

标签: azure kubernetes kubernetes-pod azure-kubernetes

我目前在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。

1 个答案:

答案 0 :(得分:0)

您可以使用的是nodeSelector

nodeSelector是推荐的最简单的节点选择形式 约束。 nodeSelectorPodSpec的字段。它指定一张地图 键值对。为了使Pod有资格在节点上运行, 节点必须将每个指示的键值对作为标签(它可以 也有其他标签)。最常见的用法是 键值对。

nodeSelector是节点选择约束的形式之一。 nodeSelector是PodSpec的一个字段。这是一项简单的Pod调度功能,可将Pod调度到其标签与用户指定的nodeSelector标签相匹配的节点上。

您还可以考虑使用Affinity and anti-affinityInter-pod affinity and anti-affinity。请注意More Practical Use-cases,因为它应该符合您的要求:

Interpod AffinityAntiAffinity的使用可能会更加有用 用于更高级别的集合,例如ReplicaSets, StatefulSet,部署等。您可以轻松地配置一组 工作负载应位于同一定义的拓扑中,例如, 同一节点。

您可以在链接的文档中找到更多详细信息和示例。