Page tree

如需转载请标注内容地址为: https://wiki.shileizcc.com/confluence/display/CEPH/Ceph+Rook+Install

Skip to end of metadata
Go to start of metadata

请在使用站内资源的同时不要恶意进行爬取或倒链等行为,感谢支持!

Ceph Rook Install

Rook 的安装比较简单,但需要根据自身业务逻辑进行配置。

$ git clone --depth 1 -b v1.5.11 https://github.com/rook/rook

当前 rook 最新稳定版本,使用 k8s 1.18.6 版本作为支持。ceph 为 15.2.11 版本

首先部署 crd 资源:

$ cd rook/cluster/examples/kubernetes/ceph
$ kubectl apply -f crds.yaml -f common.yaml

部署 operator:

$ kubectl apply -f operator.yaml

修改集群配置项:

cluster.yaml
#################################################################################################################
# Define the settings for the rook-ceph cluster with common settings for a production cluster.
# All nodes with available raw devices will be used for the Ceph cluster. At least three nodes are required
# in this example. See the documentation for more details on storage settings available.

# For example, to create the cluster:
#   kubectl create -f crds.yaml -f common.yaml -f operator.yaml
#   kubectl create -f cluster.yaml
#################################################################################################################

apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
  name: rook-ceph
  namespace: rook-ceph # namespace:cluster
spec:
  cephVersion:
    # The container image used to launch the Ceph daemon pods (mon, mgr, osd, mds, rgw).
    # v13 is mimic, v14 is nautilus, and v15 is octopus.
    # RECOMMENDATION: In production, use a specific version tag instead of the general v14 flag, which pulls the latest release and could result in different
    # versions running within the cluster. See tags available at https://hub.docker.com/r/ceph/ceph/tags/.
    # If you want to be more precise, you can always use a timestamp tag such ceph/ceph:v15.2.11-20200419
    # This tag might not contain a new Ceph version, just security fixes from the underlying operating system, which will reduce vulnerabilities
    image: ceph/ceph:v15.2.11
    # Whether to allow unsupported versions of Ceph. Currently `nautilus` and `octopus` are supported.
    # Future versions such as `pacific` would require this to be set to `true`.
    # Do not set to true in production.
    allowUnsupported: false
  # The path on the host where configuration files will be persisted. Must be specified.
  # Important: if you reinstall the cluster, make sure you delete this directory from each host or else the mons will fail to start on the new cluster.
  # In Minikube, the '/data' directory is configured to persist across reboots. Use "/data/rook" in Minikube environment.
  dataDirHostPath: /var/lib/rook
  # Whether or not upgrade should continue even if a check fails
  # This means Ceph's status could be degraded and we don't recommend upgrading but you might decide otherwise
  # Use at your OWN risk
  # To understand Rook's upgrade process of Ceph, read https://rook.io/docs/rook/master/ceph-upgrade.html#ceph-version-upgrades
  skipUpgradeChecks: false
  # Whether or not continue if PGs are not clean during an upgrade
  continueUpgradeAfterChecksEvenIfNotHealthy: false
  # WaitTimeoutForHealthyOSDInMinutes defines the time (in minutes) the operator would wait before an OSD can be stopped for upgrade or restart.
  # If the timeout exceeds and OSD is not ok to stop, then the operator would skip upgrade for the current OSD and proceed with the next one
  # if `continueUpgradeAfterChecksEvenIfNotHealthy` is `false`. If `continueUpgradeAfterChecksEvenIfNotHealthy` is `true`, then opertor would
  # continue with the upgrade of an OSD even if its not ok to stop after the timeout. This timeout won't be applied if `skipUpgradeChecks` is `true`.
  # The default wait timeout is 10 minutes.
  waitTimeoutForHealthyOSDInMinutes: 10
  mon:
    # Set the number of mons to be started. Must be an odd number, and is generally recommended to be 3.
    count: 3
    # The mons should be on unique nodes. For production, at least 3 nodes are recommended for this reason.
    # Mons should only be allowed on the same node for test environments where data loss is acceptable.
    allowMultiplePerNode: false
  mgr:
    modules:
    # Several modules should not need to be included in this list. The "dashboard" and "monitoring" modules
    # are already enabled by other settings in the cluster CR.
    - name: pg_autoscaler
      enabled: true
  # enable the ceph dashboard for viewing cluster status
  dashboard:
    enabled: true
    # serve the dashboard under a subpath (useful when you are accessing the dashboard via a reverse proxy)
    # urlPrefix: /ceph-dashboard
    # serve the dashboard at the given port.
    # port: 8443
    # serve the dashboard using SSL
    ssl: false
  # enable prometheus alerting for cluster
  monitoring:
    # requires Prometheus to be pre-installed
    enabled: false
    # namespace to deploy prometheusRule in. If empty, namespace of the cluster will be used.
    # Recommended:
    # If you have a single rook-ceph cluster, set the rulesNamespace to the same namespace as the cluster or keep it empty.
    # If you have multiple rook-ceph clusters in the same k8s cluster, choose the same namespace (ideally, namespace with prometheus
    # deployed) to set rulesNamespace for all the clusters. Otherwise, you will get duplicate alerts with multiple alert definitions.
    rulesNamespace: rook-ceph
  network:
    # enable host networking
    provider: host
    # EXPERIMENTAL: enable the Multus network provider
    #provider: multus
    #selectors:
      # The selector keys are required to be `public` and `cluster`.
      # Based on the configuration, the operator will do the following:
      #   1. if only the `public` selector key is specified both public_network and cluster_network Ceph settings will listen on that interface
      #   2. if both `public` and `cluster` selector keys are specified the first one will point to 'public_network' flag and the second one to 'cluster_network'
      #
      # In order to work, each selector value must match a NetworkAttachmentDefinition object in Multus
      #
      #public: public-conf --> NetworkAttachmentDefinition object name in Multus
      #cluster: cluster-conf --> NetworkAttachmentDefinition object name in Multus
    # Provide internet protocol version. IPv6, IPv4 or empty string are valid options. Empty string would mean IPv4
    #ipFamily: "IPv6"
  # enable the crash collector for ceph daemon crash collection
  crashCollector:
    disable: false
  # enable log collector, daemons will log on files and rotate
  # logCollector:
  #   enabled: true
  #   periodicity: 24h # SUFFIX may be 'h' for hours or 'd' for days.
  # automate [data cleanup process](https://github.com/rook/rook/blob/master/Documentation/ceph-teardown.md#delete-the-data-on-hosts) in cluster destruction.
  cleanupPolicy:
    # Since cluster cleanup is destructive to data, confirmation is required.
    # To destroy all Rook data on hosts during uninstall, confirmation must be set to "yes-really-destroy-data".
    # This value should only be set when the cluster is about to be deleted. After the confirmation is set,
    # Rook will immediately stop configuring the cluster and only wait for the delete command.
    # If the empty string is set, Rook will not destroy any data on hosts during uninstall.
    confirmation: ""
    # sanitizeDisks represents settings for sanitizing OSD disks on cluster deletion
    sanitizeDisks:
      # method indicates if the entire disk should be sanitized or simply ceph's metadata
      # in both case, re-install is possible
      # possible choices are 'complete' or 'quick' (default)
      method: quick
      # dataSource indicate where to get random bytes from to write on the disk
      # possible choices are 'zero' (default) or 'random'
      # using random sources will consume entropy from the system and will take much more time then the zero source
      dataSource: zero
      # iteration overwrite N times instead of the default (1)
      # takes an integer value
      iteration: 1
    # allowUninstallWithVolumes defines how the uninstall should be performed
    # If set to true, cephCluster deletion does not wait for the PVs to be deleted.
    allowUninstallWithVolumes: false
  # To control where various services will be scheduled by kubernetes, use the placement configuration sections below.
  # The example under 'all' would have all services scheduled on kubernetes nodes labeled with 'role=storage-node' and
  # tolerate taints with a key of 'storage-node'.
#  placement:
#    all:
#      nodeAffinity:
#        requiredDuringSchedulingIgnoredDuringExecution:
#          nodeSelectorTerms:
#          - matchExpressions:
#            - key: role
#              operator: In
#              values:
#              - storage-node
#      podAffinity:
#      podAntiAffinity:
#      topologySpreadConstraints:
#      tolerations:
#      - key: storage-node
#        operator: Exists
  placement:
    mon:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: ceph-mon
              operator: In
              values:
              - enabled
    osd:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: ceph-osd
              operator: In
              values:
              - enabled
    mgr:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: ceph-mgr
              operator: In
              values:
              - enabled

# The above placement information can also be specified for mon, osd, and mgr components
#    mon:
# Monitor deployments may contain an anti-affinity rule for avoiding monitor
# collocation on the same node. This is a required rule when host network is used
# or when AllowMultiplePerNode is false. Otherwise this anti-affinity rule is a
# preferred rule with weight: 50.
#    osd:
#    mgr:
#    cleanup:
  annotations:
#    all:
#    mon:
#    osd:
#    cleanup:
#    prepareosd:
# If no mgr annotations are set, prometheus scrape annotations will be set by default.
#    mgr:
  labels:
#    all:
#    mon:
#    osd:
#    cleanup:
#    mgr:
#    prepareosd:
  resources:
# The requests and limits set here, allow the mgr pod to use half of one CPU core and 1 gigabyte of memory
#    mgr:
#      limits:
#        cpu: "500m"
#        memory: "1024Mi"
#      requests:
#        cpu: "500m"
#        memory: "1024Mi"
# The above example requests/limits can also be added to the mon and osd components
#    mon:
#    osd:
#    prepareosd:
#    crashcollector:
#    logcollector:
#    cleanup:
  # The option to automatically remove OSDs that are out and are safe to destroy.
  removeOSDsIfOutAndSafeToRemove: false
#  priorityClassNames:
#    all: rook-ceph-default-priority-class
#    mon: rook-ceph-mon-priority-class
#    osd: rook-ceph-osd-priority-class
#    mgr: rook-ceph-mgr-priority-class
  storage: # cluster level storage configuration and selection
    useAllNodes: false
    useAllDevices: false
    #deviceFilter:
    config:
      # crushRoot: "custom-root" # specify a non-default root label for the CRUSH map
      # metadataDevice: "md0" # specify a non-rotational storage so ceph-volume will use it as block db device of bluestore.
      # databaseSizeMB: "1024" # uncomment if the disks are smaller than 100 GB
      # journalSizeMB: "1024"  # uncomment if the disks are 20 GB or smaller
      # osdsPerDevice: "1" # this value can be overridden at the node or device level
      # encryptedDevice: "true" # the default value for this option is "false"
# Individual nodes and their config can be specified as well, but 'useAllNodes' above must be set to false. Then, only the named
# nodes below will be used as storage resources.  Each node's 'name' field should match their 'kubernetes.io/hostname' label.
#    nodes:
#    - name: "172.17.4.201"
#      devices: # specific devices to use for storage can be specified for each node
#      - name: "sdb"
#      - name: "nvme01" # multiple osds can be created on high performance devices
#        config:
#          osdsPerDevice: "5"
#      - name: "/dev/disk/by-id/ata-ST4000DM004-XXXX" # devices can be specified using full udev paths
#      config: # configuration can be specified at the node level which overrides the cluster level config
#        storeType: filestore
#    - name: "172.17.4.301"
#      deviceFilter: "^sd."
    nodes:
    - name: "ip-10-200-1-111.ap-southeast-1.compute.internal"
      devices:
      - name: "nvme2n1"
    - name: "ip-10-200-1-125.ap-southeast-1.compute.internal"
      devices:
      - name: "nvme2n1"
    - name: "ip-10-200-1-169.ap-southeast-1.compute.internal"
      devices:
      - name: "nvme2n1"
    
  # The section for configuring management of daemon disruptions during upgrade or fencing.
  disruptionManagement:
    # If true, the operator will create and manage PodDisruptionBudgets for OSD, Mon, RGW, and MDS daemons. OSD PDBs are managed dynamically
    # via the strategy outlined in the [design](https://github.com/rook/rook/blob/master/design/ceph/ceph-managed-disruptionbudgets.md). The operator will
    # block eviction of OSDs by default and unblock them safely when drains are detected.
    managePodBudgets: false
    # A duration in minutes that determines how long an entire failureDomain like `region/zone/host` will be held in `noout` (in addition to the
    # default DOWN/OUT interval) when it is draining. This is only relevant when  `managePodBudgets` is `true`. The default value is `30` minutes.
    osdMaintenanceTimeout: 30
    # A duration in minutes that the operator will wait for the placement groups to become healthy (active+clean) after a drain was completed and OSDs came back up.
    # Operator will continue with the next drain if the timeout exceeds. It only works if `managePodBudgets` is `true`.
    # No values or 0 means that the operator will wait until the placement groups are healthy before unblocking the next drain.
    pgHealthCheckTimeout: 0
    # If true, the operator will create and manage MachineDisruptionBudgets to ensure OSDs are only fenced when the cluster is healthy.
    # Only available on OpenShift.
    manageMachineDisruptionBudgets: false
    # Namespace in which to watch for the MachineDisruptionBudgets.
    machineDisruptionBudgetNamespace: openshift-machine-api

  # healthChecks
  # Valid values for daemons are 'mon', 'osd', 'status'
  healthCheck:
    daemonHealth:
      mon:
        disabled: false
        interval: 45s
      osd:
        disabled: false
        interval: 60s
      status:
        disabled: false
        interval: 60s
    # Change pod liveness probe, it works for all mon,mgr,osd daemons
    livenessProbe:
      mon:
        disabled: false
      mgr:
        disabled: false
      osd:
        disabled: false

集群配置项主要修改了:

...
  # dashboard 不使用 ssl
  dashboard:
    enabled: true
    # serve the dashboard under a subpath (useful when you are accessing the dashboard via a reverse proxy)
    # urlPrefix: /ceph-dashboard
    # serve the dashboard at the given port.
    # port: 8443
    # serve the dashboard using SSL
    ssl: false
...
  # 通过 host 网络模式暴露服务
  network:
    # enable host networking
    provider: host
...
  # 和亲调度配置
  placement:
    mon:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: ceph-mon
              operator: In
              values:
              - enabled
    osd:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: ceph-osd
              operator: In
              values:
              - enabled
    mgr:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: ceph-mgr
              operator: In
              values:
              - enabled
...
  # 自定义 osd 配置文件项
  storage: # cluster level storage configuration and selection
    useAllNodes: false    # 如果指定 osd 则配置一定要改为 false,否则它会检测一切可用的设备
    useAllDevices: false  # 如果指定 osd 则配置一定要改为 false,否则它会检测一切可用的设备
    #deviceFilter:
    config:
      # crushRoot: "custom-root" # specify a non-default root label for the CRUSH map
      # metadataDevice: "md0" # specify a non-rotational storage so ceph-volume will use it as block db device of bluestore.
      # databaseSizeMB: "1024" # uncomment if the disks are smaller than 100 GB
      # journalSizeMB: "1024"  # uncomment if the disks are 20 GB or smaller
      # osdsPerDevice: "1" # this value can be overridden at the node or device level
      # encryptedDevice: "true" # the default value for this option is "false"
    # 设备的 node 名称对应的设备名称,此环境部署在 aws ssd 中。
    nodes:
    - name: "ip-10-200-1-111.ap-southeast-1.compute.internal"
      devices:
      - name: "nvme2n1"
    - name: "ip-10-200-1-125.ap-southeast-1.compute.internal"
      devices:
      - name: "nvme2n1"
    - name: "ip-10-200-1-169.ap-southeast-1.compute.internal"
      devices:
      - name: "nvme2n1"
...

首先设置标签:

# mon 标签
$ kubectl label nodes {ip-10-200-1-111.ap-southeast-1.compute.internal,ip-10-200-1-125.ap-southeast-1.compute.internal,ip-10-200-1-169.ap-southeast-1.compute.internal} ceph-mon=enabled
# osd 标签
$ kubectl label nodes {ip-10-200-1-111.ap-southeast-1.compute.internal,ip-10-200-1-125.ap-southeast-1.compute.internal,ip-10-200-1-169.ap-southeast-1.compute.internal} ceph-osd=enabled
# mgr 标签
$ kubectl label nodes ip-10-200-1-111.ap-southeast-1.compute.internal ceph-mgr=enabled

标签的含义是指定 rook 在那些 node 中部署对应的服务。

部署 cluster:

$ kubectl apply -f cluster.yaml

部署 tools:

$ kubectl apply -f toolbox.yaml

tools 主要用于可以执行 ceph 命令行的工具。

部署 dashboard:

$ kubectl apply -f dashboard-external-http.yaml

dashboard 的密码可以通过如下方式获取:

$ kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo

使用 cephfs

如果需要使用 cephfs 则需要部署 filesystem:

$ kubectl apply -f filesystem.yaml

删除 rook

删除 rook 执行如下步骤:

$ kubectl delete -f crds.yaml -f common.yaml
$ kubectl delete -f operator.yaml
$ kubectl delete -f cluster.yaml
$ kubectl delete -f toolbox.yaml
$ kubectl delete -f dashboard-external-https.yaml
$ for i in $(kubectl get node|awk '{print $1}'); do kubectl label nodes $i ceph-mon- ; done
$ for i in $(kubectl get node|awk '{print $1}'); do kubectl label nodes $i ceph-osd- ; done
$ for i in $(kubectl get node|awk '{print $1}'); do kubectl label nodes $i ceph-mgr- ; done

问题总汇

相关问题解决方案。

OSD 初始化

osd 添加时如果 osd 初始化容器提示如下 log,则表明需要手动初始化磁盘设备:

2021-05-06 06:15:40.661913 D | cephosd: &{Name:nvme0n1p1 Parent:nvme0n1 HasChildren:false DevLinks:/dev/disk/by-uuid/8c1540fa-e2b4-407d-bcd1-59848a73e463 /dev/disk/by-path/pci-0000:00:04.0-nvme-1-part1 /dev/disk/by-ebs-volumeid/vol-0c8cc319d4648eb4d-p1 /dev/disk/by-id/nvme-nvme.1d0f-766f6c3063386363333139643436343865623464-416d617a6f6e20456c617374696320426c6f636b2053746f7265-00000001-part1 /dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_vol0c8cc319d4648eb4d-part1 Size:53686025728 UUID: Serial:Amazon Elastic Block Store_vol0c8cc319d4648eb4d Type:part Rotational:false Readonly:false Partitions:[] Filesystem:xfs Vendor: Model:Amazon Elastic Block Store WWN:nvme.1d0f-766f6c3063386363333139643436343865623464-416d617a6f6e20456c617374696320426c6f636b2053746f7265-00000001 WWNVendorExtension: Empty:false CephVolumeData: RealPath:/dev/nvme0n1p1 KernelName:nvme0n1p1 Encrypted:false}
2021-05-06 06:15:40.661935 D | cephosd: &{Name:nvme1n1 Parent: HasChildren:false DevLinks:/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_vol0d61b51eb5f62f6df /dev/disk/by-path/pci-0000:00:1f.0-nvme-1 /dev/disk/by-ebs-volumeid/vol-0d61b51eb5f62f6df /dev/disk/by-id/nvme-nvme.1d0f-766f6c3064363162353165623566363266366466-416d617a6f6e20456c617374696320426c6f636b2053746f7265-00000001 /dev/disk/by-uuid/fcb8dc60-ac05-4230-a0b7-ae839b499555 Size:214748364800 UUID:0fcc3869-b534-444c-ba52-d255c3da041b Serial:Amazon Elastic Block Store_vol0d61b51eb5f62f6df Type:disk Rotational:false Readonly:false Partitions:[] Filesystem:ext4 Vendor: Model:Amazon Elastic Block Store WWN:nvme.1d0f-766f6c3064363162353165623566363266366466-416d617a6f6e20456c617374696320426c6f636b2053746f7265-00000001 WWNVendorExtension: Empty:false CephVolumeData: RealPath:/dev/nvme1n1 KernelName:nvme1n1 Encrypted:false}
2021-05-06 06:15:40.661952 D | cephosd: &{Name:nvme2n1 Parent: HasChildren:false DevLinks:/dev/disk/by-ebs-volumeid/vol-03745fb74671495da /dev/disk/by-path/pci-0000:00:1e.0-nvme-1 /dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_vol03745fb74671495da /dev/disk/by-id/nvme-nvme.1d0f-766f6c3033373435666237343637313439356461-416d617a6f6e20456c617374696320426c6f636b2053746f7265-00000001 Size:1074815565824 UUID:2bbfdfd9-fc51-4327-b91b-3f6d3656c57e Serial:Amazon Elastic Block Store_vol03745fb74671495da Type:disk Rotational:false Readonly:false Partitions:[] Filesystem: Vendor: Model:Amazon Elastic Block Store WWN:nvme.1d0f-766f6c3033373435666237343637313439356461-416d617a6f6e20456c617374696320426c6f636b2053746f7265-00000001 WWNVendorExtension: Empty:false CephVolumeData: RealPath:/dev/nvme2n1 KernelName:nvme2n1 Encrypted:false}
2021-05-06 06:15:40.661963 I | cephosd: skipping device "nvme0n1p1" because it contains a filesystem "xfs"
2021-05-06 06:15:40.661969 I | cephosd: skipping device "nvme1n1" because it contains a filesystem "ext4"
2021-05-06 06:15:40.661975 D | exec: Running command: lsblk /dev/nvme2n1 --bytes --nodeps --pairs --paths --output SIZE,ROTA,RO,TYPE,PKNAME,NAME,KNAME
2021-05-06 06:15:40.663566 D | exec: Running command: ceph-volume inventory --format json /dev/nvme2n1
2021-05-06 06:15:41.248150 I | cephosd: skipping device "nvme2n1": ["Has BlueStore device label"].
2021-05-06 06:15:41.248249 I | cephosd: configuring osd devices: {"Entries":{}}
2021-05-06 06:15:41.248259 I | cephosd: no new devices to configure. returning devices already configured with ceph-volume.
2021-05-06 06:15:41.248396 D | exec: Running command: stdbuf -oL ceph-volume --log-path /tmp/ceph-log lvm list  --format json
2021-05-06 06:15:41.555152 D | cephosd: {}
2021-05-06 06:15:41.555183 I | cephosd: 0 ceph-volume lvm osd devices configured on this node
2021-05-06 06:15:41.555191 W | cephosd: skipping OSD configuration as no devices matched the storage settings for this node "ip-10-200-1-111.ap-southeast-1.compute.internal"
2021-05-06 06:15:41.555212 I | op-k8sutil: format and nodeName longer than 63 chars, nodeName ip-10-200-1-111.ap-southeast-1.compute.internal will be 9ecc18a5536c50fc84120a0fa51b18d1

执行:

$ sgdisk --zap-all /dev/nvme2n1

无法正常部署服务

如果部署 cluster 时存在如下问题:

$ kubectl get pod -n rook-ceph
...
rook-ceph-crashcollector-9ecc18a5536c50fc84120a0fa51b18d1-tdr6h   0/1     Init:0/2   0          4m47s   10.200.1.111      ip-10-200-1-111.ap-southeast-1.compute.internal   <none>           <none>
  
$ kubectl describe pod -n rook-ceph rook-ceph-crashcollector-9ecc18a5536c50fc84120a0fa51b18d1-tdr6h
  Warning  FailedMount  62s (x10 over 5m12s)  kubelet, ip-10-200-1-111.ap-southeast-1.compute.internal  MountVolume.SetUp failed for volume "rook-ceph-crash-collector-keyring" : secret "rook-ceph-crash-collector-keyring" not found

表示 ceph 的相关信息已经被更改需要重新删除历史记录然后重新部署,解决方案:

# 删除对应机器上的资源
$ ll /var/lib/rook/ /var/lib/kubelet/plugins/ /var/lib/kubelet/plugins_registry/
$ rm -rf /var/lib/rook/* /var/lib/kubelet/plugins/* /var/lib/kubelet/plugins_registry/*

如果没有自动解决请手动执行重启:

$ kubectl rollout restart deployment/rook-ceph-operator -n rook-ceph

文档创建于 最后一次更新于  , 文档当前的状态 正式版 , 当前编写页面的版本 V1.3.1 。

  • No labels