我正在尝试创建一个新的Kubernetes部署,该部署将允许我在重新启动或关闭Pod时保持其状态。仅出于某种背景,Kubernetes实例是一个托管的Amazon EKS集群,我正在尝试合并一个已安装到Pod的Amazon EFS支持的持久卷。
不幸的是,正如我现在所拥有的那样,PV可根据需要安装到/etc/
上,但是内容几乎为空,除了一些在启动期间修改的文件。
部署yaml如下所示:
kind: Deployment
apiVersion: apps/v1
spec:
replicas: 1
selector:
matchLabels:
app: testpod
template:
metadata:
creationTimestamp: null
labels:
app: testpod
spec:
volumes:
- name: efs
persistentVolumeClaim:
claimName: efs
containers:
- name: testpod
image: 'xxxxxxxxxxxx.dkr.ecr.us-east-2.amazonaws.com/testpod:latest'
args:
- /bin/init
ports:
- containerPort: 443
protocol: TCP
resources: {}
volumeMounts:
- name: efs
mountPath: /etc
subPath: etc
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: IfNotPresent
securityContext:
capabilities:
add:
- ALL
restartPolicy: Always
terminationGracePeriodSeconds: 60
dnsPolicy: ClusterFirst
securityContext: {}
schedulerName: default-scheduler
关于可能出问题的任何想法?我希望/ etc /会填充图像的内容。
编辑:
在Docker中,通过使用相同的镜像,使用
docker volume create <name>
创建一个卷,然后将其挂载为-v <name>:/etc
,似乎可以正常工作。
最佳答案
Kubernetes不具备基于镜像内容填充卷的Docker功能。如果您创建一个新卷(无论是emptyDir
卷还是基于云存储的东西,例如AWS EBS或EFS),它将开始为空,并隐藏容器中的所有内容。
因此,您无法在容器的大部分上安装卷;在您的应用程序的源代码树上或您显示的/etc
上装载卷将不起作用。特别是对于/etc
中的文件,更好的方法是使用Kubernetes ConfigMap来保存要添加到该目录的特定文件。 (将配置文件存储在源代码管理中,并将其作为部署顺序的一部分添加;请勿尝试对已部署文件进行未跟踪的修改。)
关于docker - Kubernetes-将持久卷挂载为根目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60402681/