Updated on 2026-03-10 GMT+08:00

Troubleshooting

hostPath Volumes Cannot Be Backed Up

Both hostPath and local volumes are local storage volumes. However, restic, which is integrated into Velero, cannot back up hostPath volumes. It can only back up local volumes. So, you need to change the hostPath volumes to local ones in the source cluster.

It is recommended that local volumes be used in Kubernetes v1.10 or later. Such volumes can only be statically created. For details, see local.

  1. Create a storage class for a local volume.

    Example YAML:
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: local
    provisioner: kubernetes.io/no-provisioner
    volumeBindingMode: WaitForFirstConsumer

  2. Change the hostPath field to the local field, specify the original local disk path of the node, and add the nodeAffinity field.

    Example YAML:
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: mysql-pv
      labels: 
        app: mysql
    spec:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 5Gi
      storageClassName: local     # Storage class created in the previous step
      persistentVolumeReclaimPolicy: Delete
      local:
        path: "/mnt/data"     # Path of the attached local disk
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: Exists

  3. Verify the creation result.

    kubectl get pv

    Information similar to the following is displayed:

    NAME       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM               STORAGECLASS   REASON   AGE
    mysql-pv   5Gi        RWO            Delete           Available                       local                   3s

Backup Tool Resources Are Insufficient

In a production environment with numerous resources to be backed up, using the backup tool with the default resource size may lead to insufficient resources. In such case, take the following steps to adjust the vCPU and memory settings of Velero and restic:

Before installing Velero:

You can specify the size of resources used by Velero and restic when installing Velero.

The following is an example of installation parameters:

velero install \
   --velero-pod-cpu-request 500m \
   --velero-pod-mem-request 1Gi \
   --velero-pod-cpu-limit 1000m \
   --velero-pod-mem-limit 1Gi \
   --use-node-agent \
   --node-agent-pod-cpu-request 500m \
   --node-agent-pod-mem-request 1Gi \
   --node-agent-pod-cpu-limit 1000m \
   --node-agent-pod-mem-limit 1Gi

After Velero is installed:

  1. Edit the YAML files of the Velero and node-agent workloads in the velero namespace.

    kubectl edit deploy velero -n velero
    kubectl edit ds node-agent -n velero

  2. Modify the resource size under the resources field. The modification is the same for the Velero and restic workloads, as shown in the following:

    resources:
      limits:
        cpu: "1"
        memory: 1Gi
      requests:
        cpu: 500m
        memory: 1Gi