企业运维实践-丢弃手中的 docker build , 使用Kaniko直接在Kubernetes集群 ...

打印 上一主题 下一主题

主题 894|帖子 894|积分 2682

关注「WeiyiGeek」公众号
设为「特别关注」每天带你玩转网络安全运维、应用开发、物联网IOT学习!
希望各位看友【关注、点赞、评论、收藏、投币】,助力每一个梦想。

本章目录

目录

首发地址: https://mp.weixin.qq.com/s/wchtH6i0xKrIrqSuYKmWkg
原文地址: https://blog.weiyigeek.top/2022/9-1-684.html
0x00 前言简述

快速介绍

什么是Kaniko?

kaniko 是一个在容器或 Kubernetes 集群内从 Dockerfile 构建容器镜像的工具 ( Build Container Images In Kubernetes )。

温馨提示: kaniko不是谷歌官方发布支持的产品.
为啥用Kaniko?

由于 kaniko 不依赖于 Docker 守护进程,并且完全在用户空间中执行 Dockerfile 中的每个命令,这使得能够在轻松或安全地运行在无Docker守护程序的环境(如标准Kubernetes集群 V1.24.x)中构建容器映像。
在 Kubernetes V1.24.x 版本之后默认采用 containerd.io 作为缺省的cri,不在支持 docker-shim 意味着我们不需要安装 docker 环境
Kaniko 是如何工作的?

kaniko 执行器镜像负责从 Dockerfile 构建镜像并将其推送到注册表,其流程大致如下:

  • 首先在执行者图像中,我们提取基础镜像的文件系统(Dockerfile 中的 FROM 镜像)。
  • 其次我们执行 Dockerfile 中的命令,之后在用户空间中对文件系统进行快照每一个。
  • 然后在每个命令之后,我们将一层更改的文件附加到基础 图像(如果有)并更新图像元数据。
Kaniko 已知功能问题


  • kaniko 不支持构建 Windows 容器。
  • kaniko 不支持 v1 Registry API。(由于其不安全性当前基本都是使用V2协议, 例如 Harbor)
  • kaniko 不支持在除官方kaniko映像之外的任何Docker映像中运行二进制Kanico可执行文件(即YMMV)。
kaniko 构建上下文

描述: kaniko 的构建上下文与您发送 Docker 守护程序以进行映像构建的构建上下文非常相似;它代表一个包含 Dockerfile 的目录,kaniko 将使用它来构建您的图像。
例如, Dockerfile 中的 COPY 命令应该引用构建上下文中的文件, 所以您需要将构建上下文存储在 kaniko 可以访问的位置。
目前kaniko 支持以下存储解决方案:

  • GCS Bucket
  • S3 Bucket
  • Azure Blob Storage
  • Local Directory
  • Local Tar
  • Standard Input
  • Git Repository
运行 kaniko 时,使用 --context 带有适当前缀的标志指定构建上下文的位置, 如果您不指定前缀 kaniko 将假定一个本地目录, 该参数可用值:
SourcePrefixExampleLocal Directorydir://[path to a directory in the kaniko container]dir:///workspaceLocal Tar Gztar://[path to a .tar.gz in the kaniko container]tar://path/to/context.tar.gzStandard Inputtar://[stdin]tar://stdinGCS Bucketgs://[bucket name]/[path to .tar.gz]gs://kaniko-bucket/path/to/context.tar.gzS3 Buckets3://[bucket name]/[path to .tar.gz]s3://kaniko-bucket/path/to/context.tar.gzAzure Blob Storagehttps://[account].[azureblobhostsuffix]/[container]/[path to .tar.gz]https://myaccount.blob.core.windows.net/container/path/to/context.tar.gzGit Repositorygit://[repository url][#reference][#commit-id]git://github.com/acme/myproject.git#refs/heads/mybranch#例如,要使用名为 kaniko-bucket 的 GCS 存储桶,您需要传入 --context=gs://kaniko-bucket/path/to/context.tar.gz 。
温馨提示:kaniko 允许的唯一标准输入是 .tar.gz 格式, 如果要创建压缩 tar,您可以运行 tar -C  -zcvf context.tar.gz .命令。
  1. $ ls cache/
  2. Dockerfile
  3. # 压缩上下文目录
  4. $ tar -C cache/ -zcvf context.tar.gz .
  5. ./
  6. ./Dockerfile
  7. # 查看压缩文件
  8. $ tar -ztvf context.tar.gz
  9. drwxr-xr-x root/root         0 2022-09-08 23:03 ./
  10. -rw-r--r-- root/root        52 2022-09-08 23:04 ./Dockerfile
复制代码
kaniko 缓存构建


  • Caching Layers :kaniko 可以在远程存储库中缓存由RUN(由flag--cache-RUN-layers配置)和COPY(由flag--cache-COPY-layeers配置)命令创建的层。
    在执行命令之前 kaniko 会检查层的缓存,如果存在 kaniko将拉取并提取缓存层,而不是执行命令。如果没有 kaniko将执行命令,然后将新创建的层推送到缓存。
    用户可以通过设置 --cache=true 标志选择缓存,并且可以通过--cache-repo 标志提供用于存储缓存层的远程存储库, 如果未提供此标志则将从提供的--destination推断缓存的repo。
    温馨提示: 在缓存未命中后,kaniko无法从缓存中找到读取层,所有后续层都将在本地构建,而无需咨询缓存。

  • Caching Base Images: kaniko 可以将图像缓存在本地目录中,该目录可以卷装载到KanikoPod中。为此必须首先填充缓存, 我们在 gcr.io/kaniko-project/warmer 提供了一个kaniko缓存预热映像:
    --image : 指定所需任意数量的图像, 填充缓存后 使用与上述相同的 --cache=true 标志选择缓存, 本地缓存的位置通过 --cache-dir 标志提供,默认为 /cache 与缓存预热器一样, 在实践中通常与 Kubernetes 集群和持久缓存卷一起使用。
    示例: docker run -v $(pwd):/workspace gcr.io/kaniko-project/warmer:latest --cache-dir=/workspace/cache --image= --image=

0x01 部署使用

环境依赖


  • kaniko 图像镜像
  • 一个 Kubernetes 集群 或者 一个 Containerd 容器运行环境。
  • 一个 dockerhub 帐户 用于将构建的图像公开。

小试牛刀之在Kubernetes集群中构建并发布镜像

描述: 此处我们准备在一个K8S集群中使用kaniko提供的镜像,按照提供的Dockerfile指令进行镜像构建,并上传到 docker hub 仓库中,以下为操作流程、
操作流程
步骤 01.首先, 为了加快构建速度, 我们提前在集群中拉取 gcr.io/kaniko-project/executor 镜像到本地, 由于国内无法直接拉取此处我采用这篇【使用Aliyun容器镜像服务对海外gcr、quay仓库镜像进行镜像拉取构建】 文章中的方法进行拉取构建国外gcr.io仓库中的镜像。
  1. # 此处我已经创建了国内可以访问拉取的 executor 镜像, 不想在Aliyun容器镜像服务中进行创建拉取的朋友可以直接使用如下仓库地址。
  2. registry.cn-hangzhou.aliyuncs.com/weiyigeek/kaniko-executor:latest
  3. # 使用 ctr 或者 crictl 进行镜像拉取
  4. $ crictl pull registry.cn-hangzhou.aliyuncs.com/weiyigeek/kaniko-executor:latest
  5. $ crictl images | grep "kaniko-executor"
  6. registry.cn-hangzhou.aliyuncs.com/weiyigeek/kaniko-executor  latest  da9592dbe1de3   25.8MB
复制代码
步骤 02.准备一个 Dockerfile 此处将 registry.cn-hangzhou.aliyuncs.com/weiyigeek/kaniko-executor 镜像打包上传到hub中作为演示。
[code]# 创建存放dockerfile目录以及持久化缓存目录mkdir -vp /storage/dev/soft/kaniko/{cache,demo}cd /storage/dev/soft/kaniko/demotee dockerfile

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

三尺非寒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表