【发布时间】:2019-10-18 07:20:24
【问题描述】:
我正在使用kubernetes plugin 在 jenkins 上设置管道来编译一些代码。
我的目标:
在这个管道中,我试图从 docker 容器中访问一些数据,以便在一秒钟内将其用作缓存(如下所示)。
apiVersion: v1
kind: Pod
metadata:
name: cache-test
spec:
restartPolicy: Never
volumes:
- name: shared-data
emptyDir: {}
containers:
- name: cache-container
image: cache:latest
volumeMounts:
- name: shared-data
mountPath: /cache
command:
- cat
- name: debian-container
image: debian
volumeMounts:
- name: shared-data
mountPath: /pod-data
command:
- cat
问题:
我的问题是,当我将 shared-folder 直接挂载到 /cache 时,我的所有数据都会被删除(覆盖)。
解决方法:
一种解决方法是创建一个中间目录,我可以在其中复制我的数据:
apiVersion: v1
kind: Pod
metadata:
name: cache-test
spec:
restartPolicy: Never
volumes:
- name: shared-data
emptyDir: {}
containers:
- name: cache-container
image: cache:latest
volumeMounts:
- name: shared-data
mountPath: /shared-folder
command:
- cat
- name: debian-container
image: debian
volumeMounts:
- name: shared-data
mountPath: /pod-data
command:
- cat
在我的 Jenkins 管道中添加这一步:
container('cache-container') {
sh """#!/usr/bin/env bash
set -exu
cp -r /cache/* /shared-folder
"""
} // container
问题:
有没有办法避免这个复制步骤?也许 kubernetes 卷设置不会覆盖容器中的内容?
我浏览了几次文档,但没有找到任何东西..
【问题讨论】:
-
你已经阅读了 K8s 关于持久存储的文档? kubernetes.io/docs/concepts/storage/persistent-volumes
-
此行为与普通 Linux **mount**(8) 相同。如果您启动三个不同的 pod,它们都安装了相同的共享卷,但它们的初始内容都不同,您期望什么行为?
标签: docker jenkins kubernetes mounted-volumes