使用 kaniko 在 K8S 中构建镜像
背景
现有个需求需要在 K8S 中构建一个新的镜像,之前使用 docker 命令进行构建,后面 K8S 升级,容器运行时换成了 containerd,故查了一下网络,发现 kaniko 比较好用。所以测试记录一下~
项目地址:https://github.com/GoogleContainerTools/kaniko
测试例子一:
mkdir -p /data/yaml/default/kaniko && cd /data/yaml/default/kaniko
# 创建 secret 资源,用于上传镜像
kubectl create secret docker-registry devharbor --docker-server=devharbor.klvchen.com \
--docker-username=admin \
--docker-password=Harbor12345 \
--docker-email=chenwj@klvchen.com
# 创建 pod 资源
cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: kaniko
spec:
initContainers:
- name: init-dockerfile
image: busybox
command:
- /bin/sh
args:
- -c
- |
cat <<EOF > /workspace/dockerfile
FROM busybox
CMD while :;do echo $(date);sleep 1 ;done
EOF
cat /workspace/dockerfile
volumeMounts:
- name: dockerfile-storage
mountPath: /workspace
containers:
- name: kaniko
image: gcr.io/kaniko-project/executor:latest
args: ["--dockerfile=/workspace/dockerfile",
"--context=dir:///workspace",
"--destination=devharbor.klvchen.com/tmp/mytest:v0.1"]
volumeMounts:
- name: kaniko-secret
mountPath: /kaniko/.docker
- name: dockerfile-storage
mountPath: /workspace
restartPolicy: Never
volumes:
- name: kaniko-secret
secret:
secretName: devharbor
items:
- key: .dockerconfigjson
path: config.json
- name: dockerfile-storage
emptyDir: {}
kubectl apply -f pod.yaml
# 说明:
# 通过 initContainers 在 dockerfile-storage 中创建一个 dockerfile 与 containers 中进行共享
# --dockerfile=/workspace/dockerfile 用于指定 dockerfile 位置
# --context=dir:///workspace 用于指定上下文位置,注意这里是 ///
# --destination=devharbor.klvchen.com/tmp/mytest:v0.1 用于指定上传镜像仓库的地址
构建完成后变成 Completed 状态
检查镜像仓库
测试例子二:
cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: kaniko
spec:
initContainers:
- name: init-dockerfile
image: busybox
command:
- /bin/sh
args:
- -c
- |
cat <<EOF > /workspace/requirements.txt
fastapi==0.95.2
orjson==3.9.1
pydantic==1.10.8
SQLAlchemy==2.0.15
starlette==0.27.0
uvicorn==0.22.0
pymysql==1.0.3
asgiref==3.7.2
gurobipy==10.0.3
EOF
cat <<EOF > /workspace/dockerfile
FROM continuumio/miniconda3:23.3.1-0
WORKDIR /app_alg/
COPY ./requirements.txt /app_alg/
RUN pip install -r /app_alg/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
EXPOSE 8000
ENTRYPOINT [ "python", "main.py" ]
EOF
volumeMounts:
- name: dockerfile-storage
mountPath: /workspace
containers:
- name: kaniko
image: gcr.io/kaniko-project/executor:latest
args: ["--dockerfile=/workspace/dockerfile",
"--context=dir:///workspace",
"--destination=devharbor.klvchen.com/tmp/mytest:v0.4"]
volumeMounts:
- name: kaniko-secret
mountPath: /kaniko/.docker
- name: dockerfile-storage
mountPath: /workspace
restartPolicy: Never
volumes:
- name: kaniko-secret
secret:
secretName: devharbor
items:
- key: .dockerconfigjson
path: config.json
- name: dockerfile-storage
emptyDir: {}
kubectl apply -f pod.yaml
等等完成后可以看到镜像已经上传成功
因国内无法访问到 gcr.io/kaniko-project/executor:latest 所以做了一个共享,有需要的人可以下载
链接:https://pan.baidu.com/s/1vkzTY7sSc4pVlYdmpvjezA?pwd=z3wp
提取码:z3wp
其他用法参考项目地址
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2018-10-19 Harbor api 操作