Nel tuo Volume persistente
stai usando type: local
il che significa che vuoi creare una directory in /mnt
. Anche i locali non supportano il provisioning di volumi dinamici
. Se esegui SSH su uno qualsiasi dei tuoi nodi, scoprirai che questa cartella è ReadOnly file system
.
/mnt $ mkdir qualcosamkdir:impossibile creare la directory 'qualcosa':file system di sola lettura
Come soluzione più veloce, potresti semplicemente modificare il tuo PV YAML
- ReadWriteMany
hostPath:
path: /mnt/data
A:
- ReadWriteMany
hostPath:
path: /var/lib/data
Esempio:
$ kubectl apply -f pv-pvc.yaml
persistentvolume/postgres-pv-volume created
persistentvolumeclaim/postgres-pv-claim created
$ kubectl apply -f pos.yaml
deployment.apps/postgres created
$ kubectl get po
NAME READY STATUS RESTARTS AGE
postgres-65d9cbd495-pcqf5 1/1 Running 0 2s
$ kubectl exec -ti postgres-65d9cbd495-pcqf5 -- /bin/bash
[email protected]:/# cd /var/lib/postgresql/data
[email protected]:/var/lib/postgresql/data# ls
base pg_commit_ts pg_hba.conf pg_logical pg_notify pg_serial pg_stat pg_subtrans pg_twophase pg_wal postgresql.auto.conf postmaster.opts
global pg_dynshmem pg_ident.conf pg_multixact pg_replslot pg_snapshots pg_stat_tmp pg_tblspc PG_VERSION pg_xact postgresql.conf postmaster.pid
[email protected]:/var/lib/postgresql/data# echo "Hello from postgress pod" > data.txt
[email protected]:/var/lib/postgresql/data# cat data.txt
Hello from postgress pod
Ora, se esegui un SSH sul nodo che ospita questo pod, sarai in grado di raggiungere questa cartella e file.
[email protected] ~ $ sudo su
gke-cluster-1-default-pool-463f9615-gxhl /home/user # cd /var/lib/data
gke-cluster-1-default-pool-463f9615-gxhl /var/lib/data # ls
PG_VERSION pg_dynshmem pg_notify pg_stat_tmp pg_xact
base pg_hba.conf pg_replslot pg_subtrans postgresql.auto.conf
data.txt pg_ident.conf pg_serial pg_tblspc postgresql.conf
global pg_logical pg_snapshots pg_twophase postmaster.opts
pg_commit_ts pg_multixact pg_stat pg_wal postmaster.pid
gke-cluster-1-default-pool-463f9615-gxhl /var/lib/data # cat data.txt
Hello from postgress pod
MODIFICA
YAML che ho usato.
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
labels:
app: postgres
data:
POSTGRES_DB: postgresdb
POSTGRES_USER: postgres
POSTGRES_PASSWORD: root
---
apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
app: postgres
spec:
type: NodePort
selector:
app: postgres
ports:
- name: postgres
port: 5432
nodePort: 30432
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: postgres-pv-volume
labels:
app: postgres
type: local
spec:
storageClassName: manual
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
hostPath:
path: /var/lib/data
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: postgres-pv-claim
labels:
app: postgres
spec:
storageClassName: manual
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:latest
imagePullPolicy: "IfNotPresent"
envFrom:
- configMapRef:
name: postgres-config
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgredb
volumes:
- name: postgredb
persistentVolumeClaim:
claimName: postgres-pv-claim
configmap/postgres-config created
service/postgres created
persistentvolume/postgres-pv-volume created
persistentvolumeclaim/postgres-pv-claim created
deployment.apps/postgres created
$ kubectl get po
NAME READY STATUS RESTARTS AGE
postgres-65d9cbd495-wxx4h 1/1 Running 0 19s