Skip to main content

Technical Setup and Operations

Puzl offers two primary runtime environments: plain pods and virtual machines (VMs). When we say "pod" in this article, we refer to the operations and management of plain pods.

Accessing a container's shell without SSH is a straightforward process in the Puzl platform. Once you've set up kubectl as described on the Kubernetes API page in your Puzl dashboard, you can directly access the shell of a running pod. This is especially useful for real-time interactions with your container. Here are the steps:

  • Set up kubectl according to the instructions on the Kubernetes API page of your Puzl dashboard.
  • For any pod in a 'Running' status, execute kubectl exec --stdin --tty YOUR_POD_NAME -- /bin/bash on your local machine to access the container's shell.
  • Optionally, to keep the container active, add a shell script with tail -f /dev/null to your Git entry point.

In the context of plain pods, Puzl offers the flexibility of adding SSH keys post-creation. This feature, however, is exclusive to plain pods and does not apply to virtual machines, where a restart is required to apply new keys. When adding keys to plain pods:

  • New SSH keys can be added to running pods through the Puzl dashboard.
  • It may take up to 2 minutes for the new keys to propagate to your containers.
  • For virtual machines, remember that a restart is necessary to apply any new SSH keys.

Running a pod with a Git repository is a key feature of the Puzl platform, enabling users to directly execute code from their repositories.

  • The system automatically clones your repository into the specified folder during pod creation.
  • If a repository with the same name already exists in the target folder, the system attempts a git pull.
  • To prevent conflicts, it's advisable to change the target folder after updating your repository.

Current directory will match the directory, where git repo was cloned to. It is displayed on the Pod’s page in the section Environment Variables under the name __PUZL_GIT_CLONE_PATH.

The Puzl platform supports the use of private Docker images from various registries like DockerHub, GitHub, GitLab, etc. This feature allows for greater flexibility and customization of your containerized applications.

You can use private Docker images, you need to create a special Secret object in your Kubernetes namespace to authenticate with a registry, and put the name of this Secret in a pod config. You can also add your Docker registry credentials in the Account section in your Puzl dashboard.

All containers in pods are created with a user, taken from Docker image you choose. If you use Docker image predefined by Puzl, container will be launched from ubuntu user.

Installing additional software packages in pods is a common requirement. Puzl supports package installation for both Python and Node.js environments, providing a versatile platform for various application needs. To install packages:

  1. Set the user base to a temporary directory export PYTHONUSERBASE=/tmp.
  2. Use pip install --user package_name.

Use either npm install package_name or yarn install package_name in your entry point file.

Running containers as the root user is sometimes necessary for specific operations within a container. Puzl supports this capability, allowing users to perform a wider range of tasks inside their containers. It's important to note:

  • Containers can be run under the root user in Puzl.
  • Predefined Docker images provided by Puzl contain sudo, facilitating the installation of system packages during runtime.

Virtual machines with GPU support in Puzl require more allocation time for each GPU requested.

  • Each GPU requested in a VM requires approximately 1.5 minutes to allocate memory.
  • For example, a VM with 8 GPUs would have an estimated OS launch time of around 13 minutes.
  • During this time, the SSH port will not be available until the guest OS is fully ready.

In Puzl, environment variables and Kubernetes labels are subject to certain restrictions, essential for maintaining system integrity and security.

By default, Puzl allows outbound connections on all ports except 25, 587, 465 which are blocked due to the risk of abuse.

Environment variables prefixed with __PUZL are reserved, and Puzl does not guarantee their proper functioning if included in your configuration.

Labels with prefixes *puzl.cloud and *.puzl are reserved. Puzl cannot guarantee correct work of objects with such labels. Kubernetes does not recommend users to use prefix at all.

Warning

Please avoid storing sensitive information in Kubernetes labels and annotations. For confidential data, Kubernetes Secret resources should be used as Puzl encrypts the data stored in them.