Kubernetes 1.23 and up are supported.
Installation depends on a working Kubernetes cluster version 1.23 or greater.
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 install --dependency-update --values ./base/values.yaml <name> ./base
Where <name>
is the name of this installation. Example:
$ helm install --dependency-update --values ./base/values.yaml base ./base
This will create the core namespace (skaha-system
), and install the Traefik proxy dependency. Expected output:
NAME: base
LAST DEPLOYED: <Timestamp e.g. Fri Jun 30 10:39:04 2023>
NAMESPACE: skaha-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
The Helm repository contains the current stable version as well.
$ helm repo add canfar-skaha-system https://images.canfar.net/chartrepo/skaha-system
$ helm repo update
$ helm install --dependency-update --values canfar-skaha-system/base/values.yaml canfar-science-platform-base canfar-skaha-system/base
After the install, there should exist the necessary Namespaces and Objects. See the Namespaces:
$ kubectl get namespaces
NAME STATUS AGE
...
skaha-system Active 28m
skaha-workload Active 28m
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 is handled by the local
Persistent Volume types.
...
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Delete
storageClassName: local-storage
local:
path: /data/skaha-storage
...
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 -n 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 -it -v /:/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