Creating multi-container pods

pod里面的每一个container都有他自己的filesystem,都是isolated。因为filesystem都来自于container的image。

每次image有新的file在build time加进来,container都会重启,container重启还有可能是因为process died或者liveness probe提示k8s这个container不再健康。container重启后新的container不会再看到旧的container写进filesystem的任何东西。但有些时候你想要存储旧的文件,包括数据等。k8s通过volume来提供这个功能。

volume是随着pod的生命周期而存在的,但取决于volume的type,volume的files可以保留并留到新的volume中下载。所以container重启volume也能存在。且一个pod里的多个container可以共享volume,这也就是co-related container要部署到同一个pod里的原因。container想要用volume,只需要在自己的filetree中下载volume就行。

volume type

  • emptyDir—A simple empty directory used for storing transient data.
  • hostPath—Used for mounting directories from the worker node’s filesystem into the pod.so youcan access any files on the nodes filesystem,but do not use it to store data ,because once the pod is failed,it may move to another node.
  • gitRepo—A volume initialized by checking out the contents of a Git repository.
  • nfs—An NFS share mounted into the pod.
  • gcePersistentDisk (Google Compute Engine Persistent Disk), awsElasticBlockStore (Amazon Web Services Elastic Block Store Volume), azureDisk (Microsoft Azure Disk Volume)—Used for mounting cloud provider-specific storage.
  • cinder, cephfs, iscsi, flocker, glusterfs, quobyte, rbd, flexVolume, vsphere-Volume, photonPersistentDisk, scaleIO—Used for mounting other types of network storage.
  • configMap, secret, downwardAPI—Special types of volumes used to expose certain Kubernetes resources and cluster information to the pod.
  • persistentVolumeClaim—A way to use a pre- or dynamically provisioned persistent storage. (We’ll talk about them in the last section of this chapter.)

Creating a volume to share disk storage between containers

emptyDir volume的内容会随着pod被删而被删。

gitRepo volume是基于emptydir volume的,通常用于克隆gitRepository,并当pod启动时(container创建前)检查specific revision。

gitrepo不会随时同步远端的gitRepository,但当pod被删后,创建新的pod会导致gitrepo去同步gitRepository里的最新的image。

所以每次你需要push changes到gitRepo并启动新的service都需要杀掉这个pod。

Using a Git repository inside a pod

 

Attaching persistent storage such as a GCE Persistent Disk to pods

hostpath is one of the persistent storage

可以建一个pod来专门运行一个mongoDB,用于专门供整个cluster来进行数据的存储和访问。通过连接persistentDisk来存储,来实现persistent storage。

 

Using pre-provisioned persistent storage

 

PersistentVolumes are provisioned by cluster admins and consumed by pods through PersistentVolumeClaims.

 

PersistentVolumes, like cluster Nodes, don’t belong to any namespace, unlike pods and PersistentVolumeClaims.

They’re cluster-level resources like nodes.

pvc是可以在一个namespace中创建并被同一个namespace中的pod使用的

一个PV绑定一个pvc,在pvc释放pv前,这个pv只能被这个pvc使用。

access mode的缩写:

  • RWO—ReadWriteOnce—Only a single node can mount the volume for reading and writing.
  • ROX—ReadOnlyMany—Multiple nodes can mount the volume for reading.
  • RWX—ReadWriteMany—Multiple nodes can mount the volume for both reading and writing.

Dynamic provisioning of persistent storage

可以让cluster admin deploy一个persistentVolume provisioner 并定义storageClassObjects 来让用户选择想要哪个pv,

用户可以在pvc中配置storageClass。

 

 

 

 

在本地写一个yaml文件,然后根据该yaml文件tkub create -f指向该文件,他就会在分布式文件系统里根据该yaml文件创建出该volume(一个文件),然后将node上已创建的volume(该文件)挂载进pod即可。可用hostpath指定该volume文件在node中的路径。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐