PersistentVolume 未在 Docker 桌面 (MacOS) 托管的 Kubernetes 集群中使用
PersistentVolume not utilized in Docker Desktop (MacOS) hosted Kubernetes cluster
我已经在 Docker 托管的 K8s 集群 中部署(使用 Helm)一些服务桌面(MacOS)。其中一项“服务”是 MongoDB,我正在尝试为其设置 PersistedVolume,以便实际数据将保留在集群(重新)安装(或 MongoDB 吊舱更换)。一切本身都“有效”,但 MongoDB 容器进程不断设置其本地目录 /data/db,就好像在持久卷方面没有真正设置任何东西一样。我已经纠结了一段时间了,我想多一双眼睛可能会发现错误或遗漏的地方。
我部署了其他几个资源,例如一个基于 Micronaut 的小型后端服务,它公开了一个 API 以从 MongoDB 实例中读取。所有这些都很好。
这里是MongoDB涉及的描述符:
PersistentVolumeClaim:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: persons-mongodb-pvc
namespace: fo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
部署:
kind: Deployment
metadata:
name: fo-persons-mongodb
namespace: fo
labels:
app: fo-persons-mongodb
spec:
replicas: 1
selector:
matchLabels:
app: fo-persons-mongodb
template:
metadata:
labels:
app: fo-persons-mongodb
spec:
volumes:
- name: fo-persons-mongodb-volume-pvc
persistentVolumeClaim:
claimName: persons-mongodb-pvc
containers:
- name: fo-persons-mongodb
image: mongo
imagePullPolicy: IfNotPresent
ports:
- containerPort: 27017
volumeMounts:
- name: fo-persons-mongodb-volume-pvc
mountPath: "/data/db"
服务:
apiVersion: v1
kind: Service
metadata:
name: fo-persons-mongodb
namespace: fo
spec:
type: ClusterIP
selector:
app: fo-persons-mongodb
ports:
- protocol: TCP
port: 27017
targetPort: 27017
存储类:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
持久卷:
apiVersion: v1
kind: PersistentVolume
metadata:
name: fo-persons-mongodb-volume
labels:
type: local
spec:
storageClassName: local-storage
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /Users/mike/kubernetes/fo/persons/mongodb
好的!我让它工作了。看来我犯了两个错误。以下是 PersistentVolumeClaim 和 PersistentVolume 的更新描述符:
错误 #1: 未在 PersistentVolumeClaim 的规范中设置 storageClassName:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: persons-mongodb-pvc
namespace: fo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
storageClassName: local-storage
错误 #2: 未设置节点亲和力且未使用 local.path 而不是 hostPath,两者都在 PersistentVolume 中:
apiVersion: v1
kind: PersistentVolume
metadata:
name: fo-persons-mongodb-volume
labels:
type: local
spec:
persistentVolumeReclaimPolicy: Delete
storageClassName: local-storage
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
local:
path: /Users/mike/kubernetes/fo/persons/mongodb
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- docker-desktop
我已经在 Docker 托管的 K8s 集群 中部署(使用 Helm)一些服务桌面(MacOS)。其中一项“服务”是 MongoDB,我正在尝试为其设置 PersistedVolume,以便实际数据将保留在集群(重新)安装(或 MongoDB 吊舱更换)。一切本身都“有效”,但 MongoDB 容器进程不断设置其本地目录 /data/db,就好像在持久卷方面没有真正设置任何东西一样。我已经纠结了一段时间了,我想多一双眼睛可能会发现错误或遗漏的地方。
我部署了其他几个资源,例如一个基于 Micronaut 的小型后端服务,它公开了一个 API 以从 MongoDB 实例中读取。所有这些都很好。
这里是MongoDB涉及的描述符:
PersistentVolumeClaim:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: persons-mongodb-pvc
namespace: fo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
部署:
kind: Deployment
metadata:
name: fo-persons-mongodb
namespace: fo
labels:
app: fo-persons-mongodb
spec:
replicas: 1
selector:
matchLabels:
app: fo-persons-mongodb
template:
metadata:
labels:
app: fo-persons-mongodb
spec:
volumes:
- name: fo-persons-mongodb-volume-pvc
persistentVolumeClaim:
claimName: persons-mongodb-pvc
containers:
- name: fo-persons-mongodb
image: mongo
imagePullPolicy: IfNotPresent
ports:
- containerPort: 27017
volumeMounts:
- name: fo-persons-mongodb-volume-pvc
mountPath: "/data/db"
服务:
apiVersion: v1
kind: Service
metadata:
name: fo-persons-mongodb
namespace: fo
spec:
type: ClusterIP
selector:
app: fo-persons-mongodb
ports:
- protocol: TCP
port: 27017
targetPort: 27017
存储类:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
持久卷:
apiVersion: v1
kind: PersistentVolume
metadata:
name: fo-persons-mongodb-volume
labels:
type: local
spec:
storageClassName: local-storage
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /Users/mike/kubernetes/fo/persons/mongodb
好的!我让它工作了。看来我犯了两个错误。以下是 PersistentVolumeClaim 和 PersistentVolume 的更新描述符:
错误 #1: 未在 PersistentVolumeClaim 的规范中设置 storageClassName:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: persons-mongodb-pvc
namespace: fo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
storageClassName: local-storage
错误 #2: 未设置节点亲和力且未使用 local.path 而不是 hostPath,两者都在 PersistentVolume 中:
apiVersion: v1
kind: PersistentVolume
metadata:
name: fo-persons-mongodb-volume
labels:
type: local
spec:
persistentVolumeReclaimPolicy: Delete
storageClassName: local-storage
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
local:
path: /Users/mike/kubernetes/fo/persons/mongodb
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- docker-desktop