Kubernetes (K8s) is complex. This makes application deployment to K8s challenging, time-consuming, tedious and error-prone. But it doesn't have to be that way.
HyScale takes a simple, short Declarative definition of your service config, given the config it generates Dockerfile, Container Image, Kubernetes Manifests (YAMLs) and deploys to any Kubernetes Cluster returning back the app URL. Also it abstracts & simplifies Deployment Troubleshooting and Runtime Ops.
HyScale can be used to deploy either Monolithic or Microservice Applications.
Containerizing apps and deploying them to K8s can be tedious and error-prone with having to write & maintain large portions of yaml, dealing with cryptic K8s error messages, challenging new ops and keeping up with new K8s versions. An abstraction brings higher-level objects & actions that are intuitively understood by developers & devops professionals alike making deployments, maintenance & troubleshooting a breeze!
Such an abstraction must:
a) be declarative,
b) intuitive to read, and
c) orders of magnitude smaller to write & maintain
For more detailed information refer the wiki.
For instance, if your service requires to persist some data at the path /mydata , all you would need to declare is:
volumes: - name: myvol path: /mydata size: 1G
and leave to the abstraction framework all the details of generating the right yamls & labels for stateful sets, persistent volume templates, with PVCs linked to the storage class, etc.
Similarly, if your service needs auto-scaling, the high-level intent declaration would be something like this:
replicas: min: 2 max: 5 cpuThreshold: 80%
Of course you can have different profiles to override things for different environments of your app.
To see what other things you could specify in an app-centric declarative way and how to write a complete spec file, check out the tutorial here.
You can also find spec files for a few sample applications here.
Once you've written the declaration of your service's requirements (we call it a hspec file), deploying and obtaining a URL is a one-line command:
hyscale deploy service -f '<myservice.hspec>' -n '<my-namespace>' -a '<my-app-name>'
HyScale will generate the dockerfile if necessary, build & push the docker image, generate the required K8s yamls and talk to the K8s cluster specified at $HOME/.kube/config . At the end of this command execution, you should see a URL with which to access your app!
If, say, you got an error message such as CrashLoopBackOff, the abstraction would tell you whether that was due to an erroneous CMD in your dockerfile, a failing health-check or a missing entrypoint for your service.
For more on app-centric automated troubleshooting, see here
And if you wanted to perform some operations such as getting the logs of a service, all you would do is say something like
hyscale get service logs -s <service-name>
To run HyScale, you need Docker 18.09.x or above, your Kubernetes cluster token at $HOME/.kube/config and registry credentials at $HOME/.docker/config.json. Make sure you have logged into your docker registry using
If you are on Linux, install using:
curl -sSL https://get.hyscale.io | bash
For more details on pre-requisites as well as instructions for Windows & Mac, see here.
Let us know your experience with HyScale!
Our initial goal is to achieve sufficient abstraction levels to satisfy at least 80% of the app deployment use-cases out there.
Do you have any inputs that can make HyScale better? Say, a bug or a feature request? Please open a new issue here.
To contribute, see our architecture & contributor documentation here.