Skip to content

Commit

Permalink
support prometheus metrics (#11)
Browse files Browse the repository at this point in the history
* feat: add prometheus metrics
* chore: update pre-commit
* feat: adaptor metrics
* feat: update image version

Signed-off-by: Gaius <[email protected]>
  • Loading branch information
gaius-qi authored Sep 30, 2021
1 parent 83e81c6 commit ed14be3
Show file tree
Hide file tree
Showing 22 changed files with 454 additions and 42 deletions.
7 changes: 6 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,13 @@ repos:
- id: end-of-file-fixer
- id: trailing-whitespace

- repo: https://github.com/gruntwork-io/pre-commit
rev: v0.1.15
hooks:
- id: helmlint

- repo: https://github.com/norwoodj/helm-docs
rev: v1.2.0
rev: v1.3.0
hooks:
- id: helm-docs
files: (README\.md\.gotmpl|(Chart|requirements|values)\.yaml)$
23 changes: 12 additions & 11 deletions charts/dragonfly/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ name: dragonfly
description: Dragonfly is an intelligent P2P based image and file distribution system
icon: https://raw.githubusercontent.com/dragonflyoss/Dragonfly2/main/docs/en/images/logo/dragonfly.svg
type: application
version: "0.5.5"
appVersion: "0.5.5"
version: "0.5.6"
appVersion: "0.5.6"
keywords:
- dragonfly
- d7y
Expand All @@ -18,21 +18,22 @@ sources:

annotations:
artifacthub.io/changes: |
- Custom configuration with wait-for initcontainer
- Add prometheus monitor
- Update dragonfly image version
artifacthub.io/links: |
- name: Chart Source
url: https://github.com/dragonflyoss/helm-charts
- name: Source
url: https://github.com/dragonflyoss/Dragonfly2
artifacthub.io/images: |
- name: dragonflyoss/manager
image: dragonflyoss/manager:v2.0.0
- name: dragonflyoss/cdn
image: dragonflyoss/cdn:v2.0.0
- name: dragonflyoss/dfdaemon
image: dragonflyoss/dfdaemon:v2.0.0
- name: dragonflyoss/scheduler
image: dragonflyoss/scheduler:v2.0.0
- name: manager
image: dragonflyoss/manager:v2.0.1
- name: cdn
image: dragonflyoss/cdn:v2.0.1
- name: dfdaemon
image: dragonflyoss/dfdaemon:v2.0.1
- name: scheduler
image: dragonflyoss/scheduler:v2.0.1
dependencies:
- name: mysql
Expand Down
58 changes: 48 additions & 10 deletions charts/dragonfly/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Dragonfly Helm Chart

![Version: 0.5.5](https://img.shields.io/badge/Version-0.5.5-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.5.5](https://img.shields.io/badge/AppVersion-0.5.5-informational?style=flat-square)
![Version: 0.5.6](https://img.shields.io/badge/Version-0.5.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.5.6](https://img.shields.io/badge/AppVersion-0.5.6-informational?style=flat-square)

Provide efficient, stable, secure, low-cost file and image distribution services to be the best practice and standard solution in the related Cloud-Native area.

Expand Down Expand Up @@ -132,13 +132,24 @@ helm delete dragonfly --namespace dragonfly-system
| cdn.initContainer.image | string | `"busybox"` | Init container image repository |
| cdn.initContainer.pullPolicy | string | `"IfNotPresent"` | Container image pull policy |
| cdn.initContainer.tag | string | `"latest"` | Init container image tag |
| cdn.metrics.enable | bool | `false` | Enable manager metrics |
| cdn.metrics.prometheusRule.additionalLabels | object | `{}` | Additional labels |
| cdn.metrics.prometheusRule.enable | bool | `false` | Enable prometheus rule ref: https://github.com/coreos/prometheus-operator |
| cdn.metrics.prometheusRule.rules | list | `[]` | Prometheus rules |
| cdn.metrics.service.annotations | object | `{}` | Service annotations |
| cdn.metrics.service.labels | object | `{}` | Service labels |
| cdn.metrics.service.type | string | `"ClusterIP"` | Service type |
| cdn.metrics.serviceMonitor.additionalLabels | object | `{}` | Additional labels |
| cdn.metrics.serviceMonitor.enable | bool | `false` | Enable prometheus service monitor ref: https://github.com/coreos/prometheus-operator |
| cdn.metrics.serviceMonitor.interval | string | `"30s"` | Interval at which metrics should be scraped |
| cdn.metrics.serviceMonitor.scrapeTimeout | string | `"10s"` | Timeout after which the scrape is ended |
| cdn.name | string | `"cdn"` | CDN name |
| cdn.nameOverride | string | `""` | Override scheduler name |
| cdn.nginxContiainerPort | int | `8001` | Nginx containerPort for downloading |
| cdn.nodeSelector | object | `{}` | Node labels for pod assignment |
| cdn.persistence.accessModes | list | `["ReadWriteOnce"]` | Persistence access modes |
| cdn.persistence.annotations | object | `{}` | Persistence annotations |
| cdn.persistence.enabled | bool | `true` | Enable persistence for cdn |
| cdn.persistence.enable | bool | `true` | Enable persistence for cdn |
| cdn.persistence.size | string | `"8Gi"` | Persistence persistence size |
| cdn.podAnnotations | object | `{}` | Pod annotations |
| cdn.podLabels | object | `{}` | Pod labels |
Expand All @@ -148,7 +159,7 @@ helm delete dragonfly --namespace dragonfly-system
| cdn.resources | object | `{"limits":{"cpu":"4","memory":"8Gi"},"requests":{"cpu":"0","memory":"0"}}` | Pod resource requests and limits |
| cdn.service | object | `{"extraPorts":[{"name":"http-nginx","port":8001,"targetPort":8001}],"port":8003,"targetPort":8003,"type":"ClusterIP"}` | Service configuration |
| cdn.statefulsetAnnotations | object | `{}` | Statefulset annotations |
| cdn.tag | string | `"v2.0.0"` | Image tag |
| cdn.tag | string | `"v2.0.1"` | Image tag |
| cdn.terminationGracePeriodSeconds | string | `nil` | Pod terminationGracePeriodSeconds |
| cdn.tolerations | list | `[]` | List of node taints to tolerate |
| clusterDomain | string | `"cluster.local"` | Install application cluster domain |
Expand Down Expand Up @@ -208,7 +219,7 @@ helm delete dragonfly --namespace dragonfly-system
| dfdaemon.priorityClassName | string | `""` | Pod priorityClassName |
| dfdaemon.pullPolicy | string | `"IfNotPresent"` | Image pull policy |
| dfdaemon.resources | object | `{"limits":{"cpu":"2","memory":"2Gi"},"requests":{"cpu":"0","memory":"0"}}` | Pod resource requests and limits |
| dfdaemon.tag | string | `"v2.0.0"` | Image tag |
| dfdaemon.tag | string | `"v2.0.1"` | Image tag |
| dfdaemon.terminationGracePeriodSeconds | string | `nil` | Pod terminationGracePeriodSeconds |
| dfdaemon.tolerations | list | `[]` | List of node taints to tolerate |
| externalManager.grpcPort | int | `65003` | External GRPC service port |
Expand All @@ -231,13 +242,24 @@ helm delete dragonfly --namespace dragonfly-system
| manager.grpcPort | int | `65003` | GRPC service port |
| manager.image | string | `"dragonflyoss/manager"` | Image repository |
| manager.ingress.annotations | object | `{}` | Ingress annotations |
| manager.ingress.enabled | bool | `false` | Enable ingress |
| manager.ingress.enable | bool | `false` | Enable ingress |
| manager.ingress.hosts | list | `[]` | Manager ingress hosts |
| manager.ingress.path | string | `"/"` | Ingress host path |
| manager.ingress.tls | list | `[]` | Ingress TLS configuration |
| manager.initContainer.image | string | `"busybox"` | Init container image repository |
| manager.initContainer.pullPolicy | string | `"IfNotPresent"` | Container image pull policy |
| manager.initContainer.tag | string | `"latest"` | Init container image tag |
| manager.metrics.enable | bool | `false` | Enable manager metrics |
| manager.metrics.prometheusRule.additionalLabels | object | `{}` | Additional labels |
| manager.metrics.prometheusRule.enable | bool | `false` | Enable prometheus rule ref: https://github.com/coreos/prometheus-operator |
| manager.metrics.prometheusRule.rules | list | `[]` | Prometheus rules |
| manager.metrics.service.annotations | object | `{}` | Service annotations |
| manager.metrics.service.labels | object | `{}` | Service labels |
| manager.metrics.service.type | string | `"ClusterIP"` | Service type |
| manager.metrics.serviceMonitor.additionalLabels | object | `{}` | Additional labels |
| manager.metrics.serviceMonitor.enable | bool | `false` | Enable prometheus service monitor ref: https://github.com/coreos/prometheus-operator |
| manager.metrics.serviceMonitor.interval | string | `"30s"` | Interval at which metrics should be scraped |
| manager.metrics.serviceMonitor.scrapeTimeout | string | `"10s"` | Timeout after which the scrape is ended |
| manager.name | string | `"manager"` | Manager name |
| manager.nameOverride | string | `""` | Override manager name |
| manager.nodeSelector | object | `{}` | Node labels for pod assignment |
Expand All @@ -248,8 +270,10 @@ helm delete dragonfly --namespace dragonfly-system
| manager.replicas | int | `3` | Number of Pods to launch |
| manager.resources | object | `{"limits":{"cpu":"2","memory":"4Gi"},"requests":{"cpu":"0","memory":"0"}}` | Pod resource requests and limits |
| manager.restPort | int | `8080` | REST service port |
| manager.serviceAnnotations | object | `{}` | Service annotations |
| manager.tag | string | `"v2.0.0"` | Image tag |
| manager.service.annotations | object | `{}` | Service annotations |
| manager.service.labels | object | `{}` | Service labels |
| manager.service.type | string | `"ClusterIP"` | Service type |
| manager.tag | string | `"v2.0.1"` | Image tag |
| manager.terminationGracePeriodSeconds | string | `nil` | Pod terminationGracePeriodSeconds |
| manager.tolerations | list | `[]` | List of node taints to tolerate |
| mysql.auth.database | string | `"manager"` | Mysql database name |
Expand Down Expand Up @@ -280,6 +304,17 @@ helm delete dragonfly --namespace dragonfly-system
| scheduler.initContainer.image | string | `"busybox"` | Init container image repository |
| scheduler.initContainer.pullPolicy | string | `"IfNotPresent"` | Container image pull policy |
| scheduler.initContainer.tag | string | `"latest"` | Init container image tag |
| scheduler.metrics.enable | bool | `false` | Enable manager metrics |
| scheduler.metrics.prometheusRule.additionalLabels | object | `{}` | Additional labels |
| scheduler.metrics.prometheusRule.enable | bool | `false` | Enable prometheus rule ref: https://github.com/coreos/prometheus-operator |
| scheduler.metrics.prometheusRule.rules | list | `[]` | Prometheus rules |
| scheduler.metrics.service.annotations | object | `{}` | Service annotations |
| scheduler.metrics.service.labels | object | `{}` | Service labels |
| scheduler.metrics.service.type | string | `"ClusterIP"` | Service type |
| scheduler.metrics.serviceMonitor.additionalLabels | object | `{}` | Additional labels |
| scheduler.metrics.serviceMonitor.enable | bool | `false` | Enable prometheus service monitor ref: https://github.com/coreos/prometheus-operator |
| scheduler.metrics.serviceMonitor.interval | string | `"30s"` | Interval at which metrics should be scraped |
| scheduler.metrics.serviceMonitor.scrapeTimeout | string | `"10s"` | Timeout after which the scrape is ended |
| scheduler.name | string | `"scheduler"` | Scheduler name |
| scheduler.nameOverride | string | `""` | Override scheduler name |
| scheduler.nodeSelector | object | `{}` | Node labels for pod assignment |
Expand All @@ -289,10 +324,13 @@ helm delete dragonfly --namespace dragonfly-system
| scheduler.pullPolicy | string | `"IfNotPresent"` | Image pull policy |
| scheduler.replicas | int | `3` | Number of Pods to launch |
| scheduler.resources | object | `{"limits":{"cpu":"4","memory":"8Gi"},"requests":{"cpu":"0","memory":"0"}}` | Pod resource requests and limits |
| scheduler.service | object | `{"port":8002,"targetPort":8002,"type":"ClusterIP"}` | Service configuration |
| scheduler.serviceAnnotations | object | `{}` | Service annotations |
| scheduler.service | object | `{"annotations":{},"port":8002,"targetPort":8002,"type":"ClusterIP"}` | Service configuration |
| scheduler.service.annotations | object | `{}` | Service annotations |
| scheduler.service.port | int | `8002` | Service port |
| scheduler.service.targetPort | int | `8002` | Service targetPort |
| scheduler.service.type | string | `"ClusterIP"` | Service type |
| scheduler.statefulsetAnnotations | object | `{}` | Statefulset annotations |
| scheduler.tag | string | `"v2.0.0"` | Image tag |
| scheduler.tag | string | `"v2.0.1"` | Image tag |
| scheduler.terminationGracePeriodSeconds | string | `nil` | Pod terminationGracePeriodSeconds |
| scheduler.tolerations | list | `[]` | List of node taints to tolerate |

Expand Down
4 changes: 4 additions & 0 deletions charts/dragonfly/templates/cdn/cdn-configmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ data:
keepAlive:
{{ toYaml .Values.cdn.config.base.manager.keepAlive | indent 10 }}
console: {{ .Values.cdn.config.base.console }}
{{- if .Values.cdn.metrics.enable }}
metrics:
addr: ":8000"
{{- end }}
plugins:
{{ toYaml .Values.cdn.config.plugins | indent 6 }}
nginx.conf: |-
Expand Down
8 changes: 6 additions & 2 deletions charts/dragonfly/templates/cdn/cdn-statefulset.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ spec:
protocol: TCP
- containerPort: {{ .Values.cdn.nginxContiainerPort }}
protocol: TCP
{{- if .Values.cdn.metrics.enable }}
- containerPort: 8000
protocol: TCP
{{- end }}
volumeMounts:
- name: config
mountPath: "/etc/dragonfly"
Expand All @@ -91,11 +95,11 @@ spec:
- name: nginx-config
configMap:
name: {{ template "dragonfly.cdn.fullname" $ }}
{{- if not (.Values.cdn.persistence.enabled) }}
{{- if not (.Values.cdn.persistence.enable) }}
- name: storage
emptyDir: {}
{{- end }}
{{- if .Values.cdn.persistence.enabled }}
{{- if .Values.cdn.persistence.enable }}
volumeClaimTemplates:
- metadata:
name: storage
Expand Down
30 changes: 30 additions & 0 deletions charts/dragonfly/templates/cdn/metrics-svc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{{- if .Values.cdn.metrics.enable }}
apiVersion: v1
kind: Service
metadata:
name: {{ template "dragonfly.cdn.fullname" . }}-metrics
labels:
app: {{ template "dragonfly.name" . }}
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
component: {{ .Values.cdn.name }}-metrics
{{- if .Values.cdn.metrics.service.labels }}
{{ toYaml .Values.metrics.service.labels | indent 4 }}
{{- end }}
{{- if .Values.cdn.metrics.service.annotations }}
annotations:
{{ toYaml .Values.cdn.metrics.service.annotations | indent 4 }}
{{- end }}
spec:
type: {{ .Values.cdn.metrics.service.type }}
ports:
- port: 8000
name: http-metrics
targetPort: 8000
protocol: TCP
selector:
app: {{ template "dragonfly.fullname" . }}
component: {{ .Values.cdn.name }}
release: {{ .Release.Name }}
{{- end }}
21 changes: 21 additions & 0 deletions charts/dragonfly/templates/cdn/prometheusrule.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{{- if and .Values.cdn.metrics.enable .Values.cdn.metrics.prometheusRule.enable }}
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: {{ template "dragonfly.cdn.fullname" . }}
labels:
app: {{ template "dragonfly.name" . }}
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
component: {{ .Values.cdn.name }}
{{- if .Values.cdn.metrics.prometheusRule.additionalLabels }}
{{ toYaml .Values.cdn.metrics.prometheusRule.additionalLabels | indent 4 }}
{{- end }}
spec:
{{- with .Values.cdn.metrics.prometheusRule.rules }}
groups:
- name: {{ template "dragonfly.cdn.fullname" $ }}
rules: {{ tpl (toYaml .) $ | nindent 8 }}
{{- end }}
{{- end }}
32 changes: 32 additions & 0 deletions charts/dragonfly/templates/cdn/servicemonitor.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{{- if and .Values.cdn.metrics.enable .Values.cdn.metrics.serviceMonitor.enable }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: {{ template "dragonfly.cdn.fullname" . }}
labels:
app: {{ template "dragonfly.name" . }}
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
component: {{ .Values.cdn.name }}
{{- if .Values.cdn.metrics.serviceMonitor.additionalLabels }}
{{ toYaml .Values.cdn.metrics.serviceMonitor.additionalLabels | indent 4 }}
{{- end }}
spec:
endpoints:
- port: http-metrics
{{- if .Values.cdn.metrics.serviceMonitor.interval }}
interval: {{ .Values.cdn.metrics.serviceMonitor.interval }}
{{- end }}
{{- if .Values.cdn.metrics.serviceMonitor.scrapeTimeout }}
scrapeTimeout: {{ .Values.cdn.metrics.serviceMonitor.scrapeTimeout }}
{{- end }}
namespaceSelector:
matchNames:
- {{ .Release.Namespace }}
selector:
matchLabels:
app: {{ template "dragonfly.fullname" . }}
release: {{ .Release.Name }}
component: {{ .Values.cdn.name }}-metrics
{{- end }}
4 changes: 4 additions & 0 deletions charts/dragonfly/templates/manager/manager-configmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,8 @@ data:
host: {{ .Values.externalRedis.host }}
port: {{ .Values.externalRedis.port }}
{{- end }}
{{- if .Values.manager.metrics.enable }}
metrics:
addr: ":8000"
{{- end }}
{{- end }}
4 changes: 4 additions & 0 deletions charts/dragonfly/templates/manager/manager-deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ spec:
protocol: TCP
- containerPort: {{ .Values.manager.grpcPort }}
protocol: TCP
{{- if .Values.manager.metrics.enable }}
- containerPort: 8000
protocol: TCP
{{- end }}
volumeMounts:
- name: config
mountPath: "/etc/dragonfly"
Expand Down
2 changes: 1 addition & 1 deletion charts/dragonfly/templates/manager/manager-ingress.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{{- if .Values.manager.ingress.enabled -}}
{{- if .Values.manager.ingress.enable -}}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
Expand Down
11 changes: 7 additions & 4 deletions charts/dragonfly/templates/manager/manager-svc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,15 @@ metadata:
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
component: {{ .Values.manager.name }}
{{- if .Values.manager.serviceAnnotations }}
{{- if .Values.manager.service.labels }}
{{ toYaml .Values.manager.service.labels | indent 4 }}
{{- end }}
{{- if .Values.manager.service.annotations }}
annotations:
{{ toYaml .Values.manager.serviceAnnotations | indent 4 }}
{{ toYaml .Values.manager.service.annotations | indent 4 }}
{{- end }}
spec:
type: {{ .Values.manager.service.type }}
ports:
- port: {{ .Values.manager.restPort }}
name: http-rest
Expand All @@ -25,7 +29,6 @@ spec:
targetPort: {{ .Values.manager.grpcPort }}
selector:
app: {{ template "dragonfly.fullname" . }}
component: {{ .Values.manager.name }}
release: {{ .Release.Name }}
type: ClusterIP
component: {{ .Values.manager.name }}
{{- end }}
30 changes: 30 additions & 0 deletions charts/dragonfly/templates/manager/metrics-svc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{{- if .Values.manager.metrics.enable }}
apiVersion: v1
kind: Service
metadata:
name: {{ template "dragonfly.manager.fullname" . }}-metrics
labels:
app: {{ template "dragonfly.name" . }}
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
component: {{ .Values.manager.name }}-metrics
{{- if .Values.manager.metrics.service.labels }}
{{ toYaml .Values.metrics.service.labels | indent 4 }}
{{- end }}
{{- if .Values.manager.metrics.service.annotations }}
annotations:
{{ toYaml .Values.manager.metrics.service.annotations | indent 4 }}
{{- end }}
spec:
type: {{ .Values.manager.metrics.service.type }}
ports:
- port: 8000
name: http-metrics
targetPort: 8000
protocol: TCP
selector:
app: {{ template "dragonfly.fullname" . }}
release: {{ .Release.Name }}
component: {{ .Values.manager.name }}
{{- end }}
Loading

0 comments on commit ed14be3

Please sign in to comment.