跳转到主要内容

热门内容

今日:


总体:


最近浏览:


Chinese, Simplified

category

我对Kubernetes(K8s)以及GKE等托管版本的一个错误是,你仍然需要拧太多的旋钮,而且太快就陷入困境,所以我敢肯定,我的团队成员已经厌倦了我说“老我会喜欢K8s(托管版本或不喜欢)”,因为它来自于一个操作背景,旨在让老我开心!

普雷斯顿(@ptone)我的一位同事建议我应该看看Knative,所以这就是这篇文章的全部内容。请加入我的探索之旅,重新弄清楚Knative是什么,以及它在不断增长的K8s生态系统中的位置。

那么Knative是什么呢?

它运行在Kubernetes(k8s)上,是一组组件,旨在使其更容易执行以下常见任务。

  • 部署容器
  • 在Kubernetes上编排源到URL的工作流
  • 使用蓝色/绿色或Canary部署路由和管理流量
  • 根据需求自动扩展和调整工作负载大小(包括扩展到0)
  • 将运行的服务绑定到事件生态系统


最终,这是一种抽象部署和管理K8上运行的工作负载的操作开销的方法,并提供了一种一致的方法,以便开发人员能够专注于编写酷代码。

在撰写本文时,有3个组件可用于解决上述任务

  • Build--源到容器的生成编排
  • 事件——事件的管理和交付
  • 服务——可扩展到零的请求驱动计算


它解决了哪些运营挑战?

  • 平台无关。无论你在哪里可以运行K8s(无论是否托管),你都可以运行Knative。在使用K8运行应用程序时,为一些常见任务提供一致的方法
  • 抽象执行在将应用程序部署到K8时所需的常见任务的操作开销(请参阅上面的列表)
  • 允许您使用已使用的构建和CI/CD工具和框架。
  • 使开发人员能够专注于编写有趣的代码,而不用担心构建、部署和管理应用程序的“无聊但困难”部分。
    现在,后一点真的让我竖起了耳朵!(尽管我希望部署容器被认为是无聊而不是困难的)

所以tbh我仍然有点困惑与Istio的重叠,甚至与香草K8的重叠。如果你读过我的Istio为什么我需要它?你会知道Istio也提供了流量路由功能,所以我在这个阶段仍然很困惑。

Knative README的下图说明了特定人物角色如何与K8、Istio和Knative交互

https://github.com/knative/docs/blob/master/images/knative-audience.svg

在我探索文档的这个阶段(GCP Knative登录页和Knative介绍自述文档),我并不清楚Knative对Istio有依赖性。当我在GKE README上阅读Knative安装时,我意识到这是一个非常重要的难题,与Istio的重叠是有意义的。我重新构想了上图,因此实际的操作依赖关系是显而易见的,并且每个层的特定人物角色执行的活动类型也更加清晰。我要抛开这样一个事实,即您不一定需要Istio或Knative来部署和公开应用程序,但如果您使用Knative,则应该在需要定义的地方进行活动!

Grace’s interpretation of Knative/Istio/GKE relationship & who does what where

为了理解使用这些组件是否确实抽象了前面列出的任务,这样我就不用担心构建、部署和管理应用程序的“无聊但困难”的部分。我决定将使用本地GKE和GKE与Knative的典型任务子集进行比较。任务是:

  • 部署容器
  • 升级到应用程序的另一个版本
  • 配置自动缩放组件
  • 进行金丝雀释放。我希望该应用程序的两个版本可以并行运行,并且两者都可以访问。我也只想使用一个集群。注意:我掩盖了蓝色/绿色部署和canary版本之间的差异,但您应该注意,因为它们是微妙的不同方法。我把这作为一个练习留给你来确定哪一个符合你的要求。
  • 构建、部署和管理多组件应用程序


我试图衡量我需要在多大程度上专注于操作任务,而不是操作旋钮的抽象。(我已经与Istio进行了实践,并在另一篇文章中详细介绍了我的冒险经历,所以我不认为重复这个练习有什么意义)由于其中一些任务对使用K8非常重要,这意味着我不需要键入很多关于这些任务的单词(我假设如果你正在阅读这篇文章,你对K8有了基本的了解),我可以专注于经验差异明显的地方。

基线是一个运作中的K8s集群。我使用了GKE,正如你所知,但你显然可以使用任何风格的托管K8,也可以使用你自己部署和管理的K8。

GKE:

  • 部署容器:使用kubectl部署或应用是一个简单的过程(我有点不同意,但设置了场景)老实说,我很好奇这怎么会更简单!
  • 升级到应用程序的另一个版本:再次使用kubectl无痛
  • 配置自动缩放组件:这是非常直接的,请参阅https://cloud.google.com/kubernetes-engine/docs/how-to/scaling-apps#aut…
  • 执行金丝雀发布:现在它变得有趣了。标签在这里非常重要,YAML也是如此。该图显示了对稳定配置和金丝雀配置需要做什么。复制副本的数量决定了金丝雀的流量

看见https://kubernetes.io/docs/concepts/cluster-administration/manage-deplo…

Istio具有更好的流量管理功能,仅通过部署Istio,您就可以更好地控制将流量百分比引导到金丝雀,而不仅仅是增加pod的数量!(这篇文章已经比预期的要长得多,所以我让你回到非常好的Istio文档,甚至是我以前关于Istio的文章)

部署和管理多组件应用程序。欢迎来到YAML中心。可以在此处找到配置多组件应用程序的示例:https://cloud.google.com/kubernetes-engine/docs/tutorials/guestbook

Knative:

在开始之前,我必须先在GKE集群上安装Istio和Knative。必须承认,我想知道从操作的角度来看,如果出现操作问题,您将如何解决此问题。

我的3个节点和3个vCpu的测试集群太小了,我不想看到如果我按原样使用它会有什么不起作用,所以我必须在安装之前启用它。

我刚刚完成了Istio&Knative的安装。我的Istio安装出现了问题,所以我想我会在某个时候解决这个问题!

我需要运行的各种kubectl命令完成了一大堆配置。我很高兴到目前为止它相对来说是无痛的(我本以为上面的错误会再次出现并咬我一口,但它没有!)。

尽管在这个阶段,构建和服务组件似乎很好!

现在开始执行任务:

  • 部署容器:与部署到本地GKE相同,创建您的YAML文件并使用kubectl apply应用它。这里的美妙之处在于,YAML配置文件要简单得多。这是因为服务模块抽象了所有的操作方面。
    旁注:当我跑步时

kubectl get ksvc helloworld-go — output=custom-columns=NAME:.metadata.name,DOMAIN:.status.domain`

我得到一个错误:服务器没有资源类型“ksvc”

所以我用它的扩展形式替换了ksvc:“services.serving.knactive.dev”这似乎是一个错误,因为图像的标签似乎表明我运行的是一个足够新的版本。v0.1.1gke-10.16gke-11.12

  • 升级到应用程序的另一个版本:您使用kubectl,因此与本机GKE一样,您只需更改所使用的映像
  • 配置自动缩放组件:很简单,但在这里我真的感觉失控了,因为不清楚它是如何管理缩放的,因为我下面的例子的service.yaml文件中只有这个:


所以我最终读到了这篇文章。config-autoscaler.yaml文件中包含自动缩放设置。所以,是的,在这一点上,我在想,作为与Knative交互的开发人员角色,一些操作开销真的已经从我身上抽象出来了!实际上,我只需要部署我的代码。而对于本机GKE,我必须为其提供副本和目标CPU利用率的最大值和最小值。

  • 进行金丝雀发布:我可以在同一个集群上运行两个版本的应用程序,并且流量都很好,足以让我快速浏览。附带说明:我在部署路由YAML文件时收到了这条消息,只是与文档不匹配,但它说的是正确的:
    route.serving.knative.dev “blue-green-demo” created``
     

这个例子非常简单,在描述你需要做什么方面比我做得更好,但总的来说:部署2个版本的应用程序。在路由配置文件中定义你想访问哪个版本的流量百分比,然后按照他们说的应用它并完成任务!

到目前为止,我故意掩盖了Knative的GCP登录页上描述的“能够在GKE上运行无服务器工作负载”的内容,因为我需要在被转移注意力之前了解Knative实际上是什么。

我的裁决


你仍然需要有人来旋转层蛋糕的旋钮(正如我所想到的Knative配置)。我可能有点偏见,但GKE Knative蛋糕是个不错的选择。即使使用托管服务,这也不能免除您的一些系统管理员权限,只会减少操作开销。

回到GKE无服务器加载项,它在GCP Knative登录页的“能够在GKE上运行无服务器工作负载”部分中提到。附加组件实际上会自动安装蛋糕(请参阅这篇文章的Serverless and containers一节:两全其美,这一点很清楚。这里的英语比登陆页更简单!)在撰写本文时,这里有一个注册表。

Knative确实让你的开发人员更简单了,尤其是如果他们感兴趣的只是编写代码和部署它,而不用担心其他事情的话。我感到惊喜,那是在我看GKE无服务器组件之前。

所以,如果你的角色符合我对谁处理蛋糕的解释,那么我建议你看看Knative。这是我的👍🏾 对于Knative来说,如果你是一个开发人员,但这个蛋糕需要是一个完全管理的服务,才能真正实现它诱人承诺的涅盘。今天,即使您从K8s的托管版本开始,您仍然需要有人来管理K8s生态系统的运营开销

 

本文地址
最后修改
星期日, 五月 26, 2024 - 21:06
Article