如果使用任何系统的时间足够长,那么你肯定必须对其进行调试,Kubernetes也不例外。它是一个分布式系统,有许多运动部件。我们将介绍8个可以运行以调试任何Kubernetes集群的命令。

它将帮助你了解集群,并确保核心功能,运行pods可用。

假设你有集群的管理员权限,收到一个kubeconfig文件可以访问集群,并且你被告知集群已损坏。我们可以从下面8个命令调试Kubernetes。

1.kubectl version -short

通过这个命令,我们可以查看API服务器正在运行的版本。这为我们以后在对特定错误进行故障排除时提供了重要信息,对了解是否在1.16这样的旧集群上非常有用。

了解版本也可以帮助我们搜索错误和阅读变更日志。可能存在需要版本升级或新引入错误的已知问题。不同组件之间有时会存在版本兼容性问题,了解正在运行的版本是第一步。

2.kubectl cluster-info

接下来,我们应该了解集群在哪里运行,以及CoreDNS是否在运行。你可以解析控制平面URL,以了解你是在处理托管集群还是内部部署。

在这个示例输出中,我们可以看出我们正在美国东部2地区运行一个Amazon Elastic Kubernetes Service(Amazon EKS)集群。如果你的供应商当前发生停机,此信息也有助于查找。你可以查看供应商的“服务运行状况”仪表板,以了解当前的问题是与集群有关还是与集群无关。

这还可以为集群是否需要额外的身份验证提供线索。可能存在AWS Identity和访问管理(IAM)权限问题,或者需要安装类似aws-iam-authenticator的身份验证插件。

3.kubectl get componentstatus

此命令是发现调度器、控制器管理器和etcd节点是否正常的最简单方法。这些都是运行pod的关键控制平面组件。你应该查找任何未显示“ok”状态的组件,并查找一切错误。

如果你使用的集群具有托管控制平面(例如Amazon EKS),则可能无法直接访问调度器或控制器管理器。能够从这个输出中看到它们的状态可能是了解etcd或其他组件是否有问题的最简单方法。

还需要注意的是,CLI中弃用了componentstatus命令,但尚未删除。目前没有此命令的替代品,但在将其从CLI中删除之前,它是安全的,非常有用。根据集群的不同,可能需要多个命令才能获得类似的输出。此命令存在设计限制,这就是它被弃用的原因。

查看其他健康端点(包括etcd)的另一个选择是kubectl get--raw'/healthz?verbose':

尽管此命令不显示调度器或控制器管理器输出,但它添加了许多额外的检查,如果出现问题,这些检查可能很有价值。

4.kubectl api-resource -o wide -sort-by name

这是第一个包含大量信息的命令。我们已经知道集群运行的版本和位置。此时,我们应该知道控制平面是否正常,现在需要查看集群中的一些资源。

为了保持一致性,笔者喜欢列出所有按名称排序的资源,更容易按字母顺序扫描资源。添加-o wide将显示每个资源上可用的verb。这可能很重要,因为有些资源比其他资源做得更多。了解哪些可用,哪些不可用,将有助于缩小查找错误的范围。

使用此命令将告诉你集群中安装了哪些CRD(自定义资源定义)以及每个资源的API版本。这可以让你深入了解控制器或工作负载定义上的日志。你的工作负载可能使用旧的alpha或beta API版本,但集群可能只使用v1或apps/v1。

5.kubectl get events -A

我们已经了解了集群中运行的是什么,接下来应该看看发生了什么。如果最近发生了故障,你可以查看集群事件,了解故障前后发生了什么。如果你知道某个特定命名空间中只有一个问题,那么可以将事件过滤到该命名空间中,并排除健康服务中的一些额外干扰。

有了这个输出,你应该关注输出的类型、原因和对象。通过这三条信息,你可以缩小要查找的错误以及可能配置错误的组件的范围。

6.kubectl get nodes -o wide

节点是Kubernetes内部的一级资源,也是pods运行的基础。使用-o-wide选项将告诉我们其他细节,如操作系统(OS)、IP地址和容器运行时。你首先要看的是状态。如果节点没有说“就绪”,你可能会遇到问题,但并非总是如此。

查看节点的年龄,查看状态和年龄之间是否存在任何关联。可能只有新节点出现问题,因为节点镜像中发生了更改。该版本将帮助你快速了解kubelet上是否存在版本偏差,并且可能由于kubelet和API服务器之间的版本不同而存在已知错误。

如果你看到子网之外的IP地址,则内部IP可能很有用。可能是节点以错误的静态IP地址启动,并且CNI无法将流量路由到工作负载。

OS镜像、内核版本和容器运行时都是导致问题的可能差异的重要指标。你可能只有特定操作系统或运行时有问题。这些信息将帮助你快速关注潜在的问题,并知道在哪里可以更深入地查看日志。

7.kubectl get pods -A -o wide

这是最后一个信息收集命令。与列表节点一样,你应该首先查看status列并查找错误。ready列将显示需要多少pod以及有多少正在运行。

使用-A将列出所有命名空间中的pod,-o-wide将显示IP地址、节点以及pod的指定位置。使用列表节点中的信息,你可以查看哪些pod在哪些节点上出现故障。将这些信息与操作系统、内核和容器运行时等细节相关联,可能会提供修复集群所需的洞察。

8.kubectl run a -image alpine -command — /bin/sleep 1d

有时候,调试某些东西的最佳方法是从最简单的示例开始。这个命令没有任何直接输出,但你应该可以从中看到一个名为“a”的正在运行的pod。

如果没有与其他人一起调试某些东西,笔者喜欢将调试容器命名为单个字母,因为这样可以更快地键入,并且很容易进行迭代(例如b、c、d)。笔者喜欢在调试时保留旧的容器,因为有时查看与以前的pod有什么不同会很有帮助,让它们运行或崩溃比搜索终端输出历史记录更容易。

如果由于某种原因,你没有从该命令中看到正在运行的pod,那么使用kubectl descripte po a是下一个最佳选择。查看事件,找出可能出错的错误。

使用这些命令,你应该能够开始使用任何集群,并知道它是否足够健康,可以运行工作负载。还有其他需要考虑的事情,如CoreDNS缩放、负载均衡、卷,以及中央日志记录和度量。这些命令应该可以在云中或内部部署中工作。

如果需要对节点或外部资源(例如负载均衡器)进行故障排除,则应查看控制器和API服务器日志以查找错误。根据损坏的内容,你可能需要查看kube-proxy、CNI插件或服务网格sidecar容器日志。

这8条命令能帮助你缩小集群中可能出现的问题的范围。如果你不知道问题是什么,那么从广度优先搜索开始是最好的方法。请注意不匹配的版本和不同的节点或设置的异常情况。如果你查找发生了什么变化,它可以指出正确的方向,快速发现并解决问题。

转载:https://www.tuicool.com/wx/em2UjyY

用8个命令调试Kubernetes集群的更多相关文章

  1. Kubernetes — 从0到1:搭建一个完整的Kubernetes集群

    准备工作 首先,准备机器.最直接的办法,自然是到公有云上申请几个虚拟机.当然,如果条件允许的话,拿几台本地的物理服务器来组集群是最好不过了.这些机器只要满足如下几个条件即可: 满足安装 Docker ...

  2. K8s 二、(1、kubeadm部署Kubernetes集群)

    准备工作 满足安装 Docker 项目所需的要求,比如 64 位的 Linux 操作系统.3.10 及以上的内核版本: x86 或者 ARM 架构均可: 机器之间网络互通,这是将来容器之间网络互通的前 ...

  3. 以对话的形式管理你的Kubernetes集群

    BotKube BotKube 是一个用于监控和调试 Kubernetes 集群的消息传递工具. BotKube 可以与多个消息传递平台(如 Slack.Mattermost 或 Microsoft ...

  4. 手把手从0到1:搭建Kubernetes集群

    搭建 k8s 集群网上很多教程,如果是手工部署或者实验环境可以直接使用 MiniKube 或者 Kind,来在本地启动简单的 Kubernetes 集群进行后面的学习即可.如果是使用 MiniKube ...

  5. kubernetes集群管理之通过jq来截取属性

    系列目录 首先要声明,这里的jq并不是批前端框架里的jquery,而是一个处理json的命令行工具. jq工具相比yq,它更加成熟,功能也更加强大,主要表现在以下几个方面 支持递归查找(我点对我们平时 ...

  6. Kubernetes集群管理工具kubectl命令技巧大全

    一. kubectl概述 Kubectl是用于控制Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署. kubectl命令的语法如下 ...

  7. Kubernetes集群的监控报警策略最佳实践

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/M2l0ZgSsVc7r69eFdTj/article/details/79652064 本文为Kub ...

  8. Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目

    在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集 ...

  9. 【转载】浅析从外部访问 Kubernetes 集群中应用的几种方式

    一般情况下,Kubernetes 的 Cluster Network 是属于私有网络,只能在 Cluster Network 内部才能访问部署的应用.那么如何才能将 Kubernetes 集群中的应用 ...

随机推荐

  1. 【LeetCode】548. Split Array with Equal Sum 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力 日期 题目地址:https://leetcode ...

  2. 【LeetCode】1012. Complement of Base 10 Integer 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  3. 【LeetCode】890. Find and Replace Pattern 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典+set 单字典 日期 题目地址:https:/ ...

  4. [opencv]approxDP多边形逼近获取四边形轮廓信息

    #include "opencv2/opencv.hpp" #include <iostream> #include <math.h> #include & ...

  5. CS5263|DP转HDMI转换器芯片|CS5263芯片说明

    CS5263是一款高性能DP1.4到HDMI2.0b功能芯片,设计用于将DP1.4源连接到HDMI2.0b接收器.CS5263集成了DP1.4兼容接收机和HDMI2.0b兼容接收机发射器.DP接口包括 ...

  6. 论文翻译:2020_Generative Adversarial Network based Acoustic Echo Cancellation

    论文地址:http://www.interspeech2020.org/uploadfile/pdf/Thu-1-10-5.pdf 基于GAN的回声消除 摘要 生成对抗网络(GANs)已成为语音增强( ...

  7. playwright--自动化(二):过滑块验证码 验证码缺口识别

    前两天需要自动化登录一个商城的后台 用的是playwright 没有用selenium 中间出了一个滑块验证 现阶段playwright教程不是太多,自己做移动的时候各种找,费劲巴拉的.现在自己整出来 ...

  8. PHP 开启 Opcache 功能提升程序处理效率

    简介 Opcache 的前生是 Optimizer+ ,它是 Zend 开发的 PHP 优化加速组件.Optimizer+ 将 PHP 代码预编译生成的脚本文件 Opcode 缓存在共享内存中供以后反 ...

  9. ASP.NET+MVC入门踩坑笔记 (一) 创建项目 项目配置运行 以及简单的Api搭建

    哈喽各位 我又回来了! 前段时间研究了下ASP.NET,刚开始也是随便找网上的各种教程来看,但是鉴于本人技术有限,还是走了相当长的一段弯路的.所以我写下了这篇文章.希望各位刚刚入坑的ASP.NET开发 ...

  10. post请求后获取不到请求头信息的原因

    在前台获取数据时,因为没有条件,所以不用传数据,用的post请求.再添加token验证时想着前端在请求时直接添加一个请求头信息就ok 没想到后台却获取不到请求头信息,打印了下日志发现是null,这是怎 ...