企业级运维之云原生与Kubernetes实战课程 - 第四章第5讲 ACK集群故障处理与疑难处置

本文涉及的产品
文件存储 NAS,50GB 3个月
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: ACK集群故障处理与疑难处置

企业级运维之云原生与Kubernetes实战课程

第四章第5 ACK集群故障处理与疑难处置

 

视频地址:

https://developer.aliyun.com/learning/course/913/detail/14609

 

一、存储疑难与故障

 

1.   在存储方面,常见的问题及可能的原因如下:

 

a.  Pod挂载不上云盘

  • 云盘卷是非共享存储,已经被其他Pod挂载;
  • 云盘和ECS不在一个可用区;
  • flexvolume/csi驱动使用错误;

 

b.  Pod卸载不了云盘

  • Pod所在的ECS将计费方式变为了包年包月(连带云盘也变成包年包月),导致云盘无法从ECS卸载。

 

c.  Pod挂载不了NAS

  • NAS的权限组设置不对;
  • 挂载点或者NAS挂载地址不存在;

 

2.   问题定位:查看驱动日志

 

为了准确定位问题原因,可以先查看驱动日志,阿里云提供的两个主要的存储组件是FlexvolumCSI

 

a.   flexvolume:/var/loq/alicloud/flexvolume*;csi:

flexvolume插件是Kubernetes社区较早实现的存储卷扩展机制,插件包括以下三部分:

  • Flexvolume:负责数据卷的挂载、卸载功能。ACK默认提供云盘、NASOSS三种存储卷的挂载能力;
  • Disk-Controller:负责云盘卷的自动创建能力;
  • Nas-Controller:负责NAS卷的自动创建能力;

 

b.   CSI

CSI插件是当前Kubernetes社区推荐的插件实现方案,ACK集群提供的CSI存储插件兼容社区的CSI特性,插件包括以下两部分:

  • CSI-Plugin:实现数据卷的挂载、卸载功能。ACK默认提供云盘、NASOSS三种存储卷的挂载能力;
  • CSI-Provisioner:实现数据卷的自动创建能力,目前支持云盘、NAS两种存储卷创建能力;

查看csi-plugin Pod的日志;如果是动态存储,还需要查看nas-controller/disk-controller/csi-provisioner的日志。

 

3.   其他存储相关问题

 

a.   NAS存储

  • 现象:PVC无法创建,报错`waitingfor a volume to be created,either by external provisioner "nasplugin.csi.alibabacloud.com" or manually created by system administrator
  • 原因:创建阿里云Kubernetes 1.16之前版本的集群时,若存储插件选择为Flexvolume,则控制台默认安装FlexvolumeDisk-Controller组件,但控制台不会默认安装alicloud-nas-controller组件。

 

参考文档:https://help.aliyun.com/document_detail/86785.html

 

b.   挂载NASPod无法启动

  • 现象:查看pvpvc同时为bound状态,describe pod显示挂载超时;
  • 方法:查看flexvolume日志是否存在FsGroup字段;
  • 原因:FsGroup:1000,表示mount使用uid=1000的特定用户进行挂载,Pod启动的时候,会把NAS挂载的目录下所有的文件权限改成1000,当文件较多的时候,会超过Pod的启动超时时间,导致Pod无法启动。

 

参考文档:https://help.aliyun.com/document_detail/286496.html

 

二、网络疑难与故障

 

常见的网络问题和可能的原因如下:

 

1.  访问slb不通

 

  • 集群内访问不通,ServiceexternalTrafficPolicy策略为Local,非Service的后端Pod所在节点访问Serviceslb IP就会不通;
  • slb配置了黑白名单访问控制(常见的apiserverslb配置了访问控制,控制台查看集群等信息失败)
  • ECS安全组出方向没有放通slbIP

 

2.  访问Ingress不通

 

  • 集群内访问不通,原因同问题1中的第一种原因,因为Ingress IP也是Loadbalancer类型的Serviceslb IP
  • nginx-ingress-controller所在的节点入方向安全组没有放通集群Pod网段;
  • Ingress手动设置了白名单;
  • Ingressyaml配置有问题,导致ingress-controller无法正确加载配置,访问502

 

3.  控制台访问异常

 

  • apiserver出异常,或者apiserverslb流量/连接数超过规格;
  • apiserverslb上设置了黑白名单;

 

4.  Pod 不通

 

  • Pod所在节点的网络设备没有开启forward
  • Pod里进程监听的回环地址;

 

三、Kubectl命令问题

 

Kubectl命令常见的问题和可能的原因如下:

 

1.  ** is forbidden;User ** cannot **错误

 

帐号的集群RBAC权限不够,从报错可以看到是缺少集群范围内的list某个资源的权限,且API Group为核心API组。

 

2.  kubectl get可以,logs/exec不行

 

节点的安全组入方向没有放通kubelet10250端口,kubectlkubelet建联失败。kubectl会先和apiserver建连,然后 apiserver会访问Pod所在节点的kubelet(通过kubelet10250端口)建立连接,kubelet再和Pod通信。

 

3.  kubectl 执行超时

 

  • apiserver服务异常;
  • apiserverslb设置了访问控制;
  • 其他问题:可以通过kubectl --v=8指定命令返回的日志级别来定位。

 

四、 节点自动伸缩问题

 

在节点自动伸缩方面,常见的问题和可能的原因如下:

 

1.  自动伸缩组件kube-autoscale异常

 

集群自动伸缩组件依赖集群的KubernetesWorkerRole-***的角色没有权限去调用弹性伸缩的相关接口。

 

2.  节点不自动扩容

 

  • 集群未达到节点扩容的条件:pod因为节点资源不足而导致状态未pending的情况下才会触发节点扩容,而并非超过自动伸缩设定的阈值;
  • 集群已经达到扩容的条件,但是由于自动伸缩的伸缩组配置的节点不满足Pod的要求,比如:
  • Pod要求创建在杭州可用区D,但是配置的节点的交换机是可用区A
  • Podrequest.cpu4,但是伸缩组节点规格是2C
  • 如果上述两种情况都没有问题,可以通过检查cluster-autoscaler组件日志判断。

 

五、 Service问题

 

Service方面常见的问题和可能的原因如下:

 

1.  lb类型的service一直创建中

 

  • slb可以挂载的backend server的数量已满;
  • ECS可以重复挂载到slb的次数配额已满;
  • cloud-controller-manager组件异常;

 

2.  Service负载不均

 

  • lb类型的service,是按照节点上Pod的数量比例来设置权重,保证Pod负载均衡,但是节点上会负载不均;
  • 使用了长链接以及会话保持功能;

 

如下图所示,在V1.9.3.164-g2105d2e-aliyun之前版本,Local模式的Service其所有后端权重均为100,即所有流量平均分配到这三台ECS上,造成ECS1Pod负载较重而ECS3上的Pod负载较轻,导致Pod负载不均。

 image.png

解决方案:

 

  • 如图所示,在V1.9.3.164-g2105d2e-aliyun之后及V1.9.3.276-g372aa98-aliyun之前版本,CCM会根据Node上部署的Pod数量计算Node权重。经计算三台ECS权重分别为163350,因此流量将大致按照123的比例分配给三台ECSPod负载更加均衡。

 image.png 

计算公式如下:

image.png

  • V1.9.3.276-g372aa98-aliyun及之后版本,CCMNode上部署的Pod数量设置为Node权重,如下图所示,三台ECS的权重分别为123,流量会按照123的比例分配给三台ECSPod负载比上一种方式更加均衡。

 image.png  

计算公式如下:

image.png

3.  无法访问Service的虚拟IP

 

  • 集群外无法访问:Service的虚拟IP在集群内是通过iptables或者ipvs转发来完成的,是虚拟IP,集群外不存在虚拟IP的路由,所以访问不通;
  • 集群内无法ping通:ServiceclusterlP是虚拟IP,只提供端口的转发,不提供icmp转发,所以访问不通;
  • 集群内无法访问ServiceServiceendpoint是空的,或者虽然有endpoint,但是Pod端口不对,或者Pod端口监听绑定的是回环地址。

 

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
15天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
86 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
2月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
2月前
|
Kubernetes Cloud Native 开发者
云原生入门:Kubernetes的简易指南
【10月更文挑战第41天】本文将带你进入云原生的世界,特别是Kubernetes——一个强大的容器编排平台。我们将一起探索它的基本概念和操作,让你能够轻松管理和部署应用。无论你是新手还是有经验的开发者,这篇文章都能让你对Kubernetes有更深入的理解。
|
2月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
2月前
|
Kubernetes 负载均衡 Cloud Native
探索Kubernetes:云原生应用的基石
探索Kubernetes:云原生应用的基石
|
2月前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
74 1
|
2月前
|
Kubernetes Cloud Native 云计算
云原生入门:Kubernetes 和容器化基础
在这篇文章中,我们将一起揭开云原生技术的神秘面纱。通过简单易懂的语言,我们将探索如何利用Kubernetes和容器化技术简化应用的部署和管理。无论你是初学者还是有一定经验的开发者,本文都将为你提供一条清晰的道路,帮助你理解和运用这些强大的工具。让我们从基础开始,逐步深入了解,最终能够自信地使用这些技术来优化我们的工作流程。
|
3月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
72 4
|
4天前
|
人工智能 运维 监控
AI辅助的运维流程自动化:实现智能化管理的新篇章
AI辅助的运维流程自动化:实现智能化管理的新篇章
278 22
|
2月前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####

热门文章

最新文章