Unable to run mysql pod in kubernetes with external volume

10/1/2016

I have google cloud container engine setup. I wanted to spin pod of mysql with external volume.

ReplicationController:

apiVersion: v1
kind: ReplicationController
metadata:
  labels:
    name: mysql
  name: mysql-controller
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: mysql
    spec:
      containers:
        - image: mysql
          name: mysql
          ports:
          - name: mysql
            containerPort: 3306
            hostPort: 3306
          volumeMounts:
            - name: mysql-persistent-storage
              mountPath: /var/lib/mysql
      volumes:
        - name: mysql-persistent-storage
          gcePersistentDisk:
            pdName: mysql-1-disk
            fsType: ext4

When i run RC without external volume, MySQL works fine. It breaks with below error when i try to attach volume

Kubernetes POD Error:

Warning FailedSyncError syncing pod, skipping: failed to "StartContainer" for "mysql" with CrashLoopBackOff: "Back-off 20s restarting failed container=mysql pod=mysql-controller-4hhqs_default(eb34ff46-8784-11e6-8f12-42010af00162)"

Disk (External Volume): mysql-1-disk is the google cloud disk. I tried creating disk with both blank disk and image - ubuntu. Both failed with same error.

-- sravis
google-kubernetes-engine
kubernetes
kubernetes-pod
mysql

2 Answers

10/1/2016

The error messages on mounting persistent disks are really not descriptive from my perspective. Use a blank disk based on your configuration file.

Some things to check:

  • Is the pdName exactly the same as in your CGE environment
  • Is the disk in the same availability zone (eg. europe-west1-c) as your cluster, otherwise it can't mount.

Hope this helps.

-- Tim
Source: StackOverflow

10/4/2016

The problem that you face may be caused by using RC, not Pod to interact with the Persistent Disk.

As it's mentioned in documentation:

A feature of PD is that they can be mounted as read-only by multiple consumers simultaneously. This means that you can pre-populate a PD with your dataset and then serve it in parallel from as many pods as you need. Unfortunately, PDs can only be mounted by a single consumer in read-write mode - no simultaneous writers allowed. Using a PD on a pod controlled by a ReplicationController will fail unless the PD is read-only or the replica count is 0 or 1.

In this case, I may suggest you to run MySQL with Persistent Disks defining the disk connection in Pod configuration file. Sample configuration you may find here.

-- ihor_dvoretskyi
Source: StackOverflow