Really confused about why my setup script isn’t working. It appears to say it is running in the logs (just that it is executing them) but the changes are not shown in the system. I have the normal setup environment variables set and those work. I have confirmed the .sh script is executable and I even remoted into the pod to run it myself. I even ran the commands from influxdb entrypoint.sh script itself to see if I was missing something there. I am setting up a down sample bucket and apply the stack of tasks and alerts to the system. It is only a couple of commands. Oddly enough when editing the script to remove comments and running again I missed some line wrappers and the script failed when I ran it on the cli. These errors should have halted the program. So I am thinking that although run-parts is running it on the cli (on the pod) it is not doing it in entrypoint.sh.
Can you give us a little more detail about your setup? Are you using our helm-charts, or something else? Can you share your setup script?
Sure. It is the same script that works in docker too. It is just a simple command to create another bucket for downsamples and to apply the tasks and alerts. What is your preferred way to support kubenates? Straight container or helm? My scripts are being loaded as configmap volumes. My env configmap has all of the setup data in it. I was using projection at first but that creates symlinks so I did individual mounts to see if it worked instead. It works when I get a cli session within the pod even using the same exact command that the entrypoint script uses. The entrypoint script just doesn’t seem to see it for some reason.
apiVersion: apps/v1 kind: Deployment metadata: namespace: crec name: influxdb2 labels: app: influxdb2 spec: replicas: 1 selector: matchLabels: app: influxdb2 template: metadata: labels: app: influxdb2 spec: containers: - name: influxdb2 image: docker.io/influxdb:2.0.6 envFrom: - configMapRef: name: influxdb2-env - secretRef: name: influxdb2-secrets ports: - containerPort: 8086 name: server protocol: TCP volumeMounts: - mountPath: /var/lib/influxdb2 name: var-lib-influxdb2 - mountPath: /docker-entrypoint-initdb.d/init-stack.sh name: entry-initdb-init-sh subPath: init-stack.sh - mountPath: /docker-entrypoint-initdb.d/ds-tasks.yaml name: entry-initdb-init-ds subPath: ds-tasks.yaml - mountPath: /docker-entrypoint-initdb.d/check-tasks.yaml name: entry-initdb-init-checks subPath: check-tasks.yaml volumes: - name: var-lib-influxdb2 persistentVolumeClaim: claimName: influxdb2-pvc - name: entry-initdb-init-sh configMap: name: influxdb2-init defaultMode: 0544 - name: entry-initdb-init-ds configMap: name: influxdb2-ds-tasks - name: entry-initdb-init-checks configMap: name: influxdb2-check-tasks
apiVersion: v1 kind: ConfigMap metadata: namespace: crec name: influxdb2-init labels: app: influxdb2 data: init-stack.sh: |- #!/bin/sh set -e influx bucket create -n crec_wte_ds -o crec -r 52w influx apply -o crec --quiet --force true \ -f ./docker-entrypoint-initdb.d/ds-tasks.yaml \ -f ./docker-entrypoint-initdb.d/check-tasks.yaml
Thanks for any help.
@mhall119 do you think I should open a bug report on this issue? Can someone there replicate this in Kubernates?
@kramik1 can you check:
- When you look in
/docker-entrypoint-initdb.d/in the running pod, does your
.shscript have executable permissions?
Yes it is set. The logs show it going into setup mode. It finds the script but will not run it. It works in docker-compose but not k8.
I have CLI into the container and it is marked as executable. I can run it without issue after the container is started. I had to adjust the k8 yaml so that it was not linked but directly mounted in the container.
It is really weird that it runs in docker without issue but not k8. It outputs the log message in the function that only runs if it sees the executable. I could work around it and do a container init script in k8s to get around it I think.