当前位置: 首页 > Linux

Kaniko

时间:2023-04-06 06:54:20 Linux

介绍Kaniko,在Kubernetes中构建无权限镜像Kaniko是Google为在Kubernetes上构建无权限docker镜像而造的轮子之一。Kaniko不依赖Docker守护进程,而是完全在用户空间执行Dockerfile中的每条命令。这允许您在没有特权模式或运行Docker守护进程的环境中构建容器镜像(例如:Kubernetes集群)。Kaniko的工作原理传统的Docker构建是Dockerdaemon使用特权用户(root)根据Dockerfile在宿主机上依次执行,生成镜像的每一层。Kaniko的工作原理与此类似。Kaniko执行器获取并扩展基础镜像(在Dockerfile中的FROM行中定义),依次执行每条命令,并在每条命令执行后对文件系统进行快照。快照在用户空间中创建,并与内存中的先前状态进行比较。任何更改都将作为对基础镜像的修改,文件系统将在一个新的层次上扩展,任何修改都将写入镜像的元数据中。数据。Dockerfile中的每条命令执行完毕后,执行器将新生成的镜像推送到镜像仓库。Kaniko解压缩文件系统,执行命令,并在执行程序映像的用户空间中对文件系统进行快照。这就是Kaniko不需要特权访问的原因。以上操作不引入任何Docker守护进程或CLI操作。在Kubernetes中使用前提条件:需要一个正在运行的kubernetes集群创建一个Kubernetessecret,其中包含推送到镜像仓库所需的认证信息,解决目标registry认证问题。官方文档中的例子是添加一个kaniko-secret.json并将内容赋值给环境变量GOOGLE_APPLICATION_CREDENTIALS。如果您正在构建自己的注册表,则可以直接使用dockerconfig。$echo"{\"auths\":{\"registry.example.com\":{\"用户名\":\"用户名\",\"密码\":\"密码\"}}}">config.json$kubectlcreateconfigmapdocker-config--from-file=config.jsonconfigmap/docker-configcreated使用Pod构建apiVersion:v1kind:Podmetadata:name:kanikospec:containers:-name:kanikoimage:gcr.io/kaniko-project/executor:latestargs:["--dockerfile=<构建上下文中Dockerfile的路径>","--context=s3:///<.tar.gz的路径>","--destination="]volumeMounts:-name:docker-configmountPath:/kaniko/.docker/#当不使用实例角色时-name:aws-secretmountPath:/root/.aws/restartPolicy:Nevervolumes:-name:docker-configconfigMap:name:docker-config#当不使用实例角色时-name:aws-secretsecret:secretName:aws-secretKaniko一些构建参数构建参数解释--build-arg构建时传递ARG值,可以多次传递--cache设置缓存,true启用缓存--cache-repo指定缓存的远程仓库--cache-dir定义缓存目录--skip-tls-verify仓库地址为http时使用,不推荐生产使用--cleanup设置该标志可以在构建结束时清理文件系统--registry-mirror设置镜像仓库,默认index.docker。io参考链接https://github.com/GoogleCont...https://blog.csdn.net/M2l0ZgS...https://blog.ihypo.net/154874...本文由YP小站发表!