Google Kubernetes Engine 推出新功能,应用程序开启时间缩短至几秒

Image Streaming 介绍

Google Kubernetes Engine 推出一项新功能:Image Streaming,这一革命性的功能使得 Google Kubernetes Engine(简称GKE)可以快速实现应用程序启动和自动缩放。

GKE 为 Kubernetes 发明原厂谷歌推出的基于 Kubernetes 的自动托管平台。

Image Streaming 可以显著缩短应用程序扩展时间,让用户能够更快地响应不断增长的用户需求,并通过配置更少的备用容量来节省资金。谷歌通过将容器的镜像拉取时间从几分钟(对于大的image来说)减少到几秒(无论容器大小),并允许应用程序在 GKE 流式传输容器数据时立即启动来实现这一点。

Kubernetes 在扩展应用程序时的传统工作方式是,必须在应用程序启动之前将整个容器映像下载到节点上。容器映像越大,所需的时间就越长,尽管事实上大多数应用程序实际上并不需要容器映像中的每个字节数据来开始启动(并且容器中的某些数据甚至可能永远不会被使用)。

Image Streaming 的工作原理是在 containerd 中使用复杂的网络挂载容器数据层,并在网络、内存和磁盘上用多个缓存层进行备份。一旦用户准备好镜像流挂载,容器会在几秒钟内(无论容器大小)从 ImagePulling 状态转换为 Running;这有效地将应用程序启动与容器映像中所需数据的数据传输并行化。因此,用户可以看到更快的容器启动时间和更快速的自动缩放。

Image Streaming 性能各不相同,因为它高度依赖于用户的应用程序配置文件。不过,一般而言,图像越大,看到的好处就越大。Google Cloud 合作伙伴 Databricks 发现整体应用程序冷启动时间(包括节点启动时间)显著减少。

“通过 GKE 上的 image Streaming,我们发现应用程序启动时间缩短了 3 倍,这意味着客户工作负载的执行速度更快,并通过减少待机容量来降低客户的成本。” - Ihor Leshko,Databricks 高级工程经理。

除了数据传输的并行化,GKE image Streaming 还采用了多级缓存系统。它从节点上的内存和磁盘缓存开始,然后升级到区域复制的 Artifact Registry 缓存,该缓存是专门为 image Streaming 设计的,利用了与Cloud Spanner相同的引擎技术。

就容器化应用程序而言,image Streaming 是完全透明的。由于容器所读取的数据最初是通过网络流式传输的,而不是从磁盘上读取的,因此,使用图像流的原始读取性能要比整个图像在磁盘上可用时稍慢一些。在容器启动期间,这种影响被设计的并行性质所抵消,因为容器跳过了整个镜像的拉动过程,得到了一个漫长的开端。然而,为了在应用程序运行后达到相同的读取性能,GKE 仍然像以前一样并行地下载整个容器镜像。换句话说,当 GKE 下载容器镜像时,你可以获得 image streaming 的并行性优势;然后,一旦下载完成,你就可以获得与之前相同的磁盘读取性能。

如何使用 Image Streaming

现在,当使用来自 Artifact Registry 的 image 或者是谷歌云的 advanced registry for container images 以及其他 artifacts 的时候,GKE的标准操作模式的用户可以免费使用 image streaming。

用户可以在新的和现有的 GKE 集群上使用 image streaming ,需确保启用容器文件系统API,使用COS containerd 节点镜像变量,并参考 Artifact Registry 中托管的容器镜像。在用户界面中,只需勾选集群创建页面上的 "启用 image streaming "复选框。

或者是从 CLI 是创建 Image Streaming,方法如下:

  gcloud container clusters create CLUSTER_NAME \

    --region=COMPUTE_REGION \
    --image-type="COS_CONTAINERD" \
    --enable-image-streaming

还可以升级现有集群以通过 UI 或运行以下命令启用 Image Streaming :

gcloud container clusters update CLUSTER_NAME \
    --enable-image-streaming

然后从 Artifact Registry 引用映像部署工作负载。如果一切正常,容器会在“ContainerCreating”状态后大约一秒钟进入“Running”状态。

要验证 Image Streaming 是否按预期进行,可以运行以下命令:

$ kubectl get events

default    11s     Normal    ImageStreaming   node/gke-riptide-small-default-pool-27b7945d-k7mt Image us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5 is backed by image streaming.

在上面的示例输出中看到的 Image Streaming 事件表明此图像拉动已使用 Image Streaming 。

由于 Image Streaming 仅在图像完全下载到磁盘之前使用,因此需要在新节点上进行测试以查看完整效果。请记住,要获得 Image Streaming ,需要启用 API,在集群中打开图像流,使用 COS 容器图像,并从 Artifact Registry 引用图像。 Image Streaming 确实会在节点上引入额外的内存预留以提供缓存系统,这会减少这些节点上可用于工作负载的内存。

 http://www.cloud-ace.cn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值