2016-07-28 11 views
1

複数のレプリカを持つ配置にボリュームを使用したいとします。 PersistentVolumeClaimを定義して各レプリカごとに生成するにはどうすればよいですか?現時点では(私は下の例を参照)、ボリュームを生成してポッドに割り当てることができます。問題は、1つのボリュームだけがこのエラーメッセージの原因が生成されることを、次のとおりです。Kubernetesの配備でボリュームを使用する方法は?

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を使用しています。


例:

--- 
kind: PersistentVolumeClaim 
apiVersion: v1 
metadata: 
    name: solr-datadir 
    annotations: 
    volume.alpha.kubernetes.io/storage-class: anything 
spec: 
    accessModes: 
    - ReadWriteOnce 
    resources: 
    requests: 
     storage: 50Gi 
--- 
apiVersion: extensions/v1beta1 
kind: Deployment 

metadata: 
    name: solr 
    labels: 
    team: platform 
    tier: search 
    app: solr 

spec: 
    revisionHistoryLimit: 3 
    replicas: 3 

    template: 
    metadata: 
     name: solr 
     labels: 
     team: platform 
     tier: search 
     app: solr 

    spec: 
     containers: 
     - name: solr 
     image: solr:6-alpine 
     imagePullPolicy: IfNotPresent 
     ports: 
     - name: http 
      containerPort: 80 
     resources: 
      requests: 
      cpu: 512m 
      memory: 512Mi 
     command: 
     - /bin/bash 
     args: 
     - -c 
     - /opt/solr/bin/solr start -f -z zookeeper:2181 
     volumeMounts: 
     - mountPath: "/opt/solr/server/solr/mycores" 
      name: datadir 
     volumes: 
     - name: datadir 
     persistentVolumeClaim: 
      claimName: 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 

答えて

9

ReplicaSetsは、ボリュームをステートレスとして扱います。レプリカポッドテンプレートで読み書き可能なボリュームを指定すると、同じボリュームがそのレプリカセット内のすべてのポッドで使用されます。そのボリュームが一度に1つのノード(GCE PDなど)にのみ読み書き可能に接続できる場合、最初のポッドがスケジュールされて開始された後、ポッドの後続のインスタンスが別のノードにスケジュールされていると、これは、ボリュームを2番目のノードに接続できないためです。

あなたが探しているのは、各レプリカのボリュームを生成できるペットセットです。 http://kubernetes.io/docs/user-guide/petset/を参照してください。この機能は現在アルファベットになっていますが、ご使用の用途に対処する必要があります。

更新: Kubernetes 1.5+ PetSetsの名前がStatefulSetに変更されました。ドキュメントhereを参照してください。

+0

デプロイメントは現在、PodsおよびReplica Setsのみをサポートし、PetSetsはサポートしていません。 –

+0

それはまだ少なくともベータではGKEでサポートされていません:( –

+0

GKEで1.5を待っています –

関連する問題