この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

監視の問題

監視が使用できません

SUSE Virtualization ダッシュボードに監視メトリックが表示されない場合、以下の理由が考えられます。

ポッドが Terminating ステータスで停止しているため、監視が使用できません

SUSE Virtualization 監視ポッドはクラスターのノードにランダムにデプロイされます。ポッドをホストしているノードが偶然ダウンすると、関連するポッドが Terminating ステータスで停止し、WebUIから監視が使用できなくなる可能性があります。

$ kubectl get pods -n cattle-monitoring-system

NAMESPACE                   NAME                                                     READY   STATUS        RESTARTS   AGE
cattle-monitoring-system    prometheus-rancher-monitoring-prometheus-0               3/3     Terminating   0          3d23h
cattle-monitoring-system    rancher-monitoring-admission-create-fwjn9                0/1     Terminating   0          137m
cattle-monitoring-system    rancher-monitoring-crd-create-9wtzf                      0/1     Terminating   0          137m
cattle-monitoring-system    rancher-monitoring-grafana-d9c56d79b-ph4nz               3/3     Terminating   0          3d23h
cattle-monitoring-system    rancher-monitoring-grafana-d9c56d79b-t24sz               0/3     Init:0/2      0          132m

cattle-monitoring-system    rancher-monitoring-kube-state-metrics-5bc8bb48bd-nbd92   1/1     Running       4          4d1h
...

関連するポッドを強制的に削除するためにCLIコマンドを使用して監視を回復できます。クラスターはそれらを置き換えるために新しいポッドを再デプロイします。

# Delete each none-running Pod in namespace cattle-monitoring-system.

$ kubectl delete pod --force -n cattle-monitoring-system prometheus-rancher-monitoring-prometheus-0

 pod "prometheus-rancher-monitoring-prometheus-0" force deleted


$ kubectl delete pod --force -n cattle-monitoring-system rancher-monitoring-admission-create-fwjn9

$ kubectl delete pod --force -n cattle-monitoring-system rancher-monitoring-crd-create-9wtzf

$ kubectl delete pod --force -n cattle-monitoring-system rancher-monitoring-grafana-d9c56d79b-ph4nz

$ kubectl delete pod --force -n cattle-monitoring-system rancher-monitoring-grafana-d9c56d79b-t24sz

新しいポッドが作成され、監視ダッシュボードが再び使用可能になるまで数分待ってください。

$ kubectl get pods -n cattle-monitoring-system

NAME                                                     READY   STATUS     RESTARTS   AGE
prometheus-rancher-monitoring-prometheus-0               0/3     Init:0/1   0          98s
rancher-monitoring-grafana-d9c56d79b-cp86w               0/3     Init:0/2   0          27s
...

$ kubectl get pods -n cattle-monitoring-system

NAME                                                     READY   STATUS    RESTARTS   AGE
prometheus-rancher-monitoring-prometheus-0               3/3     Running   0          7m57s
rancher-monitoring-grafana-d9c56d79b-cp86w               3/3     Running   0          6m46s
...

PV/ボリュームサイズの拡張

SUSE Virtualization は SUSE Storage をデフォルトのストレージプロバイダーとして統合します。

SUSE Virtualization 監視は、実行データを保存するために永続ボリューム (PV) を使用します。クラスターが一定の時間稼働していると、永続ボリュームのサイズを拡張する必要がある場合があります。

ボリュームサイズを増やす方法については、SUSE Storage ドキュメントの ボリューム拡張 を参照してください。

ボリュームを表示する

埋め込み SUSE Storage UIから

このドキュメント に従って埋め込み SUSE Storage UIにアクセスします。

SUSE Storage ダッシュボードのデフォルトビュー。

2 longhorn dashboard

Volume をクリックして、すべての既存のボリュームを一覧表示します。

3 view all volume

CLIから

`kubectl`を使用してすべてのボリュームを取得することもできます。

# kubectl get pvc -A
NAMESPACE                  NAME                                                                                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         AGE
cattle-monitoring-system   alertmanager-rancher-monitoring-alertmanager-db-alertmanager-rancher-monitoring-alertmanager-0   Bound    pvc-1b2fbbe9-14b1-4a65-941a-7d5645a89977   5Gi        RWO            harvester-longhorn   43h
cattle-monitoring-system   prometheus-rancher-monitoring-prometheus-db-prometheus-rancher-monitoring-prometheus-0           Bound    pvc-7c6dcb61-51a9-4a38-b4c5-acaa11788978   50Gi       RWO            harvester-longhorn   43h
cattle-monitoring-system   rancher-monitoring-grafana                                                                       Bound    pvc-b2b2c07c-f7cd-4965-90e6-ac3319597bf7   2Gi        RWO            harvester-longhorn   43h

# kubectl get volume -A
NAMESPACE         NAME                                       STATE      ROBUSTNESS   SCHEDULED   SIZE          NODE     AGE
longhorn-system   pvc-1b2fbbe9-14b1-4a65-941a-7d5645a89977   attached   degraded                 5368709120    harv31   43h
longhorn-system   pvc-7c6dcb61-51a9-4a38-b4c5-acaa11788978   attached   degraded                 53687091200   harv31   43h
longhorn-system   pvc-b2b2c07c-f7cd-4965-90e6-ac3319597bf7   attached   degraded                 2147483648    harv31   43h

デプロイメントをスケールダウンする

`Volume`を切り離すには、`deployment`を使用している`Volume`をスケールダウンする必要があります。

以下の例は、`rancher-monitoring-grafana`によって要求されたPVCに対するものです。

名前空間`deployment`で`cattle-monitoring-system`を見つけてください。

# kubectl get deployment -n cattle-monitoring-system
NAME                                    READY   UP-TO-DATE   AVAILABLE   AGE
rancher-monitoring-grafana              1/1     1            1           43h  // target deployment
rancher-monitoring-kube-state-metrics   1/1     1            1           43h
rancher-monitoring-operator             1/1     1            1           43h
rancher-monitoring-prometheus-adapter   1/1     1            1           43h

デプロイメント`rancher-monitoring-grafana`を0にスケールダウンしてください。

# kubectl scale --replicas=0 deployment/rancher-monitoring-grafana -n cattle-monitoring-system

デプロイメントとボリュームを確認してください。

# kubectl get deployment -n cattle-monitoring-system
NAME                                    READY   UP-TO-DATE   AVAILABLE   AGE
rancher-monitoring-grafana              0/0     0            0           43h  // scaled down
rancher-monitoring-kube-state-metrics   1/1     1            1           43h
rancher-monitoring-operator             1/1     1            1           43h
rancher-monitoring-prometheus-adapter   1/1     1            1           43h

# kubectl get volume -A
NAMESPACE         NAME                                       STATE      ROBUSTNESS   SCHEDULED   SIZE          NODE     AGE
longhorn-system   pvc-1b2fbbe9-14b1-4a65-941a-7d5645a89977   attached   degraded                 5368709120    harv31   43h
longhorn-system   pvc-7c6dcb61-51a9-4a38-b4c5-acaa11788978   attached   degraded                 53687091200   harv31   43h
longhorn-system   pvc-b2b2c07c-f7cd-4965-90e6-ac3319597bf7   detached   unknown                  2147483648             43h  // volume is detached

ボリュームの拡張

SUSE StorageのUIでは、関連するボリュームが`Detached`になります。`Operation`列のアイコンをクリックし、`Expand Volume`を選択してください。

4 select volume to expand

新しいサイズを入力すると、SUSE Storageはこのサイズにボリュームを拡張します。

5 expand volue to new size

デプロイメントをスケールアップする

`Volume`がターゲットサイズに拡張された後、前述のデプロイメントを元のレプリカにスケールアップする必要があります。上記の`rancher-monitoring-grafana`の例では、元のレプリカは1です。

# kubectl scale --replicas=1 deployment/rancher-monitoring-grafana -n cattle-monitoring-system

デプロイメントを再度確認してください。

# kubectl get deployment -n cattle-monitoring-system
NAME                                    READY   UP-TO-DATE   AVAILABLE   AGE
rancher-monitoring-grafana              1/1     1            1           43h  // scaled up
rancher-monitoring-kube-state-metrics   1/1     1            1           43h
rancher-monitoring-operator             1/1     1            1           43h
rancher-monitoring-prometheus-adapter   1/1     1            1           43h

`Volume`は新しいPODに接続されています。

6 after scale up

現在、`Volume`は新しいサイズに開かれ、PODはそれをスムーズに使用しています。

`rancher-monitoring`アドオンの有効化に失敗しました

最小必要ディスクサイズを持つクラスターにSUSE Virtualization v1.3.0以降をインストールする際に、これに遭遇する可能性があります。

再現手順

  1. SUSE Virtualization クラスターをインストールします。

  2. rancher-monitoring アドオン を有効にすると、次のことが観察されます:

    • cattle-monitoring-system 名前空間の POD prometheus-rancher-monitoring-prometheus-0 が PVC 添付の失敗により起動に失敗します。

        $ kubectl get pods -n cattle-monitoring-system
        NAME                                                     READY   STATUS      RESTARTS   AGE
        alertmanager-rancher-monitoring-alertmanager-0           2/2     Running     0          3m22s
        helm-install-rancher-monitoring-4b5mx                    0/1     Completed   0          3m41s
        prometheus-rancher-monitoring-prometheus-0               0/3     Init:0/1    0          3m21s // stuck in this status
        rancher-monitoring-grafana-d6f466988-hgpkb               4/4     Running     0          3m26s
        rancher-monitoring-kube-state-metrics-7659b76cc4-66sr7   1/1     Running     0          3m26s
        rancher-monitoring-operator-595476bc84-7hdxj             1/1     Running     0          3m25s
        rancher-monitoring-prometheus-adapter-55dc9ccd5d-pcrpk   1/1     Running     0          3m26s
        rancher-monitoring-prometheus-node-exporter-pbzv4        1/1     Running     0          3m26s
      
        $ kubectl describe pod -n cattle-monitoring-system prometheus-rancher-monitoring-prometheus-0
        Name:             prometheus-rancher-monitoring-prometheus-0
        Namespace:        cattle-monitoring-system
        Priority:         0
        Service Account:  rancher-monitoring-prometheus
        ...
        Events:
          Type     Reason              Age                    From                     Message
          ----     ------              ----                   ----                     -------
          Warning  FailedScheduling    3m48s (x3 over 4m15s)  default-scheduler        0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling..
          Normal   Scheduled           3m44s                  default-scheduler        Successfully assigned cattle-monitoring-system/prometheus-rancher-monitoring-prometheus-0 to harv41
          Warning  FailedMount         101s                   kubelet                  Unable to attach or mount volumes: unmounted volumes=[prometheus-rancher-monitoring-prometheus-db], unattached volumes=[prometheus-rancher-monitoring-prometheus-db], failed to process volumes=[]: timed out waiting for the condition
          Warning  FailedAttachVolume  90s (x9 over 3m42s)    attachdetach-controller  AttachVolume.Attach failed for volume "pvc-bbe8760d-926c-484a-851c-b8ec29ae05c0" : rpc error: code = Aborted desc = volume pvc-bbe8760d-926c-484a-851c-b8ec29ae05c0 is not ready for workloads
      
        $ kubectl get pvc -A
        NAMESPACE                  NAME                                                                                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS           AGE
        cattle-monitoring-system   prometheus-rancher-monitoring-prometheus-db-prometheus-rancher-monitoring-prometheus-0           Bound    pvc-bbe8760d-926c-484a-851c-b8ec29ae05c0   50Gi       RWO            harvester-longhorn     7m12s
      
        $ kubectl get volume -A
        NAMESPACE         NAME                                       DATA ENGINE   STATE      ROBUSTNESS   SCHEDULED   SIZE          NODE     AGE
        longhorn-system   pvc-bbe8760d-926c-484a-851c-b8ec29ae05c0   v1            detached   unknown                  53687091200            6m55s
    • Longhorn Managerはレプリカをスケジュールできません。

        $ kubectl logs -n longhorn-system longhorn-manager-bf65b | grep "pvc-bbe8760d-926c-484a-851c-b8ec29ae05c0"
      
        time="2024-02-19T10:12:56Z" level=error msg="There's no available disk for replica pvc-bbe8760d-926c-484a-851c-b8ec29ae05c0-r-dcb129fd, size 53687091200" func="schedule
        r.(*ReplicaScheduler).ScheduleReplica" file="replica_scheduler.go:95"
        time="2024-02-19T10:12:56Z" level=warning msg="Failed to schedule replica" func="controller.(*VolumeController).reconcileVolumeCondition" file="volume_controller.go:169
        4" accessMode=rwo controller=longhorn-volume frontend=blockdev migratable=false node=harv41 owner=harv41 replica=pvc-bbe8760d-926c-484a-851c-b8ec29ae05c0-r-dcb129fd sta
        te= volume=pvc-bbe8760d-926c-484a-851c-b8ec29ae05c0
        ...

解決策

  1. すでに有効にしている場合は、rancher-monitoring アドオンを無効にしてください。

    cattle-monitoring-system のすべてのポッドが削除されますが、PVC は保持されます。詳細については、[アドオン] を参照してください。

     $ kubectl get pods -n cattle-monitoring-system
     No resources found in cattle-monitoring-system namespace.
    
     $ kubectl get pvc -n cattle-monitoring-system
     NAME                                                                                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         AGE
     alertmanager-rancher-monitoring-alertmanager-db-alertmanager-rancher-monitoring-alertmanager-0   Bound    pvc-cea6316e-f74f-4771-870b-49edb5442819   5Gi        RWO            harvester-longhorn   14m
     prometheus-rancher-monitoring-prometheus-db-prometheus-rancher-monitoring-prometheus-0           Bound    pvc-bbe8760d-926c-484a-851c-b8ec29ae05c0   50Gi       RWO            harvester-longhorn   14m
  2. prometheus という名前の PVC を削除しますが、alertmanager という名前の PVC は保持します。

     $ kubectl delete pvc -n cattle-monitoring-system prometheus-rancher-monitoring-prometheus-db-prometheus-rancher-monitoring-prometheus-0
     persistentvolumeclaim "prometheus-rancher-monitoring-prometheus-db-prometheus-rancher-monitoring-prometheus-0" deleted
    
     $ kubectl get pvc -n cattle-monitoring-system
     NAME                                                                                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         AGE
     alertmanager-rancher-monitoring-alertmanager-db-alertmanager-rancher-monitoring-alertmanager-0   Bound    pvc-cea6316e-f74f-4771-870b-49edb5442819   5Gi        RWO            harvester-longhorn   16m
  3. SUSE Virtualization UI の アドオン 画面で、(メニューアイコン)を選択し、次に YAML を編集 を選択します。

    edit rancher monitoring
  4. 以下に示すように、prometheusSpecの下で数値`50`が2箇所あるので、それらを`30`に変更し、保存します。prometheus 機能は、データを保存するために 30GiB のディスクを使用します。

    edit rancher monitoring yaml

    代わりに、kubectl を使用してオブジェクトを編集できます。

    kubectl edit addons.harvesterhci.io -n cattle-monitoring-system rancher-monitoring

             retentionSize: 50GiB // Change 50 to 30
             storageSpec:
               volumeClaimTemplate:
                 spec:
                   accessModes:
                     - ReadWriteOnce
                   resources:
                     requests:
                       storage: 50Gi // Change 50 to 30
                   storageClassName: harvester-longhorn
  5. rancher-monitoring アドオンを有効にし、数分待ってください。

  6. すべてのポッドが正常にデプロイされ、rancher-monitoring 機能が利用可能です。

     $ kubectl get pods -n cattle-monitoring-system
     NAME                                                     READY   STATUS      RESTARTS   AGE
     alertmanager-rancher-monitoring-alertmanager-0           2/2     Running     0          3m52s
     helm-install-rancher-monitoring-s55tq                    0/1     Completed   0          4m17s
     prometheus-rancher-monitoring-prometheus-0               3/3     Running     0          3m51s
     rancher-monitoring-grafana-d6f466988-hkv6f               4/4     Running     0          3m55s
     rancher-monitoring-kube-state-metrics-7659b76cc4-ght8x   1/1     Running     0          3m55s
     rancher-monitoring-operator-595476bc84-r96bp             1/1     Running     0          3m55s
     rancher-monitoring-prometheus-adapter-55dc9ccd5d-vtssc   1/1     Running     0          3m55s
     rancher-monitoring-prometheus-node-exporter-lgb88        1/1     Running     0          3m55s

rancher-monitoring-crd ManagedChart の状態は Modified です。

問題の説明

特定の状況では、rancher-monitoring-crd ManagedChart オブジェクトの状態が Modified に変更されます(メッセージ …​rancher-monitoring-crd-manager missing…​ 付き)。

例:

 $ kubectl get managedchart rancher-monitoring-crd -n fleet-local -o yaml
 apiVersion: management.cattle.io/v3
 kind: ManagedChart
 ...
 spec:
   chart: rancher-monitoring-crd
   defaultNamespace: cattle-monitoring-system
   paused: false
   releaseName: rancher-monitoring-crd
   repoName: harvester-charts
   targets:
   - clusterName: local
     clusterSelector:
       matchExpressions:
       - key: provisioning.cattle.io/unmanaged-system-agent
         operator: DoesNotExist
   version: 102.0.0+up40.1.2
 ...
 status:
   conditions:
   - lastUpdateTime: "2024-02-22T14:03:11Z"
     message: Modified(1) [Cluster fleet-local/local]; clusterrole.rbac.authorization.k8s.io
       rancher-monitoring-crd-manager missing; clusterrolebinding.rbac.authorization.k8s.io
       rancher-monitoring-crd-manager missing; configmap.v1 cattle-monitoring-system/rancher-monitoring-crd-manifest
       missing; serviceaccount.v1 cattle-monitoring-system/rancher-monitoring-crd-manager
       missing
     status: "False"
     type: Ready
   - lastUpdateTime: "2024-02-22T14:03:11Z"
     status: "True"
     type: Processed
   - lastUpdateTime: "2024-04-02T07:45:26Z"
     status: "True"
     type: Defined
   display:
     readyClusters: 0/1
     state: Modified
 ...

ManagedChart オブジェクトには、Bundle という名前のダウンストリームオブジェクトがあり、同様の情報を持っています。

例:

 $ kubectl get bundles -A
 NAMESPACE     NAME                                          BUNDLEDEPLOYMENTS-READY   STATUS
 fleet-local   fleet-agent-local                             1/1
 fleet-local   local-managed-system-agent                    1/1
 fleet-local   mcc-harvester                                 1/1
 fleet-local   mcc-harvester-crd                             1/1
 fleet-local   mcc-local-managed-system-upgrade-controller   1/1
 fleet-local   mcc-rancher-logging-crd                       1/1
 fleet-local   mcc-rancher-monitoring-crd                    0/1                       Modified(1) [Cluster fleet-local/local]; clusterrole.rbac.authorization.k8s.io rancher-monitoring-crd-manager missing; clusterrolebinding.rbac.authorization.k8s.io rancher-monitoring-crd-manager missing; configmap.v1 cattle-monitoring-system/rancher-monitoring-crd-manifest missing; serviceaccount.v1 cattle-monitoring-system/rancher-monitoring-crd-manager missing

問題が存在し、アップグレードを開始すると、SUSE Virtualization は次のエラーメッセージを返す可能性があります: admission webhook "validator.harvesterhci.io" denied the request: managed chart rancher-monitoring-crd is not ready, please wait for it to be ready

また、`missing`としてマークされたオブジェクトを検索すると、それらがクラスター内に存在することがわかります。

例:

$ kubectl get clusterrole rancher-monitoring-crd-manager
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    meta.helm.sh/release-name: rancher-monitoring-crd
    meta.helm.sh/release-namespace: cattle-monitoring-system
  creationTimestamp: "2023-01-09T11:04:33Z"
  labels:
    app: rancher-monitoring-crd-manager
    app.kubernetes.io/managed-by: Helm
  name: rancher-monitoring-crd-manager
  ...
rules:
- apiGroups:
  - apiextensions.k8s.io
  resources:
  - customresourcedefinitions
  verbs:
  - create
  - get
  - patch
  - delete

$ kubectl get clusterrolebinding rancher-monitoring-crd-manager
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  annotations:
    meta.helm.sh/release-name: rancher-monitoring-crd
    meta.helm.sh/release-namespace: cattle-monitoring-system
  creationTimestamp: "2023-01-09T11:04:33Z"
  labels:
    app: rancher-monitoring-crd-manager
    app.kubernetes.io/managed-by: Helm
  name: rancher-monitoring-crd-manager
  ...
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: rancher-monitoring-crd-manager
subjects:
- kind: ServiceAccount
  name: rancher-monitoring-crd-manager
  namespace: cattle-monitoring-system

$ kubectl get configmap -n cattle-monitoring-system rancher-monitoring-crd-manifest
apiVersion: v1
data:
  crd-manifest.tgz.b64: ...
kind: ConfigMap
metadata:
  annotations:
    meta.helm.sh/release-name: rancher-monitoring-crd
    meta.helm.sh/release-namespace: cattle-monitoring-system
  creationTimestamp: "2023-01-09T11:04:33Z"
  labels:
    app.kubernetes.io/managed-by: Helm
  name: rancher-monitoring-crd-manifest
  namespace: cattle-monitoring-system
  ...

$ kubectl get ServiceAccount -n cattle-monitoring-system rancher-monitoring-crd-manager
apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
    meta.helm.sh/release-name: rancher-monitoring-crd
    meta.helm.sh/release-namespace: cattle-monitoring-system
  creationTimestamp: "2023-01-09T11:04:33Z"
  labels:
    app: rancher-monitoring-crd-manager
    app.kubernetes.io/managed-by: Helm
  name: rancher-monitoring-crd-manager
  namespace: cattle-monitoring-system
  ...

原因分析

`missing`としてマークされたオブジェクトには、`ManagedChart`オブジェクトに必要な関連アノテーションとラベルがありません。

例:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    meta.helm.sh/release-name: rancher-monitoring-crd
    meta.helm.sh/release-namespace: cattle-monitoring-system
    objectset.rio.cattle.io/id: default-mcc-rancher-monitoring-crd-cattle-fleet-local-system   # This required item is not in the above object.
  creationTimestamp: "2024-04-03T10:23:55Z"
  labels:
    app: rancher-monitoring-crd-manager
    app.kubernetes.io/managed-by: Helm
    objectset.rio.cattle.io/hash: 2da503261617e9ea2da822d2da7cdcfccad847a9    # This required item is not in the above object.
  name: rancher-monitoring-crd-manager
...
rules:
- apiGroups:
  - apiextensions.k8s.io
  resources:
  - customresourcedefinitions
  verbs:
  - create
  - get
  - patch
  - delete
  - update

解決策

  1. ClusterRole オブジェクト rancher-monitoring-crd-manager にパッチを適用して、update 操作を追加します。

     $ cat > patchrules.yaml << EOF
     rules:
     - apiGroups:
       - apiextensions.k8s.io
       resources:
       - customresourcedefinitions
       verbs:
       - create
       - get
       - patch
       - delete
       - update
     EOF
    
     $ kubectl patch ClusterRole rancher-monitoring-crd-manager --patch-file ./patchrules.yaml --type merge
    
     $ rm ./patchrules.yaml
  2. `missing`としてマークされたオブジェクトに必要なアノテーションとラベルを追加するためにパッチを適用します。

     $ cat > patchhash.yaml << EOF
     metadata:
       annotations:
         objectset.rio.cattle.io/id: default-mcc-rancher-monitoring-crd-cattle-fleet-local-system
       labels:
         objectset.rio.cattle.io/hash: 2da503261617e9ea2da822d2da7cdcfccad847a9
     EOF
    
     $ kubectl patch ClusterRole rancher-monitoring-crd-manager --patch-file ./patchhash.yaml --type merge
    
     $ kubectl patch ClusterRoleBinding rancher-monitoring-crd-manager --patch-file ./patchhash.yaml --type merge
    
     $ kubectl patch ServiceAccount rancher-monitoring-crd-manager -n cattle-monitoring-system --patch-file ./patchhash.yaml --type merge
    
     $ kubectl patch ConfigMap rancher-monitoring-crd-manifest -n cattle-monitoring-system --patch-file ./patchhash.yaml --type merge
    
     $ rm ./patchhash.yaml
  3. rancher-monitoring-crd ManagedChartオブジェクトを確認してください。

    数秒後、rancher-monitoring-crd ManagedChartオブジェクトのステータスが`Ready`に変わります。

     $ kubectl get managedchart -n fleet-local rancher-monitoring-crd -oyaml
     apiVersion: management.cattle.io/v3
     kind: ManagedChart
     metadata:
     ...
       name: rancher-monitoring-crd
       namespace: fleet-local
     ...
     status:
       conditions:
       - lastUpdateTime: "2024-04-22T21:41:44Z"
         status: "True"
         type: Ready
     ...

    また、ダウンストリームのオブジェクトに対するエラーインジケーターは表示されなくなります。

     $ kubectl bundle -A
     NAMESPACE     NAME                                          BUNDLEDEPLOYMENTS-READY   STATUS
     fleet-local   fleet-agent-local                             1/1
     fleet-local   local-managed-system-agent                    1/1
     fleet-local   mcc-harvester                                 1/1
     fleet-local   mcc-harvester-crd                             1/1
     fleet-local   mcc-local-managed-system-upgrade-controller   1/1
     fleet-local   mcc-rancher-logging-crd                       1/1
     fleet-local   mcc-rancher-monitoring-crd                    1/1
  4. (オプション)アップグレードを再試行します(以前にこの問題で失敗した場合)。

関連する問題

一部の`rancher-monitoring`アドオンポッドが突然終了します。

問題の説明

`rancher-monitoring`アドオンが有効になっていると、Prometheus、Alertmanager、およびGrafanaに関連するポッドは作成されてからすぐに終了します。

例:

$ kubectl -n cattle-monitoring-system get pods,svc,ep,deploy,pvc,sts,prometheus,alertmanager | grep -E 'stateful|deploy'

deployment.apps/rancher-monitoring-grafana              0/0     0            0           7h52m
deployment.apps/rancher-monitoring-kube-state-metrics   1/1     1            1           7h52m
deployment.apps/rancher-monitoring-operator             1/1     1            1           7h52m
deployment.apps/rancher-monitoring-prometheus-adapter   1/1     1            1           7h52m
statefulset.apps/alertmanager-rancher-monitoring-alertmanager   0/0     7h52m
statefulset.apps/prometheus-rancher-monitoring-prometheus       0/0     7h52m

`prometheus`ポッドのログにはメッセージ`level=warn msg="Received SIGTERM, exiting gracefully…​"`が含まれています。

...
ts=2025-05-20T05:41:02.847Z caller=kubernetes.go:327 level=info component="discovery manager notify" discovery=kubernetes config=config-0 msg="Using pod service account via in-cluster config"
ts=2025-05-20T05:41:02.880Z caller=main.go:1261 level=info msg="Completed loading of configuration file" filename=/etc/prometheus/config_out/prometheus.env.yaml totalDuration=35.457401ms db_storage=998ns remote_storage=1.45µs web_handler=392ns query_engine=1.095µs scrape=34.384µs scrape_sd=515.81µs notify=10.226µs notify_sd=82.314µs rules=32.514863ms tracing=2.344µs
ts=2025-05-20T05:41:50.044Z caller=main.go:854 level=warn msg="Received SIGTERM, exiting gracefully..."
ts=2025-05-20T05:41:50.044Z caller=main.go:878 level=info msg="Stopping scrape discovery manager..."
ts=2025-05-20T05:41:50.044Z caller=main.go:892 level=info msg="Stopping notify discovery manager..."
...

prometheus CRDオブジェクトには`storage-network.settings.harvesterhci.io/replica:が含まれています。"1" `アノテーション。

- apiVersion: monitoring.coreos.com/v1
  kind: Prometheus
  metadata:
    annotations:
      meta.helm.sh/release-name: rancher-monitoring
      meta.helm.sh/release-namespace: cattle-monitoring-system
      storage-network.settings.harvesterhci.io/replica: "1"
    creationTimestamp: "2025-05-20T06:40:25Z"

Harvesterポッドのログ('harvester-system/harvester’デプロイメント)には、`storage-network`設定の変更を試みたがブロックされたことが示されています。

...
2025-05-20T08:13:49.842448311Z time="2025-05-20T08:13:49Z" level=info msg="storage network change: {\"vlan\":955,\"clusterNetwork\":\"k8s-storage\",\"range\":\"198.18.2.0/24\"}"
2025-05-20T08:13:49.842476305Z time="2025-05-20T08:13:49Z" level=info msg="rancher monitoring not found. skip"
2025-05-20T08:13:49.842479072Z time="2025-05-20T08:13:49Z" level=info msg="current Grafana replicas: 0"
2025-05-20T08:13:49.842480501Z time="2025-05-20T08:13:49Z" level=info msg="VM import controller no found. skip"
2025-05-20T08:13:49.851381877Z time="2025-05-20T08:13:49Z" level=error msg="error syncing 'storage-network': handler harvester-storage-network-controller: Waiting for all volumes detached: pvc-6f66d234-f9c2-453e-8c17-383d9b489956,pvc-07c626f5-5135-4783-952d-cc20b1607cb5,pvc-1cfd6efe-c928-42e5-a834-8c27ed0e4897,pvc-5ce98d0a-5da1-4f30-af14-a8de29233380,pvc-1c9b7c9a-4943-4462-9082-217f9988cfc5,pvc-e9d92bfd-63c7-4ae3-ba00-1ce209f12caa,pvc-205ba31d-35fb-44f6-a3c4-c53001ec0dd6,pvc-6b5a7d11-7578-4397-9e13-ab475fe91463,pvc-669c69dd-93ad-4304-a340-484f7108362b,pvc-7668c486-b688-4524-b359-0cf9ec21cbc0,pvc-7d294996-821f-4434-ae4f-55a6de67f28c,pvc-216333c6-73f9-4e68-ac8b-53ab95a1f138,pvc-f72ca889-70c9-4dd9-bcec-a17ab65a1df4,pvc-01895fab-12f8-452a-9161-7d3c01e22726,pvc-330caa2d-5fdc-42f2-8c53-c5f80044760f,pvc-9506b7d0-c2d5-41f2-a08b-d7bc22dddb88,pvc-3e2b46d4-c471-44a9-9765-64babdb6ceed,pvc-25fe3372-1802-46d5-abf1-039099c567e2,pvc-b16fb262-cb38-4438-b074-84c7ad080a15,pvc-757c0f22-4ed6-4669-844d-cd7a87ceb26e,pvc-e0d99d8f-581f-4be6-baa3-d345308c9330,pvc-f5e1e19d-3dfb-4be1-9354-c092d7f03009,pvc-383ec26a-51f6-4f9d-8d8a-179651846d92,pvc-0d8f5737-c6e4-4f55-8d19-cf7a785552fc,pvc-5091892e-faf2-47b1-b987-bbde1ab2c13a,pvc-6f0c97ae-dfda-4799-bf26-e85feace5414,pvc-b0f717af-8a79-4c4e-b82e-90dedeae7697,pvc-ffe982d5-5ff1-40aa-a0db-cc10360d2d89,pvc-370757e2-4bce-41e7-b6f7-95aa8a5e8cf1,pvc-5a77d3e3-d555-476c-840f-7b9dadeb7478,pvc-43987c88-99b1-4889-9a47-5261717fe265,pvc-9f675704-9c52-46c2-96bf-2ff83d805383,pvc-d0b4e1d0-9bcd-4a8a-b52c-e1d8062a8099,pvc-a29be31f-531f-409a-bf5a-d267a54e2edb, requeuing"
...

根本原因

storage-network設定を変更すると、SUSE Virtualizationコントローラーは変更を適用する前に接続されたボリュームが切り離されるのを待ちます。さらに、コントローラーはPrometheus、Alertmanager、およびGrafanaに関連するポッドを自動的に終了します。これらのポッドはデータを保存するためにボリュームを使用するためです。

このプロセスは通常短時間で完了しますが、次のことが発生すると中断される可能性があります。

  • アタッチされたボリュームは、Harvesterコントローラーが設定への変更を適用するのを妨げます。

  • ユーザーまたは`monitoring-operator`が`rancher-monitoring`アドオンを有効にしようとしています。

  • Harvesterコントローラーはポッドを終了します。

解決策

  1. `rancher-monitoring`アドオンを無効にしてください。

  2. storage-network設定が有効か無効かを確認してください。

  3. Harvesterポッドのログにエラーインジケーターがあるか確認してください。ボリュームがまだアタッチされている場合は、`storage network change`メッセージの後にエラーが表示されなくなるまで関連する仮想マシンを停止してください。

  4. `rancher-monitoring`アドオンを有効にしてください。

関連する問題

SUSE Virtualization UIはアップグレード後に仮想マシンのメトリクスを報告しなくなります。

問題の説明

アップグレード後、SUSE Virtualization UIは仮想マシンのメトリクスを報告しなくなりますが、クラスターのメトリクスは利用可能なままです。`rancher-monitoring`アドオンを無効にして再度有効にしても問題は解決しません。

prometheus-kubevirt-rules ServiceMonitorオブジェクトが`cattle-monitoring-system`ネームスペースに存在しません。KubeVirtオペレーターが自動的に削除するため、このオブジェクトを手動で追加することはできません。

$ kubectl get servicemonitor -A
NAMESPACE                  NAME                                 AGE
...
cattle-monitoring-system   prometheus-kubevirt-rules            24s  // is missing
...

根本原因

KubeVirtが新たにインストールまたはアップグレードされると、設定を保存するための新しいConfigMapオブジェクトが生成されます。このプロセス中に`rancher-monitoring-operator` ServiceAccountオブジェクトが`cattle-monitoring-system`ネームスペースから欠落またはsyncされていない場合、KubeVirtオペレーター内でレースコンディションが発生します。その結果、ServiceMonitorの設定が生成されたConfigMapオブジェクトから除外される可能性があります。

アップグレードプロセス中に、KubeVirtが監視状態を誤って判断することがあります。ConfigMapオブジェクトが生成されると、手動トリガーが実行されない限り、次のアップグレードまでそのオブジェクトを再同期または再生成しません。

回避策

回避策は、rancher-monitoring-operator ServiceAccountオブジェクトが存在することを確認し、孤立したConfigMapオブジェクトを削除し、KubeVirtオペレーターを再起動することです。

  1. ConfigMapオブジェクトのリストを取得します。

    $ kubectl get configmap -n harvester-system  -l kubevirt.io/install-strategy
    NAME                              DATA   AGE
    kubevirt-install-strategy-zq86d   1      10m

リストには、最新バージョンのConfigMapと、残存するレガシーオブジェクトが含まれています。

  1. 最新のConfigMapオブジェクトにServiceMonitorの設定が含まれているか確認します。

    $ kubectl get configmap -n harvester-system  kubevirt-install-strategy-zq86d -ojsonpath="{.data.manifests}" | base64 -d | gunzip  | grep ServiceMoni -i

    出力が空の場合、お使いの環境に問題が存在します。

  2. `monitorAccount`および`monitorNamespace`フィールドが存在することを確認してください。

    $ kubectl get kubevirt kubevirt -n harvester-system -oyaml | grep monitoring
    monitorAccount: rancher-monitoring-operator
    monitorNamespace: cattle-monitoring-system
  3. ServiceAccountオブジェクトが存在することを確認してください。

    このオブジェクトはインストール中に作成され、削除してはいけません。

    $ kubectl get serviceaccount -n cattle-monitoring-system rancher-monitoring-operator
    Error from server (NotFound): serviceaccounts "rancher-monitoring-operator" not found
  4. ServiceAccountオブジェクトが存在しない場合は、手動で作成してください。そうでない場合は、次の手順に進んでください。

    $ cat > rmo.yaml << 'EOF'
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      annotations:
        meta.helm.sh/release-name: rancher-monitoring
        meta.helm.sh/release-namespace: cattle-monitoring-system
      labels:
        app: rancher-monitoring-operator
        app.kubernetes.io/component: prometheus-operator
        app.kubernetes.io/instance: rancher-monitoring
        app.kubernetes.io/managed-by: Helm
        app.kubernetes.io/name: rancher-monitoring-prometheus-operator
        heritage: Helm
        release: rancher-monitoring
      name: rancher-monitoring-operator
      namespace: cattle-monitoring-system
    EOF
    
    $ kubectl create -f rmo.yaml
    
    $ kubectl get serviceaccount -n cattle-monitoring-system rancher-monitoring-operator
    NAME                          SECRETS   AGE
    rancher-monitoring-operator   0         35s
  5. すべてのConfigMapオブジェクトを削除します(kubevirt-install-strategy-*)。

  6. `virt-operator`デプロイメントをロールアウトします。

    KubevirtはConfigMapを再作成します。

    $ kubectl rollout restart deployment -n harvester-system virt-operator
    deployment.apps/virt-operator restarted
    
    $ kubectl get pods -n harvester-system
    NAME                                                              READY   STATUS      RESTARTS   AGE
    ...
    kubevirt-c2053a4889fe65e8d368b5c232901c84fda8debe-jobgddh65r7ws   0/1     Completed   0          6s  // the pod exists for a short time
    ...
    virt-operator-796bf5fd9b-h56z9                                    1/1     Running     0          33s
    
    $ kubectl get servicemonitor -A
    NAMESPACE                  NAME                                 AGE
    cattle-monitoring-system   prometheus-kubevirt-rules            24s  // newly created
    ...

関連する問題