<p>I try to mount a local folder as PersistentVolume and use it in one of the pods, but seems there is problem with the process and the pod stays on the status &quot;pending&quot;.</p>
<p>The following is my pv yaml file:</p>
<pre><code>kind: PersistentVolume
apiVersion: v1
metadata:
  name: pv-web
  labels:
    type: local
spec:
  storageClassName: mlo-web
  capacity:
    storage: 1Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  local:
    path: ${MLO_REPO_DIR}/web/
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - mlo-node
</code></pre>
<p>and pvc yaml file:</p>
<pre><code>apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-web
  namespace: mlo-dev
  labels:
    type: local
spec:
  storageClassName: mlo-web
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
</code></pre>
<p>and the deployment yaml file :</p>
<pre><code>apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
  namespace: mlo-dev
  labels:
    app: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: xxxxxx/web:latest
        ports:
          - containerPort: 3000
        volumeMounts:
          - name: webdir
            mountPath: /service
...
      volumes:
        - name: webdir
          persistentVolumeClaim:
            claimName: pvc-web
</code></pre>
<p>I found that the pod is alway in &quot;pending&quot; status:</p>
<pre><code>web-deployment-d498c7f57-4cfbg                                0/1     Pending   0          26m
</code></pre>
<p>and when I check the pod status using &quot;kubectl describe&quot;, the following is the result:</p>
<pre><code>Name:           web-deployment-d498c7f57-4cfbg
Namespace:      mlo-dev
Priority:       0
Node:           &lt;none&gt;
Labels:         app=web
                pod-template-hash=d498c7f57
Annotations:    &lt;none&gt;
Status:         Pending
IP:             
IPs:            &lt;none&gt;
Controlled By:  ReplicaSet/web-deployment-d498c7f57
Containers:
  web:
    Image:      xxxxxx/web:latest
    Port:       3000/TCP
    Host Port:  0/TCP
    Command:
      npm
      run
      mlo-start
    Environment:
      NODE_ENV:              &lt;set to the key 'NODE_ENV' of config map 'env-config'&gt;              Optional: false
      WEBPACK_DEV_SERVER:    &lt;set to the key 'webpack_dev_server' of config map 'env-config'&gt;    Optional: false
      REDIS_URL_SESSION:     &lt;set to the key 'REDIS_URL' of config map 'env-config'&gt;             Optional: false
      WORKSHOP_ADDRESS:      &lt;set to the key 'WORKSHOP_ADDRESS' of config map 'env-config'&gt;      Optional: false
      USER_API_ADDRESS:      &lt;set to the key 'USER_API_ADDRESS' of config map 'env-config'&gt;      Optional: false
      ENVCUR_API_ADDRESS:    &lt;set to the key 'ENVCUR_API_ADDRESS' of config map 'env-config'&gt;    Optional: false
      WIDGETS_API_ADDRESS:   &lt;set to the key 'WIDGETS_API_ADDRESS' of config map 'env-config'&gt;   Optional: false
      PROGRAM_BULL_URL:      &lt;set to the key 'REDIS_URL' of config map 'env-config'&gt;             Optional: false
      PROGRAM_PUBSUB:        &lt;set to the key 'REDIS_URL' of config map 'env-config'&gt;             Optional: false
      PROGRAM_API_ADDRESS:   &lt;set to the key 'PROGRAM_API_ADDRESS' of config map 'env-config'&gt;   Optional: false
      MARATHON_BULL_URL:     &lt;set to the key 'REDIS_URL' of config map 'env-config'&gt;             Optional: false
      MARATHON_API_ADDRESS:  &lt;set to the key 'MARATHON_API_ADDRESS' of config map 'env-config'&gt;  Optional: false
      GIT_API_ADDRESS:       &lt;set to the key 'GIT_API_ADDRESS' of config map 'env-config'&gt;       Optional: false
      GIT_HTTP_ADDRESS:      &lt;set to the key 'GIT_HTTP_ADDRESS' of config map 'env-config'&gt;      Optional: false
      LOG_URL:               &lt;set to the key 'LOG_URL' of config map 'env-config'&gt;               Optional: false
      LOGGER_PUBSUB:         &lt;set to the key 'REDIS_URL' of config map 'env-config'&gt;             Optional: false
      AUTH0_CLIENT_ID:       &lt;set to the key 'AUTH0_CLIENT_ID' of config map 'env-config'&gt;       Optional: false
      AUTH0_DOMAIN:          &lt;set to the key 'AUTH0_DOMAIN' of config map 'env-config'&gt;          Optional: false
      AUTH0_CALLBACK_URL:    &lt;set to the key 'AUTH0_CALLBACK_URL' of config map 'env-config'&gt;    Optional: false
      AUTH0_LOGOOUT_RETURN:  &lt;set to the key 'AUTH0_LOGOOUT_RETURN' of config map 'env-config'&gt;  Optional: false
      AUTH0_CLIENT_SECRET:   &lt;set to the key 'auth0-client-secret' in secret 'env-secret'&gt;       Optional: false
      SESSION_SECRET:        &lt;set to the key 'session-secret' in secret 'env-secret'&gt;            Optional: false
    Mounts:
      /service from webdir (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-w9v7j (ro)
Conditions:
  Type           Status
  PodScheduled   False 
Volumes:
  webdir:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  pvc-web
    ReadOnly:   false
  default-token-w9v7j:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-w9v7j
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  &lt;none&gt;
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason            Age                From               Message
  ----     ------            ----               ----               -------
  Warning  FailedScheduling  30s (x2 over 30s)  default-scheduler  0/1 nodes are available: 1 node(s) had volume node affinity conflict.
</code></pre>
<p>The error message I found is :</p>
<pre><code>  Warning  FailedScheduling  30s (x2 over 30s)  default-scheduler  0/1 nodes are available: 1 node(s) had volume node affinity conflict.
</code></pre>
<p>Do you know where my problem is? Many Thanks!</p>

<p>You doesn't seem to have a Node that match your affinity requirement.</p>
<p>Remove the affinity requirement on your <code>PersistentVolume</code>:</p>
<p>Remove this part:</p>
<pre><code>  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - mlo-node
</code></pre>
<p>and only use (and change <code>local</code> to <code>hostPath</code>):</p>
<pre><code>kind: PersistentVolume
apiVersion: v1
metadata:
  name: pv-web
  labels:
    type: local
spec:
  storageClassName: mlo-web
  capacity:
    storage: 1Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /absolute-path/web/
</code></pre>
<p>This is similar to the <a href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/" rel="nofollow noreferrer">Configure a Pod to Use a PersistentVolume for Storage</a> example, also using Minikube.</p>
