Can we configure one service with different pod resources in Kubernetes?

12/14/2016

I want to deploy a Postgres service with replication on Kubernetes cluster.

I have defined a PetSet and a Service for this. But i am only able to define same resource limits to all pods in a service, due to which Kubernetes assigns these nodes randomly to nodes.

Is there a way, where i can have a service with different pods resource conf ?

My current yaml for reference.

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

-- cmbendre
kubernetes
kubernetes-helm
postgresql

2 Answers

1/3/2017

You cannot assign different configuration options (i.e. resource limits) to pods in the same Replica. Inherently they are meant to be identical. You would need to create multiple replicas in order to accomplish this.

-- Steve Sloka
Source: StackOverflow

2/4/2017

for a service you could have multiple deployments with different nodeSelector configurations behind one Service definition.

E.g. you could label your nodes like this:

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

And then have two deployments like this:

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

... the second one could look the same with just these fields exchanged:

      nodeSelector:
        pool: shakyhardware

A service definition like this would then take all pods from both deployments into account:

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

The drawback is of course that you'd have to manage two Deployments at a time, but that's kind of build-in to this problem anyways.

-- pagid
Source: StackOverflow