Harvester pre-check 检查不通过解决方法

问题概述

Harvester 升级前,需要对集群和节点状态进行检查,官方提供了 pre-check 检查脚本。可能会出现如下检查不通过的情况:

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> Check the Harvester bundle is ready...
2,12c2
< modified: 1
< nonReadyResources:
< - bundleState: Modified
< modifiedStatus:
< - apiVersion: monitoring.coreos.com/v1
< kind: ServiceMonitor
< missing: true
< name: longhorn-prometheus-servicemonitor
< namespace: longhorn-system
< name: fleet-local/local
< ready: 0

问题分析

出现这个问题是因为,在安装或者升级的时候,没有安装监控组件,导致对应的监控资源(ServiceMonitor/PrometheusRule)没有部署成功。

可以通过如下命令检查:

1
kubectl get bundles.fleet.cattle.io -n fleet-local 

通常可以看到,mcc-harvester 是异常的。

此时如果参考 Longhron 官方文档 手动创建 ServiceMonitor 资源,会发现并没有办法抑制这个错误。这是因为手动创建的对象没有相关注释,无法被 managedchart/bundle 对象识别。

问题解决

  1. 如果手动创建了 ServiceMonitor 资源,需要先删除掉。
  2. 接着运行以下命令,触发 Bundle 的更新。
1
2
3
4
kubectl edit managedchart -n fleet-local harvester

spec:
timeoutSeconds: 601 // set to a different value; if original is black,then add it
  1. 此时观察 Bundles ,可能会出现如下报错,不用理会,等待约3分钟,丢失的对象将被重新创建。
1
2
3
4
5
6
NAMESPACE     NAME                                          BUNDLEDEPLOYMENTS-READY   STATUS               
fleet-local mcc-harvester 0/1 ErrApplied(1) [Cluster fleet-local/local: contents.fleet.cattle.io "s-3cf51dab828e31f2144f6dff27d45f7f6d2c317b0a7eead4b419c1ed400b3" not found]; servicemonitor.monitoring.coreos.com longhorn-system/longhorn-prometheus-servicemonitor missing

等待约 3 分钟后:
NAMESPACE NAME BUNDLEDEPLOYMENTS-READY STATUS
fleet-local mcc-harvester 1/1