Search code examples
mongodbdockerkuberneteskubernetes-helm

How to copy a local file into a helm deployment


I'm trying to deploy in Kubernetes several pods using a mongo image with a initialization script in them. I'm using helm for the deployment. Since I'm beginning with the official Mongo docker image, I'm trying to add a script at /docker-entrypoint-initdb.d so it will be executed right at the beginning to initialize some parameters of my Mongo.

What I don't know is how can I insert my script, that is, let's say, in my local machine, in /docker-entrypoint-initdb.d using helm.

I'm trying to do something like docker run -v hostfile:mongofile but I need the equivalent in helm, so this will be done in all the pods of the deployment


Solution

  • You can use configmap. Lets put nginx configuration file to container via configmap. We have directory name called nginx with same level values.yml. Inside there we have actual configuration file.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: nginx-config-file
      labels:
        app: ...    
    data:
      nginx.conf: |-
    {{ .Files.Get "nginx/nginx.conf" | indent 4 }}
    
    ---
    
    apiVersion: apps/v1beta2
    kind: Deployment
    metadata:
      name: SomeDeployment
      ...  
    spec:
      replicas: 
      selector:
        matchLabels:
          app: ...
          release: ...
      template:
        metadata:
          labels:
            app: ...
            release: ...
        spec:
          volumes:
            - name: nginx-conf
              configMap:
                name: nginx-config-file
                items:
                - key: nginx.conf
                  path: nginx.conf
          containers:        
            - name: ...
              image: ...          
              volumeMounts:
                - name: nginx-conf
                  mountPath: /etc/nginx/nginx.conf
                  subPath: nginx.conf
    

    You can also check initContainers concept from this link : https://kubernetes.io/docs/concepts/workloads/pods/init-containers/