Why am I getting "1 pod has unbound immediate PersistentVolumeClaims" when working with 2 deployments

2/15/2021

I am trying to do a fairly simple red/green setup using Minikube where I want 1 pod running a red container and 1 pod running a green container and a service to hit each. To do this my k82 file is like...

apiVersion: v1
kind: PersistentVolume
metadata:
  name: main-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/Users/jackiegleason/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: main-volume-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: express-app
  name: express-service-red
spec:
  type: LoadBalancer
  ports:
    - port: 3000
  selector:
    app: express-app-red
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: express-app
  name: express-service-green
spec:
  type: LoadBalancer
  ports:
    - port: 3000
  selector:
    app: express-app-green
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: express-app-deployment-red
  labels:
    app: express-app-red
    tier: app
spec:
  replicas: 1
  selector:
    matchLabels:
      tier: app
  template:
    metadata:
      labels:
        app: express-app-red
        tier: app
    spec:
      volumes:
        - name: express-app-storage
          persistentVolumeClaim:
            claimName: main-volume-claim
      containers:
        - name: express-app-container
          image: partyk1d24/hello-express:latest
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - mountPath: "/var/external"
              name: express-app-storage
          ports:
            - containerPort: 3000
              protocol: TCP
              name: express-endpnt
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: express-app-deployment-green
  labels:
    app: express-app-green
    tier: app
spec:
  replicas: 1
  selector:
    matchLabels:
      tier: app
  template:
    metadata:
      labels:
        app: express-app-green
        tier: app
    spec:
      volumes:
        - name: express-app-storage
          persistentVolumeClaim:
            claimName: main-volume-claim
      containers:
        - name: express-app-container
          image: partyk1d24/hello-express:latest
          imagePullPolicy: IfNotPresent
          env:
            - name: DEPLOY_TYPE
              value: "Green"
          volumeMounts:
            - mountPath: "/var/external"
              name: express-app-storage
          ports:
              - containerPort: 3000
                protocol: TCP
                name: express-endpnt

But when I run I get...

0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims.

What am I missing? It worked fine without the second deployment so what am I missing?

Thank you!

-- Jackie
kubernetes
minikube

1 Answer

2/16/2021

You cannot use the same a PV with accessMode: ReadWriteOnce multiple times.

To do this you would need to use a volume that supports ReadWriteMany access mode. Check out k8s documentation for the list of Volume Plugins that support this feature.

Additionally, as David already menioned, it's much better to log to the STDOUT.

You can also check solutions like FluentBit/fluentd or ELK stack.

-- Matt
Source: StackOverflow