使用 Datadog 和 Slack Alerts 监控 minikube
为什么要监控 minikube 集群?这是一个不错的练习,可以让你了解 DataDog 的设置过程并探索 K8s 指标产品。
本文将分享我的以下经验:
- 设置最新的 minikube
- 部署示例应用程序
- 创建 DataDog(试用)帐户
- 使用 Helm 安装 DataDog 代理
- 安装 DataDog 集成并查看仪表板
设置最新的 minikube
我按照 minikube 文档安装了 minikube。文档根据我的机器生成了一些下载和安装 minikube 的命令,使整个过程快速而轻松。
对于我的 Mac,文档生成了以下内容:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
sudo install minikube-darwin-amd64 /usr/local/bin/minikube
从这里开始,我只需要执行 minikube start 就可以启动我的集群。我运行 kubectl config current-context 来验证上下文设置是否正确,结果返回了 minikube 。
ninjamac@ip-192-168-1-95 ~ % minikube start
😄 Darwin 15.3.1 (arm64) 上的 minikube v1.33.1
✨ 根据现有的配置文件使用 docker 驱动程序
👍 Starting "minikube" primary control-plane node in "minikube" cluster
🚜 Pulling base image v0.0.44 ...
🔄 Restarting existing docker container for "minikube" ...
❗ 此镜像不适用于当前的 minikube 版本。要解决此问题,您可以删除并重新创建您的 minikube 集群,使用最新的镜像。预期的 minikube 版本:v1.33.0 -> 实际的 minikube 版本:v1.33.1
🐳 正在 Docker 26.0.1 中准备 Kubernetes v1.30.0…
🔎 正在验证 Kubernetes 组件...
▪ 正在使用镜像 docker.io/kubernetesui/dashboard:v2.7.0
💡 插件启用后,请运行 "minikube tunnel" 您的 ingress 资源将在 "127.0.0.1"
▪ 正在使用镜像 gcr.io/k8s-minikube/storage-provisioner:v5
▪ 正在使用镜像 registry.k8s.io/ingress-nginx/controller:v1.10.1
▪ 正在使用镜像 registry.k8s.io/metrics-server/metrics-server:v0.7.1
▪ 正在使用镜像 registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.1
▪ 正在使用镜像 docker.io/kubernetesui/metrics-scraper:v1.0.8
▪ 正在使用镜像 registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.1
🔎 正在验证 ingress 插件...
💡 Some dashboard features require the metrics-server addon. To enable all features please run:
minikube addons enable metrics-server
🌟 启用插件: metrics-server, storage-provisioner, default-storageclass, dashboard, ingress
🏄 完成!kubectl 现在已配置,默认使用"minikube"集群和"default"命名空间
部署示例应用程序
我创建了一些示例应用程序用于监控。运行单个 Nginx Pod 并将其公开为服务非常简单。我还保存了 Nginx 的配置作为部署。
kubectl run nginx --image=nginx
kubectl expose pod nginx --port 80
kubectl apply -f https://raw.githubusercontent.com/gsweene2/terraform-eks-nginx/master/k8s/nginx-deployment.yaml
kubectl apply -f https://raw.githubusercontent.com/gsweene2/terraform-eks-nginx/master/k8s/nginx-service.yaml
创建datadog 免费账号并和kubernetes集成
选择kubernetes nginx slack container
使用 Helm 安装 Datadog 代理
添加 Datadog Helm 存储库
helm repo add datadog https://helm.datadoghq.com
helm repo update
kubectl create secret generic datadog-secret --from-literal api-key=<DATADOG_API_KEY>
tips:用您自己的Datadog API key 替换<DATADOG_API_KEY>
配置 datadog-values.yaml
创建 datadog-values.yaml 文件,其中包含:
datadog:
apiKeyExistingSecret: datadog-secret
site: <DATADOG_SITE>
将 <DATADOG_SITE> 替换为您的 Datadog 站点。我把datadog的站点都放在下面的截图中。
使用上述配置文件部署Agent
helm install datadog-agent -f datadog-values.yaml datadog/datadog
确认代理安装
ninjamac@ip-192-168-1-95 datadog % kubectl get pod -l app=datadog-agent
NAME READY STATUS RESTARTS AGE
datadog-agent-55qds 2/2 Running 0 54m
也可以登录datadog,验证代理 Pod(带有 app.kubernetes.io/component:agent 标签)是否出现在 Datadog 的“容器”页面上。代理 Pod 会在部署后几分钟内被检测到。
创建pod failling 告警规则
当 Pod 发生故障时,这意味着容器要么以非零状态退出,要么被系统终止。此监视器会跟踪给定 Kubernetes 集群中超过 2个 Pod 发生故障的情况。
设置通过slack - datadog-alert channel来告警
通过kubectl scale命令来将nginx deployment缩到0来模拟故障,生产环境千万不要这样做。
ninjamac@ip-192-168-1-95 datadog % kubectl scale deployment nginx-deployment --replicas=0
deployment.apps/nginx-deployment scaled
过几分钟后就slack就收到下面的告警
结论
通过这篇文章,我给您演示了如何在minikube中部署datadog agent,然后通过它来收集kubernetes集群状态和pod的信息,并通过与slack工具集成,创建告警规则,当pod fail时自动发送告警到slack channel。希望能对您的日后运维带来一些启示和帮助,如果您有问题,欢迎在评论区给我留言。