Home > Software design >  Elasticsearch PVC
Elasticsearch PVC

Time:09-24

I am trying to build a es cluster using the helm chart with the following es yaml: values:

resources:
  requests:
    cpu: ".1"
    memory: "2Gi"
  limits:
    cpu: "1"
    memory: "3.5Gi"
volumeClaimTemplate:
  accessModes: ["ReadWriteOnce"]
  resources:
    requests:
      storage: 500Gi
esConfig:
  elasticsearch.yml: |
    path.data: /mnt/azure

The problem is that the pods are throwing the following error at the start

"Caused by: java.nio.file.AccessDeniedException: /mnt/azure"

I put the azure disk as default storage in order not to specify the storage class. I don't know if this is the best practice or should i create the storage and after that mount it to the pods

CodePudding user response:

The mounted Elasticsearch data directory by default is owned by root. Try the following container to change it before Elasticsearch starts:

initContainers:
- name: chown
  image: busybox
  imagePullPolicy: IfNotPresent
  command:
  - chown
  args:
  - 1000:1000
  - /mnt/azure
  volumeMounts:
  - name: <your volume claim template name>
    mountPath: /mnt/azure

CodePudding user response:

You need to keep init container to change mounted directory ownership

You can update your path as per need, for you changes will be for /mnt/azure

initContainers:
          - command:
            - sh
            - -c
            - chown -R 1000:1000 /usr/share/elasticsearch/data
            - sysctl -w vm.max_map_count=262144
            - chmod 777 /usr/share/elasticsearch/data
            - chomod 777 /usr/share/elasticsearch/data/node
            - chmod g rwx /usr/share/elasticsearch/data
            - chgrp 1000 /usr/share/elasticsearch/data

Example stateful sets file

apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app : elasticsearch
    component: elasticsearch
    release: elasticsearch
  name: elasticsearch
spec:
  podManagementPolicy: Parallel
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app : elasticsearch
      component: elasticsearch
      release: elasticsearch
  serviceName: elasticsearch
  template:
    metadata:
      creationTimestamp: null
      labels:
        app : elasticsearch
        component: elasticsearch
        release: elasticsearch
    spec:
      containers:
      - env:
        - name: cluster.name
          value: <SET THIS>
        - name: discovery.type
          value: single-node
        - name: ES_JAVA_OPTS
          value: -Xms512m -Xmx512m
        - name: bootstrap.memory_lock
          value: "false"
        image: elasticsearch:6.5.0
        imagePullPolicy: IfNotPresent
        name: elasticsearch
        ports:
        - containerPort: 9200
          name: http
          protocol: TCP
        - containerPort: 9300
          name: transport
          protocol: TCP
        resources:
          limits:
            cpu: 250m
            memory: 1Gi
          requests:
            cpu: 150m
            memory: 512Mi
        securityContext:
          privileged: true
          runAsUser: 1000
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /usr/share/elasticsearch/data
          name: elasticsearch-data
      dnsPolicy: ClusterFirst
      initContainers:
      - command:
        - sh
        - -c
        - chown -R 1000:1000 /usr/share/elasticsearch/data
        - sysctl -w vm.max_map_count=262144
        - chmod 777 /usr/share/elasticsearch/data
        - chomod 777 /usr/share/elasticsearch/data/node
        - chmod g rwx /usr/share/elasticsearch/data
        - chgrp 1000 /usr/share/elasticsearch/data
        image: busybox:1.29.2
        imagePullPolicy: IfNotPresent
        name: set-dir-owner
        resources: {}
        securityContext:
          privileged: true
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /usr/share/elasticsearch/data
          name: elasticsearch-data
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 10
  updateStrategy:
    type: OnDelete
  volumeClaimTemplates:
  - metadata:
      creationTimestamp: null
      name: elasticsearch-data
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
  • Related