*Configure a Pod to Use a PersistentVolume for Storage
Last updated
Was this helpful?
Last updated
Was this helpful?
Open a shell to the Node in your cluster. How you open a shell depends on how you set up your cluster. For example, if you are using Minikube, you can open a shell to your Node by entering minikube ssh
.
In your shell, create a /mnt/data
directory:
In the /mnt/data
directory, create an index.html
file:
In this exercise, you create a hostPath PersistentVolume. Kubernetes supports hostPath for development and testing on a single-node cluster. A hostPath PersistentVolume uses a file or directory on the Node to emulate network-attached storage.
In a production cluster, you would not use hostPath. Instead a cluster administrator would provision a network resource like a Google Compute Engine persistent disk, an NFS share, or an Amazon Elastic Block Store volume. Cluster administrators can also use to set up .
Here is the configuration file for the hostPath PersistentVolume:
Create the PersistentVolume:
View information about the PersistentVolume:
The output shows that the PersistentVolume has a STATUS
of Available
. This means it has not yet been bound to a PersistentVolumeClaim.
The next step is to create a PersistentVolumeClaim. Pods use PersistentVolumeClaims to request physical storage. In this exercise, you create a PersistentVolumeClaim that requests a volume of at least three gibibytes that can provide read-write access for at least one Node.
Here is the configuration file for the PersistentVolumeClaim:
Create the PersistentVolumeClaim:
After you create the PersistentVolumeClaim, the Kubernetes control plane looks for a PersistentVolume that satisfies the claim’s requirements. If the control plane finds a suitable PersistentVolume with the same StorageClass, it binds the claim to the volume.
Look again at the PersistentVolume:
Now the output shows a STATUS
of Bound
.
Look at the PersistentVolumeClaim:
The output shows that the PersistentVolumeClaim is bound to your PersistentVolume, task-pv-volume
.
The next step is to create a Pod that uses your PersistentVolumeClaim as a volume.
Here is the configuration file for the Pod:
Notice that the Pod’s configuration file specifies a PersistentVolumeClaim, but it does not specify a PersistentVolume. From the Pod’s point of view, the claim is a volume.
Create the Pod:
Verify that the Container in the Pod is running;
Get a shell to the Container running in your Pod:
In your shell, verify that nginx is serving the index.html
file from the hostPath volume:
The output shows the text that you wrote to the index.html
file on the hostPath volume:
Storage configured with a group ID (GID) allows writing only by Pods using the same GID. Mismatched or missing GIDs cause permission denied errors. To reduce the need for coordination with users, an administrator can annotate a PersistentVolume with a GID. Then the GID is automatically added to any Pod that uses the PersistentVolume.
Use the pv.beta.kubernetes.io/gid
annotation as follows:
When a Pod consumes a PersistentVolume that has a GID annotation, the annotated GID is applied to all Containers in the Pod in the same way that GIDs specified in the Pod’s security context are. Every GID, whether it originates from a PersistentVolume annotation or the Pod’s specification, is applied to the first process run in each Container.
Note: When a Pod consumes a PersistentVolume, the GIDs associated with the PersistentVolume are not present on the Pod resource itself.
The configuration file specifies that the volume is at /mnt/data
on the cluster’s Node. The configuration also specifies a size of 10 gibibytes and an access mode of ReadWriteOnce
, which means the volume can be mounted as read-write by a single Node. It defines the manual
for the PersistentVolume, which will be used to bind PersistentVolumeClaim requests to this PersistentVolume.