系统集成Kubernetes

查看其它 1 个回答zzhenglei的回答

zzhengleizzhenglei  技术经理 , 某保险

因为每个容器都有自己独立的文件系统,默认是无法共享的。Kubernetes使用存储卷来管理文件系统。卷不是Kubernetes的顶级资源,而是Pod的一部分。Pod中的容器通过卷来共享数据。

卷有很多种,下边介绍几个简单的:

emptyDir,适用用Pod中多个容器共享数据,生命周期和Pod相同,用于临时存储。

gitRepo,通过检出Git仓库的内容来初始化的卷。本质上还是一个emptyDir

hostPath,将节点上的目录挂在到Pod中,这个是持久性的,但是只能节点上访问,因此一般使用hostPath卷的Pod会使用节点选择器选择固定的节点运行。

使用网络存储,一些集群的基础设施会提供网络化的存储,比如集群运行在GCE上,可以使用GCE持久磁盘;如果运行在AWS EC2上,可以使用awsElasticBlockStorage卷;如果运行在Azure上可以使用azureDisk卷。这些都是持久化存储。

上述方法都需要Pod的制作者理解存储的实现,Kubernetes提供了一种将将存储和Pod解耦的技术,这就是PV和PVC。运维人员和底层存储打交道,预先创建一些持久卷(PV);存储的使用者无需知道存储的底层细节,只需要描述所需存的存储的大小和权限等要求,也就是创建一个持久卷声明(PVC),Kubernetes会自动找到适当的持久卷并将其绑定到声明。因为一个PV只能绑定一个PVC,因此很容易造成浪费。Kubernetes又引入了一个StorageClass的资源,用来动态的创建持久卷,能更充分利用存储空间。运维人员先创建多个StorageClass,存储使用者在PVC声明中指定StorageClass类型,以及存储大小,StorageClass根据PVC动态的创建PV。

保险 · 2019-12-30
浏览820

回答者

zzhenglei
技术经理某保险
擅长领域: 云计算容器一体化运维

zzhenglei 最近回答过的问题

回答状态

  • 发布时间:2019-12-30
  • 关注会员:3 人
  • 回答浏览:820
  • X社区推广