Before starting the deployment of Bio-OS, ensure that you have obtained the open-source Helm Charts for Bio-OS (https://github.com/Bio-OS/helm-charts) in your environment. Bio-OS supports deployment on both ARM64 and x86_64 architectures.
In addition, Bio-OS requires Kubernetes as the underlying platform, and you may choose either the community edition of Kubernetes or Minikube. This documentation is based on the x86 architecture; if your environment uses ARM architecture, please make sure to select the ARM-compatible images and tools for installation. (See Prerequisite.
一. K8s Environment Preparation
1.1 Start Minikube
It is assumed here that Minikube has already been installed. For installation instructions, see: Minikube Start.
Here, Minikube is used as an example to build a local environment, while for production environments it is recommended to use Kubespray for high-availability deployment.
Install the Helm package (note: Helm version must be greater than 2.0; if Helm is already installed, you may skip this step).
For the ARM architecture, update the Helm download URL to:https://get.helm.sh/helm-v3.12.0-linux-arm64.tar.gz .
1.3 NFS-Server Deployment
Here, Ubuntu is used as an example to deploy the NFS service, where the variable NFS_PATH corresponds to the NFS storage directory. (Execute as root user)
1.5 Verify that the PVC can be mounted successfully
Copy the following command and execute it in the shell.
Check the Pod status
二.Install Bio-OS services
The deployment of Bio-OS depends on MySQL, JupyterHub, and Cromwell. Before installing the Bio-OS service, you must first install MySQL, JupyterHub, and Cromwell.
The installation order is: MySQL → JupyterHub → Cromwell → Bio-OS (this order must be followed).
2.1 Install the MySQL service
The rootPassword in the command can be changed to your desired password, but you must make the corresponding modifications in the subsequent steps.
2.2 Install the Jupyterhub service
Bio-OS is packaged with Helm and currently consists of four subcharts. Note: after deploying JupyterHub, you must obtain a new token in the browser before proceeding to deploy the bioos-server and web services.
Install JupyterHub with Helm (make sure to choose images that match your environment’s architecture):
Open the browser and go to: http://<server-ip>/jupyterhub to request a new token.
2.3 Install the Cromwell service
There are two ways to install Cromwell: via Helm or via a JAR package.
Helm installation: simpler to set up, but workflows cannot use Docker images during execution.
JAR package deployment: allows workflows to use Docker images during execution.
To enable Cromwell to communicate with MySQL, you need to modify the MySQL connection configuration:
Obtain the InternalIP using the following command:
The obtained InternalIP is shown as follows:
Edit application.conf and update the MySQL connection string with the obtained InternalIP and Port.
The application.conf is shown as follows:
Run Cromwell with Java (note: use nohup to ensure Cromwell runs in the background):
2.4 Install the Bio-OS service
三. Deployment validation
Run kubectl get po,pv,pvc,ing to check the application deployment status. Bio-OS uses two storage volumes—one for MySQL and one for Bio-OS data—and defines several Ingress rules to expose services via subpaths.
The command output should appear as follows:
Open the browser and visit: http://<server-ip>/workspace. This completes the installation of Bio-OS.
# If the Pod status is Running and the PVC status is Bound, the NFS server is available.
root@n37-043-061:~# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pvc-pod 1/1 Running 0 8d
root@n37-043-061:~# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
test-pvc Bound pvc-8dd031d1-2316-44b0-bd46-bdaeea7f9fd5 1Gi RWO nfs-csi 8d
helm repo add bioos https://bio-os.github.io/helm-charts/charts
helm install jupyterhub bioos/jupyterhub \
--namespace bioos \
--create-namespace \
--set hub.db.url=mysql+pymysql://root:Bytedance2023@mysql.bioos.svc.cluster.local:3306/bioos \
--set hub.db.password=Bytedance2023
# Expose the JupyterHub service so that it can be accessed directly from the browser. Once you obtain the token, you may close the port forwarding.
kubectl -n bioos port-forward --address 0.0.0.0 service/hub 8081:8081
kubectl edit svc mysql
# Change type
type: NodePort
# Check the K8S internal communication port (the one after 3306).
kubectl get svc mysql
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysql NodePort 10.108.158.83 <none> 3306:30276/TCP 2d1h
kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
tf-server Ready control-plane 2d2h v1.27.4 192.168.200.146 <none> Ubuntu 22.04.2 LTS 5.15.0-83-generic containerd://1.7.1