首页 > 其他分享 >使用 kaniko 在 K8S 中构建镜像

使用 kaniko 在 K8S 中构建镜像

时间:2023-10-19 11:58:46浏览次数:38  
标签:name -- kaniko secret workspace 镜像 K8S dockerfile

背景

现有个需求需要在 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 \
[email protected]

# 创建 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

其他用法参考项目地址

标签:name,--,kaniko,secret,workspace,镜像,K8S,dockerfile
From: https://www.cnblogs.com/klvchen/p/17774341.html

相关文章

  • kubeadm安装k8s集群
    kubeadm安装k8s集群一、机器准备(所有的master和node节点需要执行)部署k8s集群的节点按照用途可以划分为如下2类角色:master:集群的master节点,集群的初始化节点,基础配置不低于2c4gslave:集群的slave节点,可以多台,基础配置不低于1c2g主机名、节点ip、部署组件k8s-master10.......
  • k8s pv与pvc
    k8spv与pvc概念PV我们想要持久化k8spod中的数据,就需要用到存储,找一个地方,存放数据。不然一旦pod被删除,则数据就丢失了。在k8s中,pv就是存储数据的地方,可以理解为pv就是存储后端。pv可以由多种存储系统提供,如NFS,GFS,本地,CIFS,云存储集群等PVC用户想要使用PV,就需要申请,说明要......
  • 204 K8S API资源对象介绍03 (Job CronJob Endpoint ConfigMap Secret) 2.12-2.16
    一、API资源对象Job一次性运行后就退出的Pod1.1使用kubect生成YAML文件#kubectlcreatejobjob01--image=busybox--dry-run=client-oyaml>job01.yaml#vimjob01.yaml#catjob01.yamlapiVersion:batch/v1kind:Jobmetadata:creationTimestamp:nullnam......
  • 十四、kubernetes日志收集之Loki收集K8s日志
    3.使用Loki收集K8s日志3.1架构说明无论是ELK、EFK还是Filebeat,都需要用到Elasticsearch来存储数据,Elasticsearch本身就像“一座大山”,维护难度和资源使用都是偏高的。对于很多公司而言,特别是新创公司,可能并不想大费周章地去搭建一个ELK、EFK或者其他重量级的日志平台,刚开始的人力......
  • keydb 6.3.3 modjs docker 镜像
    keydb6.3.3已经发布一段时间了,但是ModJS的支持镜像一直还没有提供,就基于现有的基础镜像搞了一个方便学习使用Dockerfile FROMeqalpha/modjsasbase FROMeqalpha/keydb:latestRUNmkdir-p/usr/lib/keydb/modules#Copyoverprecompiledubuntu1......
  • Spring Boot + K8S 中的滚动发布、优雅停机、弹性伸缩、应用监控、配置分离
    前言 K8s+SpringBoot实现零宕机发布:健康检查+滚动更新+优雅停机+弹性伸缩+Prometheus监控+配置分离(镜像复用) 配置 健康检查健康检查类型:就绪探针(readiness)+存活探针(liveness)探针类型:exec(进入容器执行脚本)、tcpSocket(探测端口)、httpGet(调用接口)业务层面项目......
  • kubeadm 部署 k8s
    kubeadm部署k8s简介记录在centos7.6.1810上,使用kubeadm部署k8s,部署在三台虚机上,部署版本是1.22.0虚机信息使用三台一模一样的虚机,系统版本为CentOS7.6.1810安装虚机的ISO是CentOS-7-x86_64-Minimal-1810.isoIP分别是172.17.134.134、172.17.139.162、172.17.140.87使......
  • DHorse v1.4.2 发布,基于 k8s 的发布平台
    版本说明优化特性在集群列表增加集群版本;修改Jvm的GC指标名;解决问题解决shell脚本换行符的问题;解决部署历史列表页,环境名展示错误的问题;解决指标收集功能的异常;升级指南升级指南DHorse介绍DHorse是一个简单易用的轻量级的云应用管理平台,不需要理解容器和k8s的概念,......
  • Harbor-私有镜像仓库的安装部署
    Harbor-私有镜像仓库的安装部署仓库的概念也就是用于存储,docker仓库用于存储镜像。镜像构建完成后,很容易可以在宿主机上运行,但是如果要在其他服务器上运行,则需要考虑镜像的分发,存储的问题。公有/私有仓库DockerRegistry有两种形式公开,开放给所有用户,提供给所有用户搜索,拉......
  • 03 K8S API资源对象介绍02(Deployment Service DaemonSet StatefulSet)
    一、API资源对象DeploymentDeploymentYANL示例vimnginx-deploy.yamlapiVersion:apps/v1kind:Deploymentmetadata:labels:app:myngname:ng-deployspec:replicas:2##副本数selector:matchLabels:app:myngtemplate:metadata:......