CKA考试习题:k8s故障排查

Fronde ·
更新时间:2024-11-15
· 661 次阅读

所有命令都验证过,有更好的方式,欢迎留言~~~

CKA 习题和真题汇总

CKA考试经验:报考和考纲 

CKA :2019年12月英文原题和分值 

CKA考试习题:K8S基础概念--API 对象 CKA考试习题:调度管理- nodeAffinity、podAffinity、Taints CKA考试习题:K8S日志、监控与应用管理 CKA考试习题:网络管理-Pod网络、Ingress、DNS CKA考试习题:存储管理-普通卷、PV、PVC CKA考试习题:安全管理--Network Policy、serviceaccount、clusterrole CKA考试习题:k8s故障排查   CKA真题:题目和解析-1   CKA真题:题目和解析-2   CKA真题:题目和解析-3   CKA真题:题目和解析-4   CKA真题:题目和解析-5   CKA真题:题目和解析-6  

CKA真题:手动配置TLS BootStrap

更多CKA资料或交流:可加 wei  xin :wyf19910905

管理面异常排查

APIServer、 ETCD异常

无法创建、更新、删除资源对象 节点正常工作 已有资源对象正常工作,不受影响

Controller异常

deployment、 rs、 ds等对象操作请求处理正常,但实际未生效 Service关联的后端pod变化,但endpoint不更新  …

 Scheduler异常

Pod长时间Pending

Master组件状态查询: kubectl get cs
• 进程不存在

明确组件生命周期管理方式 systemd 以服务的方式 kubelet静态pod方式 故障检测方式是否有效( livenessProbe、 restartPolicy) 重新启动进程

• 进程crash

分析日志

• 组件功能异常

分析日志、检查依赖组件是否正常

例如:kubectl get pods 没有响应

排查步骤

 1. apiserver进程还在不 (因为kubelet 是需要和apiserber交互)

docker ps | grep kube-apiserver

2. 查看进程的日志路径

2.1 方式1:查看进程的启动参数,查看是否有log方面的定义

ps -elf | grep kube-apiserver | grep log

 2.2 方式2:查看是否有默认的日志路径

docker ps -a | grep kube-apiserver

 2.3 方式3:产看容器的 标准输出

docker log 容器ID
 发现etcd有异常

 3. 发现etcd有异常,查看etcd和apiserver交互是否有问题

 3.1  docker ps  | grep etcd   3.2   docker log 容器ID(etcd)

4. 查看组件manifests的yaml的livenessProbe、 restartPolicy(默认always)

vim /etc/kubernetes/manifests/etcd.yaml

etcd中默认的livenessProbe
节点异常原因排查 

节点状态查询: kubectl get nodes


常见异常现象

节点状态为NotReady 调度到该节点上的Pod显示NodeLost、 Unkonwn、 Pending等状态

常见故障

kubelet进程异常 systemctl status kubelet 或者 ps -elf | grep kubelet 未安装cni插件 表现为pod为pending,一直没有分配IP Docker异常 pod分配到节点上,但是一直处于ContainerCreating状态 磁盘空间不足(df -h ) 内存不足  …

定位方式

kubectl describe node  查看异常事件(Events、conditionsOutOfDisk MemoryPressure DiskPressure PIDPressure Ready service status  查看系统进程状态 (systemctl status kubelet 或者 ps -elf | grep kubelet) journalctl  查看系统组件日志 (journalctl -u kubelet -f) top 查看系统cpu、内存 du、 df 查看磁盘使用情况(https://blog.csdn.net/fly910905/article/details/90439242) df #列出各文件系统的磁盘空间使用情况  df -h #目前磁盘空间和使用情况 以更易读的方式显示 du #查看当前目录下的,所有文件和目录 du -h --max-depth=1 work/testing du -sh * | grep G # 统计当前目录,文件大小(单位:gb) du -sh * | grep m # 统计当前目录,文件大小(单位:mb) 针对磁盘空间不足,kubelet启动时会检查两个目录() kubelet --help | grep root    --root-dir   string       Directory path for managing kubelet files (volume mounts,etc). (default "/var/lib/kubelet")   --docker-root  string     DEPRECATED: docker root is read from docker info (this is a fallback, default: /var/lib/docker) (default "/var/lib/docker") 应用异常原因排查 应用模型异常

已存在的POD数超过resource-quota限制

 kubectl describe quota –n ${ns}

待创建的POD不满足kube-apiserver 中 admission controller限制

查看kube-apiserver enable-admission-plugins参数启用了哪些ac

 DaemonSet找不到符合要求的节点

kubect describe ds –n ${ns} 查看ds的nodeSelector 查看节点taints,DaemonSet中是否有对应的Tolerations

StatefulSet

podManagementPolicy pod管理方式:并发创建、按序创建 serviceName headless等service方式,保证pod实例间通信 volumeClaimTemplates pvc模板

 Deployment异常

kubectl describe deployment  XXX –n ${ns} # pod没有创建成功,查看rs事件
kubectl get rs 
kubectl describe rs XXX  docker pull拉取失败,配置的imagePullSecret无法通过认证,查看环境是否存在可用的dockerconfigjson类型的secret 查找secret 解密:echo XXX | base64 -d  POD实例异常

状态检查

kubectl get/describe pod

 Pending

可用资源不足: describe pod可看到调度失败event 不满足亲和性策略 节点有taints

Waiting

镜像下载失败  docker pull拉取失败,配置的imagePullSecret无法通过认证,查看环境是否存在可用的dockerconfigjson类型的secret imagePullSecret 属于 kubernetes.io/dockerconfigjson类型 查找secret 解密:echo XXX | base64 -d 创建 Secret
Examples:
  # If you don't already have a .dockercfg file, you can create a dockercfg secret directly by
using:
  kubectl create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER
--docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
		

 imagePullPolicy配置是否正确 IfNotPresent Never Always

CrashBackoff

kubectl logs 查看容器日志  kubectl/docker exec登录容器验证功能  检查pod配置是否正确: command、 liveness、readines
Service访问异常原因排查

Service访问形式

svc名称 clusterIp NodePort

通过域名访问Service

nslookup判断域名解析是否正常,nameserver对应的dns地址有没有启动

Service存在,没有Endpoint (describe service显示Endpoints:)

Endpoint由kube-proxy创建,和service同名 kubectl –n ${ns} get endpoints ${service-name} kubectl –n ${ns} get pods --selector=${service-selector}  查看pod status是否为ready状态  查看service port定义与pod定义是否匹配 exec方式进入pod中,验证容器内是否可以访问通

例如: 创建1个Service和1个Pod作为其后端。通过nslookup查询该Service的Pod的域名信息。
– Service的名称为

#1、创建pod
kubectl run hwcka-004-2-fly --image=redis
#2、Expose对应的deploy
kubectl expose deploy hwcka-004-2-fly --type=ClusterIP --port=8081 --target-port=6379
#3、describe svc
kubectl describe svc hwcka-004-2-fly
#3.1 busybox nslookup查询svc(没有busybox,需要先创建)
kubectl exec -it busybox -- nslookup hwcka-004-2-fly.kube-system.svc.cluster.local

Endpoint访问不通

kube-proxy 运行在所有 worker 节点上,它监听 apiserver 中 service 和 endpoint 的变化情况,

创建路由规则以提供服务 IP 和负载均衡功能。

kube-proxy是否运行正常,依赖的conntrack是否安装 查看kube-proxy配置参数,确认mode类型,查看转发规则是否正确
查看kube-proxy配置参数
userspace: iptables-save | grep ${servicename} KUBE-PORTALS-CONTAINER、 KUBE-PORTALS-HOST iptables: iptables-save | grep ${servicename} KUBE-SVC-XXX、 KUBE-SEP-XXX ipvs:
ipvsadm -Ln


作者:琦彦



k8s cka

需要 登录 后方可回复, 如果你还没有账号请 注册新账号