In order to publish your app on Kubernetes using Cuber, simply open your app folder and create a
Cuberfile with this code:
# Give a name to your app app 'myapp' # Get the code from this Git repository repo '.' # Build the Docker image automatically (or provide a Dockerfile) buildpacks 'heroku/buildpacks:20' # Publish the Docker image in a registry image 'username/myapp' # Connect to this Kubernetes cluster kubeconfig 'path/to/kubeconfig.yml' # Run and scale any command on Kubernetes proc :web, 'your web server command'
cuber deploy in your terminal to publish your app.
The command will execute the following steps:
- Checkout the code from the Git repository
- Build the app using Buildpacks or Docker
- Publish the Docker image in the Docker registry
- Run your app on Kubernetes
Finally you can see the status and configuration of your remote app with
cuber info. This command also shows the public IP: copy it in your browser address bar to open your website.
Cuberfile template (a more complete example)
In the Quickstart guide we used a Cuberfile with minimal configuration, but there are many more options and features available. Here’s a more complete Cuberfile example that you can use as a basic template for your app:
# The name of your app (it is used as a namespace on Kubernetes) app 'my-app' # The name of an existing release (not necessary for normal deployments) # It's only for rollbacks to a previous version or to lock to a specific version # release 'abcdefg-20211201170000' # The Git repository URL (or local path) # This repository will be cloned on your machine in order build your app repo '.' # Build a Docker image of your app automatically using Cloud Native Buildpacks buildpacks 'heroku/buildpacks:20' # Alternatively, if you need more customization, you can provide a Dockerfile # dockerfile 'Dockerfile' # The Docker repository where the image will be stored # Include only the image name, without any tag image 'username/my-app' # You can disable the cache to refresh the base image and all the cache layers # cache false # The Docker config, which must contain the credentials (auth) to access the registry # The default is ~/.docker/config.json, otherwise you can set it here # dockerconfig 'dockerconfig.json' # The kubeconfig file contains the credentials to access to the Kubernetes cluster kubeconfig 'kubeconfig.yml' # Optionally you can run a migration command (e.g. database) during each release # migrate 'migrate command' # Run and scale any process (web server, background workers, etc.) on Kubernetes proc :web, 'web command', scale: 5 proc :worker, 'worker command', scale: 10 # Add cron jobs (they spin up a new pod with your app image) cron :example, '* * * * *', 'example command' # Set some environment variables env 'EXAMPLE_ENV_VAR', 'example value' # Set some secrets that will be available as environment variables env 'EXAMPLE_SECRET', File.read('path/to/secret.key').strip, secret: true # Depending on your provider, you can configure specific settings of the load balancer # lb 'kubernetes.io/ingress.global-static-ip-name', 'my-app-static-ip' # Depending on your provider, you may want to use an Ingress instead of a Load Balancer # You should use this on GKE for example # ingress true # You can provide a custom SSL/TLS certificate for HTTPS if you want # ssl 'ssl/cert.pem', 'ssl/key.pem'