更优雅的 Kubernetes 集群事件度量方案

更优雅的 Kubernetes 集群事件度量方案

作者:张晋涛 2021-12-29 17:24:16

云计算 Kubernetes 已经提供了很方便的办法来解决此问题,也就是我回复中谈到的,通过 event 来度量即可。

[[442821]]

 大家好,我是张晋涛。

群里有个小伙伴问了我上图中这个问题,如何度量滚动升级这个过程的时间。

这个问题可以抽象为一种通用需求,适用于多种场景。

  • 比如你是 Kubernetes 集群的管理员,你想度量这个过程中的耗时,以便发现优化点;
  • 比如你是在做 CI/CD ,你想通过度量这个过程的耗时,来给出 CI/CD 过程的耗时;

现有方案

Kubernetes 已经提供了很方便的办法来解决此问题,也就是我回复中谈到的,通过 event 来度量即可。

比如,我们在 K8S 中,创建一个 deployment,看看这个过程中的 event 信息:

  1.   ~ kubectl create ns moelove 
  2. namespace/moelove created 
  3.   ~ kubectl -n moelove create deployment redis --image=ghcr.io/moelove/redis:alpine 
  4. deployment.apps/redis created 
  5.   ~ kubectl -n moelove get deploy 
  6. NAME    READY   UP-TO-DATE   AVAILABLE   AGE 
  7. redis   1/1     1            1           16s 
  8.   ~ kubectl -n moelove get events 
  9. LAST SEEN   TYPE     REASON              OBJECT                        MESSAGE 
  10. 27s         Normal   Scheduled           pod/redis-687967dbc5-gsz5n    Successfully assigned moelove/redis-687967dbc5-gsz5n to kind-control-plane 
  11. 27s         Normal   Pulled              pod/redis-687967dbc5-gsz5n    Container image "ghcr.io/moelove/redis:alpine" already present on machine 
  12. 27s         Normal   Created             pod/redis-687967dbc5-gsz5n    Created container redis 
  13. 27s         Normal   Started             pod/redis-687967dbc5-gsz5n    Started container redis 
  14. 27s         Normal   SuccessfulCreate    replicaset/redis-687967dbc5   Created pod: redis-687967dbc5-gsz5n 
  15. 27s         Normal   ScalingReplicaSet   deployment/redis              Scaled up replica set redis-687967dbc5 to 1 

可以看到我们主要关注的一些事件均已经有记录了。但是总不能每次都通过 kubectl 这么来看吧,有点浪费时间。

我之前的一种做法是在 K8S 中写了一个程序,持续的监听&收集 K8S 集群中的 event ,并将它写入到我另外开发的一套系统中进行存储和可视化。但这种方法需要做额外的开发也并不普适。这里我来介绍另一个更优的解决方案。

更优雅的方案

K8S 中的这些事件,都对应着我们的一个操作,比如上文中是创建了一个 deployment ,它产生了几个 event , 包括 Scheduled , Pulled ,Created 等。我们将其进行抽象,是不是和我们做的链路追踪(tracing)很像呢?

这里我们会用到一个 CNCF 的毕业项目 Jaeger[1] ,在之前的 K8S生态周报 中我有多次介绍它,Jaeger 是一款开源的,端对端的分布式 tracing 系统。不过本文重点不是介绍它,所以我们查看其文档,快速的部署一个 Jaeger 即可。另一个 CNCF 的 sandbox 级别的项目是 OpenTelemetry[2] 是一个云原生软件的可观测框架,我们可以把它跟 Jaeger 结合起来使用。不过本文的重点不是介绍这俩项目,这里暂且略过。

接下来介绍我们这篇文章的用到的主要项目,是来自 Weaveworks 开源的一个项目,名叫 kspan ,它的主要做法就是将 K8S 中的 event 作为 trace 系统中的 span 进行组织。

部署 kspan

  1. --- 
  2. apiVersion: v1 
  3. kind: ServiceAccount 
  4. metadata: 
  5.   name: kspan 
  6. --- 
  7. apiVersion: rbac.authorization.k8s.io/v1 
  8. kind: ClusterRoleBinding 
  9. metadata: 
  10.   creationTimestamp: null 
  11.   name: kspan-admin 
  12. roleRef: 
  13.   apiGroup: rbac.authorization.k8s.io 
  14.   kind: ClusterRole 
  15.   name: cluster-admin 
  16. subjects: 
  17. - kind: ServiceAccount 
  18.   name: kspan 
  19.   namespace: default 
  20. --- 
  21. apiVersion: v1 
  22. kind: Pod 
  23. metadata: 
  24.   labels: 
  25.     run: kspan 
  26.   name: kspan 
  27. spec: 
  28.   containers: 
  29.   - image: docker.io/weaveworks/kspan:v0.0 
  30.     name: kspan 
  31.     resources: {} 
  32.   dnsPolicy: ClusterFirst 
  33.   restartPolicy: Always 
  34.   serviceAccountName: kspan 

可以直接使用我这里提供的 YAML 进行部署测试,但注意上述配置文件别用在生产环境下, RBAC 权限需要修改 。

它默认会使用 otlp-collector.default:55680 传递 span ,所有你需要确保有这个 svc 存在。以上所有内容部署完成后你大概会是这样:

  1.   ~ kubectl get all 
  2. NAME                                  READY   STATUS    RESTARTS   AGE 
  3. pod/jaeger-76c84457fb-89s5v           1/1     Running   0          64m 
  4. pod/kspan                             1/1     Running   0          35m 
  5. pod/otel-agent-sqlk6                  1/1     Running   0          59m 
  6. pod/otel-collector-69985cc444-bjb92   1/1     Running   0          56m 
  7.  
  8. NAME                       TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                                          AGE 
  9. service/jaeger-collector   ClusterIP   10.96.47.12    <none>        14250/TCP                                        60m 
  10. service/kubernetes         ClusterIP   10.96.0.1      <none>        443/TCP                                          39h 
  11. service/otel-collector     ClusterIP   10.96.231.43   <none>        4317/TCP,14250/TCP,14268/TCP,9411/TCP,8888/TCP   59m 
  12. service/otlp-collector     ClusterIP   10.96.79.181   <none>        55680/TCP                                        52m 
  13.  
  14. NAME                        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE 
  15. daemonset.apps/otel-agent   1         1         1       1            1           <none>          59m 
  16.  
  17. NAME                             READY   UP-TO-DATE   AVAILABLE   AGE 
  18. deployment.apps/jaeger           1/1     1            1           73m 
  19. deployment.apps/otel-collector   1/1     1            1           59m 
  20.  
  21. NAME                                        DESIRED   CURRENT   READY   AGE 
  22. replicaset.apps/jaeger-6f77c67c44           0         0         0       73m 
  23. replicaset.apps/jaeger-76c84457fb           1         1         1       64m 
  24. replicaset.apps/otel-collector-69985cc444   1         1         1       59m 

上手实践

这里我们先创建一个 namespace 用于测试:

  1.   ~ kubectl create ns moelove 
  2. namespace/moelove created 

创建一个 Deployment

  1.   ~ kubectl -n moelove create deployment redis --image=ghcr.io/moelove/redis:alpine 
  2. deployment.apps/redis created 
  3.   ~ kubectl -n moelove get pods  
  4. NAME                     READY   STATUS    RESTARTS   AGE 
  5. redis-687967dbc5-xj2zs   1/1     Running   0          10s 

在 Jaeger 上进行查看:

点开看详细内容

可以看到,和此创建 deploy 有关的 event 均被归到了一起,在时间线上可以看到其耗时等详细信息。

总结

本文介绍了如何结合 Jaeger 利用 tracing 的方式来采集 K8S 中的 events ,以便更好的掌握 K8S 集群中所有事件的耗时点,更易于找到优化的方向及度量结果。

本文转载自微信公众号「MoeLove」,可以通过以下二维码关注。转载本文请联系MoeLove公众号。

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/251185.html<

(0)
管理的头像管理
上一篇2025-04-28 20:47
下一篇 2025-04-28 20:49

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注