K8S从懵圈到熟练 - 我们为什么会删除不了集群的命名空间?

时间:2019-08-04 来源: 国际新闻

  02:12:56宇宙V科技

  阿里云的售后技术团队的学生每天都在处理各种奇怪的在线问题。通常,网络连接失败,服务器停机,性能不符合标准,请求响应缓慢等等。但是,如果你想判断,什么样的问题似乎无足轻重,实际上足以让人绞尽脑汁。我相信答案肯定是“不能删除”的问题。例如,文件无法删除,进程无法完成,驱动程序无法卸载等。

这些问题就像冰山一样,它们背后的复杂逻辑往往超出我们的预期。

背景

我们今天讨论的问题与K8S集群的命名空间有关。命名空间是K8S群集资源的“存储”机制。我们可以将相关资源“存储”到同一名称空间中,以避免不相关资源之间产生不必要的影响

目,我们可以创建新的名称空间,对于不再使用的名称空间,我们需要清理它们。命名空间的Controller将通过APIServer监视集群中命名空间的更改,然后根据更改执行预定义的操作。

有时我们会遇到下图中的问题,即命名空间的状态被标记为“终止”,但无法完全删除。

从集群入口开始

由于删除操作是通过集群APIServer执行的,因此我们要分析APIServer的行为。与大多数群集组件类似,APIServer提供不同级别的日志输出。为了理解APIServer的行为,我们将日志级别调整到最高级别。然后,通过创建要删除tobedeletedb的命名空间来重现该问题。

但不幸的是,APIServer没有输出太多与此问题相关的日志。

相关日志可以分为两部分。部分是删除了命名空间的记录。记录显示客户端工具为kubectl,启动操作的源IP地址为192.168.0.41,符合预期;另一部分是KubeControllerManager重复获取有关此命名空间的信息。

KubeControllerManager实现了集群中的大多数控制器。它反复检索tobedeletedb的信息。基本上,可以判断命名空间的Controller正在获取该命名空间的信息。

控制器在做什么?

与上一节类似,我们通过打开最高级别的KubeControllerManager日志来探索此组件的行为。在KubeControllerManager日志中,您可以看到命名空间的Controller正在不断尝试失败的操作,即清理名为tobedeletedb的命名空间中的“存储”资源。

如何删除“存储箱”中的资源

在这里,我们需要理解命名空间作为资源的“存储盒”实际上是一个逻辑概念。它不像现实中的存储工具,它可以容纳小物件。命名空间的“存储”实际上是映射关系。

这很重要,因为它直接决定了删除命名空间中内部资源的方法。如果它是物理意义上的“存储”,那么我们只需要删除“存储盒”,并删除里面的资源。对于逻辑关系,我们需要列出所有资源并删除指向需要删除的命名空间的资源。

API,组,版本

如何列出集群中的所有资源,这个问题需要从集群API的组织开始。 K8S集群的API不是单片的,它是按组和版本组织的。这样做的好处是显而易见的,即不同分组的API可以独立迭代而不会相互影响。常见组,例如app,具有v1,v1beta1和v1beta2版本。使用kubectlapi-versions命令可以看到完整的组/版本列表。

我们创造的每一种资源必须属于API组/版本。例如,在以下边缘Ingress中,我们将Ingress资源的数据包/版本指定为networking.k8s.io/v1beta1。

种类: Ingressmetadata:名称: test-ingressspec:规则: -http:路径: -path:/testpathbackend: serviceName: testservicePort: 80

使用简单的图表来总结API分组和版本。

实际上,群集具有许多API组/版本,并且每个API组/版本都支持特定的资源类型。当我们通过yaml编排资源时,我们需要指定资源类型类型,以及API分组/版本apiVersion。要列出资源,我们需要获取API组/版本的列表。

为什么Controller不能删除命名空间中的资源?

在理解了API分组/版本的概念之后,回顾KubeControllerManager的日志将非常清楚。显然,命名空间的Controller正在尝试获取API组/版本列表。当遇到metrics.k8s.io/v1beta1时,查询失败。并且查询失败的原因是“不可避免的不可操作的请求”。

在上一节中,我们发现KubeControllerManager无法获取metrics.k8s.io/v1beta1的API组/版本。此查询请求显然发送给APIServer。所以我们回到APIServer日志并分析metrics.k8s.io/v1beta1相关记录。与此同时,我们看到APIServer也报告了同样的错误“theserveriscurrentlyunabletohandletherequest”。

显然这里存在矛盾,即APIServer显然正常工作。为什么当获得metrics.k8s.io/v1beta1的API版本时,它将返回该服务器不可用?为了回答这个问题,我们需要了解APIServer的“插件”机制。

集群APIServer有自己的扩展机制。开发人员可以使用此机制来实现APIServer的“插件”。这个“插件”的主要功能是实现一个新的API分组/版本。 APIServer充当代理并将相应的API调用转发到其自己的“插件”。

以MetricsServer为例。它实现了metrics.k8s.io/v1beta1的API组/版本。对此组/版本的所有呼叫都将转发到MetricsServer。如下所示,MetricsServer的实现主要使用服务和pod。

上图中的最后一个apiservice是将“插件”链接到APIServer的机制。下图显示了此apiservice的详细定义。它包括API分组/版本和实现MetricsServer的服务名称。有了这些信息,APIServer可以将metrics.k8s.io/v1beta1的调用转发给MetricsServer。

节点和Pod之间的通信

经过简单的测试,我们发现这个问题实际上是APIserver和metricsserverpod之间的通信问题。在阿里云K8S集群环境中,APIServer使用主机网络,即ECS网络,MetricsServer使用Pod网络。两者之间的通信取决于VPC路由表的转发。

例如,如果APIServer在NodeA上运行,则其IP地址为192.168.0.193。假设MetricsServer的IP为172.16.1.12,则从APIServer转发到Metrics路由规则。

目,因此APIserver和MetricsServer之间的通信存在问题。

为什么RouteController不起作用?

目。

目前的情况显然与预期不符,RouteController显然无法正常工作。这可以通过查看CloudControllerManager日志来确认。在日志中,我们发现当RouteController使用集群VPCid查找VPC实例时,无法获取此实例的信息。

但是集群仍然存在,ECS仍在那里,因此VPC不太可能消失。这可以通过VPC控制台上的VPCid确认。下面的问题是为什么CloudControllerManager无法获取此VPC的信息?

群集节点访问云资源

CloudControllerManager通过阿里云开放API获取VPC信息。这基本上相当于从云中的ECS中的VPC实例获取信息,这要求ECS具有足够的权限。当前的传统做法是将RAM角色授予ECS服务器并将相应的角色授权绑定到相应的RAM角色。

如果群集组件(作为其所在的节点)无法获取有关云资源的信息,则基本上有两种可能性。首先,ECS没有绑定正确的RAM角色;第二个是RAM角色的RAM角色绑定没有定义正确的授权规则。检查节点的RAM角色和RAM角色管理的授权,我们发现vpc的授权策略已更改。

在我们将效果更改为允许后,终止状态中的所有命名空间都消失了很长时间。

问题大图

总的来说,这个问题与K8S集群的六个组件有关,即APIServer及其扩展的MetricsServer,NamespaceController和RouteController,以及VPC路由表和RAM角色授权。

通过分析前三个组件的行为,我们发现群集网络问题导致APIServer无法连接到MetricsServer;通过对最后三个组件进行故障排除,我们发现问题的根本原因是VPC路由表已删除且RAM角色授权策略已更改。

后记

无法删除K8S群集命名空间的问题是该行的常见问题。这个问题似乎无关紧要,但它实际上不仅复杂,而且还意味着集群缺乏重要功能。本文全面分析了这样一个问题,以及故障排除方法和原理,希望能帮助您排除类似问题。

阿里云的售后技术团队的学生每天都在处理各种奇怪的在线问题。通常,网络连接失败,服务器停机,性能不符合标准,请求响应缓慢等等。但是,如果你想判断,什么样的问题似乎无足轻重,实际上足以让人绞尽脑汁。我相信答案肯定是“不能删除”的问题。例如,文件无法删除,进程无法完成,驱动程序无法卸载等。

这些问题就像冰山一样,它们背后的复杂逻辑往往超出我们的预期。

背景

我们今天讨论的问题与K8S集群的命名空间有关。命名空间是K8S群集资源的“存储”机制。我们可以将相关资源“存储”到同一名称空间中,以避免不相关资源之间产生不必要的影响

目,我们可以创建新的名称空间,对于不再使用的名称空间,我们需要清理它们。命名空间的Controller将通过APIServer监视集群中命名空间的更改,然后根据更改执行预定义的操作。

有时我们会遇到下图中的问题,即命名空间的状态被标记为“终止”,但无法完全删除。

从集群入口开始

由于删除操作是通过集群APIServer执行的,因此我们要分析APIServer的行为。与大多数群集组件类似,APIServer提供不同级别的日志输出。为了理解APIServer的行为,我们将日志级别调整到最高级别。然后,通过创建要删除tobedeletedb的命名空间来重现该问题。

但不幸的是,APIServer没有输出太多与此问题相关的日志。

相关日志可以分为两部分。部分是删除了命名空间的记录。记录显示客户端工具为kubectl,启动操作的源IP地址为192.168.0.41,符合预期;另一部分是KubeControllerManager重复获取有关此命名空间的信息。

KubeControllerManager实现了集群中的大多数控制器。它反复检索tobedeletedb的信息。基本上,可以判断命名空间的Controller正在获取该命名空间的信息。

控制器在做什么?

与上一节类似,我们通过打开最高级别的KubeControllerManager日志来探索此组件的行为。在KubeControllerManager日志中,您可以看到命名空间的Controller正在不断尝试失败的操作,即清理名为tobedeletedb的命名空间中的“存储”资源。

如何删除“存储箱”中的资源

在这里,我们需要理解命名空间作为资源的“存储盒”实际上是一个逻辑概念。它不像现实中的存储工具,它可以容纳小物件。命名空间的“存储”实际上是映射关系。

这很重要,因为它直接决定了删除命名空间中内部资源的方法。如果它是物理意义上的“存储”,那么我们只需要删除“存储盒”,并删除里面的资源。对于逻辑关系,我们需要列出所有资源并删除指向需要删除的命名空间的资源。

API,组,版本

如何列出集群中的所有资源,这个问题需要从集群API的组织开始。 K8S集群的API不是单片的,它是按组和版本组织的。这样做的好处是显而易见的,即不同分组的API可以独立迭代而不会相互影响。常见组,例如app,具有v1,v1beta1和v1beta2版本。使用kubectlapi-versions命令可以看到完整的组/版本列表。

我们创造的每一种资源必须属于API组/版本。例如,在以下边缘Ingress中,我们将Ingress资源的数据包/版本指定为networking.k8s.io/v1beta1。

种类: Ingressmetadata:名称: test-ingressspec:规则: -http:路径: -path:/testpathbackend: serviceName: testservicePort: 80

使用简单的图表来总结API分组和版本。

实际上,群集具有许多API组/版本,并且每个API组/版本都支持特定的资源类型。当我们通过yaml编排资源时,我们需要指定资源类型类型,以及API分组/版本apiVersion。要列出资源,我们需要获取API组/版本的列表。

为什么Controller不能删除命名空间中的资源?

在理解了API分组/版本的概念之后,回顾KubeControllerManager的日志将非常清楚。显然,命名空间的Controller正在尝试获取API组/版本列表。当遇到metrics.k8s.io/v1beta1时,查询失败。并且查询失败的原因是“不可避免的不可操作的请求”。

在上一节中,我们发现KubeControllerManager无法获取metrics.k8s.io/v1beta1的API组/版本。此查询请求显然发送给APIServer。所以我们回到APIServer日志并分析metrics.k8s.io/v1beta1相关记录。与此同时,我们看到APIServer也报告了同样的错误“theserveriscurrentlyunabletohandletherequest”。

显然这里存在矛盾,即APIServer显然正常工作。为什么当获得metrics.k8s.io/v1beta1的API版本时,它将返回该服务器不可用?为了回答这个问题,我们需要了解APIServer的“插件”机制。

集群APIServer有自己的扩展机制。开发人员可以使用此机制来实现APIServer的“插件”。这个“插件”的主要功能是实现一个新的API分组/版本。 APIServer充当代理并将相应的API调用转发到其自己的“插件”。

以MetricsServer为例。它实现了metrics.k8s.io/v1beta1的API组/版本。对此组/版本的所有呼叫都将转发到MetricsServer。如下所示,MetricsServer的实现主要使用服务和pod。

上图中的最后一个apiservice是将“插件”链接到APIServer的机制。下图显示了此apiservice的详细定义。它包括API分组/版本和实现MetricsServer的服务名称。有了这些信息,APIServer可以将metrics.k8s.io/v1beta1的调用转发给MetricsServer。

节点和Pod之间的通信

经过简单的测试,我们发现这个问题实际上是APIserver和metricsserverpod之间的通信问题。在阿里云K8S集群环境中,APIServer使用主机网络,即ECS网络,MetricsServer使用Pod网络。两者之间的通信取决于VPC路由表的转发。

例如,如果APIServer在NodeA上运行,则其IP地址为192.168.0.193。假设MetricsServer的IP为172.16.1.12,则从APIServer转发到Metrics路由规则。

目,因此APIserver和MetricsServer之间的通信存在问题。

为什么RouteController不起作用?

目。

目前的情况显然与预期不符,RouteController显然无法正常工作。这可以通过查看CloudControllerManager日志来确认。在日志中,我们发现当RouteController使用集群VPCid查找VPC实例时,无法获取此实例的信息。

但是集群仍然存在,ECS仍在那里,因此VPC不太可能消失。这可以通过VPC控制台上的VPCid确认。下面的问题是为什么CloudControllerManager无法获取此VPC的信息?

群集节点访问云资源

CloudControllerManager通过阿里云开放API获取VPC信息。这基本上相当于从云中的ECS中的VPC实例获取信息,这要求ECS具有足够的权限。当前的传统做法是将RAM角色授予ECS服务器并将相应的角色授权绑定到相应的RAM角色。

如果群集组件(作为其所在的节点)无法获取有关云资源的信息,则基本上有两种可能性。首先,ECS没有绑定正确的RAM角色;第二个是RAM角色的RAM角色绑定没有定义正确的授权规则。检查节点的RAM角色和RAM角色管理的授权,我们发现vpc的授权策略已更改。

在我们将效果更改为允许后,终止状态中的所有命名空间都消失了很长时间。

问题大图

总的来说,这个问题与K8S集群的六个组件有关,即APIServer及其扩展的MetricsServer,NamespaceController和RouteController,以及VPC路由表和RAM角色授权。

通过分析前三个组件的行为,我们发现群集网络问题导致APIServer无法连接到MetricsServer;通过对最后三个组件进行故障排除,我们发现问题的根本原因是VPC路由表已删除且RAM角色授权策略已更改。

后记

无法删除K8S群集命名空间的问题是该行的常见问题。这个问题似乎无关紧要,但它实际上不仅复杂,而且还意味着集群缺乏重要功能。本文全面分析了这样一个问题,以及故障排除方法和原理,希望能帮助您排除类似问题。

频道热点
  1. ?对于住在西城区平房区新街口街的居民来说,今年的雨季不用担心平房的雨水泄漏。这条街已经建立了三个地区物业综合服务中心,这些服务中心经常遇到雨水泄漏和下水道等老房子。物业中心负责“一站式”解决方案。15
  2. 2天前,我想分享。喜欢玩战略游戏的玩家很幸运。2014年的经典策略游戏《奇迹时代3(AgeofWondersIII)》玩?
  3. 服务“小微”是未来的成就郭子源当大企业逐步走向资本市场并选择直接融资渠道时,商业银行信贷业务的间接融
  4. ?对于住在西城区平房区新街口街的居民来说,今年的雨季不用担心平房的雨水泄漏。这条街已经建立了三个地区物业综合服务中心,这些服务中心经常遇到雨水泄漏和下水道等老房子。物业中心负责“一站式”解决方案。15
  5. ?对于住在西城区平房区新街口街的居民来说,今年的雨季不用担心平房的雨水泄漏。这条街已经建立了三个地区物业综合服务中心,这些服务中心经常遇到雨水泄漏和下水道等老房子。物业中心负责“一站式”解决方案。15
  6. ?对于住在西城区平房区新街口街的居民来说,今年的雨季不用担心平房的雨水泄漏。这条街已经建立了三个地区物业综合服务中心,这些服务中心经常遇到雨水泄漏和下水道等老房子。物业中心负责“一站式”解决方案。15
  7. 2天前,我想分享。喜欢玩战略游戏的玩家很幸运。2014年的经典策略游戏《奇迹时代3(AgeofWondersIII)》玩?
  8. 李亚鹏的女朋友表演美女网易娱乐于7月27日报道,7月27日清晨,李亚鹏的女友晒了一幅漂亮的照片。她穿着一件
  9.   22:59:21科技爱发明  我们几乎所有的痛苦都来自于我们无法单独呆在房间里。TOP3天蝎座水象天蝎座是一
  10.   02:12:56宇宙V科技  阿里云的售后技术团队的学生每天都在处理各种奇怪的在线问题。通常,网络连接失?
新闻排行
  1. 事实胜于雄辩,销售之王宝马X1真的有一个故事2016年,宝马X1进入了一个新的水平,开启了豪华紧凑型SAV市场?

    事实胜于雄辩,销售之王宝马X1真的有一个故事2016年,宝马X1进入了一个新的水平,开启了豪华紧凑型SAV市场?...

  2. 刚刚进入一个充满活力的夏日,在珠海西部的一个社区,陈姓陈后,女孩决定离开这个世界。不幸的是,她才27岁

    刚刚进入一个充满活力的夏日,在珠海西部的一个社区,陈姓陈后,女孩决定离开这个世界。不幸的是,她才27岁...

  3. 皇昊19龙头版1.5L手动时尚国五指导价69,800,全国最高折扣2.5万,裸车价格44,800。着陆价的全价为528.79万?

    皇昊19龙头版1.5L手动时尚国五指导价69,800,全国最高折扣2.5万,裸车价格44,800。着陆价的全价为528.79万?...

  4. 韩东君的感情并没有取得多大进展,但周围有很多女孩。他也拒绝了很多。他的母亲向他求了一点,但他并不着急

    韩东君的感情并没有取得多大进展,但周围有很多女孩。他也拒绝了很多。他的母亲向他求了一点,但他并不着急...

  5.   来源:未来网  住在英国伦敦的网友罗伦(LaurenFrench),近日要到美国旅行,刚好其他室友都不在家,只剩?

      来源:未来网  住在英国伦敦的网友罗伦(LaurenFrench),近日要到美国旅行,刚好其他室友都不在家,只剩?...

  6. 良好的全球设计,评估新的国际信息近年来出现了各种各样的主题餐厅,无论是时尚,有趣还是幻想,主题餐厅设

    良好的全球设计,评估新的国际信息近年来出现了各种各样的主题餐厅,无论是时尚,有趣还是幻想,主题餐厅设...

  7. 怎么才能每天都收到这种文章呢?  答案:只需要点击右上角“关注”即可。    自古以来都是男追女隔层

    怎么才能每天都收到这种文章呢?  答案:只需要点击右上角“关注”即可。    自古以来都是男追女隔层...

  8. 中国共青团工作组联手阅读了一组100个高质量的知识产权图书馆39分钟前整体FF91最新照片曝光没有重大变化59?

    中国共青团工作组联手阅读了一组100个高质量的知识产权图书馆39分钟前整体FF91最新照片曝光没有重大变化59?...

  9.     今天要为大家介绍的这款车,是奇瑞旗下主力的三厢轿车,这款车就是艾瑞泽5Pro,这种称呼也比较符合

        今天要为大家介绍的这款车,是奇瑞旗下主力的三厢轿车,这款车就是艾瑞泽5Pro,这种称呼也比较符合...

  10. 从我国公务员的现状来看,申请公务员的人不仅仅是一些大学毕业生。有些在机构工作多年或刚刚获得职业的人越

    从我国公务员的现状来看,申请公务员的人不仅仅是一些大学毕业生。有些在机构工作多年或刚刚获得职业的人越...

友情链接