阿里云等环境服务商都会提供一键安装的Prometheus监控服务;接下来记录的几篇文章将是这阵子在自建环境中对监控Prometheus的安装配置,使用的是当前最新版本为 v2.26.0,同样是从记录文档中摘取出来。
首先来张官方架构图:
Prometheus用于收集配置中的监控采集任务的数据,这里先简单地把服务部署起来,并未配置具体的采集规则,会在之后步骤逐步添加。
创建命名空间:
kubectl create namespace monitoring kubectl get namespace
访问授权
为了能够让Prometheus能够访问受到认证保护的Kubernetes API,我们首先需要做的是,对Prometheus进行访问授权。在Kubernetes中主要使用基于角色的访问控制模型(Role-Based Access Control),用于管理Kubernetes下资源访问权限。首先我们需要在Kubernetes下定义角色(ClusterRole),并且为该角色赋予相应的访问权限。同时创建Prometheus所使用的账号(ServiceAccount),最后则是将该账号与角色进行绑定(ClusterRoleBinding)。
vim prometheus-rbac-setup.yml
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus rules: - apiGroups: [""] resources: - nodes - nodes/proxy - services - endpoints - pods verbs: ["get", "list", "watch"] - apiGroups: - extensions resources: - ingresses verbs: ["get", "list", "watch"] - nonResourceURLs: ["/metrics"] verbs: ["get"] --- apiVersion: v1 kind: ServiceAccount metadata: name: prometheus namespace: monitoring --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: prometheus roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: prometheus subjects: - kind: ServiceAccount name: prometheus namespace: monitoring
kubectl create -f prometheus-rbac-setup.yml kubectl describe sa/prometheus -n monitoring
Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计的。它与User account不同:
- User account是为人设计的,而service account则是为Pod中的进程调用Kubernetes API而设计
- User account是跨namespace的,而service account则是仅局限它所在的namespace
- 每个namespace都会自动创建一个default 的service account
- Token controller检测service account的创建,并为它们创建secret
- 开启ServiceAccount Admission Controller后
- 每个Pod在创建后都会自动设置spec.serviceAccount为default(除非指定了其他ServiceAccout)
- 验证Pod引用的service account已经存在,否则拒绝创建
- 如果Pod没有指定ImagePullSecrets,则把service account的ImagePullSecrets加到Pod中
- 每个container启动后都会只读挂载该service account的token和ca.crt到/var/run/secrets/kubernetes.io/serviceaccount/
查看自动创建的Token:
ConfigMap
使用configmap来管理prometheus的配置文件:
vim prometheus-config.yml
apiVersion: v1 kind: ConfigMap metadata: name: prometheus namespace: monitoring labels: app: prometheus release: v2.26.0 data: prometheus.yml: | global: evaluation_interval: 1m scrape_interval: 15s scrape_timeout: 10s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090']
kubectl create -f prometheus-config.yml kubectl get configmaps -n monitoring
先创建一个最简的示例配置文件,仅定义了一个数据收集配置,之后还需添加其它配置以满足监控信息收集。
页码: 1 2