The support chart is a helm chart maintained by the 2i2c Engineers that consists of common tools used to support JupyterHub deployments in the cloud.
These tools are ingress-nginx, for controlling ingresses and load balancing; cert-manager, for automatically provisioning TLS certificates from Let’s Encrypt; Prometheus, for scraping and storing metrics from the cluster and hub; and Grafana, for visualising the metrics retrieved by Prometheus.
This section will walk you through how to deploy the support chart on a cluster.
Make sure support.values.yaml is correctly configured¶
In the infrastructure repo, the full filepath should be: config/clusters/<cluster_name>/support.values.yaml.
If the cluster is running on GCP or AWS, the deployer should have been generated this file already.
If you are deploying the support chart on an Azure cluster, you must manually create such a file using the template at
config/clusters/templates/common/support.values.yaml. Also, you must set an annotation foringress-nginx’s k8s Service resource by including the following in yoursupport.values.yamlfile:
ingress-nginx:
controller:
service:
annotations:
# This annotation is a requirement for use in Azure provided
# LoadBalancer.
#
# ref: https://learn.microsoft.com/en-us/azure/aks/ingress-basic?tabs=azure-cli#basic-configuration
# ref: https://github.com/Azure/AKS/blob/master/CHANGELOG.md#release-2022-09-11
# ref: https://github.com/Azure/AKS/issues/2907#issuecomment-1109759262
# ref: https://github.com/kubernetes/ingress-nginx/issues/8501#issuecomment-1108428615
#
service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path: /healthzEdit your cluster.yaml file¶
Add the following config as a top-level key to your cluster.yaml file.
Note this filepath is relative to the location of your cluster.yaml file.
support:
helm_chart_values_files:
- support.values.yamlDeploy the support chart via the deployer¶
Use the deployer tool to deploy the support chart to the cluster.
See Manually deploy a config change for details on how to setup the tool locally.
deployer deploy-support $CLUSTER_NAMESetting DNS records¶
Once the support chart has been successfully deployed, retrieve the external IP address for the cluster-entrypoint load balancer.
deployer use-cluster-credentials $CLUSTER_NAMEkubectl --namespace=support get service/cluster-entrypoint --template='{{$ingress := (index .status.loadBalancer.ingress 0)}}{{or $ingress.hostname $ingress.ip}}'Add DNS records for the 2i2c.cloud domain under “Advanced DNS” in
Namecheap.com:
<cluster-name>, used for the primary hub (if it exists).*.<cluster-name>, for all other hubs, grafana and prometheus instances.
Use an A record when we point to an external IP address (GCP, Azure), and a
CNAME record when we point to another domain (AWS).