如何让k8s中的kaniko缓存项目依赖
Word Count: 404(words)
Read Count: 1(minutes)
如果我们想要在kaniko缓存composer vendor
或者golang mod
等程序依赖,我们需要把这些依赖存起来,一个简单的思路是使用pvc
来解决。
假设我们使用的pipeline
组件是tekton
,那么,我们可以这么写我们的task
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| apiVersion: tekton.dev/v1beta1 kind: ClusterTask metadata: name: build-push-image spec: workspaces: - name: output description: 传递工作区 params: - name: workspace description: git代码路径 type: string - name: image description: 镜像名字 type: string - name: library-cache description: 用于缓存依赖库的pvc type: string steps: - name: build-push-image image: hub.code-galaxy.net/library/kaniko-executor:v1.6.0 imagePullPolicy: IfNotPresent args: - --dockerfile=/workspace/output/$(params.workspace)/Dockerfile - --context=/workspace/output/$(params.workspace) - --destination=$(params.image) - --insecure-pull - --insecure - --skip-tls-verify - --log-timestamp=true - --push-retry=5 volumeMounts: - name: library-cache mountPath: /kaniko/library-cache volumes: - name: library-cache persistentVolumeClaim: claimName: $(params.library-cache) readOnly: false
|
可以看到,我们把一个pvc
挂载到了kaniko
容器的/kaniko/library-cache
目录里面。那么,我们就可以在Dockerfile
里面利用这个持久化的目录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| FROM hyperf/hyperf:7.4-alpine-v3.11-swoole LABEL maintainer="Hyperf Developers <group@hyperf.io>" version="1.0" license="MIT" app.name="Hyperf"
WORKDIR /opt/www
RUN rm -rf /root/.composer RUN ln -s /kaniko/library-cache /root/.composer
COPY . /opt/www RUN composer install --no-dev -o && php bin/hyperf.php
EXPOSE 9501
ENTRYPOINT ["php", "/opt/www/bin/hyperf.php", "start"]
|
我们只需要把这个持久化的目录软链接到/root/.composer
目录即可。这样,当composer install
的时候,下载的依赖就会存在pvc
里面,并且,下次我们可以接着使用它们。