• 在Kubernetes下部署Prometheus
    • 使用ConfigMaps管理应用配置
    • 使用Deployment部署Prometheus

    在Kubernetes下部署Prometheus

    在上一小节总我们介绍了与Kubernetes的应用管理模型,并且利用MiniKube在本地搭建了一个单节点的Kubernetes。这一部分我们将带领读者通过Kubernetes部署Prometheus实例。

    使用ConfigMaps管理应用配置

    当使用Deployment管理和部署应用程序时,用户可以方便了对应用进行扩容或者缩容,从而产生多个Pod实例。为了能够统一管理这些Pod的配置信息,在Kubernetes中可以使用ConfigMaps资源定义和管理这些配置,并且通过环境变量或者文件系统挂载的方式让容器使用这些配置。

    这里将使用ConfigMaps管理Prometheus的配置文件,创建prometheus-config.yml文件,并写入以下内容:

    1. apiVersion: v1
    2. kind: ConfigMap
    3. metadata:
    4. name: prometheus-config
    5. data:
    6. prometheus.yml: |
    7. global:
    8. scrape_interval: 15s
    9. evaluation_interval: 15s
    10. scrape_configs:
    11. - job_name: 'prometheus'
    12. static_configs:
    13. - targets: ['localhost:9090']

    使用kubectl命令行工具,在命名空间default创建ConfigMap资源:

    1. kubectl create -f prometheus-config.yml
    2. configmap "prometheus-config" created

    使用Deployment部署Prometheus

    当ConfigMap资源创建成功后,我们就可以通过Volume挂载的方式,将Prometheus的配置文件挂载到容器中。 这里我们通过Deployment部署Prometheus Server实例,创建prometheus-deployment.yml文件,并写入以下内容:

    1. apiVersion: v1
    2. kind: "Service"
    3. metadata:
    4. name: prometheus
    5. labels:
    6. name: prometheus
    7. spec:
    8. ports:
    9. - name: prometheus
    10. protocol: TCP
    11. port: 9090
    12. targetPort: 9090
    13. selector:
    14. app: prometheus
    15. type: NodePort
    16. ---
    17. apiVersion: extensions/v1beta1
    18. kind: Deployment
    19. metadata:
    20. labels:
    21. name: prometheus
    22. name: prometheus
    23. spec:
    24. replicas: 1
    25. template:
    26. metadata:
    27. labels:
    28. app: prometheus
    29. spec:
    30. containers:
    31. - name: prometheus
    32. image: prom/prometheus:v2.2.1
    33. command:
    34. - "/bin/prometheus"
    35. args:
    36. - "--config.file=/etc/prometheus/prometheus.yml"
    37. ports:
    38. - containerPort: 9090
    39. protocol: TCP
    40. volumeMounts:
    41. - mountPath: "/etc/prometheus"
    42. name: prometheus-config
    43. volumes:
    44. - name: prometheus-config
    45. configMap:
    46. name: prometheus

    该文件中分别定义了Service和Deployment,Service类型为NodePort,这样我们可以通过虚拟机IP和端口访问到Prometheus实例。为了能够让Prometheus实例使用ConfigMap中管理的配置文件,这里通过volumes声明了一个磁盘卷。并且通过volumeMounts将该磁盘卷挂载到了Prometheus实例的/etc/prometheus目录下。

    使用以下命令创建资源,并查看资源的创建情况:

    1. $ kubectl create -f prometheus-deployment.yml
    2. service "prometheus" created
    3. deployment "prometheus" created
    4. $ kubectl get pods
    5. NAME READY STATUS RESTARTS AGE
    6. prometheus-55f655696d-wjqcl 1/1 Running 0 5s
    7. $ kubectl get svc
    8. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    9. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 131d
    10. prometheus NodePort 10.101.255.236 <none> 9090:32584/TCP 42s

    至此,我们可以通过MiniKube虚拟机的IP地址和端口32584访问到Prometheus的服务。

    Prometheus UI