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生态系统的运营开销
- 登录 发表评论
- 8 次浏览
最新内容
- 1 week ago
- 1 week ago
- 1 week ago
- 1 week ago
- 1 week ago
- 1 week 6 days ago
- 2 weeks ago
- 2 weeks 3 days ago
- 2 weeks 3 days ago
- 2 weeks 3 days ago