K8s常见问题(2)

1,pod出现问题需要怎么检查

|----------|-----------------------------|---------------------------------------|
| 排查层面 | 关键检查点 | 常用命令/工具 |
| Pod/容器层面 | Pod状态,容器资源限制 | kubectl get pods,kubectl describe pod |
| 控制平面 | kube-apiserver | 集群监控 |
| 网络 | 服务发现,网络策略,service/ingress配置 | kubectl get svc,nslookup,网络监控工具 |
| 存储 | 持久卷的I/O性能,存储类配置 | kubectl get pv,kubectl get pvc |

kubernetes集群端检查 ingress控制器

检查ingress资源是否配置正确 kubectl get ingress

查看ingress控制器日志: kubectl logs -n ingress-nginx

service类型:确认service类型为LoadBalancer或NodePort External IP:使用kubectl get svc检查External IP是否已分配且状态正常

端口映射:验证Service targetport是否正确映射到Pod的容器端口

Pod状态:使用kubectl get pods检查Pod是否处于Running状态且READY为1/1

Pod日志:查看应用日志: kubectl logs

Pod事件:使用kubectl describe pod <pod-name>查看Pod创建和运行过程中的事件

容器健康检查:检查LivenessProbe和readinessProbe配置是否正确

应用配置:确认应用监听的端口与Service的TargerPort一致

资源限制:检查Pod是否因CPU/内存不足而被限流

2,为什么需要Pod?

为什么需要Pod:Pod的设计解决了容器编排中的几个核心问题:

1,资源共享与通信:同一Pod内的容器可以通过localhost直接通信,共享存储卷,避免了复杂的网络配置

2,生命周期管理:Pod作为原子单元进行调度,扩展和故障恢复,简化了管理复杂度

3,应用组合:支持"边车模式",可以在主应用容器旁运行辅助容器

4,资源隔离:Pod级别的资源限制和请求,确保应用间的资源隔离

3,简述kube-proxy的作用

1,监听与同步:kube-proxy持续监听kubernetes API Server,实时感知集群中Service和Pod的变化

2,配置数据平面:一旦有变化,kube-proxy就会在本机更新网络转发规则,确保发往Service的流量能被正确导向后端健康的Pod,目前主流通过两种模式实现:

iptables模式:kube-proxy在节点上设置iptables规则。当流量指向Service的ClusterIP和端口时,这些规则会以随机方式将数据包重写为后端某个Pod的IP和端口

IPVS模式:对于大规模集群,可以配置kube-proxy使用IPVS。IPVS是工作在内核态的负载均衡技术,支持更丰富的调度算法,并且有更高的网络吞吐量和更低的规则同步延迟

3,流量转发:最终,无论是来自集群内不还是外部通过NodePort或LoadBalancer的请求,到达节点后,都会根据上述规则被转发到实际提供服务的Pod

4,简述无状态服务包括什么

需要持续运行的服务,如web服务器,数据库,API服务等

批处理任务。定时作业等,希望任务失败后能自动重试,但成功完成后即结束

一次性任务,例如数据备份,测试任务等,希望任务执行后无论结果如何都不在重复运行

5,简单描述service资源对象的作用

服务发现:当你创建一个Service并指定标签选择器时,Kubernetes API Server会持续监控集群中匹配这些标签的Pod,这些Pod的IP地址和端口信息会被动态更新到与Service关联的Endpoints对象中

集群内的DNS服务会为Service分配一个DNS名称,格式为<service-name>.<namespace>.svc.cluster.local。集群内的应用可以通过这个域名解析到Service的ClusterIP.

负载均衡Lkube-proxy运行在每个节点上,监听API Server中Service和Endpoints的变化。

根据配置的模式,kube-proxy会在本节点上设置相应的网络规则。

当有流量发往Service的虚拟IP或NodePort时,这些网络规则会拦截请求,并根据负载均衡算法将其转发到后端某个健康的Pod的targetPort上

6,简述Service的不同模式

为了实现服务发现和内外访问,需要设计不同的Service类型。:

前端服务:使用LoadBalancer或NodePort类型的Service。LoadBalancer可与云提供商集成,自动分配一个外部IP地址,使公网用户能够访问前端应用,是实现外部访问的推荐方式

后端API服务:使用ClusterIP类型的Service,这是默认类型,为服务提供一个仅在集群内部可访问的虚拟IP,用于前端Pod与后端API Pod之间的内部通信

数据库/缓存服务:使用Headless Service。这种Service不会分配ClusterIP,而是通过DNS直接返回后端Pod的IP地址,这对于statefulset至关重要,它为每个Pod提供了唯一的,稳定的DNS域名,格式为<pod-name>.<service-name>.<namespace>.svc.cluster.local

8,简述Service的几种不同模式的意义

ClusterIP:这是集群内部服务间通信的首选,它分配一个仅在集群内可以访问的虚拟IP,例,您的后端API服务可以被前端服务通过ClusterIP稳定访问

NodePort:在ClusterIP基础上,在每个节点上开放一个静态端口,范围通常在30000-32767,这使得外部客户端可以通过任意节点IP:NodePort访问服务。它常作为开发测试或简单外部访问的方案

LoadBalancer:在NodePort基础上,集成云厂商的负载均衡器,提供一个外部IP地址,这是在生产环境中将服务直接暴露到公网的常见方式。云负载均衡器还能提供更高级的功能

9,简单介绍rolebing和clusterbing的差别

主体进行绑定,rolebinding,引用role,仅生效于命名空间;与引用clusterrole,权限生效于rolebinding所在命名空间

主体进行绑定,clusterrolebinding,引用clusterrole权限生效于整个集群范围

10,Pod处于Pending状态可能出现的原因和解决方案

查看Pod事件,分析事件信息

1,提示资源不足,检查节点资源解决方案 扩容节点/调整请求/清理资源

2,提示节点选择问题,检查节点污点与标签,解决方案 添加容忍/调整亲和性/添加标签

3,提示其他错误,根据具体错误深入排查,解决方案 检查PVC/Quota。镜像配置

问题解决

11,滚动更新如何保证服务可用性?

滚动更新的设计通过以下几种机制确保了在更新期间的高可用性:

1,渐进式替换:整个过程是"先创建,后删除",确保了在任何时刻都有一定数量的Pod在处理请求。

2,就绪探针:Kubernetes依赖Pod的readinessProbe来判断一个新Pod是否已经准备好接受流量。只有当新Pod的就绪探针检测成功时,它才会被纳入Service的负载均衡池,同时旧Pod才会被终止。这避免了将流量导向尚未准备好的新Pod。

3,可控的更新节奏:maxSurge和maxUnavailable参数让管理员可以精细控制更新速度和对服务可用性的影响。例如,在生产环境中,可以设置maxUnavailable:0和maxSurge:1,以实现最平滑,影响最小的更新。

打赏链接:

相关推荐
阿里云云原生3 小时前
Nacos 安全护栏:MCP、Agent、配置全维防护,重塑 AI Registry 安全边界
云原生
m0_488777655 小时前
运用Docker-compose编排部署设备管理平台(包含nginx的https访问)
docker·容器·docker-compose·服务统一管理
汪碧康5 小时前
二进制kubenetes-1.34.2安装包快速部署k8s集群
云原生·容器·kubernetes·k8s·etcd·xkube
一起养小猫5 小时前
【探索实战】Kurator统一流量治理深度实践:基于Istio的跨集群服务网格
java·云原生·istio
我爱学习好爱好爱5 小时前
Docker Compose部署SpringBoot2+Vue3+redis项目(Rockylinux9.6)
redis·docker·容器
tzhou644525 小时前
Docker Compose 编排与 Harbor 私有仓库
运维·docker·容器
Clarence Liu5 小时前
虚拟机与容器的差异与取舍
linux·后端·容器
阿里云云原生6 小时前
Hello AgentScope Java
云原生·agent
汪碧康7 小时前
【k8s-1.34.2安装部署】六.企业级部署cilium-1.18.4网络插件
网络·云原生·容器·kubernetes·k8s·cilium·xkube