Recibo el Failed to created node environment con una imagen acoplable de búsqueda elástica:
[unknown] uncaught exception in thread [main] org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: Failed to create node environment El volumen persistente para los datos de elasticsearch está en /mnt/volume/elasticsearch-data .
Puedo resolver este problema mediante ssh en la máquina remota y ejecutar chown 1000:1000 /mnt/volume/elasticsearch-data . Pero no quiero hacerlo manualmente. ¿Cómo puedo resolver este problema de privilegios usando el archivo deployment.yaml ?
He leído que usar fsGroup: 1000 en securityContext debería resolver el problema, pero no me funciona.
implementación.yaml:
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: elasticsearch spec: replicas: 1 template: metadata: labels: app: elasticsearch spec: containers: - name: elasticsearch image: me-name/elasticsearch:6.7 imagePullPolicy: "IfNotPresent" ports: - containerPort: 9200 envFrom: - configMapRef: name: elasticsearch-config volumeMounts: - mountPath: /usr/share/elasticsearch/data name: elasticsearch-volume securityContext: runAsUser: 1000 fsGroup: 1000 capabilities: add: - IPC_LOCK - SYS_RESOURCE volumes: - name: elasticsearch-volume persistentVolumeClaim: claimName: elasticsearch-pv-claim lifecycle: postStart: exec: command: ["/bin/sh", "-c", "sysctl -w vm.max_map_count=262144"]almacenamiento.yaml:
kind: PersistentVolume apiVersion: v1 metadata: name: elasticsearch-pv-volume labels: type: local app: elasticsearch spec: storageClassName: manual capacity: storage: 5Gi accessModes: - ReadWriteMany hostPath: path: "/mnt/volume/elasticsearch-data" persistentVolumeReclaimPolicy: Delete --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: elasticsearch-pv-claim labels: app: elasticsearch spec: storageClassName: manual accessModes: - ReadWriteMany resources: requests: storage: 5GiParece que hay un error abierto con respecto a los permisos de los volúmenes de hostPath. Para solucionar este problema, debe crear un initContainer configurando inicialmente los permisos adecuados:
piVersion: extensions/v1beta1 kind: Deployment metadata: name: elasticsearch spec: replicas: 1 template: metadata: labels: app: elasticsearch spec: initContainers: - name: set-permissions image: registry.hub.docker.com/library/busybox:latest command: ['sh', '-c', 'mkdir -p /usr/share/elasticsearch/data && chown 1000:1000 /usr/share/elasticsearch/data' ] volumeMounts: - mountPath: /usr/share/elasticsearch/data name: elasticsearch-volume containers: - name: elasticsearch image: me-name/elasticsearch:6.7 imagePullPolicy: "IfNotPresent" ports: - containerPort: 9200 envFrom: - configMapRef: name: elasticsearch-config volumeMounts: - mountPath: /usr/share/elasticsearch/data name: elasticsearch-volume securityContext: runAsUser: 1000 fsGroup: 1000 capabilities: add: - IPC_LOCK - SYS_RESOURCE volumes: - name: elasticsearch-volume persistentVolumeClaim: claimName: elasticsearch-pv-claim lifecycle: postStart: exec: command: ["/bin/sh", "-c", "sysctl -w vm.max_map_count=262144"] Está en el camino correcto configurando fsGroup pero lo que está haciendo actualmente es configurar el usuario en 1000 y montar el volumen con acceso al grupo 1000 . Lo que debe cambiar es usar runAsGroup: 1000 en lugar de runAsUser: 1000 .