22、软件从开发到运行的全流程实践

软件全生命周期部署实践

软件从开发到运行的全流程实践

1. 将软件转换为可运行形式

1.1 始终使用摘要

在容器化的世界里,将源代码转换为容器镜像时,使用摘要(digest)至关重要。容器镜像本质上是一堆用 JSON 粘合在一起的 tarball。当将服务交给 Knative 运行时,它会委托给 Kubernetes,Kubernetes 再委托给 kubelet 代理,最终由容器运行时(如 containerd)来真正运行软件。

容器运行时最重要的输入是要运行的容器镜像的引用。然而,传统的镜像引用(如标签)存在诸多问题。例如,标签是可变的,不同的容器运行时对同一标签可能指向不同的镜像,而且不同的名称可能指向相同的镜像,但容器运行时会认为它们不同。这就导致了在缓存和拉取镜像时出现不一致的情况。

Kubernetes 引入了 imagePullPolicy 配置项,包括 Never IfNotPresent Always ,但这些都不能完全解决问题。 IfNotPresent 会导致集群中存在同一镜像的多个版本,而 Always 虽然每次都会拉取镜像,但在容器长时间运行和不同节点启动时仍可能出现版本不一致的问题,并且无法利用缓存。

解决这个问题的唯一方法是使用完全限定(即包含摘要)的镜像引用,如 @sha256:abcdef123… 。这种引用是不可变且精确的,基于镜像本身的字节内容,无论何时都指向同一个容器镜像。

对于使用原生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值