Kubernetes Storage Intro
sig-apps
July 20, 2016
Saad Ali <saadali@google.com>
Software Engineer
https://github.com/saad-ali
Google Cloud Platform
Files in containers are ephemeral
Can’t share files between containers
Problems
Google Cloud Platform
Kubernetes Volumes
Solution
Google Cloud Platform
Kubernetes has many volume plugins
Volumes
Google Cloud Platform
EmptyDir
EmptyDir Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
emptyDir: {}
containers:
- name: sleepycontainer1
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
- name: sleepycontainer2
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
emptydir.yaml
EmptyDir Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
emptyDir: {}
containers:
- name: sleepycontainer1
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
- name: sleepycontainer2
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
emptydir.yaml
EmptyDir Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
emptyDir: {}
containers:
- name: sleepycontainer1
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
- name: sleepycontainer2
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
emptydir.yaml
EmptyDir Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
emptyDir: {}
containers:
- name: sleepycontainer1
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
- name: sleepycontainer2
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
emptydir.yaml
EmptyDir Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
emptyDir: {}
containers:
- name: sleepycontainer1
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
- name: sleepycontainer2
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
emptydir.yaml
$ kubectl create -f emptydir.yaml
replicationcontroller "sleepypod" created
EmptyDir Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
emptyDir: {}
containers:
- name: sleepycontainer1
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
- name: sleepycontainer2
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
emptydir.yaml
$ kubectl create -f emptydir.yaml
replicationcontroller "sleepypod" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleepypod-nsk7h 2/2 Running 0 55s
EmptyDir Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
emptyDir: {}
containers:
- name: sleepycontainer1
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
- name: sleepycontainer2
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
emptydir.yaml
$ kubectl create -f emptydir.yaml
replicationcontroller "sleepypod" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleepypod-nsk7h 2/2 Running 0 55s
$ kubectl exec -ti sleepypod-nsk7h -c sleepycontainer1 -- /bin/sh
/ # ls
bin etc lib64 mnt root sys var
data home linuxrc opt run tmp
dev lib media proc sbin usr
EmptyDir Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
emptyDir: {}
containers:
- name: sleepycontainer1
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
- name: sleepycontainer2
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
emptydir.yaml
$ kubectl create -f emptydir.yaml
replicationcontroller "sleepypod" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleepypod-nsk7h 2/2 Running 0 55s
$ kubectl exec -ti sleepypod-nsk7h -c sleepycontainer1 -- /bin/sh
/ # ls
bin etc lib64 mnt root sys var
data home linuxrc opt run tmp
dev lib media proc sbin usr
/ # ls /data/
EmptyDir Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
emptyDir: {}
containers:
- name: sleepycontainer1
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
- name: sleepycontainer2
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
emptydir.yaml
$ kubectl create -f emptydir.yaml
replicationcontroller "sleepypod" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleepypod-nsk7h 2/2 Running 0 55s
$ kubectl exec -ti sleepypod-nsk7h -c sleepycontainer1 -- /bin/sh
/ # ls
bin etc lib64 mnt root sys var
data home linuxrc opt run tmp
dev lib media proc sbin usr
/ # ls /data/
/ # echo "hello world" > /data/test.txt
hello world
/ # exit
EmptyDir Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
emptyDir: {}
containers:
- name: sleepycontainer1
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
- name: sleepycontainer2
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
emptydir.yaml
$ kubectl create -f emptydir.yaml
replicationcontroller "sleepypod" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleepypod-nsk7h 2/2 Running 0 55s
$ kubectl exec -ti sleepypod-nsk7h -c sleepycontainer1 -- /bin/sh
/ # ls
bin etc lib64 mnt root sys var
data home linuxrc opt run tmp
dev lib media proc sbin usr
/ # ls /data/
/ # echo "hello world" > /data/test.txt
hello world
/ # exit
$ kubectl exec -ti sleepypod-nsk7h -c sleepycontainer2 -- /bin/sh
/ # ls /data/
test.txt
/ # echo /data/test.txt
/data/test.txt
EmptyDir Demo
Google Cloud Platform
Google Compute Engine Persistent Disk
GCE PD Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
gcePersistentDisk:
pdName: panda-disk
fsType: ext4
nodeName: e2e-test-saadali-minion-group-6d45
containers:
- name: sleepycontainer
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
gcepd.yaml
GCE PD Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
gcePersistentDisk:
pdName: panda-disk
fsType: ext4
nodeName: e2e-test-saadali-minion-group-6d45
containers:
- name: sleepycontainer
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
gcepd.yaml
GCE PD Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
gcePersistentDisk:
pdName: panda-disk
fsType: ext4
nodeName: e2e-test-saadali-minion-group-6d45
containers:
- name: sleepycontainer
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
gcepd.yaml
GCE PD Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
gcePersistentDisk:
pdName: panda-disk
fsType: ext4
nodeName: e2e-test-saadali-minion-group-6d45
containers:
- name: sleepycontainer
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
gcepd.yaml
GCE PD Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
gcePersistentDisk:
pdName: panda-disk
fsType: ext4
nodeName: e2e-test-saadali-minion-group-6d45
containers:
- name: sleepycontainer
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
gcepd.yaml
$ kubectl create -f gcepd.yaml
replicationcontroller "sleepypod" created
GCE PD Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
gcePersistentDisk:
pdName: panda-disk
fsType: ext4
nodeName: e2e-test-saadali-minion-group-6d45
containers:
- name: sleepycontainer
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
gcepd.yaml
$ kubectl create -f gcepd.yaml
replicationcontroller "sleepypod" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleepypod-v8ggx 1/1 Running 0 33s
GCE PD Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
gcePersistentDisk:
pdName: panda-disk
fsType: ext4
nodeName: e2e-test-saadali-minion-group-6d45
containers:
- name: sleepycontainer
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
gcepd.yaml
$ kubectl create -f gcepd.yaml
replicationcontroller "sleepypod" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleepypod-v8ggx 1/1 Running 0 33s
$ kubectl exec -ti sleepypod-v8ggx -c sleepycontainer -- /bin/sh
/ # ls /data
GCE PD Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
gcePersistentDisk:
pdName: panda-disk
fsType: ext4
nodeName: e2e-test-saadali-minion-group-6d45
containers:
- name: sleepycontainer
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
gcepd.yaml
$ kubectl create -f gcepd.yaml
replicationcontroller "sleepypod" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleepypod-v8ggx 1/1 Running 0 33s
$ kubectl exec -ti sleepypod-v8ggx -c sleepycontainer -- /bin/sh
/ # ls /data
/ # echo "Hello world" > /data/test.txt
/ # cat /data/test.txt
Hello world
/ # exit
GCE PD Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
gcePersistentDisk:
pdName: panda-disk
fsType: ext4
nodeName: e2e-test-saadali-minion-group-6d45
containers:
- name: sleepycontainer
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
gcepd.yaml
$ kubectl create -f gcepd.yaml
replicationcontroller "sleepypod" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleepypod-v8ggx 1/1 Running 0 33s
$ kubectl exec -ti sleepypod-v8ggx -c sleepycontainer -- /bin/sh
/ # ls /data
/ # echo "Hello world" > /data/test.txt
/ # cat /data/test.txt
Hello world
/ # exit
$ kubectl delete -f gcepd.yaml
replicationcontroller "sleepypod" deleted
GCE PD Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
gcePersistentDisk:
pdName: panda-disk
fsType: ext4
nodeName: e2e-test-saadali-minion-group-8rrk
containers:
- name: sleepycontainer
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
gcepd.yaml
$ kubectl create -f gcepd.yaml
replicationcontroller "sleepypod" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleepypod-v8ggx 1/1 Running 0 33s
$ kubectl exec -ti sleepypod-v8ggx -c sleepycontainer -- /bin/sh
/ # ls /data
/ # echo "Hello world" > /data/test.txt
/ # cat /data/test.txt
Hello world
/ # exit
$ kubectl delete -f gcepd.yaml
replicationcontroller "sleepypod" deleted
GCE PD Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
gcePersistentDisk:
pdName: panda-disk
fsType: ext4
nodeName: e2e-test-saadali-minion-group-8rrk
containers:
- name: sleepycontainer
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
gcepd.yaml
$ kubectl create -f gcepd.yaml
replicationcontroller "sleepypod" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleepypod-v8ggx 1/1 Running 0 33s
$ kubectl exec -ti sleepypod-v8ggx -c sleepycontainer -- /bin/sh
/ # ls /data
/ # echo "Hello world" > /data/test.txt
/ # cat /data/test.txt
Hello world
/ # exit
$ kubectl delete -f gcepd.yaml
replicationcontroller "sleepypod" deleted
$ kubectl create -f gcepd.yaml
replicationcontroller "sleepypod" created
GCE PD Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
gcePersistentDisk:
pdName: panda-disk
fsType: ext4
nodeName: e2e-test-saadali-minion-group-8rrk
containers:
- name: sleepycontainer
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
gcepd.yaml
$ kubectl create -f gcepd.yaml
replicationcontroller "sleepypod" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleepypod-v8ggx 1/1 Running 0 33s
$ kubectl exec -ti sleepypod-v8ggx -c sleepycontainer -- /bin/sh
/ # ls /data
/ # echo "Hello world" > /data/test.txt
/ # cat /data/test.txt
Hello world
/ # exit
$ kubectl delete -f gcepd.yaml
replicationcontroller "sleepypod" deleted
$ kubectl create -f gcepd.yaml
replicationcontroller "sleepypod" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleepypod-5kp98 1/1 Running 0 1m
GCE PD Demo
Google Cloud Platform
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
spec:
volumes:
- name: data
gcePersistentDisk:
pdName: panda-disk
fsType: ext4
nodeName: e2e-test-saadali-minion-group-8rrk
containers:
- name: sleepycontainer
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
gcepd.yaml
$ kubectl create -f gcepd.yaml
replicationcontroller "sleepypod" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleepypod-v8ggx 1/1 Running 0 33s
$ kubectl exec -ti sleepypod-v8ggx -c sleepycontainer -- /bin/sh
/ # ls /data
/ # echo "Hello world" > /data/test.txt
/ # cat /data/test.txt
Hello world
/ # exit
$ kubectl delete -f gcepd.yaml
replicationcontroller "sleepypod" deleted
$ kubectl create -f gcepd.yaml
replicationcontroller "sleepypod" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleepypod-5kp98 1/1 Running 0 1m
$ kubectl exec -ti sleepypod-5kp98 -c sleepycontainer -- /bin/sh
/ # ls /data/
test.txt
/ # cat /data/test.txt
Hello world
/ # exit
GCE PD Demo
Google Cloud Platform
PV/PVC
Google Cloud Platform
apiVersion: v1
kind: PersistentVolume
metadata:
name : myPV1
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 10Gi
persistentVolumeReclaimPolicy: Retain
gcePersistentDisk:
fsType: ext4
pdName: panda-disk
---
apiVersion: v1
kind: PersistentVolume
metadata:
name : myPV2
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 100Gi
persistentVolumeReclaimPolicy: Retain
gcePersistentDisk:
fsType: ext4
pdName: panda-disk2
pv.yaml
PV/PVC
Google Cloud Platform
apiVersion: v1
kind: PersistentVolume
metadata:
name : myPV1
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 10Gi
persistentVolumeReclaimPolicy: Retain
gcePersistentDisk:
fsType: ext4
pdName: panda-disk
---
apiVersion: v1
kind: PersistentVolume
metadata:
name : myPV2
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 100Gi
persistentVolumeReclaimPolicy: Retain
gcePersistentDisk:
fsType: ext4
pdName: panda-disk2
pv.yaml
PV/PVC
Google Cloud Platform
apiVersion: v1
kind: PersistentVolume
metadata:
name : myPV1
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 10Gi
persistentVolumeReclaimPolicy: Retain
gcePersistentDisk:
fsType: ext4
pdName: panda-disk
---
apiVersion: v1
kind: PersistentVolume
metadata:
name : myPV2
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 100Gi
persistentVolumeReclaimPolicy: Retain
gcePersistentDisk:
fsType: ext4
pdName: panda-disk2
pv.yaml
$ kubectl create -f pv.yaml
persistentvolume "pv1" created
persistentvolume "pv2" created
$ kubectl get pv
NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
pv1 10Gi RWO Available 1m
pv2 100Gi RWO Available 1m
PV/PVC
Google Cloud Platform
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
namespace: testns
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
pvc.yaml
$ kubectl create -f pv.yaml
persistentvolume "pv1" created
persistentvolume "pv2" created
$ kubectl get pv
NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
pv1 10Gi RWO Available 1m
pv2 100Gi RWO Available 1m
PV/PVC
Google Cloud Platform
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
namespace: testns
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
pvc.yaml
$ kubectl create -f pv.yaml
persistentvolume "pv1" created
persistentvolume "pv2" created
$ kubectl get pv
NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
pv1 10Gi RWO Available 1m
pv2 100Gi RWO Available 1m
PV/PVC
Google Cloud Platform
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
namespace: testns
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
pvc.yaml
$ kubectl create -f pv.yaml
persistentvolume "pv1" created
persistentvolume "pv2" created
$ kubectl get pv
NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
pv1 10Gi RWO Available 1m
pv2 100Gi RWO Available 1m
$ kubectl create -f pvc.yaml
persistentvolumeclaim "mypvc" created
$ kubectl get pv
NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
pv1 10Gi RWO Available 3m
pv2 100Gi RWO Bound testns/mypvc 3m
PV/PVC
Google Cloud Platform
$ kubectl create -f pv.yaml
persistentvolume "pv1" created
persistentvolume "pv2" created
$ kubectl get pv
NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
pv1 10Gi RWO Available 1m
pv2 100Gi RWO Available 1m
$ kubectl create -f pvc.yaml
persistentvolumeclaim "mypvc" created
$ kubectl get pv
NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
pv1 10Gi RWO Available 3m
pv2 100Gi RWO Bound testns/mypvc 3m
apiVersion: v1
kind: ReplicationController
metadata:
name: sleepypod
spec:
replicas: 1
selector:
name: sleepy
template:
metadata:
labels:
name: sleepy
Spec:
volumes:
- name: data
gcePersistentDisk:
pdName: panda-disk
fsType: ext4
volumes:
- name: data
persistentVolumeClaim:
claimName: mypvc
nodeName: e2e-test-saadali-minion-group-6d45
containers:
- name: sleepycontainer
image: gcr.io/google_containers/busybox
command:
- sleep
- "6000"
volumeMounts:
- name: data
mountPath: /data
readOnly: false
pod.yaml
PV/PVC
Google Cloud Platform
New and Coming Soon
Google Cloud Platform
Saad Ali <saadali@google.com>
Software Engineer
https://github.com/saad-ali
Q&A
Google Cloud Platform