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

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
函数计算FC,每月15万CU 3个月
简介: 本文介绍了一种新的面向开发者的简单镜像构建实践,基于阿里云Serverless Kubernetes容器服务,可以自动化而且低成本的构建容器镜像,以便让开发者了解如何使用Serverless运行CI/CD和自动化任务。

前言:

在云原生时代中,容器镜像是一切应用分发的基础载体,除了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部署的方式相比显著减少。

image

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。

image

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

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

步骤1: 创建Serverless Kubernetes集群

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

image

步骤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: builder
            image: gcr.io/kaniko-project/executor:latest
            imagePullPolicy: Always
            args:
            - "--dockerfile=/configs/Dockerfile"
            - "--destination=registry.cn-hangzhou.aliyuncs.com/jovizhangwei/busybox:latest"
            volumeMounts:
            - name: dockerfile
              readOnly: true
              mountPath: "/configs/"
            - name: secrets
              readOnly: true
              mountPath: "/root/.docker/"
          volumes:
          - name: dockerfile
            configMap:
              name: dockerfile-cm
          - name: secrets
            secret:
              secretName: regsecret
          restartPolicy: OnFailure

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

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

结束

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

image

Happy Hacking!

更多参考信息

  1. Serverless Kubernetes快速部署jenkins环境及执行流水线构建: https://yq.aliyun.com/articles/685219
  2. kaniko intro:https://cloud.google.com/blog/products/gcp/introducing-kaniko-build-container-images-in-kubernetes-and-google-container-builder-even-without-root-access
相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
17天前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
25天前
|
Kubernetes 监控 Serverless
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
|
2月前
|
人工智能
LangGraph:构建多代理动态工作流的开源框架,支持人工干预、循环、持久性等复杂工作流自动化
LangGraph 是一个基于图结构的开源框架,专为构建状态化、多代理系统设计,支持循环、持久性和人工干预,适用于复杂的工作流自动化。
215 12
LangGraph:构建多代理动态工作流的开源框架,支持人工干预、循环、持久性等复杂工作流自动化
|
3月前
|
人工智能 自然语言处理 JavaScript
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
Agent-E 是一个基于 AutoGen 代理框架构建的智能自动化系统,专注于浏览器内的自动化操作。它能够执行多种复杂任务,如填写表单、搜索和排序电商产品、定位网页内容等,从而提高在线效率,减少重复劳动。本文将详细介绍 Agent-E 的功能、技术原理以及如何运行该系统。
361 5
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
|
3月前
|
Serverless 决策智能 UED
构建全天候自动化智能导购助手:从部署者的视角审视Multi-Agent架构解决方案
在构建基于多代理系统(Multi-Agent System, MAS)的智能导购助手过程中,作为部署者,我体验到了从初步接触到深入理解再到实际应用的一系列步骤。整个部署过程得到了充分的引导和支持,文档详尽全面,使得部署顺利完成,未遇到明显的报错或异常情况。尽管初次尝试时对某些复杂配置环节需反复确认,但整体流程顺畅。
|
3月前
|
缓存 监控 安全
公司电脑监控软件的 Gradle 构建自动化优势
在数字化办公环境中,公司电脑监控软件面临代码更新频繁、依赖管理和构建复杂等挑战。Gradle 构建自动化工具以其强大的依赖管理、灵活的构建脚本定制及高效的构建缓存与增量构建特性,显著提升了软件开发效率和质量,支持软件的持续更新与优化,满足企业对员工电脑使用情况的监控与管理需求。
61 3
|
3月前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
81 5
|
2月前
|
人工智能 运维 物联网
云大使 X 函数计算 FC 专属活动上线!享返佣,一键打造 AI 应用
如今,AI 技术已经成为推动业务创新和增长的重要力量。但对于许多企业和开发者来说,如何高效、便捷地部署和管理 AI 应用仍然是一个挑战。阿里云函数计算 FC 以其免运维的特点,大大降低了 AI 应用部署的复杂性。用户无需担心底层资源的管理和运维问题,可以专注于应用的创新和开发,并且用户可以通过一键部署功能,迅速将 AI 大模型部署到云端,实现快速上线和迭代。函数计算目前推出了多种规格的云资源优惠套餐,用户可以根据实际需求灵活选择。
|
21天前
|
人工智能 运维 架构师
Serverless + AI 让应用开发更简单,加速应用智能化
Serverless + AI 让应用开发更简单,加速应用智能化
|
1月前
|
机器学习/深度学习 分布式计算 大数据
阿里云 EMR Serverless Spark 在微财机器学习场景下的应用
面对机器学习场景下的训练瓶颈,微财选择基于阿里云 EMR Serverless Spark 建立数据平台。通过 EMR Serverless Spark,微财突破了单机训练使用的数据规模瓶颈,大幅提升了训练效率,解决了存算分离架构下 Shuffle 稳定性和性能困扰,为智能风控等业务提供了强有力的技术支撑。
159 15

相关产品

  • 函数计算