Kubernetes 接口慢调用问题排查实战:从现象到根因的完整分析
概述接口慢调用是生产环境中常见且影响严重的问题,本文记录两次完整的排查过程,展示从现象发现到根因定位的系统化方法论。 核心收获: 🔍 系统化的排查思路 📊 多层次问题定位方法 🛠️ 实用监控工具组合 💡 预防性措施建议 适用场景: 接口响应时间过长 用户体验下降 系统资源异常 雪崩风险预警 问题背景现象描述用户反馈: 系统商户端出现响应慢、加载慢的问题 影响范围: 移动端应用加载缓慢 部分接口超时 用户体验显著下降 慢调用的危害业务影响: 维度 影响 后果 用户体验 加载慢、卡顿 应用卸载率↑,品牌口碑↓ 项目交付 无法达到SLA 项目延期,客户投诉 系统稳定性 雪崩效应 服务级联故障,系统不可用 雪崩效应链路: 1234567891011接口慢调用 ↓超时增多 ↓大量重试 ↓资源耗尽 ↓服务降级/不可用 ↓级联故障(雪崩) 排查思路分层排查法自顶向下的排查策略: 123451. 用户层:确认影响范围2. 网关层:检查状态码和日志3. 应用层:分析资源使用情况4. 服务层:追踪调用链路5. 数据层:排...
解决镜像下载失败的几种方法
前言 在学习、研究 K8S 的过程中,经常遇到镜像拉取不了的网络问题,这并不是镜像本身的问题,而是国内的“国情”导致无法正常访问墙外资源。 这些镜像有的是 K8S 团队自研的插件,也有一些是爱好者开发的第三方组件,正常来说,他们会存放于 gcr.io 或者 quay.io 中。 gcr.io 是 谷歌的镜像仓库,是禁止访问的,而 quay.io 是 RedHat 的镜像仓库,可以访问,但速度较慢。 那如何应对这种网络问题呢? 现成的镜像代理仓库k8s.gcr.io 源代理仓库ctr images tag k8s.m.daocloud.io/scheduler-plugins/kube-scheduler:v0.24.9 这是 gcr.io/google-containers 的仓库,使用阿里云镜像 123k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.3.0# 换成registry.aliyuncs.com/google_containers/csi-node-driver-registra...
Kubernetes 获取客户端真实 IP:externalTrafficPolicy 深度解析
概述在 Kubernetes 中获取客户端真实 IP 是一个常见需求,但由于 kube-proxy 的 SNAT 机制,往往获取到的是中间节点的 IP。externalTrafficPolicy 字段提供了解决方案。 核心知识: 🔍 Service 外部流量策略 📡 客户端 IP 保留机制 ⚖️ Cluster vs Local 模式 🎯 负载均衡权衡 适用场景: 需要记录真实客户端 IP 访问控制和安全审计 流量分析和用户画像 地域识别和限流 externalTrafficPolicy 详解什么是 externalTrafficPolicy定义: externalTrafficPolicy 是 Kubernetes Service 中控制外部流量转发策略的字段,决定流量如何路由到 Pod 以及是否保留客户端源 IP。 可选值: 值 说明 默认 Cluster 流量可转发到任意节点的 Pod ✅ 是 Local 流量仅转发到本节点的 Pod ❌ 否 配置示例: 123456789101112apiVersion: v1kind: Servicem...
记录k8s-service中的几种类型以及port区别
官方介绍k8s service 分为几种类型,分别为:ClusterIp (默认类型,每个Node分配一个集群内部的Ip,内部可以互相访问,外部无法访问集群内部) NodePort (基于ClusterIp,另外在每个Node上开放一个端口,可以从所有的位置访问这个地址) LoadBalance (基于NodePort,并且有云服务商在外部创建了一个负载均衡层,将流量导入到对应Port。要收费的,一般由云服务商提供,比如阿里云、AWS等均提供这种服务, k3s也默认提供了一个lbs - klipper-lb, 本地集群可以使用metallb, metallb解释文档) ExternalName (将外部地址经过集群内部的再一次封装,实际上就是集群DNS服务器将CNAME解析到了外部地址上,实现了集群内部访问) 例如,以下 Service 定义将 prod 名称空间中的 my-service 服务映射到 my.database.example.com: 12345678apiVersion: v1kind: Servicemetadata:name: my-service...
Kubernetes 容器退出状态码 Exit Code 快速参考
Pod 状态说明 状态 含义 排查 CrashLoopBackOff 容器反复崩溃 查看日志、资源限制 ImagePullBackOff 镜像拉取失败 检查镜像名、网络 CreateContainerError 创建容器失败 检查配置、权限 OOMKilled 内存不足 增加 memory limits Exit Code 规则范围: 0-255 分类: 0:正常退出 1-128:程序异常 129-255:外部信号 转换公式: 12负数:256 - (|code| % 256)正数:code % 256 常见退出码 Code 信号 含义 原因 0 - 正常退出 Job完成 1 - 程序错误 代码bug、配置错误 2 - Shell错误 命令使用错误 126 - 不可执行 权限问题 127 - 命令未找到 PATH错误、拼写错误 137 SIGKILL 强制杀死 OOM、kill -9 139 SIGSEGV 段错误 内存访问错误 143 SIGTERM 正常终止 docker stop 255 - 退出码超...
Kubernetes权限管理RBAC详解
摘自: https://blog.csdn.net/qq_35745940/article/details/120693490 一、简介 kubernetes 集群相关所有的交互都通过apiserver来完成,对于这样集中式管理的系统来说,权限管理尤其重要,在1.5版的时候引入了RBAC(Role Base Access Control)的权限控制机制。 启用RBAC,需要在 apiserver 中添加参数–authorization-mode=RBAC,如果使用的kubeadm安装的集群,1.6+版本都默认开启了RBAC。 1$ grep -C3 'authorization-mode' /etc/kubernetes/manifests/kube-apiserver.yaml API Server目前支持以下几种授权策略: AlwaysDeny:表示拒绝所有请求,一般用于测试。 AlwaysAllow:允许接收所有请求。如果集群不需要授权流程,则可以采用该策略,这也是Kubernetes的默认配置。 ABAC(Attribute-Ba...
NodeLocal DNSCache的使用
参看此篇章前可先查看记录一次k3s网络DNS问题排查篇 参考: https://v1-24.docs.kubernetes.io/zh-cn/docs/tasks/administer-cluster/nodelocaldns/ https://www.suse.com/support/kb/doc/?id=000020174 https://stackoverflow.com/questions/70913822/kubernetes-k3s-pod-gets-enotfound-after-5-20-hours-of-airing-time https://icode.best/i/10017745505921 https://hub.docker.com/r/dyrnq/k8s-dns-node-cache/tags https://github.com/coredns/deployment/blob/master/kubernetes/Scaling_CoreDNS.md https://lework.github.io/2020/11/09/node-local-d...
daemonset的使用以及测试部署filebeat
filebeat_daemonset.yaml123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194...
etcdctl的安装和使用
使用 etcdctletcdctl 为 etcd 提供了一个 CLI。 如果您想在安装带有嵌入式 etcd 的 K3s 后使用 etcdctl,请使用官方文档安装 etcdctl。 123VERSION="v3.5.0"curl -L https://github.com/etcd-io/etcd/releases/download/${VERSION}/etcd-${VERSION}-linux-amd64.tar.gz --output etcdctl-linux-amd64.tar.gztar -zxvf etcdctl-linux-amd64.tar.gz --strip-components=1 -C /usr/local/bin etcd-${VERSION}-linux-amd64/etcdctl 然后开始使用带有适当 K3s 标志的 etcdctl 命令: 1234etcdctl --endpoints="https://127.0.0.1:2379" --cac...
job和cronjob的使用
job 主要用于负责**批量处理(一次要处理指定数量任务)短暂的一次性(每个任务仅运行一次就结束)**任务。Job特点如下: 当Job创建的pod执行成功结束时,Job将记录成功结束的pod数量 当成功结束的pod达到指定的数量时,Job将完成执行 关于重启策略设置的说明: 如果指定为OnFailure,则job会在pod出现故障时重启容器,而不是创建pod,failed次数不变 如果指定为Never,则job会在pod出现故障时创建新的pod,并且故障pod不会消失,也不会重启,failed次数加1 job.yaml 12345678910111213141516171819202122232425262728293031323334apiVersion: batch/v1kind: Jobmetadata: name: job labels: app: jobspec: # 允许使用selector(默认是false) manualSelector: true # 指定job在任一时刻应该并发运行Pods的数量。默认值: 1 par...
