【问题标题】:ELK Stateful - ERROR: 0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaimsELK Stateful - 错误:0/1 个节点可用:1 个 pod 具有未绑定的即时 PersistentVolumeClaims
【发布时间】:2022-01-10 03:49:11
【问题描述】:

我需要用 ELK 创建一个集群。 弹性应该是有状态的,我无法附加磁盘;发生下面突出显示的错误。 有人有解决办法吗?

辛克雷利,巴勃罗

消息错误:0/1 个节点可用:1 个 pod 具有未绑定的即时 PersistentVolumeClaims。

YAML:

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

错误图片: enter image description here

【问题讨论】:

  • 显示kubectl get pv的输出
  • kubectl get pvc = 在默认命名空间中找不到资源。

标签: elasticsearch kubernetes elk stateful


【解决方案1】:

检查您的 PersistentVolumeClaims (kubectl get pvc -n elk-iot-cloud)。

“具有未绑定的即时 PersistentVolumeClaim”消息表明您的 PVC 状态为“待处理”。这意味着要么您没有 StorageClass “do-block-storage”,要么对应于该类的供应商没有创建基础卷和相应的 PersistentVolume 对象。

检查您的 StorageClasses (kubectl get sc)

确保 StatefulSets volumeClaimTemplate 中的 storageClassName 引用现有的 StorageClass。

确保该 StorageClass 的配置器按预期工作(kubectl 日志)。

或者,对于测试,您可以改用临时存储 - 删除 volumeClaimTemplate,添加一些 emptyDir 卷。

【讨论】:

  • 你好。关于:“检查您的 StorageClasses (kubectl get sc)”。 NAME=data PROVISIONER=kubernetes.io/no-provisioner RECLAIMPOLICY=Delete VOLUMEBINDINGMODE=WaitForFirstConsumer ALLOWVOLUMEEPANSION=false 在这种情况下我只能使用“日期”类型,我是正确的。使用 Elastic Stateful 就足够了吗?
  • 你好我的朋友.. 关于 PVC/ --kubectl get pvc 在默认命名空间中找不到资源。我需要提供相应的那个类吗?
  • 您正在检查默认命名空间,请改为查看 elk-iot-cloud。不确定那个无供应商应该如何工作
猜你喜欢
  • 2022-01-11
  • 2021-01-06
  • 2021-04-07
  • 2022-10-18
  • 2020-12-27
  • 1970-01-01
  • 2020-12-19
  • 2019-12-07
  • 2019-03-11
相关资源
最近更新 更多