diff --git a/packages/apps/kubernetes/templates/cluster.yaml b/packages/apps/kubernetes/templates/cluster.yaml index 3be0f0d9..a6d596c3 100644 --- a/packages/apps/kubernetes/templates/cluster.yaml +++ b/packages/apps/kubernetes/templates/cluster.yaml @@ -29,6 +29,7 @@ spec: {{- range .group.roles }} node-role.kubernetes.io/{{ . }}: "" {{- end }} + cluster.x-k8s.io/deployment-name: {{ $.Release.Name }}-{{ .groupName }} spec: domain: {{- if and .group.resources .group.resources.cpu }} @@ -126,6 +127,21 @@ spec: replicas: 2 version: 1.30.1 --- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ .Release.Name }} + namespace: {{ .Release.Namespace }} +spec: + replicas: 2 + minReplicas: 1 + kind: kubernetes + type: control-plane + selector: + kamaji.clastix.io/component: deployment + kamaji.clastix.io/name: {{ .Release.Name }} + version: {{ $.Chart.Version }} +--- apiVersion: infrastructure.cluster.x-k8s.io/v1alpha1 kind: KubevirtCluster metadata: @@ -172,6 +188,7 @@ spec: --- {{- $context := deepCopy $ }} {{- $_ := set $context "group" $group }} +{{- $_ := set $context "groupName" $groupName }} {{- $kubevirtmachinetemplate := include "kubevirtmachinetemplate" $context }} {{- $kubevirtmachinetemplateHash := $kubevirtmachinetemplate | sha256sum | trunc 6 }} {{- $kubevirtmachinetemplateName := printf "%s-%s-%s" $.Release.Name $groupName $kubevirtmachinetemplateHash }} @@ -255,6 +272,21 @@ spec: - type: Ready status: "False" timeout: 300s +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ $.Release.Name }}-{{ $groupName }} + namespace: {{ $.Release.Namespace }} +spec: + minReplicas: {{ $group.minReplicas }} + kind: kubernetes + type: worker + selector: + cluster.x-k8s.io/cluster-name: {{ $.Release.Name }} + cluster.x-k8s.io/deployment-name: {{ $.Release.Name }}-{{ $groupName }} + cluster.x-k8s.io/role: worker + version: {{ $.Chart.Version }} {{- end }} --- {{- /* diff --git a/packages/apps/kubernetes/templates/dashboard-resourcemap.yaml b/packages/apps/kubernetes/templates/dashboard-resourcemap.yaml index 01c38900..aebb87df 100644 --- a/packages/apps/kubernetes/templates/dashboard-resourcemap.yaml +++ b/packages/apps/kubernetes/templates/dashboard-resourcemap.yaml @@ -24,3 +24,13 @@ rules: resourceNames: - {{ .Release.Name }} verbs: ["get", "list", "watch"] +- apiGroups: + - cozystack.io + resources: + - workloadmonitors + resourceNames: + - {{ .Release.Name }} + {{- range $groupName, $group := .Values.nodeGroups }} + - {{ $.Release.Name }}-{{ $groupName }} + {{- end }} + verbs: ["get", "list", "watch"] diff --git a/packages/apps/postgres/templates/dashboard-resourcemap.yaml b/packages/apps/postgres/templates/dashboard-resourcemap.yaml index dc80d4cb..f858d1b8 100644 --- a/packages/apps/postgres/templates/dashboard-resourcemap.yaml +++ b/packages/apps/postgres/templates/dashboard-resourcemap.yaml @@ -19,3 +19,10 @@ rules: resourceNames: - {{ .Release.Name }}-credentials verbs: ["get", "list", "watch"] +- apiGroups: + - cozystack.io + resources: + - workloadmonitors + resourceNames: + - {{ .Release.Name }} + verbs: ["get", "list", "watch"] diff --git a/packages/apps/postgres/templates/db.yaml b/packages/apps/postgres/templates/db.yaml index 8319ac4f..22db426b 100644 --- a/packages/apps/postgres/templates/db.yaml +++ b/packages/apps/postgres/templates/db.yaml @@ -29,3 +29,17 @@ spec: inheritedMetadata: labels: policy.cozystack.io/allow-to-apiserver: "true" +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ $.Release.Name }} +spec: + replicas: {{ .Values.replicas }} + minReplicas: 1 + kind: postgres + type: postgres + selector: + cnpg.io/cluster: {{ .Release.Name }} + cnpg.io/podRole: instance + version: {{ $.Chart.Version }} diff --git a/packages/apps/redis/templates/dashboard-resourcemap.yaml b/packages/apps/redis/templates/dashboard-resourcemap.yaml index 45958e8f..f2682c71 100644 --- a/packages/apps/redis/templates/dashboard-resourcemap.yaml +++ b/packages/apps/redis/templates/dashboard-resourcemap.yaml @@ -20,3 +20,11 @@ rules: resourceNames: - "{{ .Release.Name }}-auth" verbs: ["get", "list", "watch"] +- apiGroups: + - cozystack.io + resources: + - workloadmonitors + resourceNames: + - {{ .Release.Name }}-redis + - {{ .Release.Name }}-sentinel + verbs: ["get", "list", "watch"] diff --git a/packages/apps/redis/templates/redisfailover.yaml b/packages/apps/redis/templates/redisfailover.yaml index 0d7c4e03..0dfd2f56 100644 --- a/packages/apps/redis/templates/redisfailover.yaml +++ b/packages/apps/redis/templates/redisfailover.yaml @@ -73,3 +73,34 @@ spec: auth: secretPath: {{ .Release.Name }}-auth {{- end }} + +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ $.Release.Name }}-redis + namespace: {{ $.Release.Namespace }} +spec: + minReplicas: 1 + replicas: {{ .Values.replicas }} + kind: redis + type: redis + selector: + app.kubernetes.io/component: redis + app.kubernetes.io/instance: {{ $.Release.Name }} + version: {{ $.Chart.Version }} +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ $.Release.Name }}-sentinel + namespace: {{ $.Release.Namespace }} +spec: + minReplicas: 2 + replicas: 3 + kind: redis + type: sentinel + selector: + app.kubernetes.io/component: sentinel + app.kubernetes.io/instance: {{ $.Release.Name }} + version: {{ $.Chart.Version }} diff --git a/packages/apps/virtual-machine/templates/dashboard-resourcemap.yaml b/packages/apps/virtual-machine/templates/dashboard-resourcemap.yaml new file mode 100644 index 00000000..22af2faa --- /dev/null +++ b/packages/apps/virtual-machine/templates/dashboard-resourcemap.yaml @@ -0,0 +1,25 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ .Release.Name }}-dashboard-resources +rules: +- apiGroups: + - cozystack.io + resources: + - workloadmonitors + resourceNames: + - {{ .Release.Name }} + verbs: ["get", "list", "watch"] +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ $.Release.Name }} +spec: + replicas: 1 + minReplicas: 1 + kind: virtual-machine + type: virtual-machine + selector: + vm.kubevirt.io/name: {{ .Release.Name }} + version: {{ $.Chart.Version }} diff --git a/packages/apps/vm-instance/templates/dashboard-resourcemap.yaml b/packages/apps/vm-instance/templates/dashboard-resourcemap.yaml new file mode 100644 index 00000000..e1b7242b --- /dev/null +++ b/packages/apps/vm-instance/templates/dashboard-resourcemap.yaml @@ -0,0 +1,26 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ .Release.Name }}-dashboard-resources +rules: +- apiGroups: + - cozystack.io + resources: + - workloadmonitors + resourceNames: + - {{ .Release.Name }} + verbs: ["get", "list", "watch"] +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ $.Release.Name }} + namespace: {{ $.Release.Namespace }} +spec: + replicas: 1 + minReplicas: 1 + kind: virtual-machine + type: virtual-machine + selector: + vm.kubevirt.io/name: {{ $.Release.Name }} + version: {{ $.Chart.Version }} diff --git a/packages/extra/etcd/templates/dashboard-resourcemap.yaml b/packages/extra/etcd/templates/dashboard-resourcemap.yaml new file mode 100644 index 00000000..25a0dfd3 --- /dev/null +++ b/packages/extra/etcd/templates/dashboard-resourcemap.yaml @@ -0,0 +1,19 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ .Release.Name }}-dashboard-resources +rules: +- apiGroups: + - "" + resources: + - services + resourceNames: + - etcd + verbs: ["get", "list", "watch"] +- apiGroups: + - cozystack.io + resources: + - workloadmonitors + resourceNames: + - {{ .Release.Name }} + verbs: ["get", "list", "watch"] diff --git a/packages/extra/etcd/templates/etcd-cluster.yaml b/packages/extra/etcd/templates/etcd-cluster.yaml index 025363a2..d90efe2a 100644 --- a/packages/extra/etcd/templates/etcd-cluster.yaml +++ b/packages/extra/etcd/templates/etcd-cluster.yaml @@ -193,3 +193,19 @@ spec: issuerRef: name: etcd-issuer kind: Issuer +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ $.Release.Name }} + namespace: {{ $.Release.Namespace }} +spec: + replicas: {{ .Values.replicas }} + minReplicas: {{ div .Values.replicas 2 | add1 }} + kind: etcd + type: etcd + selector: + app.kubernetes.io/instance: etcd + app.kubernetes.io/managed-by: etcd-operator + app.kubernetes.io/name: etcd + version: {{ $.Chart.Version }} diff --git a/packages/extra/ingress/templates/dashboard-resourcemap.yaml b/packages/extra/ingress/templates/dashboard-resourcemap.yaml new file mode 100644 index 00000000..38b9a033 --- /dev/null +++ b/packages/extra/ingress/templates/dashboard-resourcemap.yaml @@ -0,0 +1,19 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ .Release.Name }}-dashboard-resources +rules: +- apiGroups: + - "" + resources: + - services + resourceNames: + - {{ trimPrefix "tenant-" .Release.Namespace }}-ingress-controller + verbs: ["get", "list", "watch"] +- apiGroups: + - cozystack.io + resources: + - workloadmonitors + resourceNames: + - {{ .Release.Name }} + verbs: ["get", "list", "watch"] diff --git a/packages/extra/ingress/templates/workloadmonitor.yaml b/packages/extra/ingress/templates/workloadmonitor.yaml new file mode 100644 index 00000000..c3f286f6 --- /dev/null +++ b/packages/extra/ingress/templates/workloadmonitor.yaml @@ -0,0 +1,16 @@ +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ $.Release.Name }} + namespace: {{ $.Release.Namespace }} +spec: + replicas: {{ .Values.replicas }} + minReplicas: {{ div .Values.replicas 2 | add1 }} + kind: ingress + type: controller + selector: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: ingress-nginx-system + app.kubernetes.io/name: ingress-nginx + version: {{ $.Chart.Version }} diff --git a/packages/extra/monitoring/templates/alerta/alerta-db.yaml b/packages/extra/monitoring/templates/alerta/alerta-db.yaml index e06c322c..91c4e4aa 100644 --- a/packages/extra/monitoring/templates/alerta/alerta-db.yaml +++ b/packages/extra/monitoring/templates/alerta/alerta-db.yaml @@ -14,3 +14,17 @@ spec: inheritedMetadata: labels: policy.cozystack.io/allow-to-apiserver: "true" +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: alerta-db +spec: + replicas: 2 + minReplicas: 1 + kind: monitoring + type: postgres + selector: + cnpg.io/cluster: alerta-db + cnpg.io/podRole: instance + version: {{ $.Chart.Version }} diff --git a/packages/extra/monitoring/templates/alerta/alerta.yaml b/packages/extra/monitoring/templates/alerta/alerta.yaml index 928acb82..8158eed6 100644 --- a/packages/extra/monitoring/templates/alerta/alerta.yaml +++ b/packages/extra/monitoring/templates/alerta/alerta.yaml @@ -170,6 +170,20 @@ spec: port: name: http --- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: alerta +spec: + replicas: 1 + minReplicas: 1 + kind: monitoring + type: alerta + selector: + app: alerta + release: alerta + version: {{ $.Chart.Version }} +--- apiVersion: v1 kind: Secret metadata: @@ -217,3 +231,17 @@ spec: podMetadata: labels: policy.cozystack.io/allow-to-apiserver: "true" +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: alertmanager +spec: + replicas: 3 + minReplicas: 2 + kind: monitoring + type: alertmanager + selector: + app.kubernetes.io/instance: alertmanager + app.kubernetes.io/name: vmalertmanager + version: {{ $.Chart.Version }} diff --git a/packages/extra/monitoring/templates/dashboard-resourcemap.yaml b/packages/extra/monitoring/templates/dashboard-resourcemap.yaml index f15714da..a13d18be 100644 --- a/packages/extra/monitoring/templates/dashboard-resourcemap.yaml +++ b/packages/extra/monitoring/templates/dashboard-resourcemap.yaml @@ -26,3 +26,28 @@ rules: - grafana-service - alerta verbs: ["get", "list", "watch"] +- apiGroups: + - cozystack.io + resources: + - workloadmonitors + resourceNames: + - alerta + - grafana + - grafana-db + - alerta-db + - alermanager + {{- range .Values.metricsStorages }} + - {{ .name }}-vmstorage + - {{ .name }}-vmselect + - {{ .name }}-vminsert + {{- end }} + {{- range .Values.logsStorages }} + - {{ $.Release.Name }}-vlogs-{{ .name }} + {{- end }} + {{- range .Values.metricsStorages }} + - vmalert-{{ .name }} + {{- break }} + {{- end }} + verbs: ["get", "list", "watch"] + + diff --git a/packages/extra/monitoring/templates/grafana/db.yaml b/packages/extra/monitoring/templates/grafana/db.yaml index e35e5aa4..9ec952c3 100644 --- a/packages/extra/monitoring/templates/grafana/db.yaml +++ b/packages/extra/monitoring/templates/grafana/db.yaml @@ -10,3 +10,17 @@ spec: inheritedMetadata: labels: policy.cozystack.io/allow-to-apiserver: "true" +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: grafana-db +spec: + replicas: 2 + minReplicas: 1 + kind: monitoring + type: postgres + selector: + cnpg.io/cluster: grafana-db + cnpg.io/podRole: instance + version: {{ $.Chart.Version }} diff --git a/packages/extra/monitoring/templates/grafana/grafana.yaml b/packages/extra/monitoring/templates/grafana/grafana.yaml index eb6a24ed..234618e3 100644 --- a/packages/extra/monitoring/templates/grafana/grafana.yaml +++ b/packages/extra/monitoring/templates/grafana/grafana.yaml @@ -114,3 +114,16 @@ spec: - hosts: - "{{ printf "grafana.%s" (.Values.host | default $host) }}" secretName: grafana-ingress-tls +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: grafana +spec: + replicas: 2 + minReplicas: 1 + kind: monitoring + type: grafana + selector: + app: grafana + version: {{ $.Chart.Version }} diff --git a/packages/extra/monitoring/templates/vlogs/vlogs.yaml b/packages/extra/monitoring/templates/vlogs/vlogs.yaml index 331a55e0..8c9e40ac 100644 --- a/packages/extra/monitoring/templates/vlogs/vlogs.yaml +++ b/packages/extra/monitoring/templates/vlogs/vlogs.yaml @@ -12,4 +12,19 @@ spec: accessModes: [ReadWriteOnce] retentionPeriod: "{{ .retentionPeriod }}" removePvcAfterDelete: true +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: vlogs-{{ .name }} +spec: + replicas: 1 + minReplicas: 1 + kind: monitoring + type: vlogs + selector: + app.kubernetes.io/component: monitoring + app.kubernetes.io/instance: {{ .name }} + app.kubernetes.io/name: vlogs + version: {{ $.Chart.Version }} {{- end }} diff --git a/packages/extra/monitoring/templates/vm/vmalert.yaml b/packages/extra/monitoring/templates/vm/vmalert.yaml index 9f87a80a..8db6a2ed 100644 --- a/packages/extra/monitoring/templates/vm/vmalert.yaml +++ b/packages/extra/monitoring/templates/vm/vmalert.yaml @@ -18,5 +18,19 @@ spec: url: http://vminsert-{{ .name }}.{{ $.Release.Namespace }}.svc:8480/insert/0/prometheus/api/v1/write resources: {} selectAllByDefault: true +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: vmalert-{{ .name }} +spec: + replicas: 1 + minReplicas: 1 + kind: monitoring + type: vmalert + selector: + app.kubernetes.io/instance: vmalert-{{ .name }} + app.kubernetes.io/name: vmalert + version: {{ $.Chart.Version }} {{- break }} {{- end }} diff --git a/packages/extra/monitoring/templates/vm/vmcluster.yaml b/packages/extra/monitoring/templates/vm/vmcluster.yaml index 6b298437..1391e55e 100644 --- a/packages/extra/monitoring/templates/vm/vmcluster.yaml +++ b/packages/extra/monitoring/templates/vm/vmcluster.yaml @@ -67,4 +67,49 @@ spec: requests: storage: {{ .storage }} storageDataPath: /vm-data +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ .name }}-vmstorage +spec: + replicas: 2 + minReplicas: 1 + kind: monitoring + type: vmstorage + selector: + app.kubernetes.io/component: monitoring + app.kubernetes.io/instance: {{ .name }} + app.kubernetes.io/name: vmstorage + version: {{ $.Chart.Version }} +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ .name }}-vmselect +spec: + replicas: 2 + minReplicas: 1 + kind: monitoring + type: vmselect + selector: + app.kubernetes.io/component: monitoring + app.kubernetes.io/instance: {{ .name }} + app.kubernetes.io/name: vmselect + version: {{ $.Chart.Version }} +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ .name }}-vminsert +spec: + replicas: 2 + minReplicas: 1 + kind: monitoring + type: vminsert + selector: + app.kubernetes.io/component: monitoring + app.kubernetes.io/instance: {{ .name }} + app.kubernetes.io/name: vminsert + version: {{ $.Chart.Version }} {{- end }} diff --git a/packages/extra/seaweedfs/templates/dashboard-resourcemap.yaml b/packages/extra/seaweedfs/templates/dashboard-resourcemap.yaml new file mode 100644 index 00000000..49b55aad --- /dev/null +++ b/packages/extra/seaweedfs/templates/dashboard-resourcemap.yaml @@ -0,0 +1,29 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ .Release.Name }}-dashboard-resources +rules: +- apiGroups: + - "" + resources: + - services + resourceNames: + - {{ $.Release.Name }}-s3 + verbs: ["get", "list", "watch"] +- apiGroups: + - networking.k8s.io + resources: + - ingresses + resourceNames: + - ingress-{{ $.Release.Name }}-s3 + verbs: ["get", "list", "watch"] +- apiGroups: + - cozystack.io + resources: + - workloadmonitors + resourceNames: + - {{ $.Release.Name }}-master + - {{ $.Release.Name }}-filer + - {{ $.Release.Name }}-volume + - {{ $.Release.Name }}-db + verbs: ["get", "list", "watch"] diff --git a/packages/extra/seaweedfs/templates/seaweedfs.yaml b/packages/extra/seaweedfs/templates/seaweedfs.yaml index 70cf06d2..5ab911b5 100644 --- a/packages/extra/seaweedfs/templates/seaweedfs.yaml +++ b/packages/extra/seaweedfs/templates/seaweedfs.yaml @@ -60,3 +60,59 @@ spec: cosi: driverName: "{{ .Release.Namespace }}.seaweedfs.objectstorage.k8s.io" bucketClassName: "{{ .Release.Namespace }}" +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ $.Release.Name }}-master +spec: + replicas: 3 + minReplicas: 2 + kind: seaweedfs + type: master + selector: + app.kubernetes.io/component: master + app.kubernetes.io/name: seaweedfs + version: {{ $.Chart.Version }} +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ $.Release.Name }}-filer +spec: + replicas: 2 + minReplicas: 1 + kind: seaweedfs + type: filer + selector: + app.kubernetes.io/component: filer + app.kubernetes.io/name: seaweedfs + version: {{ $.Chart.Version }} +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ $.Release.Name }}-volume +spec: + replicas: {{ .Values.replicas }} + minReplicas: {{ div .Values.replicas 2 | add1 }} + kind: seaweedfs + type: volume + selector: + app.kubernetes.io/component: volume + app.kubernetes.io/name: seaweedfs + version: {{ $.Chart.Version }} +--- +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ $.Release.Name }}-db +spec: + replicas: 2 + minReplicas: 1 + kind: seaweedfs + type: postgres + selector: + cnpg.io/cluster: seaweedfs-db + cnpg.io/podRole: instance + version: {{ $.Chart.Version }}