利用Serverless Kubernetes和Kaniko快速自动化构建容器镜像

前言:

在云原生时代中,容器镜像是一切应用分发的基础载体,除了dockerhub作为流行的镜像仓库外,各大公有云厂商也都提供了功能丰富镜像仓库服务,如ACR(Aliyun Container Registry), GCR(Goolge Container Registry),构建容器镜像已是所有开发者必须掌握的基础实践能力。

无论开发者选择在本地使用docker完成基本的镜像构建,还是使用CI/CD服务(如Jenkins),本质上都是遵循“pull -> build -> push”的过程,完成镜像的构建、分发和同步等操作。

本文介绍了一种新的面向开发者的简单镜像构建实践,基于阿里云Serverless Kubernetes容器服务,可以自动化而且低成本的构建容器镜像,以便让开发者了解如何使用Serverless运行CI/CD和自动化任务。

why serverless kubernetes?

容器镜像的构建是需要计算资源的,开发者在本地使用docker pull/build/push时,其计算资源是本地开发机器,如果开发者在传统kubernetes集群中部署Jenkins或Gitlab-runner服务,其计算资源也是需要持续运行。但是,容器镜像的构建基本属于高度动态的行为,往往是定时或者条件触发引起的操作,所以为了动态的构建操作而维护一个固定的计算资源池对成本是不利的。

Serverless Kubernetes不同与传统基于节点的k8s集群,serverless集群中只有pod运行时才会收费,意味着只有在构建镜像时用户才需要付费,当构建结束时,也就停止计费。所以在成本上与传统k8s集群或ecs部署的方式相比显著减少。

Kaniko

在Serverless Kubernetes集群中,pod没有privileged权限,无法访问主机上的docker daemon,也就无法使用docker in docker方案进行镜像的操作,那么如何在kubernetes集群中不依赖宿主机的Docker情况下构建镜像呢?显然这是一个通用需求,社区也有了推荐的方案:kaniko。

kaniko的工作原理与docker build类似,但是不依赖docker daemon,在pod中完成Dockfile各层的解析和build,这使得pod不需要privileged权限也可以完成镜像的pull/build/push。

实践示例:定时同步容器镜像

下面让我们使用Serverless Kubernetes和Kaniko实现一个简单的镜像build实验:定时同步镜像到国内ACR。

步骤1: 创建Serverless Kubernetes集群

登陆容器服务控制台, 5s即可完成Serverless集群创建。(如果是国外的源镜像仓库,可以选择美西区域)

步骤2: 创建secret,配置ACR的用户名密码,用于推送镜像到ACR

可登陆cloudshell操作如下命令。

#docker login registry.cn-hangzhou.aliyuncs.com
...
#kubectl create secret generic regsecret --from-file=/root/.docker/config.json
...

步骤3: 创建定时任务CronJob

在控制台选择模版创建如下定时任务,每小时同步busybox镜像到ACR。

apiVersion: v1
kind: ConfigMap
metadata:name: dockerfile-cm
data:Dockerfile: |FROM busybox:latest
---
apiVersion: batch/v1beta1
kind: CronJob
metadata:name: kaniko-builder
spec:schedule: "*/60 * * * *"jobTemplate:spec:template:spec:containers:- name: builderimage: gcr.io/kaniko-project/executor:latestimagePullPolicy: Alwaysargs:- "--dockerfile=/configs/Dockerfile"- "--destination=registry.cn-hangzhou.aliyuncs.com/jovizhangwei/busybox:latest"volumeMounts:- name: dockerfilereadOnly: truemountPath: "/configs/"- name: secretsreadOnly: truemountPath: "/root/.docker/"volumes:- name: dockerfileconfigMap:name: dockerfile-cm- name: secretssecret:secretName: regsecretrestartPolicy: OnFailure

待job执行后,可查看ACR镜像仓库,确认镜像已同步。

用户可以按照需求定制此模版文件,比如修改需要同步的镜像,添加build步骤等,也可以设置pod的资源限制(vcpu 0.25/0.5/1等), 以最小的计算成本完成同步任务。

结束

通过上面的示例,我们看到基于Serverless Kubernetes的按需付费特性,可以使用很低的成本运行一些定时和CI/CD任务,而不用维护一个固定的计算资源池,其同样适用于压力测试、数据计算、工作流处理等其他场景。

Happy Hacking!


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020边缘计算状态报告:2028年企业IT基础设施边缘支出将达87亿美元

近日,知名市场研究机构State of the Edge发布了2020年最新的对边缘计算领域的研究报告——《边缘计算状态报告2020》(以下简称“报告”)。“边缘化”是指人或事物从中心和主流位置向“非中心”、“非主流”方向移动。而本次报告指出&#xff…

想提升微服务容错性?试试这5种模式

作者 | Igor Perikov译者 | 陆离责编 | 徐威龙出品 | CSDN云计算(ID:CSDNcloud) 在本文中,我将介绍微服务中的几种容错机制及其实现的方法。如果你在维基百科上查找“容错性”,你将会发现有如下的定义:“容…

21世纪了还愚公移山?数据库这么迁移更稳定!

背景 在系统的快速迭代过程中,业务系统往往部署在同一个物理库,没有做核心数据和非核心数据的物理隔离。随着数据量的扩大这种情况会带来稳定性的风险,如库的慢sql,磁盘,IO等等都会相互整体影响,从而影响核…

Oracle 创建表空间、用户、权限_(plsql)

背景:企业内部oracle数据库日常oracle表空间、用户、权限操作 文章目录1. 使用dba用户登录plsql2. 创建表空间3. 创建用户4. 赋予用户权限5. 验证6. 完整脚本1. 使用dba用户登录plsql 2. 创建表空间 -- 创建表空间设置表空间大小 CREATE TABLESPACE fisknow DATAFI…

2019五个最棒的机器学习课程

凭借强大的统计学基础,机器学习正在成为最有趣,节奏最快的计算机科学领域之一,目前已经有无穷无尽的行业和应用正在使用机器学习使它们更高效和智能。 聊天机器人、垃圾邮件过滤、广告投放、搜索引擎和欺诈检测是机器学习模型正在实际应用于…

“天河二号”总工程师杜云飞谈星光超算应用平台设计

整理 | 夕颜出品 | AI科技大本营(ID:rgznai100)【导读】12 月 21-22 日,OpenI/O 启智开发者大会在深圳召开。在大会上, 国家超级计算广州中心总工程师、“天河二号”总工程师杜云飞发表了题为《星光超算应用平台》的主题报告&…

蚂蚁金服开源 SOFAJRaft:生产级 Java Raft 算法库

什么是 SOFAJRaft? SOFAJRaft 是一个基于 Raft 一致性算法的生产级高性能 Java 实现,支持 MULTI-RAFT-GROUP,适用于高负载低延迟的场景。 使用 SOFAJRaft 你可以专注于自己的业务领域,由 SOFAJRaft 负责处理所有与 Raft 相关的技…

如何在mysql查询结果集中得到记录行号_获取MySQL查询结果集中记录行号的方法...

如果需要在查询语句返回的列中包括一列以指示整个结果集中记录的行号,则ISO SQL: 2003标准建议的方法是提供ROW_NUMBER()/ RANK()函数. Oracle可以使用标准方法(版本8i或更高版本)或非标准ROWNUM. MS SQL Server在2005版中提供了ROW_NUMBER()函数. 但是在MySQL中似乎…

开发者必看!探秘阿里云Hi购季开发者分会场:海量学习资源0元起!

2019阿里云云上Hi购季活动已经于2月25日正式开启,从已开放的活动页面来看,活动分为三个阶段: 2月25日-3月04日的活动报名阶段、3月04日-3月16日的新购满返5折抢购阶段、3月16日-3月31日的续费抽豪礼5折抢购阶段。 活动核心亮点:…

疫情严重,潜伏期也有传染性?科技公司在行动

整理 | 阿司匹林出品 | CSDN云计算新型冠状病毒的感染人数仍在不断增加。根据1月26日的最新数据,全国新型冠状病毒感染的肺炎确诊2005例,疑似2684例,死亡56例。据央视报道,国家卫生健康委员会主任马晓伟在国新办新闻发布会上表示&…

python方法定义..._解析Python类中的方法定义

最近在学习类过程中,绑定方法这个概念没有理解透彻,所以在网上找了很多相关博客、文章研究到底是怎么一回事。因为有的文章所陈述与我在python3.5版本实际实验中有些出入,所以经过实践后总结出以下结论。对于Python类中,方法的定义…

阿里巴巴复杂搜索系统的可靠性优化之路

背景 搜索引擎是电商平台成交链路的核心环节,搜索引擎的高可用直接影响成交效率。闲鱼搜索引擎作为闲鱼关键系统,复杂度和系统体量都非常高,再加上闲鱼所有导购场景都依靠搜索赋能,搜索服务的稳定可靠成为了闲鱼大部分业务场景可…

Kubernetes 将何去何从?

戳蓝字“CSDN云计算”关注我们哦!作者 | Kevin Casey译者 | 弯月责编 | 唐小引封图 | CSDN 付费自图虫创意出品 | CSDN 云计算(ID:CSDNcloud)【导读】随着越来越多的人开始使用 Kubernetes,IT 领导者对新的一年有哪些期…

活体检测很复杂?仅使用opencv就能实现!(附源码)

什么是活体检测,为什么需要它? 随着时代的发展,人脸识别系统的应用也正变得比以往任何时候都更加普遍。从智能手机上的人脸识别解锁、到人脸识别打卡、门禁系统等,人脸识别系统正在各行各业得到应用。然而,人脸识别系…

Pod在多可用区worker节点上的高可用部署

一、 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可用区,已达到高可用或者同…

揭秘:蚂蚁金服bPaaS究竟是什么?

去年9月,蚂蚁金服在杭州云栖ATEC发布了分布式金融核心套件bPaaS( Business Platform As a Service ),对外开放自身沉淀的“产品合约”、“资产交换”、“资产核心”、“会计核算”、“计价” 等金融核心组件,而这款号称…

云计算的 2020:云原生崛起,重新定义软件!

戳蓝字“CSDN云计算”关注我们哦!作者 | Ashish Sukhadeve译者 | 弯月责编 | 唐小引封图 | CSDN 付费自图虫创意出品 | CSDN 云计算(ID:CSDNcloud)随着 2006 年末 AWS S3 数据存储的问世,云计算发展成为了 IT 行业的三…

用PL/SQL Develpoer工具完成导入和导出

文章目录一、用PL/SQL Develpoer工具完成导入导出1. 导出2. 导入3. 补充前言:首先,我们导入导出数据,肯定是要通过oracle自带的可运行程序来完成数据的导入导出工作,imp.exe 和exp.exe这两个可运行文件都放在oracle安装目录下的BI…

关于Paxos 幽灵复现问题的看法

由于郁白之前写的关于Multi-Paxos 的文章流传非常广, 原文提出了一个叫"幽灵复现" 的问题, 认为这个是一个很诡异的问题, 后续和很多人交流关于一致性协议的时候, 也经常会提起这个问题, 但是其实这个问题我认为就是常见的"第三态"问题加了一层包装而已. …

idea spring boot 修改 html,js 等不用重启即时生效

1、【File】-【Settings】-【Build,Execution,Deplyment】-【Compiler】,选中打勾 Build project automatically 2、 组合键:ShiftCtrlAlt/,选择 Registry ,选中打勾 compiler.automake.allow.when.app.running” 3、找到你要运…