【问题标题】:Can we configure one service with different pod resources in Kubernetes?我们可以在 Kubernetes 中配置一个具有不同 pod 资源的服务吗?
【发布时间】:2017-04-29 10:13:28
【问题描述】:

我想在 Kubernetes 集群上部署一个带有复制功能的 Postgres 服务。

我为此定义了一个 PetSet 和一个服务。但是我只能为服务中的所有 pod 定义相同的资源限制,因此 Kubernetes 将这些节点随机分配给节点。

有没有办法,我可以使用不同的 pod 资源配置获得服务?

我当前的 yaml 供参考。

https://github.com/kubernetes/charts/blob/master/incubator/patroni/templates/ps-patroni.yaml

【问题讨论】:

  • 只是好奇 - 它会导致什么问题?我问是因为我们将“常规方式”部署为部署+服务,有时作为工作。因此我们在 yaml 文件中选择 nodepool - 这样我们就可以定位我们想要的节点。

标签: postgresql kubernetes kubernetes-helm


【解决方案1】:

您不能为同一 Replica 中的 pod 分配不同的配置选项(即资源限制)。从本质上讲,它们应该是相同的。您需要创建多个副本才能完成此操作。

【讨论】:

    【解决方案2】:

    对于一项服务,您可以在一个 Service 定义后面使用不同的 nodeSelector 配置进行多个部署。

    例如你可以像这样标记你的节点:

    kubectl label nodes node-1 pool=freshhardware
    kubectl label nodes node-2 pool=freshhardware
    kubectl label nodes node-3 pool=shakyhardware
    

    然后有两个这样的部署:

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: my-nginx
    spec:
      replicas: 4
      template:
        metadata:
          labels:
            run: my-nginx
        spec:
          containers:
          - name: my-nginx
            image: nginx
            ports:
            - containerPort: 80
          nodeSelector:
            pool: freshhardware
    

    ...仅交换这些字段后,第二个可能看起来相同:

          nodeSelector:
            pool: shakyhardware
    

    这样的服务定义会考虑两个部署中的所有 pod:

    apiVersion: v1
    kind: Service
    metadata:
      name: my-nginx
      labels:
        run: my-nginx
    spec:
      ports:
      - port: 80
        protocol: TCP
      selector:
        run: my-nginx
    

    当然,缺点是您必须同时管理两个部署,但这无论如何都是这个问题的内在因素。

    【讨论】:

      猜你喜欢
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 2021-10-19
      相关资源
      最近更新 更多