《OpenShift 4.x HOL教程汇总》
说明:本文已经在OpenShift 4.8环境中验证
配置Prometheus环境
- 创建内容如下的config.yaml文件,它将在openshift-monitoring项目中创建一个ConfigMap对象,打开“enableUserWorkload”功能。
apiVersion: v1
kind: ConfigMap
metadata:
name: cluster-monitoring-config
namespace: openshift-monitoring
data:
config.yaml: |
enableUserWorkload: true
- 执行命令创建ConfigMap对象。
$ oc apply -f config.yaml
- 查看openshift-user-workload-monitoring项目中增加的Pod,这3个Pod就是OpenShift用来对项目级的应用进行监控的Prometheus环境。
$ oc get pod -n openshift-user-workload-monitoring
NAME READY STATUS RESTARTS AGE
prometheus-operator-f787c4fd7-54wmd 2/2 Running 0 11m
prometheus-user-workload-0 4/4 Running 1 11m
prometheus-user-workload-1 4/4 Running 1 11m
thanos-ruler-user-workload-0 3/3 Running 0 11m
thanos-ruler-user-workload-1 3/3 Running 0 11m
部署被监控应用
- 创建内容如下的prometheus-example-app.yaml文件,它会在名为monitored-app的项目中创建被监控应用的资源。其中应用级定制的是名为version的监控指标。
apiVersion: v1
kind: Namespace
metadata:
name: monitored-app
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: prometheus-example-app
name: prometheus-example-app
namespace: monitored-app
spec:
replicas: 1
selector:
matchLabels:
app: prometheus-example-app
template:
metadata:
labels:
app: prometheus-example-app
spec:
containers:
- image: quay.io/brancz/prometheus-example-app:v0.2.0
imagePullPolicy: IfNotPresent
name: prometheus-example-app
---
apiVersion: v1
kind: Service
metadata:
labels:
app: prometheus-example-app
name: prometheus-example-app
namespace: monitored-app
spec:
ports:
- port: 8080
protocol: TCP
targetPort: 8080
name: web
selector:
app: prometheus-example-app
type: ClusterIP
- 执行命令创建应用资源,然后确认应用Pod运行情况。
$ oc apply -f prometheus-example-app.yaml
$ oc get pod -n monitored-app
NAME READY STATUS RESTARTS AGE
prometheus-example-app-7857545cb7-sbgwq 1/1 Running 0 81m
- 创建Route,然后查看应用的监控指标,确认只有“version”一个指标。
$ oc expose svc/prometheus-example-app -n monitored-app
$ curl http://$(oc get route prometheus-example-app -n monitored-app | awk 'NR==2 {print $2}')/metrics
# HELP version Version information about this binary
# TYPE version gauge
version{version="v0.1.0"} 1
创建收集指标的角色,并为用户赋予该角色
- 创建内容如下的custom-metrics-role.yaml文件。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: monitor-crd-edit
rules:
- apiGroups: ["monitoring.coreos.com"]
resources: ["prometheusrules", "servicemonitors", "podmonitors"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- 创建这个ClusterRole。
$ oc apply -f custom-metrics-role.yaml
- 进入OpenShift 控制台的“管理员”视图,进入“用户管理” → “角色绑定”菜单。在确认当前是“所有项目”后点击“创建绑定”按钮。
- 在“创建 RoleBinding”页面中先将“绑定类型”设为“命名空间角色绑定(RoleBinding)”。然后为RoleBinding提供“名称”(例如my-role-binding-monitor);再为“命名空间”选择刚刚部署应用的“monitored-app”项目。随后为“角色名称”选择“monitor-crd-edit”;为“主题”(Subject)选择“用户”类型,最后为“主题名称”(Subject Name)提供一个已有的OpenShift用户名(这里使用的是集群管理员)。随后点击“创建”按钮创建项目级RoleBinding对象。
- 进入OpenShift的“管理员”视图的monitored-app项目,然后切换到“角色绑定”页面。使用“过滤器”选出“Namespace Role Bindings”类型,此时可以看到名为my-role-binding-monitor的RoleBinding对象。
设置应用监控指标
- 创建内容如下的example-app-service-monitor.yaml文件。它定义了一个ServiceMonitor对象,其中包括监控应用、监控时间间隔等配置。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
k8s-app: prometheus-example-monitor
name: prometheus-example-monitor
namespace: monitored-app
spec:
endpoints:
- interval: 30s
port: web
scheme: http
selector:
matchLabels:
app: prometheus-example-app
- 执行命令创建ServiceMonitor对象,然后查看它的状态。
$ oc apply -f example-app-service-monitor.yaml
$ oc get servicemonitor -n monitored-app
NAME AGE
prometheus-example-monitor 81m
设置告警规则
- 创建内容如下的example-app-alerting-rule.yaml的文件。它创建了一个PrometheusRule对象,该PrometheusRule会在prometheus-example-app应用的version为0的时候发出告警。
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: example-alert
namespace: monitored-app
spec:
groups:
- name: example
rules:
- alert: VersionAlert
expr: version{job="prometheus-example-app"} == 0
- 执行命令,创建PrometheusRule对象。
$ oc apply -f example-app-alerting-rule.yaml
赋予任意指定用户查看监控指标
- 缺省情况下,监控的应用指标数据只能是OpenShift集群管理员身份的用户查看到。执行以下命令,让“ANY_USERNAME”用户能查看到monitored-app项目的资源。
$ oc policy add-role-to-user view <ANY_USERNAME> -n monitored-app
- 以上命令也可通过进入OpenShift“开发者”视图的“项目”菜单,进入“monitored-app”项目,在“项目访问”页面里完成。点击“添加访问”链接,然后指定“名称”和“角色”即可。例如下图赋予集群管理员“opentlc-mgr”以“View”角色。
查看Prometheus监控到的应用定制指标
- 在OpenShift的“开发者”视图中进入“监控”菜单,然后切换到“指标”栏目。在“选择查询”下拉框中使用“自定义查询”查询应用指标,然后在“表达式”框中输入“version”,最后回车即可。此时就可以在界面中看到应用定制的监控指标“version”的数值。