Стойкое крепление Kubernetes не найдено - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь создать и смонтировать том, но застреваю.

Эта часть создает хранилище:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvclaim2
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: managed-premium
  resources:
    requests:
      storage: 5Gi

Ниже приводится продолжение моего раздела развертывания:

volumeMounts:
- name: config
  mountPath: /config
  readOnly: true
args:
- --configfile=/config/traefik.toml


volumes:
  - name: config
    persistentVolumeClaim:
      claimName: pvclaim2
    configMap:
    name: traefik-config

Я получаю следующее сообщение об ошибке:

Развертывание "traefik-ingress-controller" недопустимо: spec.template.spec.containers [0] .volumeMounts [0].name: не найдено: "config"

Любая помощь приветствуется.

ОБНОВЛЕНИЕ:

Output from describe pv:

Conditions:
  Type           Status
  PodScheduled   False
Volumes:
  certs:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  pvclaim101
    ReadOnly:   false
  config:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      traefik-conf
    Optional:  false
  traefik-ingress-controller-token-6npxp:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  traefik-ingress-controller-token-6npxp
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason            Age               From               Message
  ----     ------            ----              ----               -------
  Warning  FailedScheduling  1m (x25 over 2m)  default-scheduler  persistentvolumeclaim "pvclaim101" not found

Ответы [ 4 ]

0 голосов
/ 22 декабря 2018

Я собираюсь сделать дикое предположение, ваш входной контроллер traefik работает в том же пространстве имен, что и ваш pvc?Pvc - это область имен, в вашем примере это пространство имен по умолчанию.Обычно мы внедряем ingress в его собственное пространство имен, такое как «ingress» и другие связанные с ним модули.

0 голосов
/ 21 декабря 2018

Это потому, что нет PersistentVolume (PV) для привязки к этому PersistentVolumeClaim (PVC).Это может быть связано с несколькими причинами.

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

Вторая причина может заключаться в том, что любой параметр любого из существующих и несвязанных PV не сопоставляется с PVC.Поэтому проверьте, соответствуют ли емкость, режимы доступа, класс хранения и метки PV и PVC.В качестве примера, если вы хотите, чтобы ваш PVC storageClassName: managed-premium, удостоверился, что ваш PV также имеет тип класса хранения.

И последней вещью может быть PV, который, по вашему мнению, существует, и сопоставляет все параметры с PVC, привязанным к некоторому другому PVC.PV - это атомная абстракция, и вы не можете использовать один PV для нескольких PVC.

Вы можете использовать kubectl get pv, чтобы проверить, есть ли тома с доступным STATUS и соответствующие требованиям PVC.

0 голосов
/ 21 декабря 2018

Давайте отладим:

1) имя вашего PersistentVolumeClaim равно pvclaim2, и все выглядит хорошо

2) VolumeMounts раздел выглядит нормально.config находится в режиме только для чтения, и это правильно для конфигурации.

3) volumes В разделе описывается, что тип тома config - это persistentVolumeClaim и он связывается с PVC pvclaim2 -Хорошо!

4) Далее мы видим, что тип тома config - это configMap вместе с PersistentVolumeClaim одновременно ... и это будет причиной ошибок в будущем.Предполагая, что вы хотите использовать том config в качестве монтирования для конфигурационного файла traefik.toml, вам не нужен PVC (особенно 5 гигабайт в режиме только для чтения)

Все, что вам нужно сделать, это создать configMap.Синтаксис команды:

kubectl create configmap <map-name> <data-source>

В вашем случае это можно сделать следующим образом:

kubectl create configmap traefik-config --from-file=<your-local-path-to-file>/traefik.toml

Затем вам необходимо обновить свое развертывание:

containers:
- image: your-image
  name: your-containers
  volumeMounts:
  - name: config
    mountPath: /config
    readOnly: true # as far as i know configmaps are read-only since 1.9.5
  - name: some-persistent-storage-name
    mountPath: /<some-mount-point-for-storage>

...

volumes:
  - name: config
    configMap:
      name: traefik-config
  - name: some-persistent-storage-name
    persistentVolumeClaim:
      claimName: pvclaim2
0 голосов
/ 21 декабря 2018

Похоже, у вас есть отступ, он находит VolumeMount, но не Volume.Примерно так должно работать:

containers:
- image: your-image
  name: your-containers
  volumeMounts:
  - name: config
    mountPath: /config
    readOnly: true
  args:
  - --configfile=/config/traefik.toml
volumes:
  - name: config
    persistentVolumeClaim:
      claimName: pvclaim2
    configMap:
    name: traefik-config
...