国家核武器政府

2021-03-12 19:10:34

Kubernetes State Checker,因为名称建议您可以帮助您检查Kubernetes集群的状态。

你可能会问,用Kubernetes,你不宣布你想要的州,Kubernetes会发生这种情况,为什么我要检查这个国家?您将是正确的,但通常从一个Kubernetes资源与另一个Kubernetes资源进行交互,或者它可能取决于外部或第三方资源。任何人都可能无法进入您所需的状态,从而可以对环境有下行效应或影响。即使Kubernetes将群集/应用程序的状态放在您声明的状态下,有时,您声明的是错误的,因为有人更改了设置的设置,希望若要传达到下游依赖项,并且可能会破坏环境。

通过微服务架构,多个团队可以贡献一个应用环境。确保一切顺利,正常工作往往是一个挑战。应用专家通常知道所有这些应用程序如何相互集成,并且应该为您的环境工作,并且此人依赖于调试集成问题。这是一个繁琐的任务,依靠某些人调试这些类型的问题使它们成为一个瓶颈。

这是一个已经消毒和泛型的真实例子。我们有一个具有一堆微服务的环境。在这种情况下,我们将谈论其中的2个。 MicroService 1被设置为侦听端口5000,并且将MicroService 2设置为连接到端口30001上的微服务1.基于配置部署的每个状态使其成为所需状态,但是当微服务2尝试连接到微服务1时,即连接失败。

我们刚刚告诉你确切的问题,但是当发生这种情况时,港口被设置不正确,并不明显。警告我们这个环境现在破损的最初的事情是一个失败的E2E测试。但是,E2E测试只测试某些入口点到系统中,无法告诉我们系统已破坏。这导致了在各种服务上查看应用程序日志的开发人员,因为他们知道呼叫如何流过系统。从日志中,开发人员能够将问题本地化为几个微服务,但无法准确地说明呼叫被打破。下一步是在基础设施中循环观看。基础设施人们必须赶上正在发生的事情,并开始使用该信息来检查各种Kubernetes的东西。经过一些繁琐的任务来追溯应用程序如何配置到它试图与之通信的内容,发现端口设置已关闭,端口号的一侧必须更改。

使用Kubernetes状态检查器,我们将能够在如何配置端口号,然后运行检查以确保它处于该状态的情况下声明这些状态。如果没有,就像在这种情况下,它会告诉你这个特定的端口不是你所说的状态。这基本上是微服务1和微猎狼之间的集成问题。微服务1正在听一个端口但微服务2认为它应该连接到另一端口上的微服务1。谁是正确的?这是两个微服务之间的理解,它们如何相互连接,但没有任何东西正在强制执行或检查。 Kubernetes状态检查器可以是“检查”或“强制”。

从开发人员的角度来看,这为它们提供了一种检查应用下方的图层的工具,以确保这些层中的所有内容设置为预期的内容。

从Devops / Infrastructure人的角度来看,这允许它们设置预期状态并使其他组能​​够检查。它还给出了这组一个工具,他们可以运行以检查可以帮助他们消除可能是错误的状态,并查看此工具未覆盖的其他区域。

如果您有一系列代表正确设置环境的检查,则可以使用这些检查并将其与另一个环境进行运行以确保一切都已到位。如果未正确设置某些内容,则Kubernetes-State-Checker将输出不正确的内容。

由于开发人员正在开发应用程序,此人通常知道应用程序所需的需求,以便在调试此应用程序时才能正常运行,可能已经找到了一些打嗝。开发人员可以创建待遇,非常类似于它们如何在故障已知的区域上创建单元测试。然后,正在管理其他环境的其他团队可以使用这些检查来确保其环境已正确设置。

检查也可以从另一种方式流动。通常在更大的组织中,开发人员可能不是正在处理生产系统的人。可能还有另一个团队。在生产中运行应用程序时,您通常会看到其他操作问题,这些问题不是DEV中的问题。该团队还可以为这些项目编写检查,以便在成为问题之前检测到这些问题。通过这些支票,包括开发人员在内的其他团队可以运行它以确保一切良好,并且从开发到生产的假设都坚持。

Kubernetes-State-Checker: - 类型:DoesServicePortExist名称:MicroService 1具有Kubernetes服务与端口5000公开说明:此检查是否具有PicroService 1具有端口5000公开名称空间的Kubernetes服务:此特定检查值的应用程序#输入值: ServiceName:MicroService-1端口:5000

Kubernetes-State-Checker: - 类型:DoneNvareXistindeployMentment名称:检查MicroService 2部署是否具有MicroService的正确envar 1说明:微服务2使用" microService_1_host_port"寻找微服务1.这检查此envar是否存在并设置为正确的值。命名空间:应用程序#此特定检查值的输入值:DeploymentName:MicroService-2 Envarkey:microService_1_Host_Port envarvalue:MicroService-1:5000

在对本文件的同行评审期间,有一个想法提出了我们可以以更具动态的方式读取配置,以便这些配置不得不在一个以上的地方。从上面拍摄我们的MicroService 1和MicroService 2示例。实际端口和维护在每个服务掌舵文件中都定义。然后通过此测试,我们再次必须定义映射到什么端口。这意味着相同的信息现在是两个地方。当有人想要更新MicroService 1的端口时,它们必须在微服务1' s helm值中更新它,然后进入Kubernetes-State-Checker' s检查配置yaml并将值更改为出色地。这使得重复和繁琐的工作。

我们希望在哪里可以告诉这个Kubernetes-State-Checker' s检查配置yaml,这里是microService-1正在侦听的端口,这里是microService-2正在使用的envar到达那个港口。这些值应该是相同的。

能够使用Kubernetes-State-Checker部分从任何Yaml文件读取,可以将其指向任何yaml文件,并且它将仅找到kubernetes-state checker部分。

fullnameoverride:&名称" hos-core-authentication"图片:存储库:1234.dkr.ecr.us-west-2.amazonaws.com/hos/hos-core-authentication pullpolicy:始终标签:&amp ;标签devservice:port:20004 targetport:20004some-thater-yaml:foo:barkubernetes-nature-checker: - 类型:doesserviceportexist名称:hos-core-authentication是否具有kubernetes服务与端口20004公开说明:此检查是否hos- Core-Authentication具有带有端口20004的Kubernetes服务,公开名称空间:应用程序#此特定检查值的输入值:ServiceName:HOS-Core-Authentication Port:20004

这具有可帮助您通过Docker容器在本地开发的环境的配置文件。

安装此后台并在此存储库中重新启动vsode后,会询问您是否要在容器中打开它。第一次执行此操作时,它需要一些时间,因为它是基于.devContainer目录中的Dockerfile构建容器。构建容器后,它将在此容器内部打开此项目,您可以像正常一样代码。

get get goet gopkg.in/yaml.v2go get k8s.io/apimachinery/pkg/api/errorsgo get k8s.io/apimachinery/pkg/apis/meta/v1go get k8s.io/client-go/kubernetesgo get k8s.io/客户端 - go / tools / clientcmdgo get k8s.io/client-go/util/homedirgo get github.com/evanphx/json-patchgo get k8s.io/kube-openapi/pkg/util/protogo get github.com/olekukonko/表格

.devcontainer / devcontainer.json文件指定从$ home / .kube / confiol的本地安装程序进入容器内的$ home / .kube / config。