Install the NATS Operator:
$ kubectl apply -f https://raw.githubusercontent.com/nats-io/nats-operator/master/deploy/00-prereqs.yaml$ kubectl apply -f https://raw.githubusercontent.com/nats-io/nats-operator/master/deploy/10-deployment.yaml
Install the Prometheus Operator along with its RBAC definition (prometheus-operator service account):
apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:labels:app.kubernetes.io/component: controllerapp.kubernetes.io/name: prometheus-operatorapp.kubernetes.io/version: v0.30.0name: prometheus-operatorroleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: prometheus-operatorsubjects:- kind: ServiceAccountname: prometheus-operatornamespace: default---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata:labels:app.kubernetes.io/component: controllerapp.kubernetes.io/name: prometheus-operatorapp.kubernetes.io/version: v0.30.0name: prometheus-operatorrules:- apiGroups:- apiextensions.k8s.ioresources:- customresourcedefinitionsverbs:- '*'- apiGroups:- monitoring.coreos.comresources:- alertmanagers- prometheuses- prometheuses/finalizers- alertmanagers/finalizers- servicemonitors- podmonitors- prometheusrulesverbs:- '*'- apiGroups:- appsresources:- statefulsetsverbs:- '*'- apiGroups:- ""resources:- configmaps- secretsverbs:- '*'- apiGroups:- ""resources:- podsverbs:- list- delete- apiGroups:- ""resources:- services- services/finalizers- endpointsverbs:- get- create- update- delete- apiGroups:- ""resources:- nodesverbs:- list- watch- apiGroups:- ""resources:- namespacesverbs:- get- list- watch---apiVersion: apps/v1beta2kind: Deploymentmetadata:labels:app.kubernetes.io/component: controllerapp.kubernetes.io/name: prometheus-operatorapp.kubernetes.io/version: v0.30.0name: prometheus-operatornamespace: defaultspec:replicas: 1selector:matchLabels:app.kubernetes.io/component: controllerapp.kubernetes.io/name: prometheus-operatortemplate:metadata:labels:app.kubernetes.io/component: controllerapp.kubernetes.io/name: prometheus-operatorapp.kubernetes.io/version: v0.30.0spec:containers:- args:- --kubelet-service=kube-system/kubelet- --logtostderr=true- --config-reloader-image=quay.io/coreos/configmap-reload:v0.0.1- --prometheus-config-reloader=quay.io/coreos/prometheus-config-reloader:v0.30.0image: quay.io/coreos/prometheus-operator:v0.30.0name: prometheus-operatorports:- containerPort: 8080name: httpresources:limits:cpu: 200mmemory: 200Mirequests:cpu: 100mmemory: 100MisecurityContext:allowPrivilegeEscalation: falsereadOnlyRootFilesystem: truenodeSelector:beta.kubernetes.io/os: linuxsecurityContext:runAsNonRoot: truerunAsUser: 65534serviceAccountName: prometheus-operator---apiVersion: v1kind: ServiceAccountmetadata:labels:app.kubernetes.io/component: controllerapp.kubernetes.io/name: prometheus-operatorapp.kubernetes.io/version: v0.30.0name: prometheus-operatornamespace: default---apiVersion: v1kind: Servicemetadata:labels:app.kubernetes.io/component: controllerapp.kubernetes.io/name: prometheus-operatorapp.kubernetes.io/version: v0.30.0name: prometheus-operatornamespace: defaultspec:clusterIP: Noneports:- name: httpport: 8080targetPort: httpselector:app.kubernetes.io/component: controllerapp.kubernetes.io/name: prometheus-operator
apiVersion: "nats.io/v1alpha2"kind: "NatsCluster"metadata:name: "nats-cluster"spec:size: 3version: "1.4.1"pod:enableMetrics: truemetricsImage: "synadia/prometheus-nats-exporter"metricsImageTag: "0.3.0"
---apiVersion: v1kind: ServiceAccountmetadata:name: prometheus---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRolemetadata:name: prometheusrules:- apiGroups: [""]resources:- nodes- services- endpoints- podsverbs: ["get", "list", "watch"]- apiGroups: [""]resources:- configmapsverbs: ["get"]- nonResourceURLs: ["/metrics"]verbs: ["get"]---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBindingmetadata:name: prometheusroleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: prometheussubjects:- kind: ServiceAccountname: prometheusnamespace: default
---apiVersion: monitoring.coreos.com/v1kind: Prometheusmetadata:name: prometheusspec:serviceAccountName: prometheusserviceMonitorSelector:matchLabels:app: natsnats_cluster: nats-clusterresources:requests:memory: 400MienableAdminAPI: true
apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:name: nats-clusterlabels:app: natsnats_cluster: nats-clusterspec:selector:matchLabels:app: natsnats_cluster: nats-clusterendpoints:- port: metrics
kubectl port-forward prometheus-prometheus-0 9090:9090