Base Helm Chart¶
Install¶
Dependencies¶
Kubernetes 1.29 and up are supported.
From source¶
The base install also installs the Traefik proxy, which is needed by the Ingress when the Science Platform services are installed.
$ git clone https://github.com/opencadc/science-platform.git
$ cd science-platform/deployment/helm
$ helm --namespace traefik upgrade --install --dependency-update --values ./base/values.yaml <name> ./base
Where <name> is the name of this installation. Example:
$ helm --namespace traefik upgrade --install --dependency-update --values ./base/values.yaml base ./base
skaha-system), and install the Traefik proxy dependency. Expected output:
NAME: base
LAST DEPLOYED: <Timestamp e.g. Mon Jun 30 10:39:04 2025>
NAMESPACE: skaha-system
STATUS: deployed
REVISION: 4
TEST SUITE: None
From the CANFAR repository¶
The Helm repository contains the current stable version as well.
$ helm repo add canfar-skaha-system https://images.opencadc.org/chartrepo/platform
$ helm repo update
$ helm --namespace traefik upgrade --install --dependency-update --values canfar-skaha-system/base/values.yaml canfar-science-platform-base canfar-skaha-system/base
Verification¶
After the install, there should exist the necessary Namespaces and Objects. See the Namespaces:
Proxy using Traefik¶
The Traefik proxy server is also installed as a dependency, which handles SSL termination. Helm options are under the traefik key in the values.yaml file.
You can create your own secrets to contain your self-signed server certificates to be used by
the SSL termination. See the values.yaml file for more, and don't forget to base64 encode
the values.
Shared Storage¶
Shared Storage is handled by the local Persistent Volume types.
...
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Delete
storageClassName: local-storage
local:
path: /data/skaha-storage
...
DNS on macOS¶
The Docker VM on macOS cannot mount the NFS by default as it cannot do name resolution in the cluster. It first needs to know about the kube-dns IP. e.g.:
$ kubectl --namespace kube-system get service kube-dns
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 4d23h
The ClusterIP needs to be known to the Docker VM's name resolution. A simple way to do this is to mount the Docker VM root and modify it. It will take effect immediately:
$ docker run --rm --interactive --tty --volume /:/vm-root alpine sh
$ echo "nameserver 10.96.0.10" >> /vm-root/etc/resolv.conf
$ cat /vm-root/etc/resolv.conf
# DNS requests are forwarded to the host. DHCP DNS options are ignored.
nameserver 192.168.65.7
nameserver 10.96.0.10
Configuration¶
| Parameter | Description | Default |
|---|---|---|
kubernetesClusterDomain |
The DNS cluster domain | cluster.local |
skaha.namespace |
The Namespace for the APIs (UIs and APIs) | skaha-system |
skahaWorkload.namespace |
The Namespace for the User Sessions | skaha-workload |
secrets |
Any secrets to be created at install. | {} |
traefik.install |
Whether to install Traefik | false |
traefik |
Traefik configuration options | See Traefik Chart |