Commit Graph
1534 Commits
Author SHA1 Message Date
Santosh Pillai fa77b4db20 osd: allow one healthy OSD to be drained
One ore more OSDs can be down and PGs can still be active+clean (data
was rebalanced to other available OSDs). This PR sets
maxunavailable=1+downOSDs to allow one healthy to be drained.

Signed-off-by: Santosh Pillai <sapillai@redhat.com>
(cherry picked from commit a816b4a971)
2025-03-26 16:05:16 +00:00
Patryk Rostkowski cf817c1133 exporter: add missing rook-ceph-exporter container port definition
Adds the missing exporter container port to enable
proper Prometheus scraping and filtering.

Signed-off-by: Patryk Rostkowski <patrostkowski@gmail.com>
(cherry picked from commit fda1189dbf)
2025-03-05 15:07:17 +00:00
Travis Nielsen 13ac9625b1 mgr: wait for builtin mgr pool to exist before enabling stretch
There is a race condition in ceph v19 at startup of a
stretch cluster where if the .mgr pool is created by
the mgr pod after stretch mode is entered, the
devicehealth mgr module will crash and cause a
ceph HEALTH_ERR. The error then causes rook reconcile
of all CRs to be skipped because Rook is assuming
admin intervention is needed to continue. The fix
is to wait until the .mgr pool is created by the mgr
pod before entering stretch mode.

Signed-off-by: Travis Nielsen <tnielsen@redhat.com>
(cherry picked from commit 8429affc79)
2025-02-27 17:02:58 +00:00
Travis Nielsen f5ac59c0a0 core: implement operator settings as env vars
The operator settings loaded from the configmap have proven
inefficient for load time and frequently checking the configmap.
To avoid this ineffenciency, the configmap is only loaded once
each time it is created or updated. The values in the configmap
are applied as environment variables, which then are very efficient
to query throughout the various controllers, without needing
to be concerned about loading the configmap again.

Co-authored-by: Dmitry Mishin <dmitry.mishin@gmail.com>
Signed-off-by: Travis Nielsen <tnielsen@redhat.com>
(cherry picked from commit d109dc9029)
2025-02-25 11:33:57 -07:00
Steven Fackler 5a7df72327 osd: avoid lvm device scan deadlock in activate
If a locally mounted volume is blocked on reads because this OSD is
down, lvs will deadlock trying to read from it. To avoid this, tell LVM
to filter out RBD volumes from its scanning process.

Signed-off-by: Steven Fackler <sfackler@gmail.com>
(cherry picked from commit bbe600aa20)
2025-02-17 18:30:43 +00:00
Artem Torubarov f3f556399e operator: custom hostname topology label
Signed-off-by: Artem Torubarov <artem.torubarov@clyso.com>
(cherry picked from commit 25ee6b4f59)
2025-01-30 16:44:43 +00:00
Santosh Pillai 682c2fabfb osd: use bluestore if store type is empty
If store type is empty in the cephCluster spec, use bluestore

Signed-off-by: Santosh Pillai <sapillai@redhat.com>
(cherry picked from commit e44dd3ad74)
2025-01-16 20:34:23 +00:00
Oded Viner b3606dcbf6 core: add tolerations to crashcollector pruner cronJob pod
This PR addresses an issue where the CrashCollector Pruner
CronJob pods were stuck in a Pending state due to missing
tolerations in their PodTemplateSpec.
These tolerations were not being propagated from the
cephClusterSpec.placement.all field.
Added tolerations to the PodTemplateSpec of the
CrashCollector Pruner CronJob.

Signed-off-by: Oded Viner <oviner@redhat.com>
(cherry picked from commit 8817a1a703)
2025-01-16 17:01:00 +00:00
Denis Egorenko f15fa4ed49 mgr: fix label selector when updating mgr active label
Fix label selector for watch-active mgr container: during update active mgr label,
add missed app=rook-ceph-mgr label, to avoid setting label for mon pod.

Resolves: #15208
Signed-off-by: Denis Egorenko degorenko@mirantis.com
(cherry picked from commit 009a0d9f6f)
2024-12-20 17:28:42 +00:00
Travis Nielsen cef7f2c868 Merge pull request #15173 from rook/mergify/bp/release-1.16/pr-14456
external: fix exporter secret isn't created with external cluster (backport #14456)
2024-12-16 11:49:52 -07:00
Yaguang Tang d85e6c7a6b external: fix exporter secret isn't created with external cluster
Fix the issue when using with external ceph cluster, ceph exporter
secret isn't created which cause ceph-exporter fail to run. By
default this option is false means ceph-exporter will run for
external cluster.

monitoring
  metricsDisabled: false

This patch also adds metricsDisabled option to helm values.yaml.

fixes #14275

Signed-off-by: Yaguang Tang <heut20008@gmail.com>
(cherry picked from commit 1563d32fbb)
2024-12-16 17:59:45 +00:00
Michael Adam 3bb6380947 ci: update golangci-lint to the latest version (v1.62)
The ci was using a pretty old version og golangci-lint.
This updates to the latest version.

Additionally, it  silences some
gosec integer conversion overflow false positves
and fixes some real errors of this category
 and string format errors found by golangci-lint, while at it.

Co-authored-by: Blaine Gardner <b.blaine.gardner@gmail.com>
Co-authored-by: Travis Nielsen <tnielsen@redhat.com>
Signed-off-by: Michael Adam <obnox@samba.org>
(cherry picked from commit df511fb58f)
2024-12-16 16:12:24 +00:00
Travis Nielsen 3043b6758c manifest: update default ceph version to v19
With the v19.2.0 release being out for some time now,
update the default version to be deployed with Rook
as v19.2.0.

Signed-off-by: Travis Nielsen <tnielsen@redhat.com>
(cherry picked from commit 07d8012d36)
2024-12-11 15:45:25 -07:00
Santosh Pillai 67cd211317 osd: enable encryption as day-2 operation
Migrate OSDs to enable encryption as day-2 operation.

Signed-off-by: Santosh Pillai <sapillai@redhat.com>
(cherry picked from commit 85c81946ce)
2024-12-06 07:32:18 +01:00
parth-gr 81b5c17a17 osd: fix osd resources per device class
GetOSDResources method was populating
wrong device class to get the osd
resources
This fix will fix the deviceClass label
for the GetOSDResources function

Signed-off-by: parth-gr <partharora1010@gmail.com>
(cherry picked from commit 50d6d6ab5f)
2024-12-05 23:21:39 +00:00
parth-gr e0af3d4bee osd: add a new devicetype label for osds
currently device class and device type
labels were clubbed with eachother
create a seperate label, as these two labels
can be seperate

Signed-off-by: parth-gr <partharora1010@gmail.com>
(cherry picked from commit 01456e8683)
2024-12-05 23:21:39 +00:00
Michael Adam a530101147 core: propagate RevisionHistoryLimit to crashcollector
still incomplete.

Signed-off-by: Michael Adam <obnox@samba.org>
2024-11-19 10:55:26 +01:00
Travis Nielsen 4524f3d78e Merge pull request #15016 from solidDoWant/master
rook: add warning when duplicate node topology values are detected
2024-11-18 11:51:13 -07:00
Fred Heinecke f54ecaaff1 osd: add warning when duplicate node topology values are detected
When node topology labels with duplicate values are detected, rook silently discards all but one label.
This adds a warning informing administrators of this, allowing for easier identification of labeling issues.

Signed-off-by: Fred Heinecke <fred.heinecke@yahoo.com>
2024-11-18 18:23:56 +00:00
Peter Razumovsky 62ffcd4cbe osd: remove excess if-else for keyring file import in activate script
Remove unnecessary if-else statement inside "if keyring file exists"
condition of osd activate script.

Resolves: #14825
Signed-off-by: Peter Razumovsky <prazumovsky@mirantis.com>
2024-11-12 21:20:57 +04:00
Peter Razumovsky 6eb2d1121a osd: import keyring file on activate to ceph auth if not imported yet
If host path keyring file exists and created during osd-prepare but not
imported to ceph auth then rook-ceph-osd activate init container will
create new keyring in ceph auth by ceph auth get-or-create command. To
avoid keyrings difference in host path and in ceph auth, consider
importing key from host path keyring file if no keyring found in ceph
auth.

Resolves: #14825
Signed-off-by: Peter Razumovsky <prazumovsky@mirantis.com>
2024-11-12 21:20:57 +04:00
Grant Fleming cdf692d227 operator: monitors should always be allowed to failover
Previously arbiter monitors were allowed to failover in supported versions
of Ceph. This behaviour regressed. Since all supported versions of Ceph now
support this, we no longer need to check this at all.

Signed-off-by: Grant Fleming <gfleming@evroc.com>
2024-11-08 16:48:05 +01:00
Travis Nielsen c5df2fe721 Merge pull request #14824 from prazumovsky/fix-5-2-8
core: add capabilities to securityContext to fix CIS 5.2.8
2024-11-05 12:32:43 -07:00
Travis Nielsen 7692cae359 Merge pull request #14896 from parth-gr/rbd-mirror-rados-monitor
rbd: enable periodic monitoring for rados namespace mirroring
2024-11-05 09:15:32 -07:00
Peter Razumovsky 97a13628e5 core: add capabilities to securityContext to fix CIS 5.2.8
Resolves CIS benchmark 5.2.8 rule by adding capabilities with
explicitly defined empty "add" list (where it needed) and with
NET_RAW capability in "drop" list.

5.2.8 Minimize the admission of containers with added capabilities

Containers must drop the `NET_RAW` capability and are not permitted
to add back any capabilities.

Signed-off-by: Peter Razumovsky <prazumovsky@mirantis.com>
2024-11-05 16:27:43 +04:00
parth-gr 9785ef5c8d rbdmirror: enable periodic monitoring for rados namespace
enable monitoring for rados namespace

Signed-off-by: parth-gr <partharora1010@gmail.com>
2024-11-05 13:45:02 +05:30
Travis Nielsen 7fbe4e7db5 osd: allow scheduling on unschedulable nodes
For nodes that are explicitly requested for deploying
OSDs, they will be skipped temporarily if not
schedulable or not ready. A future reconcile is
expected to schedule them. Allow the OSDs to be
scheduled even on these nodes that are temporarily
down, even if it blocks the reconcile from completing.

Signed-off-by: Travis Nielsen <tnielsen@redhat.com>
2024-10-31 14:05:36 -06:00
Travis Nielsen b52ba6baca test: wait for mon daemons rather than mon canaries
The mon canaries may be created even when the mon daemons
are not created thereafter during the integration tests.
Therefore, the integration tests need to also query a label
specific to the mon daemon so the canaries are not a distraction
to the test.

Signed-off-by: Travis Nielsen <tnielsen@redhat.com>
2024-10-25 09:17:02 -06:00
Satoru Takeuchi f50734962b Merge pull request #14901 from guits/add-udev-bindmount
osd: mount /run/udev in the init container for ceph-volume activate
2024-10-25 16:18:08 +09:00
Travis Nielsen 3b94c50d8b Merge pull request #14818 from iPraveenParihar/kms/vault-keyrotation
kms: key rotation support for vault kms
2024-10-24 11:38:33 -06:00
Guillaume Abrioux dbcd0d46dd osd: mount /run/udev in the init container for ceph-volume activate
The /run/udev directory is now mounted in the OSD init container. This change
is necessary because `ceph-volume activate` needs access to /run/udev [1] in order
to properly handle devices. Without this mount, `ceph-volume activate` could
fail to discover devices during OSD initialization.

[1] https://github.com/ceph/ceph/commit/c2e8c295dc46f1bd74861feb163d9d82f8bb5509

Signed-off-by: Guillaume Abrioux <gabrioux@ibm.com>
2024-10-24 17:16:10 +02:00
Blaine Gardner 5539eedd1b multus: finish deprecating holder pods
Finish the process of deprecating holder pods by removing Rook's ability
to deploy them. The intent of this change is to make the most
superficial changes possible to accomplish this. There are still
remnants of code in Rook (particularly the CSI controller) that helped
configure or deploy holder pods. Due to the risk of breaking some
features, cleanup work of hose remnants will be deferred for future
work.

Signed-off-by: Blaine Gardner <blaine.gardner@ibm.com>
2024-10-23 16:29:02 -06:00
Praveen M d8c0242c29 security: key rotation support for vault kms
Signed-off-by: Praveen M <m.praveen@ibm.com>
2024-10-23 11:43:49 +05:30
Travis Nielsen 6428693e1c Merge pull request #14823 from prazumovsky/fix-cis-5-7-3-1
core: define empty securityContext for pods to fix CIS 5.7.3
2024-10-17 11:46:16 -06:00
Santosh Pillai 8dd237b460 core: fix deletion of the osd-replace-config cm
MustDelete DeleteOption was set to `true` when deleting
osd-repalce-config configMap.  This cm won't existing after
all the OSDs get migrated. So deletion of the non-existent
cm will result in error. This PR removes `mustDelete: true` from
the DeletionOption when deleting osd-replace-config configmap

Signed-off-by: Santosh Pillai <sapillai@redhat.com>
2024-10-16 16:18:29 +05:30
Travis Nielsen 119362059b Merge pull request #14854 from travisn/exporter-cleanup
core: Skip counting exporter pods as a ceph pod
2024-10-15 10:09:17 -06:00
Travis Nielsen a71078b733 core: skip counting exporter pods as a ceph pod
The exporter pods were being counted as a ceph pod,
so once an exporter pod was added to a node, it would never
be removed since the controller thinks the exporter pod
itself is a ceph pod for which the exporter must be present.

Signed-off-by: Travis Nielsen <tnielsen@redhat.com>
2024-10-14 21:32:22 -06:00
Travis Nielsen 7ed77ddd13 core: remove obsolete creation of v1beta1 pruner cron jobs
The v1beta1 cron jobs have been obsolete since K8s 1.21,
and Rook has not supported that version of K8s
for many moons, so we can remove the obsolete code
for the handling of v1beta1 cron jobs for crash pruning.

Signed-off-by: Travis Nielsen <tnielsen@redhat.com>
2024-10-14 17:13:06 -06:00
Madhu Rajanna 1d1ed5e962 csi: disable fencing in Rook
Disabling the RBD and CephFS fencing
in Rook for now as its having bugs where
Rook is blocklisting wrong IP address
due to timing issues.

Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
2024-10-10 19:28:15 +02:00
Peter Razumovsky 516eab4d8a core: define empty securityContext for pods to fix CIS 5.7.3
Resolves CIS benchmark rule 5.7.3, Pods part. SecurityContext
should be explicitly defined in pod level of Pod spec section.
It is sufficient to specify empty securityContext to satisfy
CIS 5.7.3 rule.

5.7.3 Apply Security Context to Your Pods and Containers

When designing your containers and pods, make sure
that you configure the security context for your pods,
containers, and volumes.

Signed-off-by: Peter Razumovsky <prazumovsky@mirantis.com>
2024-10-09 16:10:03 +04:00
Travis Nielsen e2cadab6fe mon: do not remove extra mon in middle of failover
If the mon failover is in progress, ensure the removal
of an extra mon deployment is skipped since that code
path only has one mon in the list for the mon that was
just newly started. The extra mon was erroneously removing
a random mon in that case, followed immediately by the mon
failover completing and removing the expected failed mon,
and potentially causing mon quroum loss.

Signed-off-by: Travis Nielsen <tnielsen@redhat.com>
2024-10-04 14:29:57 -06:00
Travis Nielsen b665d7a7b7 core: remove support for ceph quincy
Given that Ceph Quincy (v17) is past end of life,
remove Quincy from the supported Ceph versions,
examples, and documentation.

Supported versions now include only Reef and Squid.

Signed-off-by: Travis Nielsen <tnielsen@redhat.com>
2024-10-03 11:12:55 -06:00
Michael Adam ab8fd90aa6 core: add ROOK_REVISION_HISTORY_LIMIT operator setting
This adds an operator config setting ROOK_REVISION_HISTORY_LIMIT
defaulting to kubernetes'value for RevisionHistoryLimit.

If configured, the provided value will be used as RevisionHistoryLimit

for all Deployments rook creates.

Fixes: #12722

Signed-off-by: Michael Adam <obnox@samba.org>
2024-10-02 19:40:37 +02:00
Travis Nielsen ab9fa00e7a Merge pull request #14731 from travisn/crash-annotations
core: Enable annotations on crash collector
2024-09-19 11:48:19 -06:00
Travis Nielsen fa2941d098 core: enable annotations on crash collector
The crash collector daemon had missed the ability to
add custom annotations via the cephcluster CR, as already
supported for all the other daemons.

Signed-off-by: Travis Nielsen <tnielsen@redhat.com>
2024-09-17 14:24:44 -06:00
Artem Torubarov b2c39ace25 exporter: move config to cluster CRD
allows to set prio-limit and stats-period options to ceph exporter

Signed-off-by: Artem Torubarov <artem.torubarov@clyso.com>
2024-09-16 14:51:49 +02:00
Travis Nielsen 772a4fa73c Merge pull request #14667 from travisn/remove-mon-race
mon: Remove extra mon from quorum before taking down pod
2024-09-05 11:11:46 -06:00
Michael Adam e378588359 network: add a new operator config setting ROOK_ENFORCE_HOSTNETWORK
This new setting is of Boolean type and defaults to "false".

    When set to "true", it changes the behavior of the
     rook operator to
    nable host network on all pods created by the cephcluster controller

     new method to check the setting:  opcontroller.EnForceHostNetwork()

Signed-off-by: Michael Adam <obnox@samba.org>
2024-09-05 17:34:13 +02:00
Travis Nielsen 8987d26a6d mon: remove extra mon from quorum before taking down pod
When removing a mon from quorum, there is a race condition that
can result in mon quorum going being lost at least temporarily.
The mon pod was being deleted first, and then the mon removed
from quorum. If any other mon went down between the time the
pod of the bad mon was deleted and when the mon was removed from
quorum, there may not be sufficient quorum to complete the
action of removing the mon from quorum and the operator would
be stuck.

For example, there could be 4 mons temporarily due to timing
of upgrading K8s nodes where mons may be taken down for some
number of minutes. Say a new mon is started while the down
mon also comes back up. Now the operator sees it can remove
the 4th mon from quorum, so it starts to remove it. Now say
another mon goes down on another node that is being updated
or otherwise drained. Since the 4th mon pod was deleted
and another mon is down, there are only two mons remaining
in quorum, but 3 mons are required in quorum when there
are 4 mons. Therefore, the quorum is stuck until the
third mon comes back up.

The solution is to first remove the extra mon from quorum
before taking down the mon pod.

Signed-off-by: Travis Nielsen <tnielsen@redhat.com>
2024-09-04 13:06:22 -06:00
Benoît Knecht 1c45677f5e core: fix Ceph monitor deployment in separate zones
Previously, Rook would fail to create monitors for a `CephCluster` spec that
required them to be located in distinct failure domains:

```yaml
spec:
  mon:
    count: 3
    failureDomainLabel: topology.kubernetes.io/zone
    zones:
    - eu-central-1a
    - eu-central-1b
    - eu-central-1c
```

This was due to the fact that Rook was mistakenly getting the
`failureDomainLabel` from `spec.mon.stretchCluster.failureDomainLabel`.

This commit ensures `spec.mon.failureDomainLabel` is being used instead, which
fixes the cluster deployment for the spec above.

Signed-off-by: Benoît Knecht <bknecht@protonmail.ch>
2024-08-23 09:06:55 +02:00