Kubernetes最佳实践 具有名称空间的Kubernetes组织

Kubernetes最佳实践创建小型容器

随着您开始创建越来越多的Kubernetes服务,易于启动的任务变得越来越复杂。例如,开发团队不能以相同的名称创建服务或部署。如果您有成千上万的炉灶,那么简单列出它们将需要很多时间,更不用说为他们提供正常的管理了。这只是冰山一角。

让我们看一下名称空间名称空间如何使Kubernetes资源管理更容易。那么名称空间到底是什么?命名空间可以被视为Kubernetes集群内部的虚拟集群。在同一个Kubernetes集群中,您可以具有多个彼此隔离的命名空间。他们确实可以帮助您和您的团队提高组织,安全性甚至系统性能。



在大多数Kubernetes发行版中,集群是``开箱即用''的,命名空间为``默认''。 Kubernetes实际上正在处理三个名称空间:默认,kube-system和kube-public。当前,不经常使用Kube-public。



不接触kube命名空间是一个好主意,尤其是在像Google Kubernetes Engine这样的托管系统上。它使用默认名称空间作为创建服务和应用程序的位置。绝对没有什么特别的,除了Kubernetes已配置为可以使用它,而且您无法将其删除。这对于入门和性能低下的系统非常有用,但是我不建议在大型产品系统中使用默认名称空间。在后一种情况下,一个开发团队可以很容易地重写别人的代码,并破坏另一个团队的工作,而无需意识到。

因此,您应该创建几个命名空间,并使用它们来将服务划分为可管理的链接。可以使用单个命令创建名称空间。如果要创建一个名为test的命名空间,请使用$ kubectl create namespace test命令或仅创建一个YAML文件并将其像其他任何Kubernetes资源一样使用。



您可以使用$ kubectl get namespace命令查看所有名称空间。



执行完之后,您将看到三个内置的名称空间和一个名为“ test”的新名称空间。让我们看一个用于创建Pod的简单YAML文件。您可能会注意到其中没有提及命名空间。



如果使用kubectl运行此文件,它将在当前活动名称空间中创建mypod模块。除非您更改它,否则它将是默认名称空间。有两种方法可以告诉Kubernetes您要在哪个命名空间中创建资源。第一种方法是在创建资源时使用名称空间标志。



第二种方法是在YAML声明中指定名称空间。



如果在YAML中指定名称空间,则资源将始终在此空间中创建。如果在使用命名空间标志时尝试使用其他命名空间,则该命令将失败。现在,如果您尝试找到自己的广告连播,就无法做到。



这是因为所有命令都在当前活动名称空间之外执行。要找到您的Pod,您需要使用命名空间标志,但这很快就很无聊,尤其是当您在使用自己的命名空间的小组中担任开发人员并且不想为每个单独的命令使用这样的标志时。让我们看看如何解决此问题。



开箱即用,您的活动名称空间称为默认名称。如果您未在资源的YAML中指定名称空间,则所有Kubernetes命令都将使用此活动的默认名称空间。不幸的是,使用kubectl管理活动名称空间的尝试可能会失败。但是,有一个非常好的工具叫做Kubens,它大大简化了这一过程。运行kubens命令时,您会看到所有具有突出显示的活动名称空间的名称空间。



要将活动名称空间切换到测试名称空间,只需运行$ kubens test命令。如果在此之后再次输入$ kubens命令,则可以看到现在分配了一个新的活动名称空间-test。



这意味着您不需要名称空间标志即可查看测试名称空间中的Pod。



因此,名称空间彼此隐藏,但彼此之间不隔离。来自一个名称空间的服务可以很容易地与另一个名称空间中的服务通信,这通常非常有用。在不同命名空间之间进行通信的能力意味着开发人员的服务可以与不同命名空间中的另一个dev命令的服务进行交互。

通常,当您的应用程序要访问Kubernetes服务时,您可以使用内置的DNS发现服务,并仅给您的应用程序提供服务的名称。但是,您可以在多个名称空间中以相同的名称创建服务,这是无效的。



幸运的是,通过使用扩展形式的DNS地址,可以轻松地避免这种情况。 Kubernetes的服务使用通用DNS模式公开其端点。看起来像这样:



通常,您只需要服务的名称,DNS就会自动确定完整地址。



但是,如果需要在其他名称空间中访问服务,则只需使用服务名称加上名称空间名称即可:



例如,如果要连接到测试名称空间中的服务数据库,则可以使用数据库地址database.test



如果要连接到prod命名空间中的服务数据库,您正在使用database.prod。



如果您确实想隔离和限制对名称空间的访问,则Kubernetes允许您使用Kubernetes网络策略来做到这一点。我将在下一个系列中讨论这一点。

经常有人问我,需要创建多少个名称空间,目的是什么?什么是托管数据?

如果创建太多的命名空间,它们只会妨碍您的工作。如果数量太少,您将失去这种解决方案的所有优势。我认为每个公司在创建自己的组织结构的过程中都经历了四个主要阶段。根据您的项目或公司所处的开发阶段,可以采用适当的策略来创建名称空间。

想象一下,您是一个小型团队的一部分,该团队致力于5-10个微服务的开发,您可以轻松地将所有开发人员聚集在一个房间中。在这种情况下,有必要在默认名称空间中运行所有产品服务。当然,要想扩大行动范围,您可以使用2个名称空间-prod和dev分别使用。最有可能的是,您正在使用Minikube之类的东西在本地计算机上测试开发。

假设情况已经改变,现在您的团队正在迅速成长,同时正在开发10多种微服务。有时需要将多个群集或名称空间分别用于prod和dev。您可以将一个团队分成几个子组,以便它们每个都有自己的微服务,并且每个团队都可以选择自己的命名空间,以简化管理软件开发和发行的过程。



随着每个团队成员对系统整体工作原理的了解,与所有其他开发人员协调每个变更变得越来越困难。每天尝试在本地计算机上旋转完整堆栈变得越来越困难。

在大型公司中,开发人员根本不知道谁在做什么。团队使用服务合同或服务网格技术进行通信,该技术在网络上添加了一个抽象层,例如Istio配置工具。根本不可能尝试在本地运行整个堆栈,我强烈建议使用Kubernetes上的Spinnaker等连续交付(CD)平台。因此,每个团队肯定需要自己的名称空间的时刻到了。每个命令甚至可以为开发环境和生产环境选择多个名称空间。

最后,有一些大型的创业公司,其中一个开发小组甚至都不知道其他小组的存在。这样的公司通常可以雇用通过有据可查的API进行交互的第三方开发人员。在每个这样的组中,都有几个团队和几个微服务。在这种情况下,您必须使用我前面提到的所有工具。



程序员不应手动部署服务,也不能访问与其无关的名称空间。在此阶段,建议使用几个群集来减少配置不当的应用程序的“爆炸半径”,以简化计费和资源管理过程。

因此,正确使用组织的名称空间可使Kubernetes更具可管理性,可管理性,安全性和灵活性。

Kubernetes最佳实践 Kubernetes生存能力测试与就绪和活力测试


一点广告:)


感谢您与我们在一起。你喜欢我们的文章吗?想看更多有趣的资料吗?通过下订单或向您的朋友推荐给开发人员的基于云的VPS,最低价格为4.99美元这是我们为您发明的入门级服务器 独特类似物:关于VPS(KVM)E5-2697 v3(6核)的全部真相10GB DDR4 480GB SSD 1Gbps从$ 19还是如何划分服务器?(RAID1和RAID10提供选件,最多24个内核和最大40GB DDR4)。

阿姆斯特丹的Equinix Tier IV数据中心的戴尔R730xd便宜2倍吗?在荷兰2台Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100电视戴尔R420-2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB-$ 99起!阅读有关如何构建基础设施大厦的信息。使用Dell R730xd E5-2650 v4服务器花费一欧元9000欧元的c类?

All Articles