持久卷声明和持久卷 yaml 文件
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/datatypo"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-claim
spec:
storageClassName: manual
volumeName: my-volume
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
部署 yaml 文件
apiVersion: v1
kind: Service
metadata:
name: typo3
labels:
app: typo3
spec:
type: NodePort
ports:
- nodePort: 31021
port: 80
targetPort: 80
selector:
app: typo3
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: typo3
spec:
selector:
matchLabels:
app: typo3
replicas: 1
template:
metadata:
labels:
app: typo3
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- typo3
containers:
- image: image:typo3
name: typo3
imagePullPolicy: Never
ports:
- containerPort: 80
volumeMounts:
- name: my-volume
mountPath: /var/www/html/
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: my-claim
注意:如果未添加持久卷,则内容会显示在 pod 内部(在 中var/www/html
)。但添加持久卷后,不会显示同一文件夹和外部挂载路径内的任何内容/mnt/datatypo
。
答案1
这是预期的行为:当安装持久卷时,它会覆盖在中指定的文件夹的内容mountPath
。
因此您有两个选择:
- 您的主机上已经存在该目录的内容
- 挂载
hostPath
到容器中的另一个目录,然后将内容复制到最终目标文件夹。(可以通过以下方式实现容器中的命令)
您也可以挂载单个文件,有不同的选项hostPath types
。请熟悉hostPath 类型。
笔记!使用hostPath
mount 只能用于本地测试某些功能,在生产系统中这是一种非常不安全的方法:
警告:HostPath 卷存在许多安全风险,最佳做法是尽可能避免使用 HostPath。当必须使用 HostPath 卷时,应将其范围限定为所需的文件或目录,并以 ReadOnly 形式挂载