在IBM云上的Red Hat OpenShift中安装Prometheus(使用内置运算符)

达到的结果或者希望实现的目标

由于OpenShift默认集成了Prometheus,但由于收集到的指标没有持久化,所以在实际运营中使用起来会有些困难。因此,我们可以利用OpenShift内置的Operator Hub,在那里额外安装Prometheus进行尝试。

然而,IBM可能会说,如果仅仅是为了这个目的,可以使用IBM Cloud Monitoring with Sysdig而不是Prometheus。然而,Prometheus的PromQL具有灵活的表达能力,并且可以通过与各种Exporter的协作收集各种指标数据,这是非常有价值的。

另外,由于Prometheus Operator仍存在一些行为异常和信息不足的问题,请自行承担使用责任。

前提 – 目前所讲的是在某件事情发生之前或者成立之前存在的条件。

    検証環境: Red Hat OpenShift on IBM Cloud 4.3

操作步骤

操作员的确认

您可以从Web控制台上进行确认。

image.png

运营者的订阅

我们将从这里开始使用CLI进行操作。我们会订阅操作员。

$ oc create -f - <<EOF
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: prometheus
spec:
  channel: beta
  installPlanApproval: Auto
  name: prometheus
  source: community-operators
  sourceNamespace: openshift-marketplace
  startingCSV: prometheusoperator.0.32.0
EOF

对RBAC进行设置

有一个名为prometheus-k8s的ServiceAccount已经创建,但奇怪的是它没有被分配任何ClusterRole。因此,需要手动设置ClusterRole和ClusterRoleBinding。

$ oc get sa prometheus-k8s
NAME             SECRETS   AGE
prometheus-k8s   2         3m29s
$ oc create -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: ${ClusterRole名}
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - nodes/proxy
  - services
  - endpoints
  - pods
  - ingresses
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - configmaps
  verbs:
  - get
- apiGroups:
  - "extensions"
  resources:
  - ingresses/status
  - ingresses
  verbs:
  - get
  - list
  - watch
- nonResourceURLs:
  - "/metrics"
  verbs:
  - get

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: ${好きな名前}
subjects:
- kind: ServiceAccount
  name: prometheus-k8s
  namespace: ${サブスクライブしたネームスペース}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: ${ClusterRole名}
EOF

创建Prometheus实例

创建Prometheus实例。这次我们将收集的指标永久保存在文件存储中。

$ oc create -f - <<EOF
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: server
  labels:
    prometheus: k8s
spec:
  replicas: 1
  serviceAccountName: prometheus-k8s
  securityContext: {}
  serviceMonitorSelector: {}
  ruleSelector: {}
  alerting:
    alertmanagers: []
  retention: 400d # メトリクスの保存期間
  storage:
    volumeClaimTemplate:
      metadata:
        labels:
          billingType: hourly # またはmonthly
          region: jp-tok # リージョン名
          zone: tok02 # ゾーン名
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 20Gi
        storageClassName: ibmc-file-bronze-gid # ストレージクラス名
EOF

永久卷轴不支持预定义的PersistentVolumeClaim,它采用动态配置。

Prometheus以非root用户执行,请使用带有-gid的存储类。此外,由于bronze速度太慢,建议在实际环境中使用silver或gold。

当等待数分钟后,Pod将启动。

$ oc get pods | grep ^prometheus-server
prometheus-server-0                             3/3     Running     1          114s

将File Storage转换为NFS v3(选项)

将文件存储的挂载设置为NFS v3。这是在IBM Cloud中的推荐方法。

$ _pv=$(oc get pv | grep prometheus-server-db-prometheus-server-0 | awk '{ print $1 }')
$ oc patch pv/${_pv} -p '{"spec":{"mountOptions":["nfsvers=3","hard","intr","lookupcache=none"]}}'

添加要抓取的目标

在这个阶段,我们还没有进行任何网页抓取,所以需要添加抓取目标。有两种方法可以实现这一点。

    • CRDで定義

 

    AdditionalScrapeConfigsで定義

根据需求,CRD会定义PodMonitor、ServiceMonitor等资源作为OpenShift的资源。通过将AdditionalScrapeConfigs中的传统Prometheus配置文件进行Secret化并指定。

作为操作员,我本想使用CRD来完成这个任务,但由于信息有限,往往会变得试错性很强。而另一方面,Prometheus的配置文件在网络上有很多信息,经验丰富。这次我们将使用AdditionalScrapeConfigs。

为了简单起见,这是一个收集Prometheus自身指标的示例。

- job_name: prometheus
  static_configs:
  - targets:
    - localhost:9090

我会将这个进行加密处理。

$ oc create secret generic prometheus-scrape-config --from-file additional-scrape-config.yaml --dry-run -o yaml | oc replace --force -f -

然后在Prometheus实例的additionalScrapeConfigs中指定密钥名和文件名。

$ oc edit prometheus/server
spec:
  additionalScrapeConfigs: # 追加
    name: prometheus-scrape-config # 追加
    key: additional-scrape-config.yaml # 追加

等待片刻,爬取将开始。

如果要添加要爬取的目标,请重新创建Secret,prometheus-config-reloader会自动将其添加(最多等待数分钟)。

广告
将在 10 秒后关闭
bannerAds