How to provision persistent volume claim for software install in kubernetes

10/31/2017

I am trying to provision PVC for Solr deployment in k8s and mount it as /opt/solr, which is default Solr installation directory. This way I plan to target both Solr installation and data under it on PVC. However, while storage gets provisioned just fine and statefulset gets created, my deployment doesn't work because /opt/solr ends up empty. What is a proper way to do it? Here my deployment.yaml:

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: solr
  labels:
    app: solr

spec:
  volumeClaimTemplates:
  - metadata:
      name: datadir
      annotations:
        volume.alpha.kubernetes.io/storage-class: slow
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 2Gi

  serviceName: solr-svc
  replicas: 1
  template:
    metadata:
      labels:
        app: solr
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                    - solr-pool
              topologyKey: "kubernetes.io/hostname"
      terminationGracePeriodSeconds: 300
      containers: 
      - name: solr
        image: solr:6.5.1
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            memory: 512M
            cpu: 500m
        ports:
        - containerPort: 8983
          name: solr-port
          protocol: TCP
        env:
        - name: VERBOSE
          value: "yes"
        command:
        - bash
        - -c
        - "exec /opt/solr/bin/solr start"
        volumeMounts:
        - name: solr-script
          mountPath: /docker-entrypoint-initdb.d/
        - name: datadir
          mountPath: /opt/solr/
      volumes:
        - name: solr-script
          configMap:
            name: solr-configs
      nodeSelector:
        pool: solr-pool
-- Dmitry Buzolin
kubernetes
kubernetes-pvc
persistent-volumes
solr

2 Answers

2/8/2018

Provisioned storage is empty by default and there might be a Deleting retain policy on provisioned storage be sure to check those configurations. You can also exec to your pod and examine mounted volume and see if it's working properly or not (permission issues, read only file system)

-- Keyvan Hedayati
Source: StackOverflow

2/25/2018

In may case there was a conflict with docker container configuration which used /opt/solr as a location for solr install and my attempt to mount separate PV under same location. Once this PV is mounted obviously I loose solr install. The fixes for this are:

  • create another docker image which uses separate location
  • change solr config to use different location for data
  • change PV volume location
-- Dmitry Buzolin
Source: StackOverflow