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
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.
Adding SSH Key After Plain Pod Creation
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 Plain Pod with a Git Repository
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
.
Using Private Docker Images
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 Packages in Pods
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:
Python
- Set the user base to a temporary directory
export PYTHONUSERBASE=/tmp
. - Use
pip install --user package_name
.
Node.js
Use either npm install package_name
or yarn install package_name
in your entry point file.
Running Container under the root
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.
VM Startup Time with GPU Allocation
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.
Restrictions
In Puzl, environment variables and Kubernetes labels are subject to certain restrictions, essential for maintaining system integrity and security.
Outbound connections
By default, Puzl allows outbound connections on all ports except 25, 587, 465 which are blocked due to the risk of abuse.
Environment variables
Environment variables prefixed with __PUZL
are reserved, and Puzl does not guarantee their proper functioning if included in your configuration.
Labels
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.
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.