CI/CD

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

2021-02-08  本文已影响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

六,制作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

七,成功的输出

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

上一篇 下一篇

猜你喜欢

热点阅读