如何在Kubernetes部署中使用卷?

如何在Kubernetes部署中使用卷?,kubernetes,Kubernetes,我想将卷用于具有多个复制副本的部署。如何定义一个PersistentVolumeClaim,以便为每个副本生成它?目前(参见下面的示例),我能够生成一个卷并将其分配给POD。问题是,只生成一个卷,这会导致以下错误消息: 38m 1m 18 {kubelet worker-1.loc} Warning FailedMount Unable to mount volumes for pod "solr-1254544937-zblou_default(610b157c-549e

我想将卷用于具有多个复制副本的部署。如何定义一个
PersistentVolumeClaim
,以便为每个副本生成它?目前(参见下面的示例),我能够生成一个卷并将其分配给POD。问题是,只生成一个卷,这会导致以下错误消息:

  38m   1m  18  {kubelet worker-1.loc}      Warning FailedMount Unable to mount volumes for pod "solr-1254544937-zblou_default(610b157c-549e-11e6-a624-0238b97cfe8f)": timeout expired waiting for volumes to attach/mount for pod "solr-1254544937-zblou"/"default". list of unattached/unmounted volumes=[datadir]
  38m   1m  18  {kubelet worker-1.loc}      Warning FailedSync  Error syncing pod, skipping: timeout expired waiting for volumes to attach/mount for pod "solr-1254544937-zblou"/"default". list of unattached/unmounted volumes=[datadir]
我如何告诉Kubernetes为每个复制副本生成一个卷

我使用的是Kubernetes 1.3


例如:

---
种类:PersistentVolumeClaim
版本:v1
元数据:
姓名:solr datadir
注释:
volume.alpha.kubernetes.io/storage-class:任何内容
规格:
访问模式:
-读写
资源:
请求:
储存量:50Gi
---
apiVersion:extensions/v1beta1
种类:部署
元数据:
姓名:solr
标签:
团队:平台
第三层:搜索
app:solr
规格:
修订历史限制:3
副本:3份
模板:
元数据:
姓名:solr
标签:
团队:平台
第三层:搜索
app:solr
规格:
容器:
-姓名:solr
图片:solr:6-10
imagePullPolicy:如果不存在
端口:
-名称:http
集装箱港口:80
资源:
请求:
中央处理器:512m
内存:512Mi
命令:
-/bin/bash
args:
--c
-/opt/solr/bin/solr start-f-z动物园管理员:2181
体积数量:
-挂载路径:“/opt/solr/server/solr/mycores”
姓名:datadir
卷数:
-姓名:datadir
persistentVolumeClaim:
索赔名称:solr datadir
生成的吊舱:

$ kubectl get pods -lapp=solr 
NAME                    READY     STATUS              RESTARTS   AGE
solr-1254544937-chenr   1/1       Running             0          55m
solr-1254544937-gjud0   0/1       ContainerCreating   0          55m
solr-1254544937-zblou   0/1       ContainerCreating   0          55m
生成的卷:

$ kubectl get pv
NAME                                       CAPACITY   ACCESSMODES   STATUS    CLAIM                         REASON    AGE
pvc-3955e8f1-549e-11e6-94be-060ea3314be5   50Gi       RWO           Bound     default/solr-datadir                    57m
生成的索赔:

$ kubectl get pvc
NAME                  STATUS    VOLUME                                     CAPACITY   ACCESSMODES   AGE
solr-datadir          Bound     pvc-3955e8f1-549e-11e6-94be-060ea3314be5   0                        57m

复制集将卷视为无状态。如果您的replicaset pod模板指定了一个只能以读写方式连接一次的卷,则该replicaset中的所有pod都将使用同一个卷。如果该卷一次只能以读写方式连接到一个节点(如GCE PDs),则在成功调度并启动第一个pod后,如果将pod的后续实例调度到其他节点,则它们将无法启动,因为该卷将无法连接到第二个节点

您需要的是Pet集,它使您能够为每个复制副本生成一个卷。请看,该功能目前处于alpha状态,但应解决您的用例


更新:在Kubernetes 1.5版本中,Petset被重命名为Statefulset。请参阅文档。

注意,部署目前仅支持POD和副本集,而不支持PETSET。至少在测试版中,GKE还不支持这一点:(等待GKE页面上的1.5未找到此功能已重命名为StatefulSets请参阅