微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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。

解决方法

您可以使用的是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,部署等。您可以轻松地配置一组 工作负载应位于同一定义的拓扑中,例如, 同一节点。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。