2019-03-13 23:15:14 -06:00
#################################################################################################################
# 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:
2020-11-12 15:19:01 -07:00
# kubectl create -f crds.yaml -f common.yaml -f operator.yaml
# kubectl create -f cluster.yaml
2019-03-13 23:15:14 -06:00
#################################################################################################################
2018-12-03 15:08:29 -07:00
apiVersion : ceph.rook.io/v1
2018-12-03 23:48:40 -07:00
kind : CephCluster
2017-02-23 14:41:24 -08:00
metadata :
2018-05-18 14:31:54 -07:00
name : rook-ceph
2020-12-09 13:21:15 -07:00
namespace : rook-ceph # namespace:cluster
2017-04-12 11:36:26 -07:00
spec :
2018-09-21 16:31:42 -06:00
cephVersion :
2018-10-12 12:30:12 -06:00
# The container image used to launch the Ceph daemon pods (mon, mgr, osd, mds, rgw).
2025-12-02 14:29:23 +05:30
# v19 is Squid, v20 is Tentacle
2025-12-01 13:43:20 +05:30
# RECOMMENDATION: In production, use a specific version tag instead of the general v20 flag, which pulls the latest release and could result in different
2018-10-12 12:30:12 -06:00
# versions running within the cluster. See tags available at https://hub.docker.com/r/ceph/ceph/tags/.
2025-12-01 13:43:20 +05:30
# If you want to be more precise, you can always use a timestamp tag such as quay.io/ceph/ceph:v20.2.0-20251104
2019-12-03 16:39:48 +01:00
# This tag might not contain a new Ceph version, just security fixes from the underlying operating system, which will reduce vulnerabilities
2025-07-28 12:03:52 -06:00
image : quay.io/ceph/ceph:v19.2.3
2025-12-02 14:29:23 +05:30
# Whether to allow unsupported versions of Ceph. Currently Squid and Tentacle are supported.
2025-12-01 13:43:20 +05:30
# Future versions such as Umbrella (v21) would require this to be set to `true`.
2018-09-21 16:31:42 -06:00
# Do not set to true in production.
allowUnsupported : false
2024-10-30 07:44:31 +00:00
# The path on the host where configuration files will be persisted. Must be specified. If there are multiple clusters, the directory must be unique for each cluster.
2017-10-31 11:48:33 -07:00
# 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.
2017-12-11 14:43:30 -08:00
# In Minikube, the '/data' directory is configured to persist across reboots. Use "/data/rook" in Minikube environment.
2017-10-31 11:48:33 -07:00
dataDirHostPath : /var/lib/rook
2019-09-18 11:14:30 +02:00
# 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
2021-09-22 12:39:16 -06:00
# To understand Rook's upgrade process of Ceph, read https://rook.io/docs/rook/latest/ceph-upgrade.html#ceph-version-upgrades
2019-09-18 11:14:30 +02:00
skipUpgradeChecks : false
2020-01-07 10:36:18 +01:00
# Whether or not continue if PGs are not clean during an upgrade
continueUpgradeAfterChecksEvenIfNotHealthy : false
2020-12-15 16:18:59 +05:30
# 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
2022-06-21 19:59:31 -04:00
# if `continueUpgradeAfterChecksEvenIfNotHealthy` is `false`. If `continueUpgradeAfterChecksEvenIfNotHealthy` is `true`, then operator would
2020-12-15 16:18:59 +05:30
# 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
2024-03-28 18:45:04 +08:00
# Whether or not requires PGs are clean before an OSD upgrade. If set to `true` OSD upgrade process won't start until PGs are healthy.
# This configuration will be ignored if `skipUpgradeChecks` is `true`.
# Default is false.
upgradeOSDRequiresHealthyPGs : false
2018-05-10 11:30:26 +02:00
mon :
2021-09-01 14:54:44 -06:00
# Set the number of mons to be started. Generally recommended to be 3.
# For highest availability, an odd number of mons should be specified.
2018-05-10 11:30:26 +02:00
count : 3
2020-10-09 14:56:46 -06:00
# 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.
2019-03-13 23:15:14 -06:00
allowMultiplePerNode : false
2020-04-27 11:04:18 -06:00
mgr :
2021-01-17 10:54:22 +08:00
# When higher availability of the mgr is needed, increase the count to 2.
# In that case, one mgr will be active and one in standby. When Ceph updates which
# mgr is active, Rook will update the mgr services to match the active mgr.
2022-02-25 11:13:02 -07:00
count : 2
allowMultiplePerNode : false
2020-04-27 11:04:18 -06:00
modules :
2024-01-18 12:12:21 -07:00
# List of modules to optionally enable or disable.
# Note the "dashboard" and "monitoring" modules are already configured by other settings in the cluster CR.
2024-02-13 12:31:33 +01:00
- name : rook
enabled : true
2018-06-07 15:08:58 -07:00
# enable the ceph dashboard for viewing cluster status
dashboard :
enabled : true
2018-07-20 00:12:58 +03:00
# serve the dashboard under a subpath (useful when you are accessing the dashboard via a reverse proxy)
# urlPrefix: /ceph-dashboard
2019-01-08 14:34:11 -08:00
# serve the dashboard at the given port.
# port: 8443
2019-01-08 16:29:57 -08:00
# serve the dashboard using SSL
2019-09-16 10:04:35 +02:00
ssl : true
2023-09-19 15:26:40 +02:00
# The url of the Prometheus instance
# prometheusEndpoint: <protocol>://<prometheus-host>:<port>
# Whether SSL should be verified if the Prometheus server is using https
# prometheusEndpointSSLVerify: false
2019-06-17 15:26:28 +05:30
# enable prometheus alerting for cluster
monitoring :
# requires Prometheus to be pre-installed
enabled : false
2023-05-04 16:36:00 -06:00
# Whether to disable the metrics reported by Ceph. If false, the prometheus mgr module and Ceph exporter are enabled.
# If true, the prometheus mgr module and Ceph exporter are both disabled. Default is false.
metricsDisabled : false
2024-09-16 14:51:49 +02:00
# Ceph exporter metrics config.
exporter :
# Specifies which performance counters are exported.
# Corresponds to --prio-limit Ceph exporter flag
# 0 - all counters are exported
perfCountersPrioLimit : 5
# Time to wait before sending requests again to exporter server (seconds)
# Corresponds to --stats-period Ceph exporter flag
statsPeriodSeconds : 5
2018-05-18 14:31:54 -07:00
network :
2021-11-05 16:39:35 -06:00
connections :
# Whether to encrypt the data in transit across the wire to prevent eavesdropping the data on the network.
# The default is false. When encryption is enabled, all communication between clients and Ceph daemons, or between Ceph daemons will be encrypted.
# When encryption is not enabled, clients still establish a strong initial authentication and data integrity is still validated with a crc check.
# IMPORTANT: Encryption requires the 5.11 kernel for the latest nbd and cephfs drivers. Alternatively for testing only,
# you can set the "mounter: rbd-nbd" in the rbd storage class, or "mounter: fuse" in the cephfs storage class.
# The nbd and fuse drivers are *not* recommended in production since restarting the csi driver pod will disconnect the volumes.
encryption :
enabled : false
# Whether to compress the data in transit across the wire. The default is false.
2023-12-08 14:15:51 -07:00
# See the kernel requirements above for encryption.
2021-11-05 16:39:35 -06:00
compression :
enabled : false
2023-02-10 09:41:48 -07:00
# Whether to require communication over msgr2. If true, the msgr v1 port (6789) will be disabled
# and clients will be required to connect to the Ceph cluster with the v2 port (3300).
# Requires a kernel that supports msgr v2 (kernel 5.11 or CentOS 8.4 or newer).
requireMsgr2 : false
2020-04-01 09:58:04 +02:00
# enable host networking
#provider: host
2021-06-08 02:42:56 +05:30
# enable the Multus network provider
2020-04-01 09:58:04 +02:00
#provider: multus
#selectors:
2023-04-24 15:54:53 -06:00
# 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
2020-09-18 10:17:23 +05:30
# Provide internet protocol version. IPv6, IPv4 or empty string are valid options. Empty string would mean IPv4
#ipFamily: "IPv6"
2021-03-31 16:28:04 +02:00
# Ceph daemons to listen on both IPv4 and Ipv6 networks
#dualStack: false
2023-01-23 17:53:51 +05:30
# Enable multiClusterService to export the mon and OSD services to peer cluster.
# This is useful to support RBD mirroring between two clusters having overlapping CIDRs.
# Ensure that peer clusters are connected using an MCS API compatible application, like Globalnet Submariner.
#multiClusterService:
# enabled: false
2020-01-16 11:32:53 +01:00
# enable the crash collector for ceph daemon crash collection
crashCollector :
disable : false
2020-10-08 10:54:01 -04:00
# Uncomment daysToRetain to prune ceph crash entries older than the
# specified number of days.
#daysToRetain: 30
2020-11-19 17:58:18 +01:00
# enable log collector, daemons will log on files and rotate
2022-10-18 16:28:26 +05:30
logCollector :
enabled : true
periodicity : daily # one of: hourly, daily, weekly, monthly
maxLogSize : 500M # SUFFIX may be 'M' or 'G'. Must be at least 1M.
2022-05-30 10:19:51 +05:30
# automate [data cleanup process](https://github.com/rook/rook/blob/master/Documentation/Storage-Configuration/ceph-teardown.md#delete-the-data-on-hosts) in cluster destruction.
2020-12-04 10:18:08 +01:00
cleanupPolicy :
2020-11-10 11:37:25 +00:00
# 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.
2020-05-25 18:20:13 +02:00
confirmation : ""
2020-05-25 16:33:09 +02:00
# 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'
2025-04-07 18:20:27 +03:00
# the 'random' source only works with the 'complete' method, the 'quick' method will use the 'zero' source
2020-05-25 16:33:09 +02:00
# 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
2020-08-28 02:45:54 -04:00
# 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
2018-05-18 14:31:54 -07:00
# To control where various services will be scheduled by kubernetes, use the placement configuration sections below.
2018-07-17 09:26:09 -04:00
# The example under 'all' would have all services scheduled on kubernetes nodes labeled with 'role=storage-node' and
2018-05-18 14:31:54 -07:00
# tolerate taints with a key of 'storage-node'.
2023-03-01 17:52:54 +05:30
# placement:
# all:
# nodeAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# - key: role
# operator: In
# values:
# - storage-node
# podAffinity:
# podAntiAffinity:
# topologySpreadConstraints:
# tolerations:
# - key: storage-node
# operator: Exists
# 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:
# prepareosd:
# mgr:
# cleanup:
2019-03-05 11:21:57 +01:00
annotations :
2023-03-01 17:52:54 +05:30
# all:
# mon:
2024-08-15 14:06:33 -06:00
# mgr:
2023-03-01 17:52:54 +05:30
# osd:
2024-08-15 14:06:33 -06:00
# exporter:
# crashcollector:
2023-03-01 17:52:54 +05:30
# cleanup:
# prepareosd:
2024-08-15 14:06:33 -06:00
# cmdreporter is for jobs to detect ceph and csi versions, and check network status
# cmdreporter:
2023-03-01 17:52:54 +05:30
# clusterMetadata annotations will be applied to only `rook-ceph-mon-endpoints` configmap and the `rook-ceph-mon` and `rook-ceph-admin-keyring` secrets.
# And clusterMetadata annotations will not be merged with `all` annotations.
# clusterMetadata:
# kubed.appscode.com/sync: "true"
# If no mgr annotations are set, prometheus scrape annotations will be set by default.
# mgr:
2020-08-14 14:29:02 +02:00
labels :
2023-03-01 17:52:54 +05:30
# all:
# mon:
# osd:
# cleanup:
# mgr:
# prepareosd:
2024-03-12 17:20:52 +01:00
# These labels are applied to ceph-exporter servicemonitor only
# exporter:
2023-03-01 17:52:54 +05:30
# monitoring is a list of key-value pairs. It is injected into all the monitoring resources created by operator.
# These labels can be passed as LabelSelector to Prometheus
# monitoring:
# crashcollector:
2017-11-06 18:38:11 +01:00
resources :
2023-03-01 17:52:54 +05:30
#The requests and limits set here, allow the mgr pod to use half of one CPU core and 1 gigabyte of memory
# mgr:
# limits:
# memory: "1024Mi"
# requests:
# cpu: "500m"
# memory: "1024Mi"
# The above example requests/limits can also be added to the other components
# mon:
# osd:
# For OSD it also is a possible to specify requests/limits based on device class
# osd-hdd:
# osd-ssd:
# osd-nvme:
# prepareosd:
2023-03-03 10:39:51 +01:00
# mgr-sidecar:
2023-03-01 17:52:54 +05:30
# crashcollector:
# logcollector:
# cleanup:
2023-05-18 18:33:11 +02:00
# exporter:
2024-10-30 13:44:11 -06:00
# cmd-reporter:
2019-10-16 21:49:38 +05:30
# The option to automatically remove OSDs that are out and are safe to destroy.
removeOSDsIfOutAndSafeToRemove : false
2022-04-18 10:13:08 -06:00
priorityClassNames :
#all: rook-ceph-default-priority-class
mon : system-node-critical
osd : system-node-critical
mgr : system-cluster-critical
#crashcollector: rook-ceph-crashcollector-priority-class
2017-11-26 11:52:19 +01:00
storage : # cluster level storage configuration and selection
2017-04-06 17:43:47 -07:00
useAllNodes : true
2019-03-13 23:15:14 -06:00
useAllDevices : true
2019-12-06 16:45:41 -07:00
#deviceFilter:
2018-05-18 14:31:54 -07:00
config :
2020-05-14 11:58:23 +02:00
# crushRoot: "custom-root" # specify a non-default root label for the CRUSH map
2019-03-12 00:19:49 +08:00
# metadataDevice: "md0" # specify a non-rotational storage so ceph-volume will use it as block db device of bluestore.
2019-03-13 23:15:14 -06:00
# databaseSizeMB: "1024" # uncomment if the disks are smaller than 100 GB
# osdsPerDevice: "1" # this value can be overridden at the node or device level
# encryptedDevice: "true" # the default value for this option is "false"
2024-07-12 17:12:36 -06:00
# deviceClass: "myclass" # specify a device class for OSDs in the cluster
allowDeviceClassUpdate : false # whether to allow changing the device class of an OSD after it is created
2024-07-08 20:43:04 +05:30
allowOsdCrushWeightUpdate : false # whether to allow resizing the OSD crush weight after osd pvc is increased
2023-03-01 17:52:54 +05:30
# 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.
2021-09-24 18:12:36 +05:30
# 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
# - name: "172.17.4.301"
# deviceFilter: "^sd."
2024-10-30 17:00:22 -06:00
# Whether to always schedule OSD pods on nodes declared explicitly in the "nodes" section, even if they are
# temporarily not schedulable. If set to true, consider adding placement tolerations for unschedulable nodes.
scheduleAlways : false
2021-07-26 14:58:23 +05:30
# when onlyApplyOSDPlacement is false, will merge both placement.All() and placement.osd
onlyApplyOSDPlacement : false
2023-08-14 10:57:45 +05:30
# Time for which an OSD pod will sleep before restarting, if it stopped due to flapping
# flappingRestartIntervalHours: 24
2024-05-28 17:20:43 -06:00
# The ratio at which Ceph should block IO if the OSDs are too full. The default is 0.95.
# fullRatio: 0.95
# The ratio at which Ceph should stop backfilling data if the OSDs are too full. The default is 0.90.
# backfillFullRatio: 0.90
# The ratio at which Ceph should raise a health warning if the OSDs are almost full. The default is 0.85.
# nearFullRatio: 0.85
2019-09-06 12:50:34 -06:00
# The section for configuring management of daemon disruptions during upgrade or fencing.
disruptionManagement :
2019-09-18 11:14:30 +02:00
# If true, the operator will create and manage PodDisruptionBudgets for OSD, Mon, RGW, and MDS daemons. OSD PDBs are managed dynamically
2019-11-14 12:55:08 +01:00
# via the strategy outlined in the [design](https://github.com/rook/rook/blob/master/design/ceph/ceph-managed-disruptionbudgets.md). The operator will
2019-09-06 12:50:34 -06:00
# block eviction of OSDs by default and unblock them safely when drains are detected.
2021-01-27 14:52:34 -07:00
managePodBudgets : true
2019-09-06 12:50:34 -06:00
# 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
2020-07-08 09:21:23 +02:00
2023-11-14 18:01:55 +05:30
# csi defines CSI Driver settings applied per cluster.
csi :
readAffinity :
# Enable read affinity to enable clients to optimize reads from an OSD in the same topology.
# Enabling the read affinity may cause the OSDs to consume some extra memory.
# For more details see this doc:
# https://rook.io/docs/rook/latest/Storage-Configuration/Ceph-CSI/ceph-csi-drivers/#enable-read-affinity-for-rbd-volumes
enabled : false
# cephfs driver specific settings.
cephfs :
# Set CephFS Kernel mount options to use https://docs.ceph.com/en/latest/man/8/mount.ceph/#options.
# kernelMountOptions: ""
2024-10-02 14:11:55 -06:00
# Set CephFS Fuse mount options to use https://docs.ceph.com/en/latest/man/8/ceph-fuse/#options.
2023-11-14 18:01:55 +05:30
# fuseMountOptions: ""
2020-07-08 09:21:23 +02:00
# 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
2021-12-17 17:25:15 -07:00
# Change pod liveness probe timing or threshold values. Works for all mon,mgr,osd daemons.
2020-07-08 09:21:23 +02:00
livenessProbe :
mon :
disabled : false
mgr :
disabled : false
osd :
disabled : false
2021-12-17 17:25:15 -07:00
# Change pod startup probe timing or threshold values. Works for all mon,mgr,osd daemons.
startupProbe :
mon :
disabled : false
mgr :
disabled : false
osd :
disabled : false