In this chapter, we will deploy our registered docker image on hscloud
as a simple HTTP kube service with HTTPS from Let's Encrypt.
Registered image from Building web app. Also, built hscloud
environment from Building an environment section.
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/kube.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.k0.hswaw.net/$hs_username/myflask:2137', }, ns: kube.Namespace(cfg.namespace), deployment: top.ns.Contain(kube.Deployment(cfg.name)) { spec+: { replicas: 1, template+: { spec+: { containers_: { default: kube.Container("default") { image: cfg.image, ports_: { http: { containerPort: 5000 }, } }, }, }, }, }, }, service: top.ns.Contain(kube.Service(cfg.name)) { target_pod:: top.deployment.spec.template, }, ingress: top.ns.Contain(kube.Ingress(cfg.name)) { metadata+: { annotations+: { "kubernetes.io/tls-acme": "true", "cert-manager.io/cluster-issuer": "letsencrypt-prod", "nginx.ingress.kubernetes.io/proxy-body-size": "0", }, }, spec+: { tls: [ { hosts: [ cfg.domain ], secretName: cfg.name + "-tls" } ], rules: [ { host: cfg.domain, http: { paths: [ { path: "/", backend: top.service.name_port }, ], }, }, ], }, }, }
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