This document describes the current state of Volumes in kubernetes. Familiarity with pods is suggested.
A Volume is a directory, possibly with some data in it, which is accessible to a Container. Kubernetes Volumes are similar to but not the same as Docker Volumes.
A Pod specifies which Volumes its containers need in its spec.volumes property.
A process in a Container sees a filesystem view composed from two sources: a single Docker image and zero or more Volumes. A Docker image is at the root of the file hierarchy. Any Volumes are mounted at points on the Docker image; Volumes do not mount on other Volumes and do not have hard links to other Volumes. Each container in the Pod independently specifies where on its image to mount each Volume. This is specified in each container's VolumeMounts property.
Kubernetes currently supports multiple types of Volumes: emptyDir, gcePersistentDisk, awsElasticBlockStore, gitRepo, secret, nfs, iscsi, glusterfs, persistentVolumeClaim, rbd. The community welcomes additional contributions.
Selected volume types are described below.
An EmptyDir volume is created when a Pod is bound to a Node. It is initially empty, when the first Container command starts. Containers in the same pod can all read and write the same files in the EmptyDir volume. When a Pod is unbound, the data in the EmptyDir is deleted forever.
Some uses for an EmptyDir are:
Currently, the user cannot control what kind of media is used for an EmptyDir (see also the section Resources, below). If the Kubelet is configured to use a disk drive, then all EmptyDir volumes will be created on that disk drive. In the future, it is expected that Pods can control whether the EmptyDir is on a disk drive, SSD, or tmpfs.
A Volume with a HostPath property allows access to files on the current node.
Some uses for a HostPath are:
Watch out when using this type of volume, because:
Important: You must create a PD using gcloud
or the GCE API before you can use it
A Volume with a GCEPersistentDisk property allows access to files on a Google Compute Engine (GCE) Persistent Disk.
There are some restrictions when using a GCEPersistentDisk:
Before you can use a GCE PD with a pod, you need to create it.
gcloud compute disks create --size=500GB --zone=us-central1-a my-data-disk
apiVersion: v1
kind: Pod
metadata:
name: testpd
spec:
containers:
- image: kubernetes/pause
name: testcontainer
volumeMounts:
- mountPath: /testpd
name: testvolume
volumes:
- name: testvolume
# This GCE PD must already exist.
gcePersistentDisk:
pdName: test
fsType: ext4
Important: You must create an EBS volume using aws ec2 create-volume
or the AWS API before you can use it
A Volume with an awsElasticBlockStore property allows access to files on a AWS EBS volume
There are some restrictions when using an awsElasticBlockStore volume:
Before you can use a EBS volume with a pod, you need to create it.
aws ec2 create-volume --availability-zone eu-west-1a --size 10 --volume-type gp2
Make sure the zone matches the zone you brought up your cluster in. (And also check that the size and EBS volume type are suitable for your use!)
apiVersion: v1
kind: Pod
metadata:
name: testpd
spec:
containers:
- image: kubernetes/pause
name: testcontainer
volumeMounts:
- mountPath: /testpd
name: testvolume
volumes:
- name: testvolume
# This AWS EBS volume must already exist.
awsElasticBlockStore:
volumeID: aws://<availability-zone>/<volume-id>
fsType: ext4
(Note: the syntax of volumeID is currently awkward; #10181 fixes it)
Kubernetes NFS volumes allow an existing NFS share to be made available to containers within a pod.
See the NFS Pod examples section for more details.
For example, nfs-web-pod.yaml demonstrates how to specify the usage of an NFS volume within a pod.
In this example one can see that a volumeMount
called "nfs" is being mounted onto /var/www/html
in the container "web".
The volume "nfs" is defined as type nfs
, with the NFS server serving from nfs-server.default.kube.local
and exporting directory /
as the share.
The mount being created in this example is not read only.
Secret volumes are used to pass sensitive information, such as passwords, to pods that mount these volumes. Secrets are described here.
The storage media (Disk, SSD, or memory) of an EmptyDir volume is determined by the media of the filesystem holding the kubelet root dir (typically /var/lib/kubelet
).
There is no limit on how much space an EmptyDir or HostPath volume can consume, and no isolation between containers or between pods.
In the future, we expect that EmptyDir and HostPath volumes will be able to request a certain amount of space using a compute resource specification, and to select the type of media to use, for clusters that have several media types.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。