#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. не уверен, как должен работать этот поставщик без обеспечения