Skip to content

Commit

Permalink
pkg/manifests: Deploy metrics-server through operator
Browse files Browse the repository at this point in the history
Signed-off-by: Jayapriya Pai <janantha@redhat.com>
  • Loading branch information
slashpai committed Jun 28, 2023
1 parent ad1de59 commit 8c3dfd5
Show file tree
Hide file tree
Showing 13 changed files with 449 additions and 20 deletions.
12 changes: 6 additions & 6 deletions Documentation/api.md
Expand Up @@ -25,7 +25,7 @@ Configuring Cluster Monitoring is optional. If the config does not exist or is e
* [DedicatedServiceMonitors](#dedicatedservicemonitors)
* [K8sPrometheusAdapter](#k8sprometheusadapter)
* [KubeStateMetricsConfig](#kubestatemetricsconfig)
* [MetricsServer](#metricsserver)
* [MetricsServerConfig](#metricsserverconfig)
* [MonitoringPluginConfig](#monitoringpluginconfig)
* [NodeExporterCollectorBuddyInfoConfig](#nodeexportercollectorbuddyinfoconfig)
* [NodeExporterCollectorConfig](#nodeexportercollectorconfig)
Expand Down Expand Up @@ -125,8 +125,7 @@ The `ClusterMonitoringConfiguration` resource defines settings that customize th
| -------- | ---- | ----------- |
| alertmanagerMain | *[AlertmanagerMainConfig](#alertmanagermainconfig) | `AlertmanagerMainConfig` defines settings for the Alertmanager component in the `openshift-monitoring` namespace. |
| enableUserWorkload | *bool | `UserWorkloadEnabled` is a Boolean flag that enables monitoring for user-defined projects. |
| enableMetricsServer | *bool | `MetricsServerEnabled` is a Boolean flag that enables metrics-server. |
| metricsServer | *[MetricsServer](#metricsserver) | `MetricsServer` defines settings for the MetricsServer component. |
| metricsServer | *[MetricsServerConfig](#metricsserverconfig) | `MetricsServer` defines settings for the MetricsServer component. |
| k8sPrometheusAdapter | *[K8sPrometheusAdapter](#k8sprometheusadapter) | `K8sPrometheusAdapter` defines settings for the Prometheus Adapter component. |
| kubeStateMetrics | *[KubeStateMetricsConfig](#kubestatemetricsconfig) | `KubeStateMetricsConfig` defines settings for the `kube-state-metrics` agent. |
| prometheusK8s | *[PrometheusK8sConfig](#prometheusk8sconfig) | `PrometheusK8sConfig` defines settings for the Prometheus component. |
Expand Down Expand Up @@ -188,20 +187,21 @@ The `KubeStateMetricsConfig` resource defines settings for the `kube-state-metri

[Back to TOC](#table-of-contents)

## MetricsServer
## MetricsServerConfig

#### Description

The `MetricsServer` resource defines settings for the MetricsServer component.
The `MetricsServerConfig` resource defines settings for the MetricsServer component.


<em>appears in: [ClusterMonitoringConfiguration](#clustermonitoringconfiguration)</em>

| Property | Type | Description |
| -------- | ---- | ----------- |
| enabled | *bool | `Enabled` is a Boolean flag that enables or disables metrics-server. |
| nodeSelector | map[string]string | Defines the nodes on which the pods are scheduled. |
| tolerations | [][v1.Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.26/#toleration-v1-core) | Defines tolerations for the pods. |
| resources | *[v1.ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.26/#resourcerequirements-v1-core) | Defines resource requests and limits for the Prometheus container. |
| resources | *[v1.ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.26/#resourcerequirements-v1-core) | Defines resource requests and limits for the Metrics Server container. |

[Back to TOC](#table-of-contents)

Expand Down
2 changes: 1 addition & 1 deletion Documentation/openshiftdocs/index.adoc
Expand Up @@ -45,7 +45,7 @@ The configuration file itself is always defined under the `config.yaml` key in t
* link:modules/dedicatedservicemonitors.adoc[DedicatedServiceMonitors]
* link:modules/k8sprometheusadapter.adoc[K8sPrometheusAdapter]
* link:modules/kubestatemetricsconfig.adoc[KubeStateMetricsConfig]
* link:modules/metricsserver.adoc[MetricsServer]
* link:modules/metricsserverconfig.adoc[MetricsServerConfig]
* link:modules/monitoringpluginconfig.adoc[MonitoringPluginConfig]
* link:modules/nodeexportercollectorbuddyinfoconfig.adoc[NodeExporterCollectorBuddyInfoConfig]
* link:modules/nodeexportercollectorconfig.adoc[NodeExporterCollectorConfig]
Expand Down
Expand Up @@ -19,9 +19,7 @@ The `ClusterMonitoringConfiguration` resource defines settings that customize th

|enableUserWorkload|*bool|`UserWorkloadEnabled` is a Boolean flag that enables monitoring for user-defined projects.

|enableMetricsServer|*bool|`MetricsServerEnabled` is a Boolean flag that enables metrics-server.

|metricsServer|*link:metricsserver.adoc[MetricsServer]|`MetricsServer` defines settings for the MetricsServer component.
|metricsServer|*link:metricsserverconfig.adoc[MetricsServerConfig]|`MetricsServer` defines settings for the MetricsServer component.

|k8sPrometheusAdapter|*link:k8sprometheusadapter.adoc[K8sPrometheusAdapter]|`K8sPrometheusAdapter` defines settings for the Prometheus Adapter component.

Expand Down
4 changes: 3 additions & 1 deletion Documentation/openshiftdocs/modules/metricsserver.adoc
Expand Up @@ -18,11 +18,13 @@ Appears in: link:clustermonitoringconfiguration.adoc[ClusterMonitoringConfigurat
[options="header"]
|===
| Property | Type | Description
|enableMetricsServer|*bool|`EnableMetricsServer` is a Boolean flag that enables metrics-server.

|nodeSelector|map[string]string|Defines the nodes on which the pods are scheduled.

|tolerations|[]v1.Toleration|Defines tolerations for the pods.

|resources|*v1.ResourceRequirements|Defines resource requests and limits for the Prometheus container.
|resources|*v1.ResourceRequirements|Defines resource requests and limits for the Metrics Server container.

|===

Expand Down
31 changes: 31 additions & 0 deletions Documentation/openshiftdocs/modules/metricsserverconfig.adoc
@@ -0,0 +1,31 @@
// DO NOT EDIT THE CONTENT IN THIS FILE. It is automatically generated from the
// source code for the Cluster Monitoring Operator. Any changes made to this
// file will be overwritten when the content is re-generated. If you wish to
// make edits, read the docgen utility instructions in the source code for the
// CMO.
:_content-type: ASSEMBLY

== MetricsServerConfig

=== Description

The `MetricsServerConfig` resource defines settings for the MetricsServer component.



Appears in: link:clustermonitoringconfiguration.adoc[ClusterMonitoringConfiguration]

[options="header"]
|===
| Property | Type | Description
|enabled|*bool|`Enabled` is a Boolean flag that enables or disables metrics-server.

|nodeSelector|map[string]string|Defines the nodes on which the pods are scheduled.

|tolerations|[]v1.Toleration|Defines tolerations for the pods.

|resources|*v1.ResourceRequirements|Defines resource requests and limits for the Metrics Server container.

|===

link:../index.adoc[Back to TOC]
4 changes: 4 additions & 0 deletions manifests/image-references
Expand Up @@ -70,3 +70,7 @@ spec:
from:
kind: DockerImage
name: quay.io/openshift/origin-monitoring-plugin:latest
- name: metrics-server
from:
kind: DockerImage
name: registry.k8s.io/metrics-server/metrics-server:v0.6.3
9 changes: 9 additions & 0 deletions pkg/client/client.go
Expand Up @@ -915,6 +915,15 @@ func (c *Client) DeleteSecret(ctx context.Context, s *v1.Secret) error {
return err
}

func (c *Client) DeleteAPIService(ctx context.Context, apiService *apiregistrationv1.APIService) error {
err := c.aggclient.ApiregistrationV1().APIServices().Delete(ctx, apiService.GetName(), metav1.DeleteOptions{})
if apierrors.IsNotFound(err) {
return nil
}

return err
}

func (c *Client) WaitForPrometheus(ctx context.Context, p *monv1.Prometheus) error {
var lastErr error
if err := wait.Poll(time.Second*10, time.Minute*5, func() (bool, error) {
Expand Down
8 changes: 6 additions & 2 deletions pkg/manifests/config.go
Expand Up @@ -125,6 +125,7 @@ func (c Config) GetThanosRulerAlertmanagerConfigs() []AdditionalAlertmanagerConf
}

type Images struct {
MetricsServer string
K8sPrometheusAdapter string
PromLabelProxy string
PrometheusOperatorAdmissionWebhook string
Expand Down Expand Up @@ -223,8 +224,8 @@ func NewConfig(content io.Reader, tp bool) (*Config, error) {
return nil, errors.Wrap(ErrConfigValidation, fmt.Sprintf(`%q is not supported, supported collection profiles are: %q`, c.ClusterMonitoringConfiguration.PrometheusK8sConfig.CollectionProfile, SupportedCollectionProfiles.String()))
}

if c.ClusterMonitoringConfiguration.MetricsServerEnabled != nil && !tp {
return nil, errors.Wrap(ErrConfigValidation, "enableMetricsServer is a TechPreview feature, to be able to deploy it please enable TechPreview")
if c.ClusterMonitoringConfiguration.MetricsServerConfig != nil && !tp {
return nil, errors.Wrap(ErrConfigValidation, "Metrics Server is a TechPreview feature, to be able to deploy it please enable TechPreview")
}

return res, nil
Expand Down Expand Up @@ -325,6 +326,9 @@ func (c *Config) SetImages(images map[string]string) {
c.Images.OpenShiftStateMetrics = images["openshift-state-metrics"]
c.Images.Thanos = images["thanos"]
c.Images.MonitoringPlugin = images["monitoring-plugin"]
// Till image is updated in CVO
// c.Images.MetricsServer = images["metrics-server"]
c.Images.MetricsServer = "registry.k8s.io/metrics-server/metrics-server:v0.6.3"
}

func (c *Config) SetTelemetryMatches(matches []string) {
Expand Down
70 changes: 70 additions & 0 deletions pkg/manifests/manifests.go
Expand Up @@ -1801,6 +1801,76 @@ func (f *Factory) PrometheusUserWorkloadPrometheusServiceMonitor() (*monv1.Servi
return f.NewServiceMonitor(f.assets.MustNewAssetReader(PrometheusUserWorkloadPrometheusServiceMonitor))
}

func (f *Factory) MetricsServerServiceAccount() (*v1.ServiceAccount, error) {
return f.NewServiceAccount(f.assets.MustNewAssetReader(MetricsServerServiceAccount))
}

func (f *Factory) MetricsServerClusterRole() (*rbacv1.ClusterRole, error) {
return f.NewClusterRole(f.assets.MustNewAssetReader(MetricsServerClusterRole))
}

func (f *Factory) MetricsServerClusterRoleBinding() (*rbacv1.ClusterRoleBinding, error) {
return f.NewClusterRoleBinding(f.assets.MustNewAssetReader(MetricsServerClusterRoleBinding))
}

func (f *Factory) MetricsServerClusterRoleAggregatedMetricsReader() (*rbacv1.ClusterRole, error) {
return f.NewClusterRole(f.assets.MustNewAssetReader(MetricsServerClusterRoleAggregatedMetricsReader))
}

func (f *Factory) MetricsServerClusterRoleBindingAuthDelegator() (*rbacv1.ClusterRoleBinding, error) {
return f.NewClusterRoleBinding(f.assets.MustNewAssetReader(MetricsServerClusterRoleBindingAuthDelegator))
}

func (f *Factory) MetricsServerRoleBindingAuthReader() (*rbacv1.RoleBinding, error) {
return f.NewRoleBinding(f.assets.MustNewAssetReader(MetricsServerRoleBindingAuthReader))
}

func (f *Factory) MetricsServerDeployment() (*appsv1.Deployment, error) {
d, err := f.NewDeployment(f.assets.MustNewAssetReader(MetricsServerDeployment))
if err != nil {
return nil, err
}
for i, container := range d.Spec.Template.Spec.Containers {
switch container.Name {
case "metrics-server":
d.Spec.Template.Spec.Containers[i].Image = f.config.Images.MetricsServer

if f.config.ClusterMonitoringConfiguration.MetricsServerConfig != nil {
if f.config.ClusterMonitoringConfiguration.MetricsServerConfig.Resources != nil {
d.Spec.Template.Spec.Containers[i].Resources = *f.config.ClusterMonitoringConfiguration.MetricsServerConfig.Resources
}

if f.config.ClusterMonitoringConfiguration.MetricsServerConfig.NodeSelector != nil {
d.Spec.Template.Spec.NodeSelector = f.config.ClusterMonitoringConfiguration.MetricsServerConfig.NodeSelector
}

if f.config.ClusterMonitoringConfiguration.MetricsServerConfig.Tolerations != nil {
d.Spec.Template.Spec.Tolerations = f.config.ClusterMonitoringConfiguration.MetricsServerConfig.Tolerations
}
}

}
}

return d, nil
}

func (f *Factory) MetricsServerPodDisruptionBudget() (*policyv1.PodDisruptionBudget, error) {
return f.NewPodDisruptionBudget(f.assets.MustNewAssetReader(MetricsServerPodDisruptionBudget))
}

func (f *Factory) MetricsServerService() (*v1.Service, error) {
return f.NewService(f.assets.MustNewAssetReader(MetricsServerService))
}

func (f *Factory) MetricsServerServiceMonitor() (*monv1.ServiceMonitor, error) {
return f.NewServiceMonitor(f.assets.MustNewAssetReader(MetricsServerServiceMonitor))
}

func (f *Factory) MetricsServerAPIService() (*apiregistrationv1.APIService, error) {
return f.NewAPIService(f.assets.MustNewAssetReader(MetricsServerAPIService))
}

func (f *Factory) PrometheusAdapterClusterRole() (*rbacv1.ClusterRole, error) {
return f.NewClusterRole(f.assets.MustNewAssetReader(PrometheusAdapterClusterRole))
}
Expand Down
12 changes: 6 additions & 6 deletions pkg/manifests/types.go
Expand Up @@ -43,10 +43,8 @@ type ClusterMonitoringConfiguration struct {
UserWorkloadEnabled *bool `json:"enableUserWorkload,omitempty"`
// OmitFromDoc
HTTPConfig *HTTPConfig `json:"http,omitempty"`
// `MetricsServerEnabled` is a Boolean flag that enables metrics-server.
MetricsServerEnabled *bool `json:"enableMetricsServer,omitempty"`
// `MetricsServer` defines settings for the MetricsServer component.
MetricsServer *MetricsServer `json:"metricsServer,omitempty"`
MetricsServerConfig *MetricsServerConfig `json:"metricsServer,omitempty"`
// `K8sPrometheusAdapter` defines settings for the Prometheus Adapter component.
K8sPrometheusAdapter *K8sPrometheusAdapter `json:"k8sPrometheusAdapter,omitempty"`
// `KubeStateMetricsConfig` defines settings for the `kube-state-metrics` agent.
Expand Down Expand Up @@ -105,13 +103,15 @@ type AlertmanagerMainConfig struct {
VolumeClaimTemplate *monv1.EmbeddedPersistentVolumeClaim `json:"volumeClaimTemplate,omitempty"`
}

// The `MetricsServer` resource defines settings for the MetricsServer component.
type MetricsServer struct {
// The `MetricsServerConfig` resource defines settings for the MetricsServer component.
type MetricsServerConfig struct {
// `Enabled` is a Boolean flag that enables or disables metrics-server.
Enabled *bool `json:"enabled,omitempty"`
// Defines the nodes on which the pods are scheduled.
NodeSelector map[string]string `json:"nodeSelector,omitempty"`
// Defines tolerations for the pods.
Tolerations []v1.Toleration `json:"tolerations,omitempty"`
// Defines resource requests and limits for the Prometheus container.
// Defines resource requests and limits for the Metrics Server container.
Resources *v1.ResourceRequirements `json:"resources,omitempty"`
}

Expand Down
1 change: 1 addition & 0 deletions pkg/operator/operator.go
Expand Up @@ -742,6 +742,7 @@ func (o *Operator) sync(ctx context.Context, key string) error {
tasks.NewTaskSpec("Updating kube-state-metrics", tasks.NewKubeStateMetricsTask(o.client, factory)),
tasks.NewTaskSpec("Updating openshift-state-metrics", tasks.NewOpenShiftStateMetricsTask(o.client, factory)),
tasks.NewTaskSpec("Updating prometheus-adapter", tasks.NewPrometheusAdapterTask(ctx, o.namespace, o.client, factory, config)),
tasks.NewTaskSpec("Updating metrics-server", tasks.NewMetricsServerTask(ctx, o.namespace, o.client, factory, config)),
tasks.NewTaskSpec("Updating Telemeter client", tasks.NewTelemeterClientTask(o.client, factory, config)),
tasks.NewTaskSpec("Updating Thanos Querier", tasks.NewThanosQuerierTask(o.client, factory, config)),
tasks.NewTaskSpec("Updating User Workload Thanos Ruler", tasks.NewThanosRulerUserWorkloadTask(o.client, factory, config)),
Expand Down

0 comments on commit 8c3dfd5

Please sign in to comment.