Prometheus Operator 介绍 安装

什么是Prometheus Operator?


为了在Kubernetes中能够方便管理和部署Prometheus,我们使用ConfigMap管理Prometheus配置文件。每次对Prometheus配置文件进行升级时,我们需要手动移除已经运行的Pod实例,从而让Kubernetes可以使用最新的配置文件创建Prometheus而如果当应用实例的数量更多时,通过手动的方式部署和升级Prometheus过程繁琐并且效率低下。

从本质上来讲Prometheus属于是典型的有状态应用,而其有包含了一些自身特有的运维管理和配置管理方式。而这些都无法通过Kubernetes原生提供的应用管理概念实现自动化。为了简化这类应用程序的管理复杂度,CoreOS率先引入了Operator的概念,并且首先推出了针对在Kubernetes下运行和管理Etcd的Etcd Operator。并随后推出了Prometheus Operator。

Prometheus Operator工作原理


从概念上来讲Operator就是针对管理特定应用程序的,在Kubernetes基本的Resource和Controller的概念上,以扩展Kubernetes api的形式。帮助用户创建,配置和管理复杂的有状态应用程序。从而实现特定应用程序的常见操作以及运维自动化。

在Kubernetes中我们使用Deployment、DamenSet,StatefulSet来管理应用Workload使用Service,Ingress来管理应用的访问方式,使用ConfigMap和Secret来管理应用配置

我们在集群中对这些资源的创建,更新,删除的动作都会被转换为事件(Event),Kubernetes的Controller Manager负责监听这些事件并触发相应的任务来满足用户的期望。这种方式我们成为声明式,用户只需要关心应用程序的最终状态,其它的都通过Kubernetes来帮助我们完成,通过这种方式可以大大简化应用的配置管理复杂度。

而除了这些原生的Resource资源以外,Kubernetes还允许用户添加自己的自定义资源(Custom Resource)。并且通过实现自定义Controller来实现对Kubernetes的扩展。

如下所示,是Prometheus Operator的架构示意图:

图片

Prometheus的本职就是一组用户自定义的CRD资源以及Controller的实现,Prometheus Operator负责监听这些自定义资源的变化,并且根据这些资源的定义自动化的完成如Prometheus Server自身以及配置的自动化管理工作。

 

Prometheus Operator能做什么?


要了解Prometheus  Operator能做什么,其实就是要了解Prometheus Operator为我们提供了哪些自定义的Kubernetes资源,列出了Prometheus Operator目前提供的️4类资源:

  • Prometheus:声明式创建和管理         Prometheus Server实例

  • ServiceMonitor:负责声明式的管理    监控配置

  • PrometheusRule:负责声明式的管理  告警配置

  • Alertmanager:声明式的创建和管理    Alertmanager实例

简言之,Prometheus Operator能够帮助用户自动化的创建以及管理Prometheus Server以及其相应的配置。

在k8s集群中部署Prometheus Operator


以下步骤均在k8s的master节点操作

在Kubernetes中安装Prometheus Operator非常简单,用户可以从以下地址中过去Prometheus Operator的源码:

git clone https://github.com/coreos/prometheus-operator.git

上面git下来的是一个文件夹prometheus-operator,这个我已经打包成了一个压缩包,压缩包含有之后实验的所有文件,大家可以在百度网盘下载,然后上传到自己的k8s master节点,解压,参考下即可,压缩包在百度网盘地址如下:

链接:https://pan.baidu.com/s/10klyCGya4bQxrmtpxqnyHQ 提取码:cd33

这里,我们为Promethues Operator创建一个单独的命名空间monitoring:

kubectl create namespace monitoring

由于需要对Prometheus Operator进行RBAC授权,而默认的bundle.yaml中使用了default命名空间,因此,在安装Prometheus Operator之前需要先替换一下bundle.yaml文件中所有namespace定义,由default修改为monitoring。通过运行一下命令安装Prometheus Operator的Deployment实例:

cd prometheus-operator/

kubectl -n monitoring apply -f bundle.yaml

 注:如果报错ImagePullBackOff,表示不能拉取prometheus-operator镜像,可以把prometheus-operator.tar.gz压缩包上传到k8s的node节点,手动解压即可

docker load -i prometheus-operator.tar.gz

镜像所在的百度网盘地址如下:链接:https://pan.baidu.com/s/1zCFuQXVGrF3sdy8XiDGQMQ

提取码:5hdu

然后再执行如下即可

kubectl -n monitoring delete -f bundle.yaml
kubectl -n monitoring apply -f bundle.yaml
[root@master prometheus-operator]# kubectl -n monitoring apply -f bundle.yaml
customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com configured
customresourcedefinition.apiextensions.k8s.io/podmonitors.monitoring.coreos.com configured
customresourcedefinition.apiextensions.k8s.io/prometheuses.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/prometheusrules.monitoring.coreos.com configured
customresourcedefinition.apiextensions.k8s.io/servicemonitors.monitoring.coreos.com configured
customresourcedefinition.apiextensions.k8s.io/thanosrulers.monitoring.coreos.com configured
clusterrolebinding.rbac.authorization.k8s.io/prometheus-operator configured
clusterrole.rbac.authorization.k8s.io/prometheus-operator configured
deployment.apps/prometheus-operator created
serviceaccount/prometheus-operator created
service/prometheus-operator created


[root@master prometheus-operator]# kubectl get pod -n monitoring
NAME                                   READY   STATUS    RESTARTS   AGE
prometheus-operator-7d6496d74b-vrjcj   1/1     Running   0          48s

 可以看到prometheus-operator就部署成功了。

创建Prometheus实例


当集群中已经安装Prometheus Operator之后对于部署Prometheus Server实例就变成了声明一个Prometheus资源,如下所示,我们在Monitoring命名空间下创建一个Prometheus实例:

cat prometheus-inst.yaml

apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: inst
  namespace: monitoring
spec:
  resources:
    requests:
      memory: 400Mi

将以上内容保存到prometheus-inst.yaml文件,并通过kubectl进行创建:

kubectl apply -f  prometheus-inst.yaml

此时,查看monitoring命名空间下的statefulsets资源,可以看到Prometheus Operator自动通过Statefulset创建的Prometheus实例:

kubectl -n monitoring get statefulset

显示如下,说明部署成功了:

NAME              READY   AGE
prometheus-inst   1/1     56s      50m

查看pod实例:

kubectl -n monitoring get pods

显示如下,说明部署成功了:

NAME                                   READY   STATUS    RESTARTS   AGE
prometheus-inst-0                      3/3     Running   1          2m
prometheus-operator-5974fc7c56-7zr88   1/1     Running   0          50m

注:如果报错ErrImagePull,表示不能拉取prometheus镜像,可以把镜像压缩包prometheus-v2_17_2.tar.gz、prometheus-config-reloader_v0_39_0.tar.gz、configmap-reload_v0_3_0.tar.gz上传到k8s的node节点,手动解压:

docker load -i prometheus-v2_17_2.tar.gz
docker load -i prometheus-config-reloader_v0_39_0.tar.gz 
docker load -i configmap-reload_v0_3_0.tar.gz

镜像所在的百度网盘地址如下:

链接:https://pan.baidu.com/s/1zCFuQXVGrF3sdy8XiDGQMQ 提取码:5hdu

然后再执行如下即可 

kubectl delete  -f  prometheus-inst.yaml

kubectl apply  -f  prometheus-inst.yaml

为prometheus实例创建service,以便在浏览器访问:cat prometheus-service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: prometheus-operator
  name: prometheus-operator-svc
  namespace: monitoring
spec:
  ports:
  - name: operator
    port: 9090
    protocol: TCP
    targetPort: 9090
  selector:
    app: prometheus
    prometheus: inst
  sessionAffinity: None
  type: NodePort

 更新yaml文件:

kubectl apply -f prometheus-service.yaml

查看service详细信息:

kubectl get svc -n monitoring

显示如下:

NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
prometheus-operated       ClusterIP   None            <none>        9090/TCP         77m
prometheus-operator       ClusterIP   None            <none>        8080/TCP         126m
prometheus-operator-svc   NodePort    10.108.151.60   <none>        9090:31535/TCP   35s

看到最后一行prometheus-operator-svc的type类型是NodePort,在宿主机暴露的端口是31535,我们通过浏览器访问k8s的master  ip:31535即可访问到prometheus ui界面,我这里k8s的master节点ip是192.168.0.6,所以在浏览器访问http://192.168.0.6:31535/config,可以看到目前Operator创建了只包含基本配置的Prometheus实例:

图片

自己测试


[root@master prometheus-operator]# kubectl get Prometheus -n monitoring
NAME   VERSION   REPLICAS   AGE
k8s                         13h


[root@master prometheus-operator]# kubectl describe  servicemonitor example-app  -n monitoring
Name:         example-app
Namespace:    monitoring
Labels:       team=frontend
Annotations:  <none>
API Version:  monitoring.coreos.com/v1
Kind:         ServiceMonitor
Metadata:
  Creation Timestamp:  2022-01-05T02:32:51Z
  Generation:          1
  Managed Fields:
    API Version:  monitoring.coreos.com/v1
    Fields Type:  FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .:
          f:kubectl.kubernetes.io/last-applied-configuration:
        f:labels:
          .:
          f:team:
      f:spec:
        .:
        f:endpoints:
        f:namespaceSelector:
          .:
          f:matchNames:
        f:selector:
          .:
          f:matchLabels:
            .:
            f:app:
    Manager:         kubectl-client-side-apply
    Operation:       Update
    Time:            2022-01-05T02:32:51Z
  Resource Version:  521996
  Self Link:         /apis/monitoring.coreos.com/v1/namespaces/monitoring/servicemonitors/example-app
  UID:               cc1460d4-e720-4c47-8258-8f5d4a72bcd1
Spec:
  Endpoints:
    Port:  web
  Namespace Selector:
    Match Names:
      default
  Selector:
    Match Labels:
      App:  example-app
Events:     <none>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值