在EKS Kubernetes集群上部署Prometheus

这是续集。
您可以通过以下链接以PDF格式下载本文来支持我们。

以PDF格式下载指南


这是续集。

这是续集。
这是续集。

Prometheus是一个开放源代码监视系统,具有维度数据模型,灵活的查询语言,高效的时间序列数据库和现代化的警报方法。 Prometheus可以作为独立服务安装在Linux机器上,也可以部署在Kubernetes集群中。本指南介绍了在AWS云中部署的EKS集群上Prometheus的安装。

普罗米修斯的主要特点是:

  • 多维的 资料模型 由指标名称和键/值对标识的时间序列数据
  • PromQL,一个 灵活的查询语言 利用这个维度
  • 不要依赖分布式存储。单服务器节点是自治的
  • 时间序列收集是通过HTTP上的拉模型完成的
  • 推送时间系列 通过中间网关支持
  • 通过服务发现或静态配置发现目标
  • 图表和仪表板支持多种模式

在EKS Kubernetes集群上部署Prometheus

您必须运行EKS集群才能使用本指南来安装kubectl并与API服务器进行交互。

列出可用的群集。

$ eksctl get cluster
NAME			REGION
prod-eks-cluster	eu-west-1

第1步:配置kubectl

要随时从通过eksctl部署的EKS群集中获取群集凭据,请运行以下命令:

$ eksctl utils write-kubeconfig --cluster= [--kubeconfig=][--set-kubeconfig-context=]
See below example:
# Create default kubeconfig directory - Can be custom
--- Linux ---
$ mkdir /home/$USER/.kube

--- macOS ---
$ mkdir /Users/$USER/.kube

# Obtain cluster credentials
--- Linux ---
$ s write-kubeconfig --cluster=prod-eks-cluster --kubeconfig=/home/$USER/.kube/config

--- macOS ---
$ eksctl utils write-kubeconfig --cluster=prod-eks-cluster --kubeconfig=/Users/$USER/.kube/config

预期的命令执行输出:

[ℹ]  eksctl version 0.25.0
[ℹ]  using region eu-west-1
[✔]  saved kubeconfig as "/Users/jkmutai/.kube/config"

检查kubectl命令是否按预期工作。

$ kubectl get  nodes
NAME                                            STATUS   ROLES    AGE     VERSION
ip-192-168-138-244.eu-west-1.compute.internal   Ready       7d21h   v1.17.9-eks-4c6976
ip-192-168-176-247.eu-west-1.compute.internal   Ready       7d21h   v1.17.9-eks-4c6976

步骤2:安装Kubernetes Metrics Server

Kubernetes API服务器公开了一些可用于监视和分析的指标。这些指标是 /指标 HTTP API。

请按照以下指南安装Metrics Server。

在Amazon EKS集群上安装Kubernetes Metrics Server

您可以运行以下命令来查看集群的原始指标。

$ kubectl get --raw /metrics

步骤3:安装头盔

用于Kubernetes的Helm软件包管理器可帮助您在Kubernetes集群中安装和管理应用程序。使用帮助将Prometheus部署到EKS。

这些是用于安装头盔的命令。

--- Linux ---
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh

--- macOS ---
$ brew install helm

--- Windows ---
$ choco install kubernetes-helm

您可以使用以下命令查询已安装的版本:

$ helm version
version.BuildInfo{Version:"v3.2.4", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"dirty", GoVersion:"go1.14.3"}

步骤4:在EKS Kubernetes集群上部署Prometheus

可以使用Operator或Helm将Prometheus安装在Kubernetes集群上。使用已安装的Helm V3将Prometheus部署到EKS集群。

首先创建监视名称空间。

$ kubectl create namespace monitoring
namespace/monitoring created

Prometheus需要一种持久保存度量标准数据以进行历史浏览的方法。使用随gp2存储类提供的EBS。

$ kubectl get sc
kubectl get sc
NAME            PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
efs-sc          efs.csi.aws.com         Delete          Immediate              false                  2d23h
gp2 (default)   kubernetes.io/aws-ebs   Delete          WaitForFirstConsumer   false                  7d21h

添加图表存储库:

$ helm repo add stable https://kubernetes-charts.storage.googleapis.com
"stable" has been added to your repositories

使用Helm部署Prometheus。

helm install prometheus stable/prometheus 
    --namespace monitoring 
    --set alertmanager.persistentVolume.storageClass="gp2",server.persistentVolume.storageClass="gp2"

命令执行输出:

NAME: prometheus
LAST DEPLOYED: Wed Aug 19 22:01:16 2020
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The Prometheus server can be accessed via port 80 on the following DNS name from within your cluster:
prometheus-server.monitoring.svc.cluster.local

确保已创建PV和PVC。

$ kubectl get pv -n monitoring
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                STORAGECLASS   REASON   AGE
pvc-7a1d891c-5b3f-4d28-91b5-5f1d1590daf9   8Gi        RWO            Delete           Bound    monitoring/prometheus-server         gp2                     11m
pvc-7d45951f-a8c5-4fb1-b149-747dccaceecc   2Gi        RWO            Delete           Bound    monitoring/prometheus-alertmanager   gp2                     11m

$ kubectl get pvc -n monitoring
NAME                      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
prometheus-alertmanager   Bound    pvc-7d45951f-a8c5-4fb1-b149-747dccaceecc   2Gi        RWO            gp2            11m
prometheus-server         Bound    pvc-7a1d891c-5b3f-4d28-91b5-5f1d1590daf9   8Gi        RWO            gp2            11m

步骤4:使用EKS Kubernetes集群访问Prometheus

安装后,查询监视器名称空间中的所有资源。

$ kubectl get all -n monitoring
NAME                                                 READY   STATUS    RESTARTS   AGE
pod/prometheus-alertmanager-d47577c4b-kz9td          2/2     Running   0          98s
pod/prometheus-kube-state-metrics-6df5d44568-fzfwn   1/1     Running   0          98s
pod/prometheus-node-exporter-p6qk7                   1/1     Running   0          99s
pod/prometheus-node-exporter-stsjk                   1/1     Running   0          99s
pod/prometheus-pushgateway-57c97d878d-hmnwr          1/1     Running   0          98s
pod/prometheus-server-559c49b4ff-42k46               2/2     Running   0          98s

NAME                                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/prometheus-alertmanager         ClusterIP   10.100.136.125           80/TCP     99s
service/prometheus-kube-state-metrics   ClusterIP   10.100.169.64            8080/TCP   99s
service/prometheus-node-exporter        ClusterIP   None                     9100/TCP   99s
service/prometheus-pushgateway          ClusterIP   10.100.71.173            9091/TCP   99s
service/prometheus-server               ClusterIP   10.100.138.66            80/TCP     99s

NAME                                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/prometheus-node-exporter   2         2         2       2            2                     99s

NAME                                            READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/prometheus-alertmanager         1/1     1            1           99s
deployment.apps/prometheus-kube-state-metrics   1/1     1            1           99s
deployment.apps/prometheus-pushgateway          1/1     1            1           99s
deployment.apps/prometheus-server               1/1     1            1           99s

NAME                                                       DESIRED   CURRENT   READY   AGE
replicaset.apps/prometheus-alertmanager-d47577c4b          1         1         1       99s
replicaset.apps/prometheus-kube-state-metrics-6df5d44568   1         1         1       99s
replicaset.apps/prometheus-pushgateway-57c97d878d          1         1         1       99s
replicaset.apps/prometheus-server-559c49b4ff               1         1         1       99s

通过在同一shell中运行以下命令来获取Prometheus服务器URL:

export POD_NAME=$(kubectl get pods --namespace monitoring -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}")

使用Kubernetes端口转发功能访问Prometheus服务器。

$ kubectl --namespace monitoring port-forward $POD_NAME 9090
Forwarding from 127.0.0.1:9090 -> 9090
Forwarding from [::1]:9090 -> 9090

从本地计算机上的浏览器访问127.0.0.1:9090。

类似的命令用于访问Alertmanager UI

export POD_NAME=$(kubectl get pods --namespace monitoring -l "app=prometheus,component=alertmanager" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace monitoring port-forward $POD_NAME 9093

如果要使用节点端口访问Prometheus服务器和Alertmanager,请编辑服务并设置NodePort。

以下位置专门用于Prometheus文档。 普罗米修斯问题

其他指南:

将水平Pod自动缩放器与Kubernetes EKS集群一起使用

在EKS Kubernetes集群上启用CloudWatch Logs

EKS Kubernetes通过EKS存储服务实现持久存储

这是续集。
您可以通过以下链接以PDF格式下载本文来支持我们。

以PDF格式下载指南


这是续集。

这是续集。
这是续集。

Sidebar