По каким причинам "Невозможно подключить тома для модуля" "истекло время ожидания ожидания ..." в Google Kubernetes Engine? - PullRequest
0 голосов
/ 25 апреля 2019

Я развертываю 3 модуля в Google Kubernetes Engine. Два из модулей совместно используют привязки ReadOnlyMany к ранее существующему постоянному тому, сопоставленному с gcePersistentDisk. Одна из стручков начинается. Другой нет, и в конечном итоге истекает с ошибкой «Unable to mount volumes for pod»

Нет ошибок, отображаемых в kubectl describe pv или kubectl describe pvc. kubectl describe pvc показывает, что каждое постоянное утверждение тома связано с модулем, который не запускается.

Соответствующая конфигурация:

kind: PersistentVolume
apiVersion: v1
metadata:
 name: configuration
spec:
  capacity:
    storage: 1G
  accessModes:
    - ReadOnlyMany
  storageClassName: ""
  gcePersistentDisk:
    fsType: ext4
    readOnly: true
    pdName: my-persistent-disk-name
  persistentVolumeReclaimPolicy: Retain
---
kind: PersistentVolume
apiVersion: v1
metadata:
 name: kb
spec:
  capacity:
    storage: 1G
  accessModes:
    - ReadOnlyMany
  storageClassName: ""
  gcePersistentDisk:
    fsType: ext4
    readOnly: true
    pdName: my-persistent-disk-name
  persistentVolumeReclaimPolicy: Retain

---
kind: PersistentVolume
apiVersion: v1
metadata:
 name: content
spec:
  capacity:
    storage: 1G
  accessModes:
    - ReadOnlyMany
  storageClassName: ""
  gcePersistentDisk:
    fsType: ext4
    readOnly: true
    pdName: my-persistent-disk-name
  persistentVolumeReclaimPolicy: Retain
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: config-pvc
spec:
  accessModes:
    - ReadOnlyMany
  volumeName: configuration
  storageClassName: ""
  resources:
    requests:
      storage: 1G
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: kb-pvc
spec:
  accessModes:
    - ReadOnlyMany
  volumeName: kb
  storageClassName: ""
  resources:
    requests:
      storage: 1G
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: content-pvc
spec:
  accessModes:
    - ReadOnlyMany
  volumeName: content
  storageClassName: ""
  resources:
    requests:
      storage: 1G
---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: worker
spec:
  template:
    spec:
      containers:
        - name: esp
          image: gcr.io/endpoints-release/endpoints-runtime:1.20.0
          args: [ "-http-port", "8080", ... ]
        - name: workers
          image: my-registry/my-image:my-version
          volumeMounts:
            - name: config
              mountPath: /config
              subPath: ./config
              readOnly: true
            - name: kb
              mountPath: /kb
              subPath: ./kb
              readOnly: true
            - name: content
              mountPath: /content
              subPath: ./content
              readOnly: true
      volumes:
         - name: config
           persistentVolumeClaim: 
             claimName: config-pvc
             readOnly: true
         - name: kb
           persistentVolumeClaim: 
             claimName: kb-pvc
             readOnly: true
         - name: content
           persistentVolumeClaim:
             claimName: content-pvc
             readOnly: true
---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: another-worker
spec:
  template:
    spec:
      containers:
        - name: another-worker-name
          image: my-registry/my-other-image:my-other-version
         command: ["./run-server.sh", "--path-data", "/config/data/"]
          args: []
          volumeMounts:
            - name: kb
              mountPath: /config
              subPath: ./kb/i2k_context
              readOnly: true
      volumes:        
        - name: kb
          persistentVolumeClaim:
            claimName: kb-pvc
            readOnly: true

Модуль с именем «worker» в приведенном выше примере должен запуститься. Это не так, и в конечном итоге показывает ошибку тайм-аута с не подключенными и / или неподключенными томами.

Модуль с именем «Другой работник» запускается и работает, как и ожидалось.

1 Ответ

0 голосов
/ 25 апреля 2019

Похоже, что GKE не позволяет нескольким PersistentVolume объектам отображаться на один и тот же gcePersistentDisk, даже если все тома и утверждения о томах являются ReadOnlyMany.

Причина, по которой у меня было 3 разных PV для одного и того же gcePersistentDisk, заключалась в том, чтобы обеспечить гибкость развертывания - возможность привязки этих трех томов к разным постоянным дискам.

Поскольку в данный момент я не использую эту функцию, я изменил volumes и volumeMounts в рабочем модуле, чтобы использовать один PVC с разными subPath и mountPath, и модуль запустился.немедленно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...