2017-01-04 3 views
1

현재 GCE 표준 컨테이너 클러스터를 사용하고 있으며 많은 성공과 즐거움을 가지고 있습니다. 그러나 GCE Persistent 디스크를 프로비저닝하는 것에 대한 질문이있었습니다.Kubernetes provisioning GCE 영구 디스크가 가끔 실패합니다.

this Kubernetes 문서 양식에 설명 된대로.

kind: StorageClass 
apiVersion: storage.k8s.io/v1beta1 
metadata: 
    annotations: 
     storageclass.beta.kubernetes.io/is-default-class: "true" 
    name: slow 
provisioner: kubernetes.io/gce-pd 
parameters: 
    type: pd-standard 

kind: StorageClass 
apiVersion: storage.k8s.io/v1beta1 
metadata: 
    name: fast 
provisioner: kubernetes.io/gce-pd 
parameters: 
    type: pd-ssd 

나는 지금 다음 볼륨 청구 만드는 경우 : 저는 두 YAML 파일을 생성 한 디스크를 완벽하게 작성되는

{ 
    "kind": "PersistentVolumeClaim", 
    "apiVersion": "v1", 
    "metadata": { 
    "name": "claim-test", 
    "annotations": { 
     "volume.beta.kubernetes.io/storage-class": "hdd" 
    } 
    }, 
    "spec": { 
    "accessModes": [ 
     "ReadWriteOnce" 
    ], 
    "resources": { 
     "requests": { 
     "storage": "3Gi" 
     } 
    } 
    } 
} 

을! 지금 단위

apiVersion: v1 
kind: ReplicationController 
metadata: 
    name: nfs-server 
spec: 
    replicas: 1 
    selector: 
    role: nfs-server 
    template: 
    metadata: 
     labels: 
     role: nfs-server 
    spec: 
     containers: 
     - name: nfs-server 
     image: gcr.io/google_containers/volume-nfs 
     ports: 
      - name: nfs 
      containerPort: 2049 
      - name: mountd 
      containerPort: 20048 
      - name: rpcbind 
      containerPort: 111 
     securityContext: 
      privileged: true 
     volumeMounts: 
      - mountPath: /exports 
      name: mypvc 
     volumes: 
     - name: mypvc 
      persistentVolumeClaim: 

     claimName: claim-test 

다음 시작하는 경우 그리고 디스크가 완벽하게 장착됩니다 만 여러 번 I합니다 (kubelet.log 파일에서 찾을 수없는 그 이상)의 다음과 같은 오류 우연히 발견 :

에 실패 GCE 영구 디스크를 찾을 수 없음 : diskName = "....."zone = "europe-west1-b" 포드 동기화 중 오류 발생 : 건너 뛰기 : 제한 시간이 만료 됨 포드 "...."에 대한 볼륨 마운트/마운트 대기. 연결되지 않은 볼륨/마운트되지 않은 볼륨의 목록 = [....]

때로는 포드가 완벽하게 부팅되지만 때로는 충돌이 발생합니다. 내가 찾을 수있는 유일한 것은 PVC와 RC 자체를 만드는 사이에 충분한 시간이 필요하다는 것입니다. 나는 여러 번 시도했지만 동일한 불확실한 결과를 보았다.

누군가가 내게 제안이나 도움을 주길 바랍니다.

미리 감사드립니다. 안부,

Hacor

귀하의 의견에 미리
+0

죄송합니다. 우리는 이것을 디버그하고 싶습니다. 오프라인 나와 함께 당신의 GKE 클러스터 정보 (프로젝트 이름, 영역/지역 및 클러스터 이름)을 공유 할 수 마지막 repro--의 정확한 시간과 함께, (https://github.com/saad-ali에서 연락처 정보) 우리는 마스터 로그를보고 무슨 일이 일어나는지 살펴볼 것입니다. GCE와 –

+0

PVC를 사용하기 매우 곤란하다 : 포드는 임의의 기계에서 시작되는 동안 디스크는 단일 시스템에 장착됩니다. 포드는이 때문에 PV를 찾지 못할 수도 있습니다. 이를 방지하기 위해 창을 컴퓨터에 바인딩해야합니다. Google이 디스크를 여러 대의 컴퓨터에 마운트 할 수있게 될 때까지 포드에서 직접 마운트 한 GCE 스토리지를 사용하는 것이 더 효과적인 방법입니다 –

답변

0

감사합니다! 며칠 동안 검색을 마친 후에 마침내 문제가 무엇인지 파악할 수 있었고 다른 사용자에게 유용하기 때문에 게시했습니다.

내 컨트롤러에 NFS 스토리지를 제공하는 복제 컨트롤러로 Kubernetes에 NFS example을 사용하고 있었지만 NFS 서버와 PV, PVC가 때때로 삭제되면 NFS 공유가 노드 자체에 걸려서 특정 순서로이 요소를 삭제하지 않았다는 사실과 관련이 있다고 생각합니다. 따라서 노드가 공유가 새 주식을 자체 또는 포드에 장착 할 수 없게됩니다.

클러스터에서 일부 응용 프로그램 (NFS, PV, PVC 및 기타 구성 요소)을 삭제 한 후에도 문제가 항상 발생했음을 확인했습니다. GCE에서 새 클러스터를 만든 경우 앱을 삭제할 때까지 앱을 완벽하게 만들 수 있습니다. 문제가 발생하면 ...올바른 삭제 명령은 내가 확실히 알 수없는,하지만 내가 생각하는 무엇

:

  • 포드는
  • PV를 NFS 공유를 사용하여 NFS 공유의 PVC는
  • NFS 서버

PV가 삭제되기 전에 창을 삭제하는 데 시간이 오래 걸리면 노드가 사용 중이므로 삭제할 수없는 마운트가 발생하여 문제가 발생합니다.

솔직히 말해서 지금은 외부에서 프로비저닝 된 GlusterFS 클러스터로 이동하고 있습니다. 누군가가 도움이되기를 바랍니다.

감사합니다,

Hacor

문제 Hacor에 대한