异常排查及解决
无法备份HostPath类型存储卷
HostPath与Local均为本地存储卷,但由于Velero集成的Restic工具无法对HostPath类型的PV进行备份,只支持Local类型,因此需要在原集群中将HostPath类型存储卷替换为Local类型。
Local volume类型的存储建议在Kubernetes v1.10及以上的版本中使用,且只能静态创建,详情请参考local。
- 创建Local volume的StorageClass。
YAML文件如下:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer
- 需要修改hostPath字段为local字段,指定宿主机原有的本地磁盘路径,并添加nodeAffinity字段。
YAML文件示例如下:
apiVersion: v1 kind: PersistentVolume metadata: name: mysql-pv labels: app: mysql spec: accessModes: - ReadWriteOnce capacity: storage: 5Gi storageClassName: local #指定上一步创建的StorageClass persistentVolumeReclaimPolicy: Delete local: path: "/mnt/data" #指定挂载的本地磁盘路径 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: Exists
- 执行以下命令验证创建结果。
kubectl get pv
回显如下:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE mysql-pv 5Gi RWO Delete Available local 3s
备份工具资源分配不足
在生产环境中,当备份资源较多时,如备份工具资源大小使用默认值,可能会出现资源分配不足的情况,请参考以下步骤调整分配给Velero和Restic的CPU和内存大小。
安装Velero前:
您可在安装Velero时指定Velero和Restic使用的资源大小。
安装参数示例如下:
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
安装Velero后:
- 编辑命名空间velero下Velero和node-agent工作负载的YAML文件。
kubectl edit deploy velero -n velero kubectl edit ds node-agent -n velero
- 修改resources字段下分配的资源大小,Velero和Restic工作负载的修改内容一致,如下所示。
resources: limits: cpu: "1" memory: 1Gi requests: cpu: 500m memory: 1Gi