kaniko 是从容器或 Kubernetes 集群内部的Dockerfile构建容器映像的工具。
kaniko 不依赖 Docker守护程序,而是完全在用户空间中执行 Dockerfile 中的每个命令。这样就可以在无法轻松或安全地运行Docker守护程序的环境(例如标准Kubernetes集群)中构建容器映像。
角色 | IP |
---|---|
master | 192.168.11.128 |
node1 | 192.168.11.129 |
node2 | 192.168.11.130 |
一、入门测试实验
一、先决条件
1、Kubernetes集群
2、映像仓库
二、准备本地安装目录
1、SSH进入集群,并创建一个本地目录
ssh 192.168.11.129
mkdir /root/kaniko
ssh 192.168.11.130
mkdir /root/kaniko
2、在各node节点创建dockerfile
node1 节点:
ssh 192.168.11.129
cat > dockerfile <<EOF
FROM library/ubuntu
ENTRYPOINT ["/bin/bash", "-c", "echo hello"]
EOF
node2 节点:
ssh 192.168.11.130
cat > dockerfile <<EOF
FROM library/ubuntu
ENTRYPOINT ["/bin/bash", "-c", "echo hello"]
EOF
三、创建镜像的私仓认证
kubectl create secret docker-registry docek-harbor --docker-server=https://192.168.11.128:4430 --docker-username=admin --docker-password=Harbor12345 --docker-email=2216170240@qq.com
四、准备kaniko的配置文件
1、书写持久卷pv的资源清单
vim 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 #绝对路径
2、书写持久卷pvc的资源清单
vim volume-claim.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: dockerfile-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: local-storage #指定所使用的存储储类名称
3、书写Pod的资源清单
vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: kaniko
spec:
containers:
- name: kaniko
image: registry.cn-hangzhou.aliyuncs.com/shenshouer/tektoncd-executor:latest
args: ["--dockerfile=/workspace/dockerfile", #dockerfile存在目录
"--context=/workspace", #本地目录
"--skip-tls-verify=true", #设置此标志可在推送到注册表时跳过TLS证书验证。它应该仅用于测试目的,不应在生产中使用
"--destination=192.168.11.128:4430/library/test:latest" ] #打包后的镜像
volumeMounts:
- name: kaniko-secret #与volumes名称相同
mountPath: /kaniko/.docker #/kaniko/.docker目录下生成config.json文件(私仓镜像仓库认证文件)
- name: dockerfile-storage #与volumes名称相同
mountPath: /workspace #相当于node节点的/root/kaniko/dockerfile文件挂载在/workspace目录下
restartPolicy: Never
volumes:
- name: kaniko-secret #与volumeMounts名称相同
secret:
secretName: docek-harbor #私仓镜像仓库认证
items:
- key: .dockerconfigjson #secret名称中的对应键
path: config.json #生成对应的目标路径
- name: dockerfile-storage #与volumeMounts名称相同
persistentVolumeClaim:
claimName: dockerfile-claim #pvc的名称
4、生成资源清单
kubectl apply -f volume.yaml -f volume-claim.yaml -f pod.yaml
kubectl logs kaniko -f
五、验证
1、登录harbor私仓查看镜像
可测试镜像,使用范围使用jenkins部署打包镜像,需要的使用拉取此kaniko镜像 协助打包并上传镜像到私有仓库。 打包完毕镜像杀死保证资源的利用率