# prometheus-operator 介绍 - 支持自动化方式管理Prometheus和alertmanager - 支持原生配置管理 prometheus-operator集群 [yaml配置文件github管理地址](https://gitee.com/huyipow/prometheus-operator.git) ### prometheus-opeartor 核心组件 **Monitoring infrastructure** - Configuration - Rules - node-exporter - Prometheus - Self upgrading - service: - serviceMonitoring: - prometheus-operator: #### Self hosted Kubernetes - Like self-hosted compiler - Kubernetes components run in Kubernetes - Can be discovered just like anything else - Kubernetes itself is just workload ![image](https://coreos.com/operators/prometheus/docs/latest/user-guides/images/architecture.png) > Note: ServiceMonitor objects must be in the same namespace as the Prometheus object. The fact that your ServiceMonitor now shows up in the config is a good thing. That means it was selected and parsed by the Prometheus Operator. The namespaceSelector is in regard to the Service objects, that a ServiceMonitor selects. Basically the point you are at is: your Prometheus instance is running, your ServiceMonitor is selected, but doesn't select the Service yet that you expect. #### Information available for Pods - **All Pods use resources** CPU, memory, network, disk - **Kubernetes API for metadata** To associate Pods with each other - **Custom metrics are not generic** #### Workload metrics - node-exporter - cAdvisor - [kube-state-metrics ](https://github.com/kubernetes/kube-state-metrics) #### kube-state-metrics - kubectl as metrics - Kubernetes API converted to Prometheus metrics - Cluster state metrics #### What's a target? - HTTP Server with /metrics endpoint - Discovered by an SD mechanism ***Static target list*** ***DNS discovery*** ***Kubernetes discovery*** #### Kubernetes Discovery - Discover targets **Pods** **Nodes** **Endpoints/Sevices** - Automatically reconfigure **Add,update,remove** #### Prometheus for Kubernetes Configuration This guide is intended to give an introduction to all the parts required to start monitoring a Kubernetes cluster with Prometheus using the Prometheus Operator. - [Cluster Monitoring](https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/cluster-monitoring.md) ### prometheus-operator RBAC 权限管理 #### 创建集群角色用户:prometheus-operator cat prometheus-operator-service-account.yaml apiVersion: v1 kind: ServiceAccount metadata: name: prometheus-operator namespace: monitoring #### 创建prometheus-operator 集群角色 cat prometheus-operator-cluster-role.yaml apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata: name: prometheus-operator rules: - apiGroups: - extensions resources: - thirdpartyresources verbs: - "*" - apiGroups: - apiextensions.k8s.io resources: - customresourcedefinitions verbs: - "*" - apiGroups: - monitoring.coreos.com resources: - alertmanagers - prometheuses - servicemonitors verbs: - "*" - apiGroups: - apps resources: - statefulsets verbs: ["*"] - apiGroups: [""] resources: - configmaps - secrets verbs: ["*"] - apiGroups: [""] resources: - pods verbs: ["list", "delete"] - apiGroups: [""] resources: - services - endpoints verbs: ["get", "create", "update"] - apiGroups: [""] resources: - nodes verbs: ["list", "watch"] - apiGroups: [""] resources: - namespaces verbs: ["list"] #### 绑定集群角色 cat prometheus-operator-cluster-role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: prometheus-operator roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: prometheus-operator subjects: - kind: ServiceAccount name: prometheus-operator namespace: monitoring #### 部署prometheus-operator # cat prometheus-operator.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata: labels: k8s-app: prometheus-operator name: prometheus-operator namespace: monitoring spec: replicas: 1 template: metadata: labels: k8s-app: prometheus-operator spec: containers: - args: - --kubelet-service=kube-system/kubelet - --config-reloader-image=quay.io/coreos/configmap-reload:v0.0.1 image: quay.io/coreos/prometheus-operator:v0.15.0 name: prometheus-operator ports: - containerPort: 8080 name: http resources: limits: cpu: 200m memory: 100Mi requests: cpu: 100m memory: 50Mi serviceAccountName: prometheus-operator #### 部署prometheus-opeartor service cat prometheus-operator-service.yaml apiVersion: v1 kind: Service metadata: name: prometheus-operator namespace: monitoring labels: k8s-app: prometheus-operator spec: type: ClusterIP ports: - name: http port: 8080 targetPort: http protocol: TCP selector: k8s-app: prometheus-operator #### 部署 prometheus-operator-service-monitor cat prometheus-k8s-service-monitor-prometheus-operator.yaml apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: prometheus-operator namespace: monitoring labels: k8s-app: prometheus-operator spec: endpoints: - port: http selector: matchLabels: k8s-app: prometheus-operator