所有命令都验证过,有更好的方式,欢迎留言~~~
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真题:题目和解析-6CKA真题:手动配置TLS BootStrap
更多CKA资料或交流:可加 wei xin :wyf19910905
管理面异常排查APIServer、 ETCD异常
无法创建、更新、删除资源对象 节点正常工作 已有资源对象正常工作,不受影响Controller异常
deployment、 rs、 ds等对象操作请求处理正常,但实际未生效 Service关联的后端pod变化,但endpoint不更新 …Scheduler异常
Pod长时间PendingMaster组件状态查询: kubectl get cs
• 进程不存在
• 进程crash
分析日志• 组件功能异常
分析日志、检查依赖组件是否正常例如:kubectl get pods 没有响应
排查步骤
1. apiserver进程还在不 (因为kubelet 是需要和apiserber交互)
docker ps | grep kube-apiserver2. 查看进程的日志路径
2.1 方式1:查看进程的启动参数,查看是否有log方面的定义
ps -elf | grep kube-apiserver | grep log2.2 方式2:查看是否有默认的日志路径
docker ps -a | grep kube-apiserver2.3 方式3:产看容器的 标准输出
docker log 容器ID3. 发现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 节点异常原因排查节点状态查询: kubectl get nodes
常见异常现象
常见故障
kubelet进程异常 systemctl status kubelet 或者 ps -elf | grep kubelet 未安装cni插件 表现为pod为pending,一直没有分配IP Docker异常 pod分配到节点上,但是一直处于ContainerCreating状态 磁盘空间不足(df -h ) 内存不足 …定位方式
kubectl describe node 查看异常事件(Events、conditions) OutOfDisk 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参数启用了哪些acDaemonSet找不到符合要求的节点
kubect describe ds –n ${ns} 查看ds的nodeSelector 查看节点taints,DaemonSet中是否有对应的TolerationsStatefulSet
podManagementPolicy pod管理方式:并发创建、按序创建 serviceName headless等service方式,保证pod实例间通信 volumeClaimTemplates pvc模板Deployment异常
kubectl describe deployment XXX –n ${ns} # pod没有创建成功,查看rs事件状态检查
kubectl get/describe podPending
可用资源不足: describe pod可看到调度失败event 不满足亲和性策略 节点有taintsWaiting
镜像下载失败 docker pull拉取失败,配置的imagePullSecret无法通过认证,查看环境是否存在可用的dockerconfigjson类型的secret imagePullSecret 属于 kubernetes.io/dockerconfigjson类型 查找secret 解密:echo XXX | base64 -d 创建 SecretExamples: # 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 AlwaysCrashBackoff
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类型,查看转发规则是否正确 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
作者:琦彦