【Kubernetes】当K8s出现问题时,我们可以从哪些方面排查出
前言
kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写
。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
作者简介: 辭七七,目前大二,正在学习C/C++,Java,Python等
作者主页: 七七的个人主页
文章收录专栏: 七七的闲谈
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖
K8s问题的排查
- 1. POD启动异常、部分节点无法启动pod
- 2. 审视集群状态
- 3. 追踪事件日志
- 4. 聚焦Pod状态
- 5. 检查网络连通性
- 6. 审视存储配置
- 7. 研究容器日志
- 8. K8S集群网络通信
- 9. 问题:Service 是否通过 DNS 工作?
- 10. 总结
1. POD启动异常、部分节点无法启动pod
容器里管理应用
- pod是k8S中最小调度单元,POD里面的容器共享pod的空间、资源、网络、存储等。
- pod管理一个容器。
- pod管理多个容器。
pod出现异常的原因:
- 资源过剩: 大量POD在同一个物理节点,出现资源占用太多导致物理节点宕机。
- 内存和CPU超标:pod中的应用出现内存泄露,导致pod内存迅速增多,pod kill 了影响节点正常提供服务。(解决办法:压测占用多少内存和CPU,做资源限制;)
- 网络问题:导致POD无法通信(解决办法:检查calico网络插件情况)
- 存储问题:pod挂载的共享存储连接不上导致pod启动异常(解决办法:查看共享存储是否正常,存储卷是否正常)
- 代码问题:应用程序代码在容器启动后失败(解决办法:排查应用程序代码)
- 配置问题:在部署deployment和statefulset时,资源清单编写有问题,导致pod无法正常创建(解决办法:查看资源配置的清单)
- 借助监控系统排查以上问题。
2. 审视集群状态
审视集群状态
K8S的集群状态是排查故障的关键起点。使用kubectl get nodes命令来检查节点状态。如果有节点未能就绪或出现异常状态,可能会对应用程序造成故障。确保基本组件,如etcd、kubelet和kube-proxy等,正常运行。
3. 追踪事件日志
追踪事件日志
深入了解集群中发生的事件是解决K8S故障的重要环节。通过kubectl get events命令查看事件日志。事件日志记录了与集群中重要事件和错误相关的信息。透过事件日志的检查,能够了解K8S组件或应用程序中存在的潜在故障,并准确定位问题。
4. 聚焦Pod状态
第三方面:聚焦Pod状态
通过运行kubectl get pods --all-namespaces命令,获取集群中所有Pod的状态。若有Pod未处于运行状态(例如挂起、错误或未就绪等),很可能与容器或应用程序相关的问题有关。借助kubectl describe pod命令,获取特定Pod的详细信息,以便深入排查。
5. 检查网络连通性
检查网络连通性
确保网络连接正常。审查服务、Pod和节点之间的网络通信是否存在问题。运行kubectl get services命令查看服务状态,使用kubectl describe service获取相关服务的详细信息。同时,验证网络策略和防火墙规则的正确配置。
6. 审视存储配置
审视存储配置
如果你的应用程序使用持久性存储(例如Persistent Volumes和Storage Classes),务必确保存储配置正确。检查存储卷声明、存储类和持久卷的状态。通过kubectl get pv、kubectl get pvc和kubectl get storageclass命令,获取与存储相关的信息。
7. 研究容器日志
研究容器日志
深入容器的日志能够提供关于应用程序故障的重要线索。使用kubectl logs命令查看特定Pod中容器的日志输出。如果Pod内含多个容器,你可以使用kubectl logs-c来查看特定容器的日志。
8. K8S集群网络通信
K8S集群有自己独立的内部网络,整个集群的通信都需要依赖网络插件,常见的网络插件有Calico、Flannel、Canel等等。
- Calico网络插件支持IP地址的分配以及网络策略的调整,性能和Flannel不相上下。
- Flannel网络插件只支持IP地址分配。
- Canel是Calico和Flannel网络插件的结合体。
K8S集群中的网络通信主要有以下几种:
- 同一个Pod内多个容器之间的网络通信。
- Pod与Pod之间的网络通信。
- Pod与Service的通信。
- Service资源与集群外部的通信。
9. 问题:Service 是否通过 DNS 工作?
从相同 Namespace 下的 Pod 中运行:
u@pod$ nslookup hostnames
Address 1: 10.0.0.10 kube-dns.kube-system.svc.cluster.localName: hostnames
Address 1: 10.0.1.175 hostnames.default.svc.cluster.local
如果失败,那么您的 Pod 和 Service 可能位于不同的 Namespace 中,请尝试使用限定命名空间的名称:
u@pod$ nslookup hostnames.default
Address 1: 10.0.0.10 kube-dns.kube-system.svc.cluster.localName: hostnames.default
Address 1: 10.0.1.175 hostnames.default.svc.cluster.local
如果成功,那么需要调整您的应用,使用跨命名空间的名称去访问服务,或者,在相同的 Namespace 中运行应用和 Service。如果仍然失败,请尝试一个完全限定的名称:
u@pod$ nslookup hostnames.default.svc.cluster.local
Address 1: 10.0.0.10 kube-dns.kube-system.svc.cluster.localName: hostnames.default.svc.cluster.local
Address 1: 10.0.1.175 hostnames.default.svc.cluster.local
注意这里的后缀:”default.svc.cluster.local”。”default” 是我们正在操作的 Namespace。”svc” 表示这是一个 Service。”cluster.local” 是您的集群域,在您自己的集群中可能会有所不同。
您也可以在集群中的 Node 上尝试此操作:
注意:10.0.0.10 是我的 DNS Service,您的可能不同)
u@node$ nslookup hostnames.default.svc.cluster.local 10.0.0.10
Server: 10.0.0.10
Address: 10.0.0.10#53Name: hostnames.default.svc.cluster.local
Address: 10.0.1.175
如果您能够使用完全限定的名称查找,但不能使用相对名称,则需要检查 /etc/resolv.conf 文件是否正确。
u@pod$ cat /etc/resolv.conf
nameserver 10.0.0.10
search default.svc.cluster.local svc.cluster.local cluster.local example.com
options ndots:5
nameserver 行必须指示您的集群的 DNS Service,它通过 --cluster-dns 标志传递到 kubelet。
search 行必须包含一个适当的后缀,以便查找 Service 名称。在本例中,它在本地 Namespace(default.svc.cluster.local)、所有 Namespace 中的 Service(svc.cluster.local)以及集群(cluster.local)中查找服务。根据您自己的安装情况,可能会有额外的记录(最多 6 条)。集群后缀通过 --cluster-domain 标志传递给 kubelet。本文档中,我们假定它是 “cluster.local”,但是您的可能不同,这种情况下,您应该在上面的所有命令中更改它。
options 行必须设置足够高的 ndots,以便 DNS 客户端库考虑搜索路径。在默认情况下,Kubernetes 将这个值设置为 5,这个值足够高,足以覆盖它生成的所有 DNS 名称。
10. 总结
当然,具体的排查方法还取决于你的集群配置、应用程序部署方式以及故障的具体现象。根据实际情况,可能需要进一步调查或采取其他排查措施。立足于这些方向,你将更有把握解决K8S故障,并确保应用程序持续稳定运行。
关于【Kubernetes】当K8s出现问题时,我们可以从哪些方面排查出的详解,七七就先分享到这里了,如果你认为这篇文章对你有帮助,请给七七点个赞吧,如果发现什么问题,欢迎评论区留言!!💕💕
相关文章:
【Kubernetes】当K8s出现问题时,我们可以从哪些方面排查出
前言 kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kub…...
SentenceTransformer 之论文解读
摘要 原文标题:Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks 链接:https://arxiv.org/pdf/1908.10084.pdf 尽管Bert和RoBERTa在句子对回归任务上,例如语义文本相似度(Semantic Text Similarity)…...
AI发展历史
一、AI的发展历史 二、AI发展的第五阶段 (一)、第一阶段 1.艾伦图灵与模仿游戏 艾伦•图灵(Alan Turing,1912~1954)是英国数学家、逻辑学家,被称为计算机科学之父,人工智能之父。二战中协助军…...
想要精通算法和SQL的成长之路 - 简化路径
想要精通算法和SQL的成长之路 - 简化路径 前言一. 简化路径 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 简化路径 原题连接 思路如下: 我们根据 "/" 去拆分字符串,得到每个子目录。这里拿到的子目录可能是空字符串,需要…...
【哈士奇赠书活动 - 41期】- 〖产品设计软技能:创业公司篇〗
文章目录 ⭐️ 赠书 - 《产品设计软技能:创业公司篇》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《产品设计软技能:创业公司篇》 ⭐️ 内容简介 在创业公司设计产品与在成熟公司设计产品存在明显差异。《产品设计软…...
MARS: An Instance-aware, Modular and Realistic Simulator for Autonomous Driving
MARS: An Instance-aware, Modular and Realistic Simulator for Autonomous Driving(基于神经辐射场的自动驾驶仿真器)https://github.com/OPEN-AIR-SUN/marshttps://arxiv.org/pdf/2307.15058.pdfhttps://mp.weixin.qq.com/s/6Ion_DZGJwzs8JOoWMMbPw …...
关联规则挖掘(上):数据分析 | 数据挖掘 | 十大算法之一
⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。 🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、…...
centos7 + citus12 + postgresql 14 安装
1 安装及编译 yum install -y centos-release-scl-rh epel-release yum update -y yum groupinstall -y Development Tools yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm yum install -y postg…...
MySQL、Oracle、SQL Server / MS Access 中的 NULL函数用法
一、MySQL: isnull(exper) 判断exper是否为空,是则返回1,否则返回0 ifnull(exper1,exper2)判断exper1是否为空,是则用exper2代替 nullif(exper1,exper2)如果expr1 expr2 成立,那么返回值为NULL,否则返回值…...
App Store审核被拒原因与解决方案
为了避免不必要的上线延迟及成本增加,了解App Store审核被拒的常见原因以及对应的解决方案是开发人员以及营销人员的必修课。 CSDN相关的解决方案 App Store审核被拒的12个常见原因与快速过审解决方法...
LeetCode解法汇总121. 买卖股票的最佳时机
目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 给定一个数…...
【Go】go-es统计接口被刷数和ip访问来源
go-es模块统计日志中接口被刷数和ip访问来源 以下是使用go的web框架gin作为后端,展示的统计页面 背景 上面的数据来自elk日志统计。因为elk通过kibana进行展示,但是kibana有一定学习成本且不太能满足定制化的需求,所以考虑用编程的方式…...
debian 安装 pg --chatGpt
pgt: 要在Debian上安装PostgreSQL (通常缩写为PG) 数据库,您可以使用apt包管理器来执行安装操作。以下是安装PostgreSQL的步骤: 1. 打开终端。 2. 使用sudo权限以管理员身份运行以下命令,以更新包信息并安装PostgreSQL: bash …...
商城小程序代客下单程序开发演示
一款专为传统电商、实体商家开发的商城系统小程序,做私域、做留存、做社交必备功能全都有。 1、丰富的营销玩法:拼团、秒杀、定金预售、分销、社区团购、积分商城、支付有礼等主流获客玩法都有。 2、强大的会员体系:普通会员、付费会员、会…...
SpringBoot 整合 jetcache缓存
目前 jetcache 支持的本地缓存方案有两种,远程缓存支持两种,分别如下: 本地缓存(Local) LinkedHashMapCaffeine 远程缓存(Remote) Redis Tair 依赖导入 <dependency><groupId>…...
HTML5+CSS3+移动web 前端开发入门笔记(二)HTML标签详解
HTML标签:排版标签 排版标签用于对网页内容进行布局和样式的调整。下面是对常见排版标签的详细介绍: <h1>: 定义一级标题,通常用于标题栏或页面主要内容的标题。<p>: 定义段落,用于将文字分段展示,段落之…...
Maven 配置阿里云镜像
1. 查找maven setting.xml配置文件 find / -name "setting.xml" 2. 添加阿里云镜像 修改maven根目录下的conf文件夹中的setting.xml文件中的mirrors下添加mirror标签 <settings> <localRepository>E:\Maven\repository</localRepository> <…...
矢量图绘制软件EazyDraw mac中文版软件介绍
EazyDraw mac是一款功能强大且易于使用的矢量绘图软件。 EazyDraw mac软件介绍 矢量绘图工具:EazyDraw 提供了一套全面的矢量绘图工具,包括直线、曲线、多边形、文本框、图形填充等。用户可以使用这些工具创建和编辑精确的矢量图形,无论是简…...
Cocos Creator3.8 项目实战(四)巧用九宫格图像拉伸
一、为什么要使用九宫格图像拉伸 相信做过前端的同学都知道,ui (图片)资源对包体大小和内存都有非常直接的影响。 通常ui 资源都是图片,也是最占资源量的资源类型,游戏中的ui 资源还是人机交互的最重要的部分ÿ…...
怎么使用jenkins设置web自动打包
在Jenkins中设置Web自动打包需要完成以下步骤: 1.环境基础 安装Jenkins:首先,你需要在服务器上安装Jenkins。 你可以从Jenkins官网下载Jenkins的安装包,并按照官方指导进行安装。 2.使用jenkins设置web自动打包步骤 创建Jenk…...
完美解决 flex 实现一行三个,显示多行,左对齐
效果图 代码 <body><section class"content"><div class"item">元素</div><div class"item">元素</div><div class"item">元素</div><div class"item">元素</di…...
初识Spring
目录 1.Spring 基础 2.传统程序开发 3.IoC程序开发(解耦) 4.DI 4.1 IoC 和 DI 有什么区别 1.Spring 基础 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃⽽庞⼤的社区&…...
Mybatis 使用参数时$与#的区别
之前我们介绍了mybatis中参数的使用,本篇我们在此基础上介绍Mybatis中使用参数时$与#的区别。 如果您对mybatis中参数的使用不太了解,建议您先进行了解后再阅读本篇,可以参考: Mybatis参数(parameterType)https://blog.csdn.net…...
解锁Spring Boot的强大配置功能:@ConfigurationProperties与@PropertySources详解
解锁Spring Boot的强大配置功能:ConfigurationProperties与PropertySources详解 前言什么是ConfigurationProperties和PropertySourcesConfigurationProperties的使用步骤 1: 创建 Java POJO 类步骤 2: 配置类步骤 3: 配置文件步骤 4: 注入配置属性 PropertySources…...
Java和Vue字符串加密
字符串加密 AES 加密算法 在 Java 中,可以使用不同的加密算法来对字符串进行加密。以下是使用 AES 加密算法的示例代码,演示如何对一个字符串进行加密: import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java…...
Java:java版结巴分词:jieba-analysis
文档 https://github.com/huaban/jieba-analysishttps://mvnrepository.com/artifact/com.huaban/jieba-analysis 依赖 <!-- https://mvnrepository.com/artifact/com.huaban/jieba-analysis --> <dependency><groupId>com.huaban</groupId><art…...
java生成一个符合密码学和安全性的随机秘钥
有时 我们在生成token 或者完成某种加密形式时会需要一个秘钥 但是 有些时候 项目开发并没有规定用什么秘钥 但是 秘钥都是要有一定格式规范的 我们可以通过以下代码生成一个随机秘钥 import java.security.SecureRandom; import java.util.Base64;public class TokenGenerat…...
C++ - 右值引用 和 移动拷贝
右值引用 我们先来了解什么是左值,什么是右值: 左值 和 有值 区分 首先,左值 和 右值 并不是完全意味着 在 "" 左边的就是 左值 ; 在 "" 右边的就是右值。这是不一定的。只能说,在左边的大概率是…...
项目成员积分规则
在当下的项目/团队管理种,如何让成员能清晰的看到,自己的工作、努力在团队种属于那个段位,通过这个形式,并配合其他方式去点燃成员的进步之心。以积分的形式,代替绩效考核,一些零散的想法,欢迎各…...
属于网站开发工具的是/如何做好一个营销方案
传送门 好题啊。 考虑前面的32分,直接维护后缀trietrietrie树就行了。 如果#号不在字符串首? 只需要维护第一个#前面的字符串和最后一个#后面的字符串。 分开用两棵trie树并且维护第一棵树上当前点到根的路径上的所有点在第二棵树上的对应点。 于是支持对…...
网站建设效果/网站推广服务报价表
一个技术人员必须考虑的问题---转型 转载于:https://www.cnblogs.com/wxbbk/archive/2009/05/04/1449025.html...
网站设计风格方案/推广之家
一、简单用法在PICT安装目录下新建一个txt文本。把参数填入txt文本中。[内容包括(注意格式<ParamName> : <Value1>, <Value2>, <Value3>, ...),e.g)] ,txt文件名最好是英文名,文本标点必须是英文标点在CMD命令中输入…...
成都水高新区建设局官方网站/谷歌app下载
1. HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头2. HTTP 是不安全的,而 HTTPS 是安全的3. HTTP 标准端口是80 ,而 HTTPS 的标准端口是4434. 在OSI 网络模型中,HTTP工作于应用层,而HTTPS 工作在传输层5. H…...
如何做网站怎么赚钱/google关键词搜索量
前言 关于流式调用,熟悉Java的小伙伴可能第一时间都会想到Java8关于stream相关的API,类似这种的代码list.stream().map(item->item1).colletion(Collector::toList),流式调用带给我们的直接感受是代码量的减少。但是由于Java的特性导致一…...
做网站联系电话/网站推广优化c重庆
初入C: 跟C语言很多都很相似,主要从不同之处学习。 (1)、I/O流控制:流是一种抽象概念,他代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中…...