问题描述
我正在尝试创建PV
和PVC
,它们也可以在同一pod
上通过cronjob
和node
访问。
当前我正在使用以下yaml
文件
apiVersion: v1
kind: PersistentVolume
Metadata:
name: wwwroot
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 100Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "wwwroot"
---
apiVersion: v1
kind: PersistentVolumeClaim
Metadata:
labels:
app: wwwroot
name: wwwroot
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
status: {}
在statefulSet
apiVersion: apps/v1
kind: StatefulSet
Metadata:
labels:
app: web
name: web
spec:
selector:
matchLabels:
app: web
serviceName: web
replicas: 1
template:
Metadata:
labels:
app: web
spec:
containers:
- name: web
image: xy:latest
ports:
- containerPort: 80
- containerPort: 443
volumeMounts:
- mountPath: /app/wwwroot
name: wwwroot
subPath: tempwwwroot
imagePullSecrets:
- name: xy
restartPolicy: Always
serviceAccountName: ""
volumeClaimTemplates:
- Metadata:
name: wwwroot
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 100Gi
这在pods
上工作正常,但是我有一个cronjob
,需要访问相同的wwwroot PV
。
apiVersion: batch/v1beta1
kind: CronJob
Metadata:
labels:
app: import
name: import
spec:
schedule: "09 16 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: import
image: xy:latest
imagePullPolicy: Always
volumeMounts:
- mountPath: /app/wwwroot
name: wwwroot
subPath: tempwwwroot
imagePullSecrets:
- name: xy
restartPolicy: OnFailure
volumes:
- name: wwwroot
persistentVolumeClaim:
claimName: wwwroot
据我所知,您无法将这些PV
绑定到主机上的文件夹,就像Docker
中那样(这很好,但是我可以接受)。当我使用以下设置运行kubectl get pvc
时,似乎使用了相同的PVC
名称wwwroot,但显然不是。我将/bin/bash
放入pod
创建的cronjob
中,并且wwwroot文件夹不包含来自网络pod
wwwroot文件夹的文件。
知道我在做什么错吗?在本地1 PV
PVC
上创建node
/ Kubernetes
的最佳选择是什么?我也在考虑在主机上创建一个NFS share
,以便于访问文件。
此外,当首次创建PV
/ PVC
并部署网络statefulSet
时,网络pod
应使用CSS和JS文件填充wwwroot PV
,但是当它绑定到PV
时,它似乎会删除该文件夹中的所有内容,因此我不得不再次手动复制这些文件。有什么解决方法吗?
解决方法
您正在通过设置accessModes:ReadWriteOnce
在创建并使用pv的两个Pod上安装pv。您可以在下面检查它们。 https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes
还可以在本地使用存储类NFS卷,该卷可以给您提供许多读写功能。我不确定本地存储类是否提供它,因为它不在官方文档中。下方的Chk https://kubernetes.io/docs/concepts/storage/persistent-volumes/
P.S。切勿在实际部署中使用存储类,因为k8中的节点会不断出现。