Updated on 2024-05-10 GMT+08:00

Troubleshooting

Storage Volumes of the HostPath Type Cannot Be Backed Up

Both HostPath and Local volumes are local storage volumes. However, the Restic tool integrated in Velero cannot back up the PVs of the HostPath type and supports only the Local type. Therefore, you need to replace the storage volumes of the HostPath type with the Local type in the source cluster.

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

  1. Create a storage class for the 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 host machine, 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. Run the following commands to 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 the production environment, if there are many backup resources, for example, the default resource size of the backup tool is used, the resources may be insufficient. In this case, perform the following steps to adjust the CPU and memory size allocated to the 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