Search code examples
kubernetesgoogle-cloud-platformkubernetes-helm

Pip installing a package inside of a Kubernetes cluster


I have installed Apache Superset from its Helm Chart in a Google Cloud Kubernetes cluster. I need to pip install a package that is not installed when installing the Helm Chart. If I connect to the Kubernetes bash shell like this:

kubectl exec -it superset-4934njn23-nsnjd /bin/bash

Inside there's no python available, no pip and apt-get doesn't find most of the packages.

I understand that during the container installation process the packages are listed in the Dockerfile, I suppose that I need to fork the docker container, modify the Dockerfile, register the container to a container registry and make a new Helm Chart that will run this container.

But all this seems too complicated for a simple pip install, is there a simpler way to do this?

Links:

Docker- https://hub.docker.com/r/amancevice/superset/

Helm Chart - https://github.com/helm/charts/tree/master/stable/superset


Solution

  • As @Murli mentioned, you should use pip3. However, one thing you should remember is, helm is for managing k8s, i.e. what goes into the cluster should be traceable. So I recommend you the following:

    $ helm get stable/superset
    

    modify the values.yaml. In my case, I added jenkins-job-builder to pip3:

    initFile: |-
      pip3 install jenkins-job-builder
      /usr/local/bin/superset-init --username admin --firstname admin --lastname user --email [email protected] --password admin
      superset runserver
    

    and just pass the values.yaml to helm install.

    $ helm install --values=values.yaml stable/superset
    

    Thats it.

     $ kubectl exec -it doltish-gopher-superset-696448b777-8b9c6 which jenkins-jobs
     /usr/local/bin/jenkins-jobs
     $