前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >无需特权在Kubernetes中构建镜像之 Kaniko

无需特权在Kubernetes中构建镜像之 Kaniko

作者头像
YP小站
发布2020-06-04 15:50:52
2K0
发布2020-06-04 15:50:52
举报
文章被收录于专栏:YP小站

Kaniko 简介

Kaniko 是 Google 造的轮子之一,用于在 Kubernetes 上无需特权模式构建 docker image

Kaniko 不依赖Docker daemon守护程序,而是完全在userspace中执行Dockerfile中的每个命令。这使您可以在没有特权模式或没有运行Docker daemon的环境(例如:Kubernetes集群)中构建容器镜像。

Kaniko 工作原理

传统的 Docker build 是 Docker daemon 根据 Dockerfile,使用特权用户(root)在宿主机依次执行,并生成镜像的每一层。

Kaniko 工作原理和此类似,Kaniko 执行器获取并展开基础镜像(在Dockerfile中FROM一行定义),按顺序执行每条命令,每条命令执行完毕后为文件系统做快照。快照是在用户空间创建,并与内存中存在的上一个状态进行对比,任何改变都会作为对基础镜像的修改,并以新层级对文件系统进行增加扩充,并将任何修改都写入镜像的元数据中。当Dockerfile中每条命令都执行完毕后,执行器将新生成的镜像推送到镜像仓库中。

Kaniko 解压文件系统,执行命令,在执行器镜像的用户空间中对文件系统做快照,这都是为什么Kaniko不需要特权访问的原因,以上操作中没有引入任何 Docker daemon 进程或者 CLI 操作。

在 Kubernetes 中使用

前提条件

  • 需要一个运行的 kubernetes 集群
  • 需要创建一个 Kubernetes secret,其中包含推送到镜像仓库所需的身份验证信息

解决目标 registry 认证问题,官方文档中的样例是通过添加一个 kaniko-secret.json 并把内容赋值给 GOOGLE_APPLICATION_CREDENTIALS 这个环境变量,如果是自建 registry 可以直接使用 docker config

代码语言:javascript
复制
$ echo "{\"auths\":{\"registry.example.com\":{\"username\":\"username\",\"password\":\"password\"}}}" > config.json

$ kubectl create configmap docker-config --from-file=config.json

configmap/docker-config created

使用 Pod 构建

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: kaniko
spec:
  containers:
  - name: kaniko
    image: gcr.io/kaniko-project/executor:latest
    args: ["--dockerfile=<path to Dockerfile within the build context>",
            "--context=s3://<bucket name>/<path to .tar.gz>",
            "--destination=<aws_account_id.dkr.ecr.region.amazonaws.com/my-repository:my-tag>"]
    volumeMounts:
      - name: docker-config
        mountPath: /kaniko/.docker/
      # when not using instance role
      - name: aws-secret
        mountPath: /root/.aws/
  restartPolicy: Never
  volumes:
    - name: docker-config
      configMap:
        name: docker-config
    # when not using instance role
    - name: aws-secret
      secret:
        secretName: aws-secret

Kaniko 一些构建参数

代码语言:javascript
复制
构建时传递ARG值,可以多次传递

参考链接

  • https://github.com/GoogleContainerTools/kaniko
  • https://blog.csdn.net/M2l0ZgSsVc7r69eFdTj/article/details/80014492
  • https://blog.ihypo.net/15487483292659.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 YP小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Kaniko 简介
  • Kaniko 工作原理
  • 在 Kubernetes 中使用
  • Kaniko 一些构建参数
  • 参考链接
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档