镜像构建工具kaniko

一、前言

kaniko 是一种从容器内的 Dockerfile 构建容器映像的工具,kaniko 不依赖于 Docker 守护进程,使用kaniko可以避免用docker in docker去构建镜像,docker in docker需要使用到宿主机的docker.sock

二、kiniko使用

需要了解更多参考:GitHub - GoogleContainerTools/kaniko:在 Kubernetes 中构建容器镜像

创建命名空间

kubectl create ns kaniko

创建用于私有仓库验证的密钥

kubectl create secret docker-registry kaniko-secret --docker-server=https://harbor.xxx.com --docker-username=xxx --docker-password=xxx --namespace=kaniko

 在k8s node01工作节点创建dockerfile

mkdir /opt/kaniko/conf &&  cd /opt/kaniko/conf
vi dockerfile
FROM harbor.xxx.com/base_image/alpine_nginx:latest
ENV TZ="Asia/Shanghai" 
RUN cp /usr/share/zoneinfo/${TZ} /etc/localtime \
&& echo ${TZ} > /etc/timezone 
WORKDIR /usr/share/nginx/html
EXPOSE 80
ENTRYPOINT /usr/sbin/nginx -g "daemon off;"

  在k8s node01工作节点创建标签

kubectl label nodes k8s-node01 type=kaniko

 在master节点创建job yaml

mkdir /opt/kaniko && cd /opt/kaniko

vi job.yaml

apiVersion: batch/v1
kind: Job
metadata:
  name: kaniko
  namespace: kaniko
spec:
  backoffLimit: 3   #job执行失败后的重试次数,超过这个次数不会继续重试
  ttlSecondsAfterFinished: 10  #job任务执行完成后自动删除时间
  activeDeadlineSeconds: 300   #表示Pod运行时间.一旦达到这个时间,Job及其所有的Pod都会停止
  template:
    spec:
      hostAliases:           #配置域名解析
      - ip: "10.1.60.22"
        hostnames:
        - "harbor.xxx.com"
      nodeSelector:        #绑定到k8s-node01节点
        type: kaniko
      containers:
      - name: kaniko
        image: gcr.io/kaniko-project/executor:latest
        args: ["--dockerfile=/workspace/dockerfile",  # dockerfile文件位置
                "--context=dir:///workspace",  #构建上下文,(注意:不能全路径,只能是dockerfile所在目录的名称)
                "--destination=harbor.xxx.com/base_image/cs:1.0.1",  ##构建镜像以及上传
                "--skip-tls-verify"]    #报错x509加该项,跳过证书验证
        volumeMounts:
          - name: kaniko-secret
            mountPath: /kaniko/.docker
          - name: dockerfile-storage   #将dockerfile目录挂载到workspace目录
            mountPath: /workspace
      restartPolicy: Never
      volumes:
        - name: kaniko-secret    #挂载仓库密钥
          secret:
            secretName: kaniko-secret
            items:
              - key: .dockerconfigjson
                path: config.json
        - name: dockerfile-storage     #挂载本地dockerfile目录
          hostPath:
            path: "/opt/kaniko/conf"

 执行构建

kubectl apply -f job.yaml

容器任务执行完成后自动删除

查看私有仓库

镜像成功构建并被推送到私有仓库中

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值