Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Syncing latest changes from upstream master for rook #740

Merged
merged 5 commits into from
Oct 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Documentation/Helm-Charts/operator-chart.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ The following table lists the configurable parameters of the rook-operator chart
| `discoveryDaemonInterval` | Set the discovery daemon device discovery interval (default to 60m) | `"60m"` |
| `enableDiscoveryDaemon` | Enable discovery daemon | `false` |
| `enableOBCWatchOperatorNamespace` | Whether the OBC provisioner should watch on the operator namespace or not, if not the namespace of the cluster will be used | `true` |
| `enforceHostNetwork` | Whether to create all Rook pods to run on the host network, for example in environments where a CNI is not enabled | `false` |
| `hostpathRequiresPrivileged` | Runs Ceph Pods as privileged to be able to write to `hostPaths` in OpenShift with SELinux restrictions. | `false` |
| `image.pullPolicy` | Image pull policy | `"IfNotPresent"` |
| `image.repository` | Image | `"docker.io/rook/ceph"` |
Expand All @@ -163,6 +164,7 @@ The following table lists the configurable parameters of the rook-operator chart
| `rbacAggregate.enableOBCs` | If true, create a ClusterRole aggregated to [user facing roles](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles) for objectbucketclaims | `false` |
| `rbacEnable` | If true, create & use RBAC resources | `true` |
| `resources` | Pod resource requests & limits | `{"limits":{"memory":"512Mi"},"requests":{"cpu":"200m","memory":"128Mi"}}` |
| `revisionHistoryLimit` | The revision history limit for all pods created by Rook. If blank, the K8s default is 10. | `nil` |
| `scaleDownOperator` | If true, scale down the rook operator. This is useful for administrative actions where the rook operator must be scaled down, while using gitops style tooling to deploy your helm charts. | `false` |
| `tolerations` | List of Kubernetes [`tolerations`](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) to add to the Deployment. | `[]` |
| `unreachableNodeTolerationSeconds` | Delay to use for the `node.kubernetes.io/unreachable` pod failure toleration to override the Kubernetes default of 5 minutes | `5` |
Expand Down
7 changes: 7 additions & 0 deletions deploy/charts/rook-ceph/templates/configmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,13 @@ data:
{{- if .Values.discoverDaemonUdev }}
DISCOVER_DAEMON_UDEV_BLACKLIST: {{ .Values.discoverDaemonUdev | quote }}
{{- end }}
{{- if .Values.revisionHistoryLimit }}
ROOK_REVISION_HISTORY_LIMIT: {{ .Values.revisionHistoryLimit | quote }}
{{- end }}
{{- if .Values.enforceHostNetwork }}
ROOK_ENFORCE_HOST_NETWORK: {{ .Values.enforceHostNetwork | quote }}
{{- end }}

{{- if .Values.csi }}
ROOK_CSI_ENABLE_RBD: {{ .Values.csi.enableRbdDriver | quote }}
ROOK_CSI_ENABLE_CEPHFS: {{ .Values.csi.enableCephfsDriver | quote }}
Expand Down
6 changes: 6 additions & 0 deletions deploy/charts/rook-ceph/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -633,9 +633,15 @@ discover:
# -- Runs Ceph Pods as privileged to be able to write to `hostPaths` in OpenShift with SELinux restrictions.
hostpathRequiresPrivileged: false

# -- Whether to create all Rook pods to run on the host network, for example in environments where a CNI is not enabled
enforceHostNetwork: false

# -- Disable automatic orchestration when new devices are discovered.
disableDeviceHotplug: false

# -- The revision history limit for all pods created by Rook. If blank, the K8s default is 10.
revisionHistoryLimit:

# -- Blacklist certain disks according to the regex provided.
discoverDaemonUdev:

Expand Down
6 changes: 6 additions & 0 deletions deploy/examples/operator-openshift.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -638,6 +638,12 @@ data:

# (Optional) QPS to use while communicating with the kubernetes apiserver.
# CSI_KUBE_API_QPS: "5.0"

# Whether to create all Rook pods to run on the host network, for example in environments where a CNI is not enabled
ROOK_ENFORCE_HOST_NETWORK: "false"

# RevisionHistoryLimit value for all deployments created by rook.
# ROOK_REVISION_HISTORY_LIMIT: "3"
---
# The deployment for the rook operator
# OLM: BEGIN OPERATOR DEPLOYMENT
Expand Down
6 changes: 6 additions & 0 deletions deploy/examples/operator.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -568,6 +568,12 @@ data:

# (Optional) QPS to use while communicating with the kubernetes apiserver.
# CSI_KUBE_API_QPS: "5.0"

# Whether to create all Rook pods to run on the host network, for example in environments where a CNI is not enabled
ROOK_ENFORCE_HOST_NETWORK: "false"

# RevisionHistoryLimit value for all deployments created by rook.
# ROOK_REVISION_HISTORY_LIMIT: "3"
---
# OLM: BEGIN OPERATOR DEPLOYMENT
apiVersion: apps/v1
Expand Down
1 change: 1 addition & 0 deletions pkg/operator/ceph/cluster/mgr/spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ func (c *Cluster) makeDeployment(mgrConfig *mgrConfig) (*apps.Deployment, error)
Labels: c.getPodLabels(mgrConfig, true),
},
Spec: apps.DeploymentSpec{
RevisionHistoryLimit: controller.RevisionHistoryLimit(),
Selector: &metav1.LabelSelector{
MatchLabels: c.getPodLabels(mgrConfig, false),
},
Expand Down
1 change: 1 addition & 0 deletions pkg/operator/ceph/cluster/mon/spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ func (c *Cluster) makeDeployment(monConfig *monConfig, canary bool) (*apps.Deplo
}
replicaCount := int32(1)
d.Spec = apps.DeploymentSpec{
RevisionHistoryLimit: controller.RevisionHistoryLimit(),
Selector: &metav1.LabelSelector{
MatchLabels: c.getLabels(monConfig, canary, false),
},
Expand Down
1 change: 1 addition & 0 deletions pkg/operator/ceph/cluster/nodedaemon/exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ func (r *ReconcileNode) createOrUpdateCephExporter(node corev1.Node, tolerations
Namespace: cephCluster.GetNamespace(),
},
}
deploy.Spec.RevisionHistoryLimit = controller.RevisionHistoryLimit()
err := controllerutil.SetControllerReference(&cephCluster, deploy, r.scheme)
if err != nil {
return controllerutil.OperationResultNone, errors.Errorf("failed to set owner reference of ceph-exporter deployment %q", deploy.Name)
Expand Down
1 change: 1 addition & 0 deletions pkg/operator/ceph/cluster/osd/spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -713,6 +713,7 @@ func (c *Cluster) makeDeployment(osdProps osdProperties, osd *OSDInfo, provision
OsdIdLabelKey: fmt.Sprintf("%d", osd.ID),
},
},
RevisionHistoryLimit: controller.RevisionHistoryLimit(),
Strategy: apps.DeploymentStrategy{
Type: apps.RecreateDeploymentStrategyType,
},
Expand Down
1 change: 1 addition & 0 deletions pkg/operator/ceph/cluster/rbd/spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ func (r *ReconcileCephRBDMirror) makeDeployment(daemonConfig *daemonConfig, rbdM
Labels: controller.CephDaemonAppLabels(AppName, rbdMirror.Namespace, config.RbdMirrorType, daemonConfig.DaemonID, rbdMirror.Name, "cephrbdmirrors.ceph.rook.io", true),
},
Spec: apps.DeploymentSpec{
RevisionHistoryLimit: controller.RevisionHistoryLimit(),
Selector: &metav1.LabelSelector{
MatchLabels: podSpec.Labels,
},
Expand Down
1 change: 1 addition & 0 deletions pkg/operator/ceph/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ func (r *ReconcileConfig) reconcile(request reconcile.Request) (reconcile.Result

opcontroller.SetAllowLoopDevices(r.config.Parameters)
opcontroller.SetEnforceHostNetwork(r.config.Parameters)
opcontroller.SetRevisionHistoryLimit(r.config.Parameters)

logger.Infof("%s done reconciling", controllerName)
return reconcile.Result{}, nil
Expand Down
26 changes: 25 additions & 1 deletion pkg/operator/ceph/controller/controller_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ const (
enforceHostNetworkSettingName string = "ROOK_ENFORCE_HOST_NETWORK"
enforceHostNetworkDefaultValue string = "false"

revisionHistoryLimitSettingName string = "ROOK_REVISION_HISTORY_LIMIT"
revisionHistoryLimitDefaultValue string = ""

// UninitializedCephConfigError refers to the error message printed by the Ceph CLI when there is no ceph configuration file
// This typically is raised when the operator has not finished initializing
UninitializedCephConfigError = "error calling conf_read_file"
Expand Down Expand Up @@ -86,7 +89,8 @@ var (
OperatorCephBaseImageVersion string

// loopDevicesAllowed indicates whether loop devices are allowed to be used
loopDevicesAllowed = false
loopDevicesAllowed = false
revisionHistoryLimit *int32 = nil
)

func DiscoveryDaemonEnabled(data map[string]string) bool {
Expand Down Expand Up @@ -133,6 +137,26 @@ func EnforceHostNetwork() bool {
return cephv1.EnforceHostNetwork()
}

func SetRevisionHistoryLimit(data map[string]string) {
strval := k8sutil.GetValue(data, revisionHistoryLimitSettingName, revisionHistoryLimitDefaultValue)
if strval != "" {
numval, err := strconv.ParseInt(strval, 10, 32)
if err != nil {
logger.Warningf("failed to parse value %q for %q. assuming default value.", strval, revisionHistoryLimitSettingName)
revisionHistoryLimit = nil
return

}
limit := int32(numval)
revisionHistoryLimit = &limit
}

}

func RevisionHistoryLimit() *int32 {
return revisionHistoryLimit
}

// canIgnoreHealthErrStatusInReconcile determines whether a status of HEALTH_ERR in the CephCluster can be ignored safely.
func canIgnoreHealthErrStatusInReconcile(cephCluster cephv1.CephCluster, controllerName string) bool {
// Get a list of all the keys causing the HEALTH_ERR status.
Expand Down
27 changes: 27 additions & 0 deletions pkg/operator/ceph/controller/controller_utils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,33 @@ func TestSetEnforceHostNetwork(t *testing.T) {
assert.False(t, EnforceHostNetwork())
}

func TestSetRevisionHistoryLimit(t *testing.T) {
opConfig := map[string]string{}
t.Run("ROOK_REVISION_HISTORY_LIMIT: test default value", func(t *testing.T) {
SetRevisionHistoryLimit(opConfig)
assert.Nil(t, RevisionHistoryLimit())
})

var value string = "foo"
t.Run("ROOK_REVISION_HISTORY_LIMIT: test invalid value 'foo'", func(t *testing.T) {
opConfig[revisionHistoryLimitSettingName] = value
SetRevisionHistoryLimit(opConfig)
assert.Nil(t, RevisionHistoryLimit())
})

t.Run("ROOK_REVISION_HISTORY_LIMIT: test empty string value", func(t *testing.T) {
value = ""
opConfig[revisionHistoryLimitSettingName] = value
SetRevisionHistoryLimit(opConfig)
assert.Nil(t, RevisionHistoryLimit())
})
t.Run("ROOK_REVISION_HISTORY_LIMIT: test valig value '10'", func(t *testing.T) {
value = "10"
opConfig[revisionHistoryLimitSettingName] = value
SetRevisionHistoryLimit(opConfig)
assert.Equal(t, int32(10), *RevisionHistoryLimit())
})
}
func TestIsReadyToReconcile(t *testing.T) {
scheme := scheme.Scheme
scheme.AddKnownTypes(cephv1.SchemeGroupVersion, &cephv1.CephCluster{}, &cephv1.CephClusterList{})
Expand Down
5 changes: 3 additions & 2 deletions pkg/operator/ceph/file/mds/spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,9 @@ func (c *Cluster) makeDeployment(mdsConfig *mdsConfig, fsNamespacedname types.Na
Selector: &metav1.LabelSelector{
MatchLabels: c.podLabels(mdsConfig, false),
},
Template: podSpec,
Replicas: &replicas,
RevisionHistoryLimit: controller.RevisionHistoryLimit(),
Template: podSpec,
Replicas: &replicas,
Strategy: apps.DeploymentStrategy{
Type: apps.RecreateDeploymentStrategyType,
},
Expand Down
1 change: 1 addition & 0 deletions pkg/operator/ceph/file/mirror/spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ func (r *ReconcileFilesystemMirror) makeDeployment(daemonConfig *daemonConfig, f
Annotations: fsMirror.Spec.Annotations,
Labels: controller.CephDaemonAppLabels(AppName, fsMirror.Namespace, config.FilesystemMirrorType, userID, fsMirror.Name, "cephfilesystemmirrors.ceph.rook.io", true)},
Spec: apps.DeploymentSpec{
RevisionHistoryLimit: controller.RevisionHistoryLimit(),
Selector: &metav1.LabelSelector{
MatchLabels: podSpec.Labels,
},
Expand Down
1 change: 1 addition & 0 deletions pkg/operator/ceph/nfs/spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ func (r *ReconcileCephNFS) makeDeployment(nfs *cephv1.CephNFS, cfg daemonConfig)
// Multiple replicas of the nfs service would be handled by creating a service and a new deployment for each one, rather than increasing the pod count here
replicas := int32(1)
deployment.Spec = apps.DeploymentSpec{
RevisionHistoryLimit: controller.RevisionHistoryLimit(),
Selector: &metav1.LabelSelector{
MatchLabels: getLabels(nfs, cfg.ID, false),
},
Expand Down
5 changes: 2 additions & 3 deletions pkg/operator/ceph/object/cosi/spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ func createCephCOSIDriverDeployment(cephCOSIDriver *cephv1.CephCOSIDriver) (*app
replica := int32(1)
minReadySeconds := int32(30)
progressDeadlineSeconds := int32(600)
revisionHistoryLimit := int32(3)

cephcosidriverDeployment := &appsv1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Expand All @@ -52,15 +51,15 @@ func createCephCOSIDriverDeployment(cephCOSIDriver *cephv1.CephCOSIDriver) (*app
Labels: getCOSILabels(cephCOSIDriver.Name, cephCOSIDriver.Namespace),
},
Spec: appsv1.DeploymentSpec{
Replicas: &replica,
RevisionHistoryLimit: controller.RevisionHistoryLimit(),
Replicas: &replica,
Selector: &metav1.LabelSelector{
MatchLabels: getCOSILabels(cephCOSIDriver.Name, cephCOSIDriver.Namespace),
},
Template: cosiPodSpec,
Strategy: strategy,
MinReadySeconds: minReadySeconds,
ProgressDeadlineSeconds: &progressDeadlineSeconds,
RevisionHistoryLimit: &revisionHistoryLimit,
},
}

Expand Down
1 change: 1 addition & 0 deletions pkg/operator/ceph/object/spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ func (c *clusterConfig) createDeployment(rgwConfig *rgwConfig) (*apps.Deployment
Labels: getLabels(c.store.Name, c.store.Namespace, true),
},
Spec: apps.DeploymentSpec{
RevisionHistoryLimit: controller.RevisionHistoryLimit(),
Selector: &metav1.LabelSelector{
MatchLabels: getLabels(c.store.Name, c.store.Namespace, false),
},
Expand Down
1 change: 1 addition & 0 deletions pkg/operator/discover/discover.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ func (d *Discover) createDiscoverDaemonSet(ctx context.Context, namespace, disco
Labels: getLabels(),
},
Spec: apps.DaemonSetSpec{
RevisionHistoryLimit: opcontroller.RevisionHistoryLimit(),
Selector: &metav1.LabelSelector{
MatchLabels: map[string]string{
"app": discoverDaemonsetName,
Expand Down
2 changes: 2 additions & 0 deletions tests/framework/installer/ceph_helm_installer.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ func (h *CephInstaller) configureRookOperatorViaHelm(upgrade bool) error {
"enableDiscoveryDaemon": h.settings.EnableDiscovery,
"image": map[string]interface{}{"tag": h.settings.RookVersion},
"monitoring": map[string]interface{}{"enabled": true},
"revisionHistoryLimit": "3",
"enforceHostNetwork": "false",
}
values["csi"] = map[string]interface{}{
"csiRBDProvisionerResource": nil,
Expand Down
Loading