kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)
kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)
2024-07-06 04:56:01  作者:也够野性  网址:https://m.xinb2b.cn/know/uho222667.html

本文中,我们将探索Kubernetes命名空间,它是集群中组织和管理对象的一种方式。

介 绍

Kubernetes集群可以同时管理大量互不相关的工作负载,而组织通常会选择将不同团队创建的项目部署到共享集群上。随着数量的增加,部署对象常常很快就会变得难以管理,拖慢操作响应速度,并且会增加危险错误出现的概率。

Kubernetes使用命名空间的概念帮助解决集群中在管理对象时的复杂性问题。命名空间允许将对象分组到一起,便于将它们作为一个单元进行筛选和控制。无论是应用自定义的访问控制策略,还是为了测试环境而分离所有组件,命名空间都是一个按照组来处理对象、强大且灵活的概念。

在本文中,我们会讨论命名空间的工作原理,介绍一些常用实例,并分享如何使用命名空间来管理Kubernetes对象。最后,我们还会介绍一个叫做projects(项目)的Rancher特性,看它是如何构建并扩展命名空间的概念的。

什么是命名空间,为什么它很重要?

命名空间(namespace)是Kubernetes提供的组织机制,用于给集群中的任何对象组进行分类、筛选和管理。每一个添加到Kubernetes集群的工作负载必须放在一个命名空间中。

命名空间为集群中的对象名称赋予作用域。虽然在命名空间中名称必须是唯一的,但是相同的名称可以在不同的命名空间中使用。这对于某些场景来说可能帮助很大。例如,如果使用命名空间来划分应用程序生命周期环境(如开发、staging、生产),则可以在每个环境中维护利用同样的名称维护相同对象的副本。

命名空间还可以让用户轻松地将策略应用到集群的具体部分。你可以通过定义ResourceQuota对象来控制资源的使用,该对象在每个命名空间的基础上设置了使用资源的限制。类似地,当在集群上使用支持网络策略的CNI(容器网络接口)时,比如Calico或Canal(calico用于策略,flannel用于网络)。你可以将NetworkPolicy应用到命名空间,其中的规则定义了pod之间如何彼此通信。不同的命名空间可以有不同的策略。

使用命名空间最大的好处之一是能够利用Kubernetes RBAC(基于角色的访问控制)。RBAC允许您在单个名称下开发角色,这样将权限或功能列表分组。ClusterRole对象用于定义集群规模的使用模式,而角色对象类型(Role object type)应用于具体的命名空间,从而提供更好的控制和粒度。在角色创建后,RoleBinding可以将定义的功能授予单个命名空间上下文中的具体具体用户或用户组。通过这种方式,命名空间可以使得集群操作者能够将相同的策略映射到组织好的资源集合。

常见的命名空间使用模式

命名空间是一种非常灵活的特性,它不强制使用特定的结构或组织模式。不过尽管如此,还是有许多在团队内常使用的模式。

将命名空间映射到团队或项目上

在设置命名空间时有一个惯例是,为每个单独的项目或者团队创建一个命名空间。这和我们前面提到的许多命名空间的特性很好的结合在了一起。

通过给团队提供专门的命名空间,你可以用RBAC策略委托某些功能来实现自我管理和自动化。比如从命名空间的RoleBinding对象中添加或删除成员就是对团队资源访问的一种简单方法。除此之外,给团队和项目设置资源配额也非常有用。有了这种方式,你可以根据组织的业务需求和优先级合理地访问资源。

使用命名空间对生命周期环境进行分区

命名空间非常适合在集群中划分开发、staging以及生产环境。通常情况下我们会被建议将生产工作负载部署到一个完全独立的集群中,来确保最大程度的隔离。不过对于较小的团队和项目来说,命名空间会是一个可行的解决方案。

和前面的用例一样,网络策略、RBAC策略以及配额是实现用例的重要因素。在管理环境时,通过将网络隔离来控制和组件之间的通信能力是很有必要的。同样,命名空间范围的RBAC策略允许运维人员为生产环节设置严格的权限。配额能够确保对最敏感环境的重要资源的访问。

重新使用对象名称的能力在这里很有帮助。在测试和发布对象时,可以把它们放到新环境中,同时保留其命名空间。这样可以避免因为环境中出现相似的对象而产生的混淆,并且减少认知开销。

使用命名空间隔离不同的使用者

另一个命名空间可以解决的用例是根据使用者对工作负载进行分段。比如,如果你的集群为多个客户提供基础设施,那么按命名空间进行分段就能够实现管理每个客户,同时跟踪账单的去向。

另外,命名空间的特性可以让你控制网络和访问策略,为你的使用者定义不同的配额。在通用的情况下,命名空间允许你为每个用户开发和部署相同模板化环境的不同实例。这种一致性可以大大简化管理和故障诊断的过程。

理解预配置的Kubernetes命名空间

在我们进行创建命名空间之前,先讨论一下Kubernetes是如何自动设置它的。在默认情况下,新的集群上有三个命名空间:

default:向集群中添加对象而不提供命名空间,这样它会被放入默认的命名空间中。在创建替代的命名空间之前,该命名空间会充当用户新添加资源的主要目的地,无法删除。kube-public:kube-public命名空间的目的是让所有具有或不具有身份验证的用户都能全局可读。这对于公开bootstrap组件所需的集群信息非常有用。它主要是由Kubernetes自己管理。kube-system:kube-system命名空间用于Kubernetes管理的Kubernetes组件,一般规则是,避免向该命名空间添加普通的工作负载。它一般由系统直接管理,因此具有相对宽松的策略。

虽然这些命名空间有效地将用户工作负载与系统管理的工作负载隔离,但它们并不强制使用任何额外的结构对应用程序进行分类和管理。比较友好的是,创建和使用额外的命名空间非常简单

使用命名空间

使用kubectl管理命名空间及其包含的资源相当简单。在这一节中,我们将演示一些最常见的命名空间操作,便于你开始有效地分割资源。

查看现有的命名空间

要显示集群中可用的所有命名空间,使用kubectl get namespaces命令:

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(1)

该命令显示了所有可用的命名空间,无论它们是否是活跃的。此外还有资源的时长(age)。

如果想获得更详细的信息,使用kubectl describe命令:

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(2)

Name: default

Labels: field.cattle.io/projectId=p-cmn9g

Annotations: cattle.io/status={"Conditions":[{"Type":"ResourceQuotaInit","Status":"True","Message":"","LastUpdateTime":"2018-12-17T23:17:48Z"},{"Type":"InitialRolesPopulated","Status":"True","Message":"","LastUpda... field.cattle.io/projectId=c-7tf7d:p-cmn9g lifecycle.cattle.io/create.namespace-auth=true

Status: Active

No resource quota.

No resource limits.

该命令用于显示与命名空间关联的标签和注释,以及已经应用了的所有配额或资源限制。

创建命名空间

我们使用kubectl create namespace命令来创建命名空间。用命名空间的名称作为该命令的参数。

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(3)

你还可以通过文件,使用manifest来创建命名空间。例如,下面的文件定义了我们和上面一模一样的命名空间。

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(4)

假设上面的规范保存在demo-namespace.yml文件中。你可以输入指令来使用它:

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(5)

无论我们采用哪种方法创建命名空间,在我们再次检查可用命名空间时,应该能列出新的命名空间(我们使用ns——命名空间的缩写,第二次进行查询):

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(6)

我们新创建的命名空间已经变为可使用。

根据命名空间筛选和执行操作

如果我们将一个工作负载对象部署到集群而不指定命名空间,它将被添加到默认命名空间:

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(7)

我们可以使用kubectl来验证部署是否创建在默认的命名空间:

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(8)

如果我们尝试再次使用相同的名称创建部署,会得到命名空间冲突的错误。

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(9)

要将操作应用于不同的命名空间,我们必须在命令中包含—namespace=这一选项。下面我们在demo-namespace命名空间上创建具有相同名称的部署:

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(10)

这次部署成功了,尽管我们仍然使用的是相同的部署名称。命名空间为资源名称提供了不同的作用域,避免了前面所经历的命名冲突。

如果想查看新部署的详细信息,我们再次使用—namespace=选项指定命名空间:

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(11)

这说明我们已经在demo-namespace命名空间创建了另一个名为demo-nginx的部署。

通过设置Context选择命名空间

如果希望避免为每个命令提供同样的命名空间,可以通过配置kubectl的context来改变命令作用的默认命名空间。这会修改操作在context活跃时应用到的命名空间。

列出context配置的细节,输入:

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(12)

上图说明我们使用了一个名为Default的context,context没有指定命名空间,因此使用了默认命名空间。

想要将该context使用的命名空间修改成demo-context,我们输入:

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(13)

我们可以在此查看context配置来验证当前是否选择了demo-namespace:

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(14)

验证我们的kubectl describe命令现在默认使用demo-namespace,它会请求我们的demo-nginx部署而不需要指定命名空间:

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(15)

删除命名空间并清理

如果不需要命名空间了,我们可以删除它。

删除命名空间这一功能非常强大,因为它不仅删除命名空间,还会清理其中部署了的所有资源。这一功能非常方便,但是同时如果你一不小心,也会非常危险。

在删除之前,最好列出和命名空间相关的资源,确定想要删除的对象:

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(16)

一旦确定了要操作的范围,可以输入下面的命令删除demo-namespace命名空间和其中的所有资源:

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(17)

命名空间及其资源将从集群中删除

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(18)

如果你之前在kubectl上下文中更改了所选的命名空间,那么输入下面的命令清除所选的命名空间:

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(19)

在清理demo资源时,请记住删除我们最初提供给默认命名空间的原始demo-nginx部署:

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(20)

现在你的集群应该处于一开始的状态了。

使用Rancher的Project扩展命名空间

如果你使用Rancher来管理Kubernetes集群,那么你就可以使用projects特性提供的扩展功能。Rancher里的Project是一个额外的组织层,用于将多个命名空间绑定在一起。

Rancher的project在命名空间上覆盖了一个控制结构,允许你将命名空间分组成逻辑单元并对其应用相应的策略。Project在大多数情况下反映了命名空间,但它是作为命名空间的容器而不是单独的工作负载资源。Rancher中的每个命名空间只存在于一个project中,命名空间继承应用于该项目的所有策略。

在默认情况下,Rancher集群定义了两个project:

Default:该project包含了默认命名空间System:该project包含所有其他预配置的命名空间,包括kube-public、kube-system和系统提供的所有命名空间

在选择了集群之后,你可以通过访问Projects/Namespaces选项卡来查看集群中可用的项目:

kubernetes中有哪些重要概念(超长干货Kubernetes命名空间详解)(21)

在这里,单击Add Project按钮来添加project。在新建project时,你可以配置project成员及其访问权限,还可以配置安全策略和资源配额。

你还可以点击project的Add Namespace按钮向现有的项目添加命名空间。如果要将命名空间移动到不同的project上,请先选择命名空间,单击Move按钮。将命名空间移动到新project中的开关会立即修改应用于该命名空间的权限和策略。

Rancher的project没有引入新的组织模型,而是简单地将相同的抽象应用到了命名空间上,而命名空间作用于工作负载对象。如果你喜欢使用命名空间,但是又需要额外的控制层的话,那么它们就能够填补这一使用上的空白。

总 结

在本文中,我们介绍了Kubernetes命名空间的概念以及它们是如何帮助管理集群资源的。我们讨论了集群中命名空间是如何为资源名称分段和分作用域的,以及在命名空间层面应用的策略如何影响用户权限和资源分配。

之后,我们介绍了团队用命名空间将集群分段成逻辑块的一些常用模式,描述了Kubernetes预配置的命名空间及其用途。然后,我们还了解了如何在集群中创建和使用命名空间。最后,我们还介绍了Rancher项目以及它们是如何通过对命名空间本身进行分组来扩展命名空间的。

命名空间是一个非常简单又重要的概念,可以帮助团队管理集群资源并且降低复杂性。花一些时间熟悉它们的优点和特性可以帮助你有效地配置集群,避免将来遇到麻烦。

  • 去幼儿园观摩区角半日活动的美篇(小区角大世界)
  • 2024-07-06小区角大世界10月21日,潼川三幼教育联盟开展“小区角大世界”环境创设暨区角游戏观摩活动活动分为专题讲座、入班观察、案例分享、答疑解惑四个环节培训活动中,潼川三幼分管教学人员作《幼儿园区域活动的原理与设置》专题分。
  • 宫寒的人有哪些表现(宫寒的三大危害)
  • 2024-07-06宫寒的三大危害宫寒会给女性造成非常大的困扰,宫寒会导致女性下腹坠痛,并且经期会出现痛经的问题,宫寒容易引起女性手脚冰凉,宫寒主要是指妇女肾阳不足,宫寒给女性带来的危害非常大,会增加女性患妇科病的风险,那么我们具体来。
  • 萝卜缨子做法大全(萝卜缨子学会这样做)
  • 2024-07-06萝卜缨子学会这样做大家好,这里是【刘一手美食】,关注老刘,每天分享一道好吃又实用的家常菜1、萝卜叶,为十字花科植物莱菔的根出叶,可食用2、今天老刘就来分享一下“腌制萝卜缨子”做法,喜欢的朋友可以先收藏,有空自己试一下3。
  • 建造防御类型游戏排行(SpiritOfThe)
  • 2024-07-06SpiritOfThe在介绍之前还是要吐槽一下这个中文译名《孤岛惊魂》,恕我眼拙我着实看不错本作中任何一点‘惊魂’之处,毕竟本作只是一款画风可爱的建造经营游戏本作目前给我的感觉就像青春版‘动物森友会’或者是3D版星露谷物语。
  • 广东地震5.2级严重吗?广东佛山发生3.2级地震
  • 2024-07-06广东地震5.2级严重吗?广东佛山发生3.2级地震据广东省地震局微信公众号“南粤防震减灾”消息,据中国地震台网正式测定,2月5日11时38分在广东省佛山市三水区(北纬23.27度,东经112.95度)发生3.2级地震,震源深度8公里震中位于广东省佛山。
  • 服务处所是什么意思(服务处所意思简介)
  • 2024-07-06服务处所意思简介服务处所一栏的原意是填写工作单位,但是由于大部分人的工作并不稳定,所以最后派出所都是填写所在社区的名称或是放空,此栏填不填写并不重要《中华人民共和国户口登记条例》的如下规定:第十七条户口登记的内容需要。
  • 赵薇旗下四个男艺人(曾是赵薇的丫鬟)
  • 2024-07-06曾是赵薇的丫鬟说到赵薇相信大家都不陌生了,不仅是我国大陆优秀的女演员,女歌手,更是一位著名女导演,学历高,人还漂亮,可以说是娱乐圈中的才女了赵薇起初走红,是凭借还珠格格中的小燕子一角,由她饰演的小燕子活泼机灵,使大。
  • 被男生说钓鱼执法是什么意思(钓鱼执法是什么意思)
  • 2024-07-06钓鱼执法是什么意思钓鱼执法,从法理上分析,当事人原本没有违法意图,在执法人员的引诱之下,才从事了违法活动,国家当然不应该惩罚这种行为这种行为如果运用不当将致人犯罪,诱发严重社会问题钓鱼执法是政德摧毁道德的必然表现一、钓。
  • 95后四小花近况 曝95后小花私生活混乱
  • 2024-07-0695后四小花近况 曝95后小花私生活混乱3月26日,知名狗仔“懂瓜呱”又爆出猛料:某位资源逆天被力捧的95后小花,私生活方面跟她的清纯外表反差巨大娱乐圈经常有明星被爆出私生活混乱,但绝大多数都是男星,不检点的女星还真是头一次听说据爆料者称:。
  • 你连渣男都算不上(你们郎有情妾有意)
  • 2024-07-06你们郎有情妾有意图片来源:电视剧我就是这般女子前篇:强求到了,最终也不会属于自己夜已深,浮尘寺静谧,靠在禅房的屋檐下,听着风拂过带动不知何处大殿檐角的风铃,发出叮铃铃的声音,沈绢心中再无刚来惬意放松,有的只是疲倦无力。
  • 广州科学城最新房价图(科学城不能碰的楼盘)
  • 2024-07-06科学城不能碰的楼盘我是广叔谈房,资深房产投资专家你相见恨晚的买房导师,目前为提供买房最佳解决方案广叔不像其他自媒体,遮遮掩掩的让你摸不清头脑!广叔属于实战派只说对你最有用的操作和建议关注“广叔谈房”微信公众号进入知识星。
  • 美国鞋业品牌大全(知名鞋业品牌暂停俄罗斯工作)
  • 2024-07-06知名鞋业品牌暂停俄罗斯工作西班牙鞋履品牌Camper已暂停在俄罗斯的工作在西班牙鞋履品牌Camper的网店首页,有一条关于CamperRussia暂时停工的公告正如消息中所述,“由于后勤和运营困难”,CamperRussia的。