How do pods in Google Container Engine talk/link to each other

6/10/2016

I fiddle around with this example: https://cloud.google.com/container-engine/docs/tutorials/persistent-disk/

My modifications: - I'm using my own Wordpress image [x] Works

Service starts (it needed more CPU 0.8 instead of 0.5, but now it works)

  • I want to use mariadb instead of mysql [ ] Fails!

I can't figure out how two pods link together!!!! ~5h + still failing

Here are my .yaml-Files

apiVersion: v1
kind: Pod
metadata:
  name: wpsite
  labels:
    name: wpsite
spec:
  containers:
    - image: <my image on gcr.io>
      name: wpsite

      env:
        - name: WORDPRESS_DB_PASSWORD
          # Change this - must match mysql.yaml password.
          value: example
      ports:
        - containerPort: 80
          name: wpsite

      volumeMounts:
          # Name must match the volume name below.
        - name: wpsite-disk
          # Mount path within the container.
          mountPath: /var/www/html

  volumes:
    - name: wpsite-disk
      gcePersistentDisk:
        # This GCE persistent disk must already exist.
        pdName: wpsite-disk
        fsType: ext4

service:

apiVersion: v1
kind: Service
metadata:
  labels:
    name: wpsite
  name: wpsite
spec:
  type: LoadBalancer
  ports:
    # The port that this service should serve on.
    - port: 80
      targetPort: 80
      protocol: TCP

  # Label keys and values that must match in order to receive traffic for this service.
  selector:
    name: wpsite

mariadb:

apiVersion: v1
kind: Pod
metadata:
  name: mariadb
  labels:
    name: mariadb
spec:
  containers:
    - resources:
        limits:
          # 0.5 hat nicht funktioniert
          # Fehlermeldung in: kubectl describe pod mariadb
          cpu: 0.8

      image: mariadb:10.1
      name: mariadb
      env:
        - name: MYSQL_ROOT_PASSWORD
          # Change this password!
          value: example

      ports:
        - containerPort: 3306
          name: mariadb

      volumeMounts:
          # This name must match the volumes.name below.
        - name: mariadb-persistent-storage
          mountPath: /var/lib/mysql
  volumes:
    - name: mariadb-persistent-storage
      gcePersistentDisk:
        # This disk must already exist.
        pdName: mariadb-disk
        fsType: ext4

maria-db-service:

apiVersion: v1
kind: Service
metadata:
  labels:
    name: mariadb
  name: mariadb
spec:
  ports:
    # The port that this service should serve on.
    - port: 3306

  # Label keys and values that must match in
  # order to receive traffic for this service.
  selector:
    name: mysql

kubectl logs wpsite shows error messages like this: Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10

-- Mike Mitterer
docker
google-kubernetes-engine
kubernetes

1 Answer

6/10/2016

OK - found it out!

It's the name in mariadb-service.yaml metadata.name must be mysql and not mariadb, the selector in mariadb-service must point to mariadb (the pod)

Here are the working files:

mariadb.yaml

apiVersion: v1
kind: Pod

metadata:
  name: mariadb

  labels:
    name: mariadb
spec:
  containers:
    - resources:
        limits:
          # 0.5 hat nicht funktioniert
          # Fehlermeldung in: kubectl describe pod mariadb
          cpu: 0.8

      image: mariadb:10.1
      name: mariadb
      env:
        - name: MYSQL_ROOT_PASSWORD
          # Change this password!
          value: example

      ports:
        - containerPort: 3306
          name: mariadb

      volumeMounts:
          # This name must match the volumes.name below.
        - name: mariadb-persistent-storage
          mountPath: /var/lib/mysql
  volumes:
    - name: mariadb-persistent-storage
      gcePersistentDisk:
        # This disk must already exist.
        pdName: mariadb-disk
        fsType: ext4

mariadb-service.yaml

apiVersion: v1
kind: Service

metadata:
  name: mysql

  labels:
    name: mysql
spec:
  ports:
    # The port that this service should serve on.
    - port: 3306

  # Label keys and values that must match in
  # order to receive traffic for this service.
  selector:
    name: mariadb

wpsite.yaml

apiVersion: v1
kind: Pod

metadata:
  name: wpsite

  labels:
    name: wpsite
spec:
  containers:
    - image: <change this to your imagename on gcr.io>
      name: wpsite

      env:
        - name: WORDPRESS_DB_PASSWORD
          # Change this - must match mysql.yaml password.
          value: example
      ports:
        - containerPort: 80
          name: wpsite

      volumeMounts:
          # Name must match the volume name below.
        - name: wpsite-disk
          # Mount path within the container.
          mountPath: /var/www/html

  volumes:
    - name: wpsite-disk
      gcePersistentDisk:
        # This GCE persistent disk must already exist.
        pdName: wpsite-disk
        fsType: ext4

wpsite-service.yaml

apiVersion: v1
kind: Service

metadata:
  name: wpsite

  labels:
    name: wpsite
spec:
  type: LoadBalancer
  ports:
    # The port that this service should serve on.
    - port: 80
      targetPort: 80
      protocol: TCP

  # Label keys and values that must match in order to receive traffic for this service.
  selector:
    name: wpsite

With these settings I run: (my yaml-files are under gke)

$ kubectl create -f gke/mariadb.yaml

# Check
$ kubectl get pod

$ kubectl create -f gke/mariadb-service.yaml

# Check 
$ kubectl get service mysql!!!! (name in mariadb = mysql)

$ kubectl create -f gke/wpsite.yaml

# Check
$ kubectl get pod

$ kubectl create -f gke/wpsite-service.yaml

# Check
$ kubectl describe service wpsite

Hope this helps someone...

-- Mike Mitterer
Source: StackOverflow