在kubernetes中部署Prometheus
时间: 2023-05-26 20:01:19 浏览: 152
prometheus:用于Kubernetes的Prometheus部署
A:在 Kubernetes 中部署 Prometheus,可以按照以下步骤进行操作:
1. 创建一个 Kubernetes Namespace,可以使用以下命令:
```
kubectl create ns monitoring
```
2. 创建一个 Prometheus 配置文件 prometheus.yml,可以使用以下命令:
```
vi prometheus.yml
```
将以下内容复制到文件中:
```
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'kubernetes-apiservers'
kubernetes_sd_configs:
- api_server: null
role: endpoints
namespaces:
names: ['default']
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
action: keep
regex: default;kubernetes;https
- job_name: 'kubernetes-nodes'
kubernetes_sd_configs:
- api_server: null
role: node
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- target_label: __address__
replacement: kubernetes.default.svc:443
- source_labels: [__meta_kubernetes_node_name]
regex: (.+)
target_label: __metrics_path__
replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
```
这个配置文件将监控使用 `https` 端口的 Kubernetes API Server、Kubernetes Node 的 CPU、内存和磁盘利用率等信息,以及已经部署的 Prometheus 本身。
3. 创建一个 ConfigMap,将以上配置文件导入 Kubernetes 集群,可以使用以下命令:
```
kubectl create configmap prometheus-cm --from-file=prometheus.yml -n monitoring
```
4. 创建一个 Prometheus Deployment 并暴露一个 Service,可以使用以下 YAML 文件:
```
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus
namespace: monitoring
spec:
replicas: 1
selector:
matchLabels:
app: prometheus
template:
metadata:
labels:
app: prometheus
spec:
containers:
- name: prometheus
image: prom/prometheus:v2.22.2
args:
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/prometheus/data
- --storage.tsdb.retention.time=7d
volumeMounts:
- name: prometheus-data
mountPath: /prometheus
- name: prometheus-config
mountPath: /etc/prometheus
volumes:
- name: prometheus-data
emptyDir: {}
- name: prometheus-config
configMap:
name: prometheus-cm
items:
- key: prometheus.yml
path: prometheus.yml
---
apiVersion: v1
kind: Service
metadata:
name: prometheus
namespace: monitoring
spec:
selector:
app: prometheus
ports:
- name: prometheus-web
port: 9090
protocol: TCP
targetPort: 9090
```
以上 YAML 文件中,我们创建了一个名称为 prometheus 的 Deployment,副本数为 1,使用了 prom/prometheus:v2.22.2 镜像。然后创建了一个名称为 prometheus 的 Service,并将 targetPort 设置为 9090。
5. 使用以下命令,将以上 YAML 文件部署到 K8s 集群中:
```
kubectl apply -f prometheus.yaml
```
等待几分钟后,可以执行以下命令验证 Prometheus 是否正常运行:
```
kubectl get pods -n monitoring
```
以上命令输出的结果应该类似于以下内容:
```
NAME READY STATUS RESTARTS AGE
prometheus-7b447fcfbc-wq2xn 1/1 Running 0 8h
```
此外,还可以使用以下命令获取 Prometheus 的 Service 的 ClusterIP:
```
kubectl get svc prometheus -n monitoring
```
以上命令输出的结果应该类似于以下内容:
```
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus ClusterIP 10.100.82.214 <none> 9090/TCP 8h
```
通过以上输出的 ClusterIP 和 9090/TCP,就可以在 K8s 集群内部访问 Prometheus 了,比如可以使用以下命令:
```
curl http://10.100.82.214:9090/
```
以上命令输出的内容应该是 HTML 格式的 Prometheus 首页。
至此,在 Kubernets 中部署 Prometheus 完成。
阅读全文