首先创建mongodb服务,仅用于测试,所以没做持久化
cat mongo.yaml
apiVersion: v1 kind: Service metadata: name: mongo labels: app: mongo spec: ports: - name: mongo port: 27017 targetPort: 27017 clusterIP: None selector: app: mongo --- apiVersion: v1 kind: Service metadata: name: mongo-service labels: app: mongo spec: ports: - name: mongo-http port: 27017 nodePort: 31014 selector: app: mongo type: NodePort --- apiVersion: apps/v1 kind: StatefulSet metadata: name: mongo spec: selector: matchLabels: app: mongo serviceName: "mongo" replicas: 2 podManagementPolicy: Parallel template: metadata: labels: app: mongo spec: terminationGracePeriodSeconds: 10 affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: "app" operator: In values: - mongo topologyKey: "kubernetes.io/hostname" containers: - name: mongo image: mongo:latest command: - mongod - "--bind_ip_all" - "--replSet" - rs0 ports: - containerPort: 27017
kubectl apply -f mongo.yaml
查看创建的mongo,kubectl get pods
kubectl get svc
mongo创建完成。
创建mongo-exporter服务,deployment需要创建在monitoring namespace下,此namespace为kube-prometheus命名空间
cat mongo-exporter.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: mongo-exporter namespace: monitoring labels: k8s-app: mongo-exporter spec: selector: matchLabels: k8s-app: mongo-exporter template: metadata: labels: k8s-app: mongo-exporter spec: containers: - name: mongo-exporter image: noenv/mongo-exporter:latest args: ["--web.listen-address=:9104", "--mongodb.uri", "mongodb://192.168.10.135:31014"] ports: - containerPort: 9104 name: http
kubectl apply -f mongo-exporter.yaml
kubectl get pod -n monitoring mongo-exporter-7699dd8b9b-vvqr4 1/1 Running 0 15h
创建service
cat mongo-exporter-service.yaml
apiVersion: v1 kind: Service metadata: labels: k8s-app: mongo-exporter name: mongo-exporter namespace: monitoring spec: type: NodePort ports: - name: http port: 9104 nodePort: 30017 targetPort: http selector: k8s-app: mongo-exporter
kubectl apply -f mongo-exporter-service.yaml kubectl get svc -n monitoring mongo-exporter NodePort 10.97.60.32 <none> 9104:30017/TCP 15h
然后创建serviceaccount
cat mongo-exporter-account.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: mongo-exporter namespace: monitoring
创建servicemonitor
cat mongo-exporter-serviceMonitor.yaml
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: k8s-app: mongo-exporter name: mongo-exporter namespace: monitoring spec: endpoints: - interval: 30s port: http jobLabel: k8s-app selector: matchLabels: k8s-app: mongo-exporter
创建完毕之后,查看mongo的metrics
在prometheus中查看mongodb-exporter Targets
通过grafana查看mongo
至此,mongodb监控完毕。