HyScale announced the open sourcing of their tool which aims to simplify the application development lifecycle on Kubernetes. HyScale uses a custom YAML format which employs existing Docker and Kubernetes APIs to build, deploy and expose an app as a service.
HyScale has a custom YAML-based file which combines dev and ops steps like building the container image, creating the pods and exposing it as a Kubernetes service into a single file. The file - called hspec - has options for pulling artifacts, configuration commands for installing supporting libraries, and overriding the cmd option. Under the hood, the hyscale CLI tool generates a Dockerfile, if required, and Kubernetes manifests for Deployments, Services and Ingresses. It also invokes the K8S API to apply the YAMLs. The spec file also exposes deployment options like CPU/RAM, volumes, secrets etc required when it's deployed to Kubernetes.
InfoQ reached out to Anoop Balakuntalam, head of product engineering at HyScale, to understand more about it.
The HyScale spec file can use either an existing Dockerfile, or directives with which to build the image from artifacts and Linux commands. Balakuntalam explains why the spec file does not support both options at the same time:
There are two types of audiences here. One - those who are familiar with Dockerfiles. For them, HyScale accepts the Dockerfile as an input for image building and generates the K8S manifests as per the hspec. Two - those who don’t have a Dockerfile and simply need an image that has the app artifacts & the stack to run it. For this case, hspec provides an easy way to specify the needed base stack & artifact locations and HyScale will create the Dockerfile and everything else necessary to deploy.
In Kubernetes based development + deployment workflows, tools like Podman and Buildah which can work without the overhead of a Docker daemon and generate OCI compliant images are coming up as alternatives to vanilla Docker. HyScale does not support these yet, but they have "started work on supporting Kaniko. At this time, there is too much fragmentation in this space and it is not clear as to which tools will get traction and for what reasons", says Balakuntalam. With HyScale's Kaniko implementation, image building "happens inside a pod and so this could help scale out image building pods in K8S".
One of the advantages of containerized applications is that the app developer can specify the configuration and the environment as part of the container image, which remains mostly identical as it goes through the pipeline - dev, staging, prod etc. However, some configuration, e.g. heap size for Java apps, might be different across envs. This is especially true if devs are using something like Minikube for dev, and the ops team deploys to a full-fledged K8S cluster. Can HyScale manage such scenarios? Not yet, says Balakuntalam, but adds that they are working on it:
hspec provides the abstraction that an application team would require as a base for deploying the app. On top of this we will provide a way to add profiles for each environment. An hprof specification is already in the works that will allow for hspec directives to be overridden or additional directive options to be specified for each environment. HyScale would then apply such differences based on the environment on top of the hspec.
There are a host of tools - both emerging and maturing - in this space like Skaffold, Garden, Draft and Forge. How does HyScale compare to some of these? Balakuntalam says that:
HyScale provides an app-centric abstraction and the associated wiring to get the deployment done. Also, when issues occur, it needs to simplify troubleshooting. We want to be able to say "get me my service logs for service A" or "trigger a snapshot for service X" without having to worry about things like which pod or container the service is running in, what storage classes are in use, which PV / PVC ID is associated, etc.
He adds that this kind of troubleshooting abstraction is on the roadmap for their next release.
HyScale also offers an Enterprise edition, which focuses on change management and security updates, observability of apps across multiple clouds, and inter-service dependencies.