美文网首页CI/CD
tekton从入门到跑路-3-单独运行kaniko

tekton从入门到跑路-3-单独运行kaniko

作者: 万州客 | 来源:发表于2021-02-08 16:28 被阅读0次

    tekton里镜像的生成和push,都是使用的kaniko,而不建议绑定docker.sock的方式。
    kaniko 是从容器或 Kubernetes 集群内部的Dockerfile构建容器映像的工具。
    kaniko 不依赖 Docker守护程序,而是完全在用户空间中执行 Dockerfile 中的每个命令。这样就可以在无法轻松或安全地运行Docker守护程序的环境(例如标准Kubernetes集群)中构建容器映像。

    参考URL:
    https://blog.csdn.net/qq_37377136/article/details/110096219

    一,kaniko镜像获取

    由于kaniko是google开源的项目,项目放在gcr.io上,不能访问。于是我包装了一下,使用如下镜像:
    docker pull aguncn/kaniko-executor:v1.3.0

    二,在本地建共享目录

    此目录用于存放dockerfile文件,也用来作为pvc,相当于tekton中的workspace。相当于不用从git拉代码,直接在此目录按dockerfile生成image。
    mkdir /root/kaniko

    三,将此本地目录挂载成k8s中的pvc资源

    volume.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: dockerfile
      labels:
        type: local
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      storageClassName: local-storage
      hostPath:
        path: /root/kaniko
    

    volume-claim.yaml

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: dockerfile-claim
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      storageClassName: local-storage
    

    就这样,我们就拥有了一个k8s上可用的存储

    四,制作dockerfile

    在/root/kaniko目录下生成一个Dockerfile

    FROM 3rd_part/alpine:3.7-bash-glibc
    ENTRYPOINT ["/bin/sh", "-c", "echo 'hello kaniko'"]
    

    五,制作一个harbor登陆证书,在kaniko推送的时候需要

    kubectl create secret docker-registry docker-harbor --docker-server=http://demo.com.cn:8086 --docker-username=admin --docker-password=xxxxx --docker-email=cg@demo.com

    • 其实,我在这里是有疑惑的,如果Dockerfile里是从一个需要认证的harbor里获取基础镜像,经过加工后,生成一个镜像,需要推上另一个需要认证的harbor镜像,那这种情况下,应该如何定义多个secret呢?

    六,制作POD文件

    pod.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: kaniko
    spec:
      containers:
      - name: kaniko
        image: aguncn/kaniko-executor:v1.3.0
        env:
        - name: "DOCKER_CONFIG"
          value: "/tekton/home/.docker/"
        command:
        - /kaniko/executor
        args:
        - --insecure-pull
        - --dockerfile=/workspace/Dockerfile
        - --context=/workspace
        - --insecure
        - --destination=demo.com.cn:8086/3rd_part/alpine:3.7-kaniko
        volumeMounts:
        - name: kaniko-secret
          mountPath: /tekton/home/.docker
        - name: dockerfile-storage
          mountPath: /workspace
      restartPolicy: Never
      volumes:
      - name: kaniko-secret
        secret:
          secretName: docker-harbor
          items:
          - key: .dockerconfigjson
            path: config.json
      - name: dockerfile-storage
        persistentVolumeClaim:
          claimName: dockerfile-claim
    
    • 其中无疑args下的参数,是主要调试对象。
    • 由于我将两边的harbor都关闭了验证,都是公开项目,所以没有验证登陆。

    七,成功的输出

    kubectl get pod

    NAME     READY   STATUS      RESTARTS   AGE
    kaniko   0/1     Completed   0          11m
    

    八,小小遗憾:

    最终是生成了镜像,但我先屏蔽了所有的认证,都是在harbor中以公开项目的形式玩的。
    这个之后要细节化。
    还有就是搞不明白,内网harbor的pull也是这么慢,肯定哪里配置出了问题。
    https://blog.csdn.net/u012803274/article/details/110506601

    https://my.oschina.net/cncf/blog/4813124

    相关文章

      网友评论

        本文标题:tekton从入门到跑路-3-单独运行kaniko

        本文链接:https://www.haomeiwen.com/subject/ohffxltx.html