K8s运维中常见的问题以及解决办法!(稳啦!!!!!)

在Kubernetes(K8s)运维中,可能会遇到多种问题。今天就给你盘点一些常见问题,以及举例说明k8s排错实战过程,希望对你有帮助~~~

  1. Pod无法创建或启动
    • 问题:Pod无法创建或启动,可能是由于YAML文件配置错误、资源限制问题或者网络问题导致的。
    • 解决方案
      • 使用kubectl describe pod <pod-name>查看Pod的详细信息和状态。
      • 使用kubectl logs <pod-name>查看Pod的日志,帮助诊断问题。
      • 检查YAML文件的配置,确保没有语法错误或配置不当。
      • 调整资源限制(CPU和内存)以满足Pod的需求。
  2. 服务创建失败
    • 问题:服务创建失败,可能是Kubernetes API服务器的问题或资源限制问题导致的。
    • 解决方案
      • 使用kubectl get services查看所有服务,确保服务没有创建重复。
      • 使用kubectl describe service <service-name>查看服务的详细信息和状态。
      • 检查集群的资源使用情况,确保有足够的资源供服务使用。
  3. 节点无法加入集群
    • 问题:节点无法加入集群,可能是网络问题、证书问题或配置问题导致的。
    • 解决方案
      • 检查节点的网络连接,确保节点可以访问Kubernetes集群。
      • 检查节点的证书和配置,确保它们正确无误。
      • 使用kubeadm join命令重新尝试将节点加入集群。
  4. 资源不足
    • 问题:集群资源不足,导致Pod无法被调度或运行。
    • 解决方案
      • 使用kubectl top nodeskubectl top pods查看节点和Pod的资源使用情况。
      • 考虑增加集群节点以扩展资源。
      • 调整Pod的资源请求和限制,以更合理地利用资源。
  5. 容器间通信问题
    • 问题:容器间无法通信,可能是网络设置错误或者服务发现机制问题导致的。
    • 解决方案
      • 使用kubectl get endpoints <service-name>查看服务的Endpoints是否正确。
      • 检查网络插件(如Calico、Flannel等)的配置和状态。
      • 确保Pod的网络设置(如命名空间、标签等)正确无误。
  6. 安全策略问题
    • 问题:安全策略设置错误或RBAC权限问题导致无法访问或操作资源。
    • 解决方案
      • 使用kubectl auth can-i <verb> <resource> <namespace> --as=<username>检查用户的权限。
      • 审查和调整RBAC角色和角色绑定,确保用户具有正确的权限。
      • 审查安全策略设置,确保它们符合安全要求。

宝~请注意哦~~~~

上述命令和解决方案仅供参考!!!

具体情况还得取决于你的Kubernetes集群配置和遇到的具体问题。

在进行任何更改之前

请确保你了解这些命令和更改的潜在影响!!!!

k8s排错实战举例!!!!

一 背景

收到测试环境集群告警,登陆 K8s 集群进行排查

二 故障定位

2.1 查看 Pod

查看 kube-system node2 节点 calico pod 异常。

图片

查看详细信息,查看node2节点没有存储空间,cgroup泄露。

图片

2.2 查看存储

登陆 node2 查看服务器存储信息,目前空间还很充足。

图片

集群使用到的分布式存储为ceph,因此查看ceph集群状态。

图片

三 操作

3.1 ceph修复

目前查看到 ceph 集群异常,可能导致 node2 节点 cgroup 泄露异常,进行手动修复ceph集群。

数据的不一致性(inconsistent)指对象的大小不正确、恢复结束后某副本出现了对象丢失的情况。数据的不一致性会导致清理失败(scrub error)。

CEPH 在存储的过程中,由于特殊原因,可能遇到对象信息大小和物理磁盘上实际大小数据不一致的情况,这也会导致清理失败。

图片

由图可知,pg编号1.7c 存在问题,进行修复。

  • pg修复

ceph pg repair 1.7c

图片

进行修复后,稍等一会,再次进行查看,ceph 集群已经修复

图片

3.2 进行 Pod 修复

对异常pod进行删除,由于有控制器,会重新拉起最新的 Pod。

图片

查看 Pod 还是和之前一样,分析可能由于ceph异常,导致node2节点cgroup泄露,网上检索重新编译

Google 一番后发现存在的可能有:

  • Kubelet 宿主机的 Linux 内核过低 - Linux version 3.10.0-862.el7.x86_64

  • 可以通过禁用kmem解决

查看系统内核却是低版本

图片

3.3 故障再次定位

最后,因为在启动容器的时候 runc 的逻辑会默认打开容器的 kmem accounting,导致3.10内核可能的泄漏问题

在此需要对no space left的服务器进行 reboot重启,即可解决问题,出现问题的可能为段时间内删除大量的pod所致。

初步思路,可以在今后的集群管理汇总,对服务器进行维修,通过删除节点,并对节点进行 reboot 处理。

3.4 对 node2 节点进行维护

3.4.1 标记 node2 为不可调度
kubectl cordon node02

图片

3.4.2 驱逐 node2 节点上的 Pod
kubectl drain node02 —delete-local-data —ignore-daemonsets —force
  • --delete-local-data  删除本地数据,即使emptyDir也将删除;

  • --ignore-daemonsets  忽略 DeamonSet,否则 DeamonSet 被删除后,仍会自动重建;

  • --force  不加 force 参数只会删除该 node 节点上的 ReplicationController, ReplicaSet,DaemonSet,StatefulSet or Job,加上后所有 pod 都将删除;

图片

目前查看基本 node2 的 pod 均已剔除完毕

图片

图片

此时与默认迁移不同的是,Pod 会先重建再终止,此时的服务中断时间=重建时间+服务启动时间+ readiness探针检测正常时间,必须等到1/1 Running服务才会正常。因此在单副本时迁移时,服务终端是不可避免的。

3.4.3 对 node02 进行重启

重启后 node02 已经修复完成。

对 node02 进行恢复

  • 恢复 node02 可以正常调度

kubectl uncordon node02

图片

 

四 反思

后期可以对部署 K8s 集群内核进行升级。

集群内可能 Pod 的异常,由于底层存储或者其他原因导致,需要具体定位到问题进行针对性修复

加油哦~~~宝~~

  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: K8s运维工程师需要具备哪些技能和经验? K8s是目前最流行的容器编排和管理平台,因此,K8s运维工程师需要掌握基本的Linux系统管理和网络知识,具备Docker和K8s的实践经验和技能。在面试,以下问题K8s运维工程师经常会遇到的问题: 1.描述Docker镜像的构成和制作过程。 Docker容器是通过Docker镜像构建的,而Docker镜像是由多个层次构成的。运维工程师需要理解Docker镜像的构成和创建过程,掌握Dockerfile文件的编写和基本的构建命令。 2.如何使用Kubernetes创建和管理容器Kubernetes是一个开源的容器编排和管理平台。运维工程师需要理解Kubernetes的组件和工作原理,熟悉Kubernetes的部署和管理,能够使用Kubernetes创建和管理容器化应用程序。 3.Kubernetes的Service和Ingress有什么区别? Kubernetes的Service和Ingress都是用于暴露服务和路由流量的机制。运维工程师需要理解Service和Ingress的区别和各自的使用场景,能够根据不同的要求配置和管理Service和Ingress。 4.如何管理Kubernetes集群的安全? Kubernetes集群的安全管理是K8s运维工程师必须掌握的关键技能。运维工程师需要了解Kubernetes的安全机制和最佳实践,能够配置和管理Kubernetes集群的安全策略和证书。 总之,K8s运维工程师需要具有扎实的英语和计算机技能、出色的问题解决能力、敏捷的反应能力和良好的团队合作能力。在实践不断学习、不断探索,并遵循最佳实践,才能成为一名成功的K8s运维工程师。 ### 回答2: k8s运维工程师需要具备哪些技能和能力? 作为一名k8s运维工程师,需要具备以下几个方面的技能和能力: 1.熟练掌握k8s基础知识:k8s是目前最流行的容器编排平台,需要熟练掌握其概念模型、架构设计等基础知识,了解k8s各个组件的作用和相互关系。 2.熟悉Linux操作系统:Linux作为k8s最常用的操作系统,需要熟悉其操作和维护,包括文件系统、进程管理、网络配置等,可以快速解决生产环境问题。 3.编程语言:k8s的开源社区主要使用Go语言进行开发,因此需要掌握基础的Go语言编程能力,同时还需了解常用的Shell脚本语言。 4.容器技术:熟悉Docker容器技术,能够对镜像进行管理、发布和更新,了解容器网络、存储和安全领域的相关技术。 5.自动化和DevOps:熟练使用自动化工具,如Ansible、Puppet等,了解CI/CD的实践流程,掌握DevOps基本理念和实践方法。 6.团队合作和沟通能力:k8s运维工程师需要与开发人员、QA、安全、运维等不同部门进行沟通和协作,因此需要具备良好的团队合作和沟通能力。 在实际工作k8s运维工程师需要根据生产环境的实际情况,灵活应用各种技能和能力,维护k8s平台的高可用性、高性能和高安全性,确保业务的稳定运行和快速迭代。 ### 回答3: K8sKubernetes)是一个开源的容器编排系统,可以将多个容器编排在同一个集群,从而能够有效地管理和分发容器,在分布式系统扮演着一个重要的角色。对于K8s运维工程师来说,需要掌握K8s集群的搭建和运维,具有一定的Linux操作系统基础和Docker容器技术。 在K8s运维工程师的面试过程常见的面试题目包括以下几个方面: 一、K8s基础知识:K8s的架构、常用概念、K8s资源对象、K8s组件和服务等。 二、K8s集群搭建:如何构建和部署一个K8s集群,如何管理Master和Node节点,如何配置Kubelet、Kube-proxy等。 三、K8s应用容器化:如何通过Docker将应用程序打包成容器,如何基于容器部署一个应用程序,如何将应用程序与K8s相关联。 四、K8s网络和存储:如何设置K8s网络和存储,如何配置网络插件和存储卷等。 五、K8s监控和调试:如何监控和调试K8s集群和应用程序,如何使用Prometheus、Grafana等监控工具。 综上所述,K8s运维工程师需要具备良好的K8s基础知识和实践经验,以及熟练的Linux系统操作和Docker容器技术,从而能够快速定位和解决K8s集群运维问题,提高系统的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值