Amazon EKS 监控方案实践(上)| 博思云为云技术分享,提供专业的云管理服务(云MSP服务)

博思云为专业的云服务提供商
在这里插入图片描述

为何需要监控

Kubernetes (k8s) 是一个强大的容器编排平台,用于部署、管理和扩展容器化应用程序。然而,随着集群规模的增长以及应用程序的复杂性增加,有效的监控变得至关重要。Prometheus 是一个广泛使用的开源监控和警报工具,针对 Kubernetes 的监控方案具有很高的重要性,具体原因包括:

  • 集群健康和稳定性:Kubernetes 集群由许多组件组成,包括节点、Pod、服务发现、网络等。监控能够帮助您实时了解集群的健康状态,从而提前发现和解决潜在问题,确保应用程序的稳定性。

  • 故障排除:当应用程序出现问题或性能下降时,监控可以帮助您快速定位问题的根本原因。通过可视化指标和日志,您可以识别故障发生的时间、位置和影响范围,从而加速故障排除过程。

  • 资源利用率优化:Kubernetes 允许您灵活地调度和伸缩应用程序,但过度分配或不足分配的资源可能导致性能问题。监控可以帮助您了解资源的使用情况,从而优化资源分配,提高效率。

  • 自动化扩展:基于监控数据,您可以设置自动化的水平扩展策略,以根据实时负载自动调整 Pod 数量,从而在需要时实现更好的性能和资源利用率。

  • 警报和通知:Prometheus 具备强大的警报功能,可以在出现异常情况时发送警报通知。通过设置适当的警报规则,您可以在问题出现之前及时采取措施,减少停机时间。

  • 应用程序性能监测:监控不仅涵盖基础架构层面,还可以监控应用程序本身的性能指标,如请求延迟、处理时间等。这有助于您了解用户体验并进行性能优化。

  • 容量规划:通过监控历史数据和趋势分析,您可以更好地规划未来的资源需求,避免资源不足或过剩。

综上所述,Prometheus 监控对于 Kubernetes 集群和应用程序的健康、性能和可靠性至关重要。它能够帮助您在动态的容器化环境中及时发现问题、预测趋势、优化资源,并对应用程序的运行状况保持全面的可见性。

Prometheus 组件介绍

官网:https://prometheus.io

github地址:https://github.com/prometheus/prometheus

博思云为 亚马逊云科技 AWS EKS

Server作用

Prometheus Server 的作用就是负责数据采集和存储,提供 PromQL 语句查询的支持

Alertmanager 作用

这个组件主要就是触发告警通知的一个组件

Push Gateway 作用

临时的 Job 主动推送到指标的中间网关

Prometheus 工作流程

1. Prometheus Daemon 负责定时去目标上抓取 metrics (指标)数据
每个抓取目标需要暴露一个 http 服务的接口给它定时抓取。
支持通过配置文件、文本文件、Zookeeper、DNS SRV Lookup 等方式指定抓取目标。

2. PushGateway用于Client主动推送metrics到PushGateway
而 Prometheus 只是定时去 Gateway 上抓取数据。
适合一次性、短生命周期的服务

3. Prometheus 在 TSDB 数据库存储抓取的所有数据
通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。

4. Prometheus 通过 PromQL 和其他 API 可视化地展示收集的数据
支持 Grafana、Promdash 等方式的图表数据可视化。
Prometheus 还提供 HTTP API 的查询方式,自定义所需要的输出

5. Alertmanager 是独立于 Prometheus 的一个报警组件
支持 Prometheus 的查询语句,提供十分灵活的报警方式

常用的exporter

  • kube-state-metrics
    收集k8s集群master&etcd等基本状态信息

  • node-exporter
    收集k8s集群node信息

  • cadvisor
    收集k8s集群docker容器内部使用资源信息

先决条件

部署EKS集群

需要启动一台ec2,并且绑定role角色。让其拥有执行创建资源的权限。(zrm-role)

安装必要工具

###eksctl工具
eksctl是eks集群部署的命令行工具

curl -O https://image-auto-scaleing.s3.cn-north-1.amazonaws.com.cn/eksctl
chmod +x eksctl && mv ./eksctl /usr/bin/

###kubectl工具
官网地址:https://docs.amazonaws.cn/eks/latest/userguide/install-kubectl.html
# 这里下载kubectl工具的时候,要选择你对应的集群版本。有时候可以比你的集群版本可以低一个版本

curl -O https://s3.cn-north-1.amazonaws.com.cn/amazon-eks/1.23.17/2023-03-17/bin/linux/amd64/kubectl
chmod +x kubectl && mv kubectl /usr/bin/

###helm安装
curl -O https://image-auto-scaleing.s3.cn-north-1.amazonaws.com.cn/helm-v3.8.1-linux-amd64.tar.gz
tar -zxvf helm-v3.8.1-linux-amd64.tar.gz
cp linux-amd64/helm /usr/bin/
rm -rf helm* && rm -rf linux-amd64

博思云为 亚马逊云科技 AWS EKS

定义一个集群的 yaml 文件

cat > cluster.yaml << EOF
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: prometheus-eks
  region: cn-northwest-1
  version: "1.26"
vpc:
  id: "vpc-085306cb2975bd281"
  subnets:
    public:
      cn-northwest-1a: { id: subnet-02cbfaaf2093cf95f }
      cn-northwest-1b: { id: subnet-01614bc0f46e7439f }
      cn-northwest-1c: { id: subnet-03a3409ceaabd52e3 }
managedNodeGroups:
  - name: ng-1
    labels: { role: workers }
    instanceType: t3a.large
    desiredCapacity: 2
    minSize: 0
    maxSize: 10
    volumeSize: 50
    ssh:
      allow: true
      publicKeyName: zrm-nx
EOF

创建集群

eksctl create cluster -f cluster.yaml

博思云为 亚马逊云科技 AWS EKS

创建完成之后如下图

博思云为 亚马逊云科技 AWS EKS

控制台授权

eksctl create iamidentitymapping --cluster prometheus-eks --region=cn-northwest-1 --arn  arn:aws-cn:iam::297669174308:user/zhangruimeng@bosicloud.com  --group system:masters --username zhangruimeng

OIDC身份关联

eksctl utils associate-iam-oidc-provider --cluster prometheus-eks --approve
aws eks describe-cluster --name prometheus-eks --query "cluster.identity.oidc.issuer" --output text
cat >oidc.yaml <<eof< code="">
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: prometheus-eks   ###集群名字
  region: cn-northwest-1  ###集群所在区域
identityProviders:
  - name: upgrade-eks-oidc   ###设置一个名字(任意)
    type: oidc
    issuerUrl: $(aws eks describe-cluster --name prometheus-eks --query "cluster.identity.oidc.issuer" --output text)   ###必须关联OIDC的信息
    clientId: sts.amazonaws.com   ###默认客户端ID
EOF
eksctl associate identityprovider -f oidc.yaml

博思云为 亚马逊云科技 AWS

绑定完成之后,可以在控制台查看对应的信息

博思云为 亚马逊云科技 AWS

安装ALB插件

###下载策略文件
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy_cn.json

###创建一个策略名字为:AWSLoadBalancerControllerIAMPolicy
aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy_cn.json

# 这里需要注意的是,如果你的账户中存在这个策略,可以跳过这一步。进行下一步

###eksctl创建一个sa
eksctl create iamserviceaccount \
  --cluster=prometheus-eks \
  --namespace=kube-system \
  --name=aws-load-balancer-controller-eks \
  --role-name AmazonEKSLoadBalancerControllerRole-eks \
  --attach-policy-arn=arn:aws-cn:iam::297669174308:policy/AWSLoadBalancerControllerIAMPolicy \
  --approve

###安装git
yum -y install git
kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master"

###配置helm仓库
helm repo add eks https://aws.github.io/eks-charts

###更新eks-charts仓库
helm repo update

###部署alb
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
  -n kube-system \
  --set clusterName=prometheus-eks \
  --set serviceAccount.create=false \
  --set serviceAccount.name=aws-load-balancer-controller \
  --set enableShield=false \
  --set enableWaf=false \
  --set enableWafv2=false

博思云为 亚马逊云科技 AWS

安装EBS存储插件

在控制台点击添加EBS插件

博思云为

博思云为

博思云为

然后使用命令行的方式去添加一个sa

###添加IAM角色绑定权限
eksctl create iamserviceaccount \
  --name ebs-csi-controller-sa \
  --namespace kube-system \
  --cluster prometheus-eks \
  --attach-policy-arn arn:aws-cn:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
  --approve \
  --role-only \
  --role-name AmazonEKS_EBS_CSI_DriverRole-eks

###为serviceaccount添加一个注解
kubectl annotate serviceaccount ebs-csi-controller-sa \
 -n kube-system eks.amazonaws.com/role-arn=arn:aws-cn:iam::297669174308:role/AmazonEKS_EBS_CSI_DriverRole-eks

###重启生效
kubectl rollout restart deployment ebs-csi-controller -n kube-system

博思云为

博思云为

部署Prometheus

###创建命名空间
kubectl create namespace prometheus

###添加对应helm的仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

###安装
helm install prometheus prometheus-community/prometheus \
--namespace prometheus \
--set alertmanager.persistentVolume.storageClass="gp2" \
--set server.persistentVolume.storageClass="gp2"

关注博思云为视频号查看详细视频教程

创建成功,pod启动

关注博思云为视频号查看详细视频教程

有一个镜像是国外的。你如果是国外服务器部署则无需更改,国内服务器需要更改一下

关注博思云为视频号查看详细视频教程

###更改为国内的镜像地址
kubectl patch deployment prometheus-kube-state-metrics -p '{"spec":{"template":{"spec":{"containers":[{"name":"kube-state-metrics","image":"registry.cn-hangzhou.aliyuncs.com/lemon-public/kube-state-metrics:v2.9.2"}]}}}}' -n prometheus

关注博思云为视频号查看详细视频教程

关注博思云为视频号查看详细视频教程

Prometheus暴露一个LB

kubectl get svc -n prometheus     ###查看svc的地址以及类型

关注博思云为视频号查看详细视频教程

添加注解:更改为LoadBalancer类型

###需要添加注解
kubectl annotate service prometheus-server  service.beta.kubernetes.io/aws-load-balancer-nlb-target-type=ip \
  service.beta.kubernetes.io/aws-load-balancer-scheme=internet-facing \
  service.beta.kubernetes.io/aws-load-balancer-subnets=subnet-02cbfaaf2093cf95f,subnet-01614bc0f46e7439f,subnet-03a3409ceaabd52e3 \
  service.beta.kubernetes.io/aws-load-balancer-type=nlb -n prometheus

###更改类型
kubectl patch service prometheus-server -p '{"spec": {"type": "LoadBalancer"}}' -n prometheus

关注博思云为视频号查看详细视频教程

关注博思云为视频号查看详细视频教程

关注博思云为视频号查看详细视频教程

访问Prometheus

关注博思云为视频号查看详细视频教程

编辑者:张瑞猛

审阅人:Eten.gao

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值