Состояние ELK — ОШИБКА: доступно 0/1 узлов: 1 модуль имеет несвязанные немедленные постоянные требования

#elasticsearch #kubernetes #elk #stateful

#эластичный поиск #кубернетес #лось #состояние

Вопрос:

Мне нужно создать кластер с ELK. Эластичный должен быть в состоянии, я не могу подключить диски; возникает ошибка, выделенная ниже. У кого-нибудь есть какое-нибудь решение?

Синкрели, Пабло

Сообщение об ошибке: доступно 0/1 узлов: 1 модуль имеет несвязанные немедленные требования PersistentVolumeClaims.

ЯМЛ:

 apiVersion: v1 kind: ServiceAccount metadata:  name: elasticsearch-logging  namespace: elk-iot-cloud  labels:  k8s-app: elasticsearch-logging --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata:  name: elasticsearch-logging  labels:  k8s-app: elasticsearch-logging rules: - apiGroups:  - ""  resources:  - "services"  - "namespaces"  - "endpoints"  verbs:  - "get" --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata:  namespace: elk-iot-cloud  name: elasticsearch-logging  labels:  k8s-app: elasticsearch-logging subjects: - kind: ServiceAccount  name: elasticsearch-logging  namespace: elk-iot-cloud  apiGroup: "" roleRef:  kind: ClusterRole  name: elasticsearch-logging  apiGroup: "" --- apiVersion: apps/v1 kind: StatefulSet metadata:  name: elasticsearch-logging  namespace: elk-iot-cloud  labels:  k8s-app: elasticsearch-logging spec:  serviceName: elasticsearch-logging  replicas: 3  updateStrategy:  type: RollingUpdate  selector:  matchLabels:  k8s-app: elasticsearch-logging  template:  metadata:  labels:  k8s-app: elasticsearch-logging  spec:  serviceAccountName: elasticsearch-logging  containers:  - image: docker.elastic.co/elasticsearch/elasticsearch:7.15.1   name: elasticsearch-logging  ports:  - containerPort: 9200  name: db  protocol: TCP  - containerPort: 9300  name: transport  protocol: TCP  volumeMounts:  - name: data  mountPath: /usr/share/elasticsearch/data  env:  - name: cluster.name  value: k8s-logs  - name: node.name  valueFrom:  fieldRef:  fieldPath: metadata.name  # sets a list of master-eligible nodes in the cluster.  - name: discovery.seed_hosts  value: 'elasticsearch-logging-0.elasticsearch-logging.elk-iot-cloud.svc.cluster.local,elasticsearch-logging-1.elasticsearch-logging.elk-iot-cloud.svc.cluster.local ,elasticsearch-logging-2.elasticsearch-logging.elk-iot-cloud.svc.cluster.local'  # specifies a list of master-eligible nodes that will participate in the master election process.  - name: cluster.initial_master_nodes  value: 'elasticsearch-logging-0,elasticsearch-logging-1,elasticsearch-logging-2'  - name: ES_JAVA_OPTS  value: '-Xms1g -Xmx1g'  - name: ELASTICSEARCH_USERNAME  value: 'elastic'  - name: ELASTIC_PASSWORD  value: 'elastic'  #- name: xpack.license.self_generated.type  # value: "basic"  - name: xpack.security.enabled  value: 'true'  #- name: xpack.security.transport.ssl.enabled  # value: 'true'  #- name: xpack.security.audit.enabled  # value: 'true'  - name: xpack.monitoring.collection.enabled  value: 'true'  volumes:  - name: elasticsearch-logging  emptyDir: {}  initContainers:  - name: fix-permissions  image: busybox  command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]  securityContext:  privileged: true  volumeMounts:  - name: data  mountPath: /usr/share/elasticsearch/data   - name: elasticsearch-logging-init  image: busybox  command: ["/sbin/sysctl", "-w", "vm.max_map_count=262144"]   securityContext:  privileged: true  - name: increase-fd-ulimit  image: busybox  command: ["sh", "-c", "ulimit -n 65536"]  securityContext:  privileged: true  volumeClaimTemplates:  - metadata:  name: data  labels:  app: elasticsearch-logging  spec:  accessModes: [ "ReadWriteOnce" ]  storageClassName: do-block-storage  resources:  requests:  storage: 50Gi --- apiVersion: v1 kind: Service metadata:  name: elasticsearch-logging  namespace: elk-iot-cloud  labels:  k8s-app: elasticsearch-logging spec:  ports:  - port: 9200  protocol: TCP  targetPort: db  selector:  k8s-app: elasticsearch-logging --- kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:  name: data  namespace: elk-iot-cloud provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer --- apiVersion: v1 kind: PersistentVolume metadata:  name: data-pv0  namespace: elk-iot-cloud spec:  capacity:  storage: 5Gi  accessModes:  - ReadWriteOnce  persistentVolumeReclaimPolicy: Retain  storageClassName: data  local:   path: /mnt/disk/vol0  nodeAffinity:  required:  nodeSelectorTerms:  - matchExpressions:  - key: kubernetes.io/hostname  operator: In  values:  - elasticsearch-logging-0 --- apiVersion: v1 kind: PersistentVolume metadata:  name: data-pv1  namespace: elk-iot-cloud spec:  capacity:  storage: 5Gi  accessModes:  - ReadWriteOnce  persistentVolumeReclaimPolicy: Retain  storageClassName: data  local:   path: /mnt/disk/vol1   nodeAffinity:  required:  nodeSelectorTerms:  - matchExpressions:  - key: kubernetes.io/hostname  operator: In  values:  - elasticsearch-logging-1  --- apiVersion: v1 kind: PersistentVolume metadata:  name: data-pv2  namespace: elk-iot-cloud spec:  capacity:  storage: 5Gi  accessModes:  - ReadWriteOnce  persistentVolumeReclaimPolicy: Retain  storageClassName: data  local:   path: /mnt/disk/vol2  nodeAffinity:  required:  nodeSelectorTerms:  - matchExpressions:  - key: kubernetes.io/hostname  operator: In  values:  - elasticsearch-logging-2   

Конфигурация: Ubuntu / Microk8s / K8S 1.21.7

Изображение ошибки: введите описание изображения здесь

Комментарии:

1. показать выходные данные kubectl get pv

2. kubectl get pvc = В пространстве имен по умолчанию не найдено ресурсов.

Ответ №1:

Проверьте свои постоянные требования (kubectl получает pvc -n elk-iot-облако).

Сообщение «имеет несвязанный немедленный PersistentVolumeClaim» предполагает, что ваш статус PVC «Ожидает». Это означает, что либо у вас нет класса хранилища «do-block-storage», либо поставщик, соответствующий этому классу, не создавал базовый том и соответствующий объект PersistentVolume.

Проверьте свои классы хранения (kubectl получить sc)

Убедитесь, что имя storageClassName в вашей табличке volumeClaimTemplate для наборов состояний ссылается на существующий класс хранилища.

Убедитесь, что поставщик для этого класса хранения работает должным образом (журналы kubectl).

В качестве альтернативы, для теста вы можете вместо этого использовать эфемерное хранилище — удалите табличку volumeClaimTemplate, вместо этого добавьте какой-нибудь пустой том.

Комментарии:

1. Привет. О программе: «Проверьте свои классы хранения (kubectl get sc)». ИМЯ=данные PROVISIONER=kubernetes.io/no-provisioner RECLAIMPOLICY=Удалить ОБЪЕМНЫЙ РЕЖИМ=WaitForFirstConsumer ALLOWVOLUMEEXPANSION=false В этом случае я могу использовать только тип «дата», я прав. Будет ли достаточно использовать эластичное состояние с сохранением состояния?

2. Привет, мой друг.. о ПВХ/ —kubectl получить пвх Нет ресурсов, найденных в пространстве имен по умолчанию. Мне нужно подготовить соответствующий этому классу ?

3. вы проверяете пространство имен по умолчанию, вместо этого посмотрите в elk-iot-cloud. не уверен, как должен работать этот поставщик без обеспечения