这是五部分中的第四部分Kubernetes基本面。在接下来的几周内检查新零件。

Kubernetes是为了规模化而设计的。团队可以启动一个小型集群,并逐步扩展其安装。一段时间后,集群可能会运行几十个分离舱和数百个容器,甚至更多。

但是,没有组织,部署的服务和对象的数量可以很快失控,导致性能,安全性和其他问题。

在这篇文章中,我们将研究可以用来帮助保持Kubernetes集群组织有序的三个关键工具:名称空间、标签和注释。

名称空间是如何工作的

默认情况下,Kubernetes仅在您创建所有Kubernetes对象的物理群集中提供一个可行的命名空间。但是,尽管如此,您的项目可能会增长到单一名称空间将成为限制的程度。

幸运的是,您可以将名称空间看作是一个虚拟集群,而Kubernetes支持多个虚拟集群。配置多个名称空间将创建一个复杂的façade,将您的团队从使用单个名称空间中解放出来,并提高可管理性、安全性和性能。

不同的公司将采用不同的名称空间策略,这取决于团队规模、结构和项目的复杂性等因素。使用少量微服务的小型团队可以轻松地将所有服务部署到默认名称空间中。但对于一个拥有更多服务的快速发展的公司来说,单一的名称空间可能会使团队的工作难以协调。在这种情况下,公司可以创建子团队,每个子团队都有单独的名称空间。

在较大的公司也,团队可能被广泛分散,往往正在研究其他团队不了解的项目,使得难以跟上经常发生的变化。第三方公司也可能有助于平台,进一步提高复杂性。协调这么多资源是一个行政挑战,对于开发人员来说,不可能在本地机器上运行整个堆栈。除了技术等技术服务网格多重云持续交付,多个名称空间对于管理大规模场景是必不可少的。

当不同的团队将项目部署到相同的名称空间时,他们可能会影响彼此的工作。通过提供隔离和基于团队的访问安全性,独立的名称空间有助于确保团队独立工作,而不会干扰其他人。您还可以为每个名称空间设置资源配额,以便资源匮乏的应用程序不会耗尽集群容量,从而影响其他团队的资源。

使用名称空间

创建群集时,Kubernetes会提供三个名称空间。要列出群集附带的命名空间,请运行以下命令:

$ kubectl获取名称空间名称状态时代默认活动2D Kube-System Active 2D Kube-Public Active 2D

kube-system.命名空间是为Kubernetes引擎保留的,不适合您使用。这kube-publicNamespace用于存储公共访问数据,如集群信息等。

默认命名空间是您创建应用程序和服务的位置。每当您创建组件并不指定命名空间时,Kubernetes会在默认命名空间中创建它。但是使用默认命名空间仅适用于您在小系统上工作时。

您可以使用单个名称空间创建Kubernetes名称空间kubectl.命令:

Kubectl创建名称空间测试

或者,您可以使用YAML配置文件创建名称空间,如果您希望在配置文件存储库中留下集群中创建的对象的历史记录,那么这可能是更好的选择。下面的演示。Yaml文件展示了如何使用配置文件创建命名空间:

kubectl apply -f demo.yaml . type:命名空间apiVersion: v1元数据:name: demo标签:name: demo

问题是,每个项目都有自己的生命周期,你不希望混合开发和生产资源。因此,随着项目变得越来越复杂,集群需要更复杂的名称空间解决方案。您可以进一步将集群划分为开发、交付和生产环境:设想有三个项目——销售、结算和交付。由于前面提到的原因,您不希望将所有名称空间部署到单个默认名称空间中,因此您可以从为每个项目创建一个名称空间开始。

kubectl apply -f dev.yaml . type: Namespace apiVersion: v1 metadata: name: dev labels: name: dev kubectl apply -f dev.yaml . type: Namespace
类型:命名空间apiversion:v1元数据:名称:暂存标签:名称:暂停kubectl应用-f staging.yaml
类型:命名空间apiVersion: v1元数据:name: prod标签:name: prod kubectl apply -f prod.yaml

以下是你可能使用的潜在命名空间列表,具体取决于你的项目需求:

  • sales-dev
  • 销售暂存
  • 销售产品
  • 计费开发
  • 结算阶段
  • billing-prod
  • shipping-dev
  • 运输宿舍
  • shipping-prod

有两种方法可以显式地告诉Kubernetes您希望在哪个名称空间中创建资源。

你可以指定名称空间创建资源时的标志kubectl应用命令:

Kubectl应用-f pod。yaml——名称空间= demo

您还可以修改YAML配置文件元数据以包括目标名称空间属性:

apiVersion: v1 kind: Pod元数据:name: testpod命名空间:demo标签:name: testpod spec: containers: - name: testpod image: nginx

如果您在yaml声明中预定命名空间,则将始终在该命名空间中创建资源。如果你试图运行kubectl应用命令名称空间标志要为此资源设置不同的命名空间,命令将失败。

使用标签

随着群集中的对象数量的增长,它可能很难找到和组织它们。项目的增加的复杂性意味着它们的多维组件可能跨越边界和挑战刚性集群结构。标签允许您将有意义的相关元数据附加到群集对象,以便在批量中分类,找到和操作。

标签是分配给对象的键/值结构。一个对象可以被分配一个或多个标签对,也可以根本不分配标签。标签可以用于:

  • 确定POD是否是生产的一部分或金丝雀部署
  • 区分稳定版和alpha版
  • 指定对象所属的层(UI,业务逻辑,数据库等)
  • 确定豆荚是前端还是后端
  • 指定对象的发布版本(V1.0、V2.0、V2.1等)

例如,下面的配置文件定义了一个有两个标签的pod:层:界面版本:稳定

apiVersion: v1 kind: Pod元数据:name: app-gateway标签:layer:接口版本:stable

一旦标签到位,您可以使用标签选择器根据您定义的条件选择Kubernetes对象。

假设你在一个集群中有一些豆荚,它们被分配了标签。下面的命令将获得所有豆荚和它们的标签:

kubectl获得豆荚 - 标签
名称就绪状态重新启动年龄标签App-Gateway 1/1运行0 1M Layer =接口,版本=稳定Micro-SVC1 1/1运行0 1M层=业务,版本=稳定微型SVC2 1/1运行0 1M层=业务,版本= alpha

Kubernetes允许您使用标签选择器运行相同的kubectl get pods命令,并仅检索具有指定标签的POD。以下 -L.选择器允许你只显示图层标签:

NAME READY STATUS重启AGE LABELS app-gateway 1/1运行0 1m interface micro-svc1 1/1运行0 1m business micro-svc2 1/1运行0 1m business

如果您希望过滤结果并仅检索接口分离,则可以使用- l并指定此条件:

Kubectl得到豆荚-l=层=界面-显示标签
名称就绪状态重新启动年龄标签App-Gateway 1/1运行0 1M Layer = interface,版本=稳定

关于标签和标签选择器的更多信息,请参考Kubernetes标签和选择器页面。

使用注释

注释类似于标签。它们也被构造成键/值对,但与标签不同,它们不打算在搜索中使用。

那么,你为什么要打扰使用注释,当你可以使用标签?

想象一下,你必须组织一个存放箱子的仓库。这些盒子外面有小标签,上面有重要的数据,帮助你识别、分组和排列它们。现在假设每个盒子都包含信息。将这些内容视为打开盒子时可以检索的注释,但不需要从外部可见。

与标签不同,注释不能用于选择或识别Kubernetes对象,因此不能使用选择器来查询它们。您可以将这种元数据存储在外部数据库中,但这会很复杂。相反,您可以方便地将注释附加到对象本身。访问对象后,就可以读取注释。

注释对许多用例有用,包括:

  • 存储Pod容器的Docker注册表
  • 用来构建容器的git repo
  • 指向日志记录、监控、分析或审计存储库的指针
  • 与调试相关的信息,如名称、版本和生成信息
  • 系统信息,例如来自其他生态系统组件的相关对象的url
  • 卷展栏元数据,例如配置或检查点
  • 电话或电子邮件负责人的组件的项目
  • 该团队的网站URL

在下面的例子中,一个pod配置文件包含了用于构建容器的git repo信息,以及团队经理的电话号码:

apiVersion: v1 kind: Pod元数据:name: annotation -test annotation: repo: "https://git.your-big-company.com.br/lms/new-proj" phone: 800-555-1212 spec: containers:—name: nginx image: nginx:1.14.2 ports:—containerPort: 80

控件还可以向现有的pod添加注释注释命令:

Kubectl注解pod注解-测试电话=800-555-1212

要访问pod注解,你可以使用:

kubectl描述了pod你的pod-name

这将给你一个完整的描述你的豆荚,或者你可以使用kubectl得到豆荚使用JSONPath模板命令从pods中读取注释数据:

kubectl获取pods -o = jsonpath =“{。项目[*] ['metadata.annotations']}”

现在你已经准备好了

名称空间、标签和注释是便于组织和管理Kubernetes集群的工具。

一个显示Kubernetes信息和按名称空间分解的新Relic One仪表板。

这些工具都没有难以使用。与Kubernetes的大多数事情一样,个人概念很容易学习 - 只有很多人都会学习。

但现在你沿着你的Kubernetes旅程,因为你了解名称空间,标签和注释 - 以及如何使用它们!

准备深入潜入Kubernetes Monitoring?查看一个完整的介绍监控Kubernetes与新遗迹

新遗物是今年的骄傲白金赞助商KubeCon + cloudativecon虚拟会议在11月17日至20日前进。您的虚拟展位位于Platinum Sponsor Hall,并与我们的开发专家之一聊天

有兴趣为New Relic博客写作吗?亚搏体育登入网给我们一个推介!!