how to embed one pod configuration to another pod

11/16/2017

I comparing the scenario of communication between two pods with container --link.I had a rabbit mq container and an application that uses it.

Now, how can we do the same in kubernetes where an application is dependent on a rabbitmq.

Below is my code for replicationcontroller of my myapplication which is apache airavata:

airavata-all-rc.yml

apiVersion: v1

kind: ReplicationController

metadata:

    name: airavata-all-rc

    labels:

      app : airavata-all-sc
spec:

  replicas: 5

  selector:

    app: airavata-all

  template:

    metadata:

      labels:

        app: airavata-all

    spec:

      containers:

      - name: airavata-all

        image: satyamsah/airavata-all

        ports:

        - containerPort: 8080

Below is my code for service version the same myapplication which is apache airavata:

airavata-all-svc.yml

apiVersion: v1

kind: Service

metadata:

  name: airavata-svc

  labels:

    app: airavata-all-svc

spec:

  type: NodePort

  ports:

  - port: 8080

    nodePort: 30002

    protocol: TCP

  selector:

    app: airavata-all

Below is the rabbitmq dependency:rmq-rc.yml

apiVersion: v1 
kind: ReplicationController
metadata:
  name: rmq-rc
spec:
  selector:
    app: rmq
  replicas: 1 
  template: 
    metadata:    
      labels:
        app: rmq
    spec:
      containers:
      - name: rmq
        image: rabbitmq:3-management
        env:
        - name: RABBITMQ_DEFAULT_USER
          value: "airavata"
        - name: RABBITMQ_DEFAULT_PASS
          value: "airavata"
        ports: 
        - containerPort: 5672
        - containerPort: 15672

How to make these two apps communicate to each other?

-- user3231140
kubernetes

2 Answers

12/3/2017

I think the easiest way is to create a rabbitmq service and link it via ENV variable.

Create a service yaml:

apiVersion: v1
kind: Service
metadata:
  name: rabbitmq
  labels:
    app: rabbitmq
spec:
  ports:
  - port: 5672
    name: amqp
  - port: 4369
    name: epmd
  - port: 25672
    name: rabbitmq-dist
  clusterIP: None
  selector:
    app: rabbitmq

Then instead of replication controller create a deployment or stateful set for Rabbitmq which will depend on this service:

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: rabbitmq
spec:
  serviceName: "rabbitmq"
  replicas: 1
  template:
    metadata:
      labels:
        app: rabbitmq
    spec:
      containers:
      - name: rabbitmq
    ....

Now make your airavata take a Rabbitmq link through ENV. and add ENV variable to its yaml:

....
env:
  - name: RABBITMQ_HOST
    value: "rabbitmq"
....
-- Artem
Source: StackOverflow

11/16/2017

Expose the RabbitMQ dependency as a Kubernetes Service, this will give it a consistent IP address. You can use that IP from your other pods, or use the service's DNS name in the format: my-svc.my-namespace.svc.cluster.local.

On a side note, consider migrating from Replication Controller to ReplicaSet, or Deployment. See: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/

-- itaysk
Source: StackOverflow