Skip to content

Application

What is Application

Application is a concept of Nocalhost, it is mainly used to manage a set of manifest files you want to apply for local development, it supports both k8s manifest and helm chart. In other words, these manifests usually contain all the k8s resources that your own application depends on. If possible, we should try to keep it to a minimum.

Nocalhost supports three types of applications:

  • Manifest
  • Helm
  • Kustomize

Application supports the k8s manifest or helm chart stored in git repository, and supports helm chart stored in Helm Repo. Support for kustomize will be added in the future.

What does Application do

Application can be used to create a DevSpace, we recommend using IDE plug-in directly to deploy your application, IDE plug-in is worked on the DevSpace created by Application. In other words, after being assigned a DevSpace, the developer can easily develop on the IDE.

After being assigned a DevSpace, you will get a kubeconfig to access this DevSpace, nhctl or plug-in can deploy the application based on the application's manifest file and kubeconfig.

So DevSpace can actually be approximated as Application + kubeconfig:

Application and Manifest

Support for Helm Manifest

nocalhost supports helm and no need to modify the chart.

1. If you already own and using Helm Chart:

helm install helloworld /chart/dir/ \
   -n fooNamespace \
   --kubeconfig ~/.kube/barconfig

It only takes a moment to push your Helm Chart to any git repository that you have permission to access. We will use the git clone command to get the latest Application information, for example:

https://[gihub, Gitlab, etc... whateverRepo]/foo/bar/hellowrold.git

Somefile.py
AClass.java
README.MD
...
mychart/dir/
   Chart.yaml
   values.yaml
   charts/
   templates/
   ...

For this repo, the Helm chart is under the mychart/dir/ relative to the root directory, then we can use the following command:

nhctl install helloworld \
   -u https://[gihub, Gitlab, etc... whateverRepo]/foo/bar/hellowrold.git \
   -t helmGit \
   -n k8sFooNamespace \
   --resource-path charts/bookinfo \
   --kubeconfig ~/.kube/barconfig

2. If you have your own Helm Repo:

helm install helloworld \
   mychart \
- repo http://mychart/charts/ \
   -n fooNamespace \
   --kubeconfig ~/.kube/barconfig

You can use the following commands to install by nhctl:

nhctl install helloworld \
   --helm-chart-name mychart \
   --helm-repo-url http://mychart/charts/ \
   -n fooNamespace \
   --kubeconfig ~/.kube/barconfig

Support for Kubernetes Manifest

nocalhost can also support Kubernetes Manifest without any modification of your manifest, but you still need to push it to any git repository:

Suppose you have such a git repo like this https://[gihub, Gitlab, etc... whateverRepo]/foo/bar/hellowrold.git, which contains many Kubernetes Manifest files:

README.MD
something.java
…
foo/bar/k8s/manifests/
                 foo.yaml
                 pre-install-cm.yaml
                …
                 what/ever/
                               inner.yaml
                               …
                support/all/dir/inside/
                                            bar.yaml
                                            …

If you want to apply the files in the relative root directory what/ever/ and support/all/dir/inside/, then use the command:

nhctl install applicationNameFooBar \
  -u https://[gihub, Gitlab, etc... whateverRepo]/foo/bar/hellowrold.git \
  -t manifest \
  -n k8sFooNamespace \
  --resource-path what/ever/ \
  --resource-path support/all/dir/inside/ \
  --kubeconfig ~/.kube/barconfig

If you want to apply all files, you can use the command:

nhctl install applicationNameFooBar \
  -u https://[gihub, Gitlab, etc... whateverRepo]/foo/bar/hellowrold.git \
  -t manifest \
  -n k8sFooNamespace \
  --resource-path. \
  --kubeconfig ~/.kube/barconfig

Nocalhost enhancements

Nocalhost is non-invasive to the user's k8s manifest. If you want to use some enhancements, such as Pre-Install, dependency management, etc. Add the .nocalhost/ folder in your git repo, with file config.yaml.

Pre-Install

We allow users to perform some additional operations before installing applications. Take bookinfo as an example, before installing the application, we will execute several jobs as declared below, and wait for the completion of the job execution before installing the application.

onPreInstall:
  -path: manifest/templates/pre-install/print-num-job-01.yaml
    weight: "1"
  -path: manifest/templates/pre-install/print-num-job-02.yaml
    weight: "-5"

Start dependency management

Nocalhost can control the startup sequence of services in the application.

For example, the following configuration represents the deployment of reviews, and it will be started after the pod of productpage is available.

services:
  -name: reviews
    serviceType: deployment
    gitUrl: https://github.com/nocalhost/bookinfo-reviews.git
    devContainerImage: codingcorp-docker.pkg.coding.net/nocalhost/dev-images/java:latest
    workDir: /home/nocalhost-dev
    syncDirs:
    -./
    dependPodsLabelSelector:
    -"productpage"

You can click Start Dependency Management to see more.

Develop mirror configuration

In the above configuration, devContainerImage: codingcorp-docker.pkg.coding.net/nocalhost/dev-images/java:latest means that when you enter the Dev-Mode, use this image as a container instead of the original image for development.

More

If you want to know more configuration information of .nocalhost/, click: config-yaml-spec.

Application best practices

Generally, we recommend using Nocalhost-Server + IDE plug-in together. Although nhctl can handle everything, the command line operation is cumbersome to use. We do not recommend using nhctl directly for application deployment and development. Although many examples above use nhctl directly.

Take the above example as an example, go directly to Nocalhost-Web to create it. After entering the homepage, switch to the tag named Applications and click on the upper right corner to create:

The three manifest types mentioned above are supported, here is kubernetes manifest as an example:

Advance

Here will explain some additional features or designs of Application, which are not necessary, but will help you use Nocalhost better.

Application Name

Nocalhost uses a unique Application Name to identify different applications. Note that even if different Nocalhost-Servers are used (for example, two or more Nocalhost-Servers are deployed), the same Application Name is not supported on the same development machine.

Application under ~/.nh

Note that in the ~/.nh/ directory, nhctl and IDE plug-ins will generate some files to save the current application deployment, development, etc.. usually you don't need to know or use them directly.