译者 | 布加迪
审校 | 孙淑娟
革命性的Kubernetes是一次彻底的重组,需要一系列全新的配套和支持工具来支撑整个生态系统。实际上有数百种工具专为K8s而设计,包括开源和专有工具。
选择您的Kubernetes技术堆栈似乎很困难,毕竟生态系统很庞大。本文无意列出所有工具及调试方法。开发者优先的可观测性需要简化这一大堆工具。全面了解和调试Kubernetes部署需要一种比使用堆栈中的每个工具更直接更高效的总体工具和策略。话虽如此,大多数单独的工具提供内部可观测性,知道如何获得这种工具可以为开发者带来优势。
虽然不可能详尽地介绍每种工具,但本文将介绍最基本的工具以及每个类别的主要玩家。
一、调试K8s服务网格和入站控制器
我们已经有编排和部署工具,为什么需要一些听起来多余的工具?这涉及微服务之间Kubernetes协调的关键。服务网格和入站(ingress)控制器充当可配置的抽象层,控制进出Kubernetes的流量。
服务网格对Kubernetes内的服务进行协调(即东西流量)。
入站控制器协调流入Kubernetes的流量(入站),并协调可能流出Kubernetes的流量(出站,即南北流量)。在Kubernetes中,您将使用Kubernetes API来配置和部署它们。它们:
1. 接受入站(流入)流量,并通过负载均衡将其路由到pod
2. 监控pod,并自动更新负载均衡规则
3. 管理与集群外服务通信的出站(流出)流量
您的Kubernetes堆栈是否真需要这两种工具值得商榷,因此实际上这两个类别的所有工具都相互竞争。此外,您还可以添加API网关,像入站控制器一样控制入站流量和出站流量。
三大服务网格是Istio、Linkerd和Consul。它们使用管理集群级数据流量的“控制平面”和“数据平面”,直接面对在网格内的服务之间处理数据的功能。
1.调试 Istio您可以使用以下两个命令之一深入了解Istio网格中的流量:
istioctl proxy–status istioctl proxy–config您还可以浏览调试日志。注意,debug是Istio日志的五种可能输出之一(其他是none、error、warn和info)。注意,调试将提供最多的数据,一些开发者认为Istio在日志方面信息量很大。
以下示例定义了要分析的不同范围:
istioctl analyze –log_output_level klog:debug,installer:debug,validation:debug,validationController:debug 2.调试Linkerd调试的默认方法是使用调试容器(调试边车)。然而,Linkerd调试的工作方式因您使用的应用程序类型而异。
比如说,您将使用度量指标来调试HTTP应用程序和gRPC应用程序的请求跟踪。
调试502s,即错误的网关响应 调试控制平面端点 使用度量指标调试HTTP应用程序 使用请求跟踪调试gRPC应用程序针对Linkerd调试容器/边车:
kubectl –n <appname> get deploy/<appservicename> –o yaml \ | linkerd inject –enable-debug-sidecar – \ | kubectl apply –f – 3.调试ConsulConsul调试命令在Consul中极其简单。使用-capture定义您要分析的内容,并为间隔、持续时间、API、Go pprof 包等添加参数。
consul debug –capture agent –capture host –capture logs –capture metrics –capture members –capture pprof –interval=30s –duratinotallow=2m –httpaddr=126.0.0.1:8500 4.NGINX入站控制器NGINX之所以值得关注,是由于它很容易结合使用两个单独的工具:NGINX入站控制器和NGINX服务网格。本节着眼于入站控制器。为了解NGINX如何定位这两个工具,其架构图大有帮助:
图1. NGINX架构图(入站控制器vs服务网格)
(来源:NGINX 文档)
您可以在这里介绍两种类型的日志:用于NGINX入站控制器本身,及/或更强大的整体NGINX日志。
使用NGINX入站日志进行调试
您可以通过将–v=5添加到Kubernetes部署的-args部分,将日志级别更改为debug。注意,NGINX部署必须使用–with-debug来构建,以便稍后获得调试日志。
kubectl edit deployment nginx–ingress–controller spec: containers: – args: – /nginx–ingress–controller – –v=5使用常规NGINX错误日志进行调试
配置NGINX日志时,您必须设置错误日志,这对于调试来说最重要。
但在此之前,您需要确保先用调试选项来编译NGINX(如果使用开源版)。虽然感觉没有必要,但目前情况就是这样,因为NGINX试图管理如何致力于存储日志数据。当然,默认情况下该选项可能完全关闭。
先下载NGINX的开源版,然后开始编译过程。
nginx –V 2>&1 | grep arguments添加–with-debug参数
./configure –with-debug编译:
sudo make安装:
sudo make install重新启动。
现在是第2阶段。仔细检查安装是否有-with -debug:
nginx –V 2>&1 | grep — –with-debug打开NGINX配置文件:
sudo vi /etc/nginx/nginx.conf设置debug参数:
error_log /var/log/nginx/error.log debug;NGINX文档中有更多的选项。最后补充一点,还可以使用Syslog作为替代方案,这需要syslog:前缀,然后指定一台服务器(通过IP、UNIX套接字或域来指定)。
error_log syslog:server=130.78.244.101 debug; access_log syslog:server=130.78.244.102 severity=debug; 5.调试Traefik(入站控制器)Traefik Kubernetes Ingress控制器是另一种入站控制器。它管理Kubernetes集群服务,通过支持入站规范来管理对集群服务的访问。别将它与该公司的其他工具:Traefik Mesh和Traefik Gateway混为一谈。
与NGINX一样,Traefik Ingress日志和常规的Traefik日志及调试可以同时设置,也可以单独设置。
Traefik调试日志
您可以配置调试级别的Traefik日志,或通过Traefix API调试进行调试。两者都可以通过以下三种方式之一完成:通过Traefik CLI、.yaml配置文件或.toml配置文件。
日志方面,这是一个快速的三步过程:1. 设置filepath。2. 设置format(json或text)。3. 设置level。该示例演示了如何在Traefik CLI中执行此操作,但您也可以使用YAML或TOML配置文件。
–log.filePath=/path/to/traefik.log –log.format=json –log.level=DEBUGdebug是Traefik中的六个日志级别之一,但默认为ERROR(其他级别为PANIC、FATAL、WARN和INFO)。
Traefix API调试
在CLI中,设置 API:
–api=true然后,您将会有针对Kubernetes及其他容器编排器或基础架构管理器(Docker Swarm和Docker等)的不同配置选项。不妨演示一个基于Traefik文档的Kubernetes CRD示例(在 YAML 中):
apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: traefik–dashboard spec: routes: – match: Host(`traefik.progress–regress–we–all–scream–4–ingress.com`) <em>#this is clearly an example please do not visit this url and take no responsibility if it is real and unsafe