hackdoc:// HSCloud Docs

Deploying docker image on hscloud

In this chapter, we will deploy our registered docker image on hscloud as a simple HTTP kube service with HTTPS from Let’s Encrypt.

Requirements

Registered image from Building web app. Also, built hscloud environment from Building an environment section.

Steps

We create a prod.jsonnet file in location //personal/$hs_username/myflask/prod.jsonnet. The format of jsonnet is very similar to json, but allows the use of variables, functions, and the import of other files. For further reference on jsonnet see jsonnet.org.

# Remember to replace $hs_username with your SSO username!

# The import is done from the `kube.libsonnet` file in the `kube` folder in the `hscloud` folder.
local kube = import "../../../kube/hscloud.libsonnet";

{
    local top = self,
    local cfg = self.cfg,

    cfg:: {
        name: 'web-app',
        # The hscloud configuration only allows the namespace in `personal-$hs_username` format.
        namespace: 'personal-$hs_username',
        # The hscloud configuration only allows the domain in `*.$hs_username.hscloud.ovh` format.
        domain: 'web-app.$hs_username.hscloud.ovh',
        image: 'registry.hswaw.net/$hs_username/myflask:2137',
    },

    local ns = kube.Namespace(cfg.namespace),

    deployment: ns.Contain(kube.Deployment(cfg.name)) {
        spec+: {
            template+: {
                spec+: {
                    containers_: {
                        default: kube.Container("default") {
                            image: cfg.image,
                            ports_: {
                                http: { containerPort: 5000 },
                            }
                        },
                    },
                },
            },
        },
    },

    service: ns.Contain(kube.Service(cfg.name)) {
        target:: top.deployment,
    },

    ingress: ns.Contain(kube.TLSIngress(cfg.name)) {
        hosts:: [cfg.domain],
        target:: top.service,
    },
}

We log into the cluster:

hs_username=$USER # if your username is the same as your SSO username
prodaccess -username $hs_username

We can now deploy our application:

kubecfg update prod.jsonnet

The application should be available at http://web-app.$hs_username.hscloud.ovh. You will have to wait a few minutes for a working HTTPS service.

You can also list the pods:

# List pods in the namespace. Replace $hs_username with your SSO username!
kubectl get pods --namespace personal-$hs_username

You should see something like this:

NAME                          READY   STATUS             RESTARTS   AGE
...
web-app-569996b8d8-lfl68      1/1     Running            0          18m

To remove the application, execute following command, taking your pod name from the previous command, in this case web-app-569996b8d8-lfl68:

# Delete the pod. Replace $hs_username with your SSO username!
kubectl delete pod web-app-569996b8d8-lfl68 --namespace personal-$hs_username