def get_common_architecture(cloud_provider, filename, container_registry, k8s_cluster_name, k8s_engine_name): with Diagram( f"QHub Architecture: {cloud_provider}", filename=f'{filename}', show=False, direction="TB", ): with Cluster(cloud_provider): gcr = ContainerRegistry(container_registry) with Cluster(k8s_cluster_name): kube_engine = KubernetesEngine(k8s_engine_name) conda_pvc = PersistentVolume('Conda') nfs_pvc = PersistentVolume('NFS') elb = LoadBalancing('Ingress') with Cluster('Master'): general = Node('general') Node('user') Node('worker') general << kube_engine with Cluster("Pods"): dask_gateway = Pod('Dask Gateway') jupyterhub = Pod('JupyterHub') dask_scheduler = Pod('Dask Scheduler') nfs_server = Pod('NFS Server') conda_store = Pod('Conda Store') nginx = Pod('Nginx') Pod('Cert Manager') image_puller = Pod('Image Puller') nginx >> elb nginx >> jupyterhub [nfs_server, conda_store, dask_gateway] << jupyterhub [conda_store, dask_scheduler] << dask_gateway image_puller >> gcr nfs_server >> nfs_pvc conda_store >> conda_pvc Helm('Helm') >> kube_engine
def get_common_architecture(cloud_provider, filename, container_registry, k8s_cluster_name, k8s_engine_name): with Diagram( f"QHub Architecture: {cloud_provider}", filename=f"{filename}", show=False, direction="TB", ): with Cluster(cloud_provider): gcr = ContainerRegistry(container_registry) with Cluster(k8s_cluster_name): kube_engine = KubernetesEngine(k8s_engine_name) conda_pvc = PersistentVolume("Conda") nfs_pvc = PersistentVolume("NFS") elb = LoadBalancing("Ingress") with Cluster("Master"): general = Node("general") Node("user") Node("worker") general << kube_engine with Cluster("Pods"): dask_gateway = Pod("Dask Gateway") jupyterhub = Pod("JupyterHub") dask_scheduler = Pod("Dask Scheduler") nfs_server = Pod("NFS Server") conda_store = Pod("Conda Store") nginx = Pod("Nginx") Pod("Cert Manager") image_puller = Pod("Image Puller") nginx >> elb nginx >> jupyterhub [nfs_server, conda_store, dask_gateway] << jupyterhub [conda_store, dask_scheduler] << dask_gateway image_puller >> gcr nfs_server >> nfs_pvc conda_store >> conda_pvc Helm("Helm") >> kube_engine
os.chdir(os.path.dirname(__file__)) with Diagram( "Notebook to TAP", show=False, filename="notebook-tap", outformat="png", ): user = User("End User") with Cluster("Kubernetes"): ingress = LoadBalancing("NGINX Ingress") with Cluster("Nublado"): hub = KubernetesEngine("Hub") proxy = KubernetesEngine("Proxy") notebook = KubernetesEngine("Notebook") proxy >> hub hub >> notebook proxy >> notebook with Cluster("TAP"): tap = KubernetesEngine("TAP") schema = SQL("MySQL Schema DB") uws = SQL("PostgreSQL UWS") with Cluster("Gafaelfawr"): gafaelfawr = KubernetesEngine("Gafaelfawr") redis = Memorystore("Redis") cloudsql = SQL("Cloud SQL")
os.chdir(os.path.dirname(__file__)) with Diagram( "Portal to TAP", show=False, filename="portal-tap", outformat="png", ): user = User("End User") with Cluster("Kubernetes"): ingress = LoadBalancing("NGINX Ingress") with Cluster("Portal"): portal_1 = KubernetesEngine("Portal") portal_2 = KubernetesEngine("Portal") portal_redis = Memorystore("Redis") portal_1 >> portal_redis portal_2 >> portal_redis with Cluster("TAP"): tap = KubernetesEngine("TAP") schema = SQL("MySQL Schema DB") uws = SQL("PostgreSQL UWS") with Cluster("Gafaelfawr"): gafaelfawr = KubernetesEngine("Gafaelfawr") redis = Memorystore("Redis") cloudsql = SQL("Cloud SQL")
with Diagram( "Gafaelfawr", show=False, filename="architecture", outformat="png", graph_attr=graph_attr, node_attr=node_attr, ): user = User("End User") with Cluster("Kubernetes"): ingress = LoadBalancing("NGINX Ingress") with Cluster("Gafaelfawr"): server = KubernetesEngine("Server") redis = KubernetesEngine("Redis") storage = PersistentDisk("Redis Storage") KubernetesEngine("Background") user >> ingress >> server >> redis >> storage app = KubernetesEngine("Application") ingress >> app idp = Server("Identity Provider") server >> idp user >> idp
with Diagram( "A&A", show=False, filename="architecture", outformat="png", graph_attr=graph_attr, ): user = User("End User") with Cluster("Science Platform"): filestore = Filestore("POSIX Filesystem") with Cluster("Authentication"): auth_ingress = LoadBalancing("NGINX Ingress") auth_server = KubernetesEngine("Server") storage = SQL("Metadata Store") redis = KubernetesEngine("Redis") redis_storage = PersistentDisk("Redis Storage") user >> auth_ingress >> auth_server >> redis >> redis_storage auth_server >> storage with Cluster("Notebook Aspect"): notebook_ingress = LoadBalancing("NGINX Ingress") hub = KubernetesEngine("Hub") session_storage = SQL("Session Storage") notebook = KubernetesEngine("Notebook") auth_server << notebook_ingress user >> notebook_ingress >> hub >> session_storage
outformat="png", graph_attr=graph_attr, ): users = Users("End Users") with Cluster("NCSA"): cilogon = Server("CILogon") comanage = Server("COmanage") ldap = Server("LDAP") users >> cilogon >> comanage >> ldap users >> comanage with Cluster("Science Platform"): ingress = LoadBalancing("NGINX Ingress") notebook = KubernetesEngine("Notebook") vo = KubernetesEngine("VO Services") redis = KubernetesEngine("Redis") storage = PersistentDisk("Redis Storage") with Cluster("New Services"): control = KubernetesEngine("Account UI") tokens = KubernetesEngine("Token Issuer") authz = KubernetesEngine("Authorizer") quota = KubernetesEngine("Quota Manager") log_storage = PersistentDisk("Log Storage") users >> ingress >> notebook >> vo ingress >> cilogon
} with Diagram( "Token management", show=False, filename="architecture", outformat="png", graph_attr=graph_attr, node_attr=node_attr, ): user = User("End User") frontend = React("Web UI") with Cluster("Kubernetes"): ingress = LoadBalancing("NGINX Ingress") kafka = KubernetesEngine("Kafka") with Cluster("Gafaelfawr"): server = KubernetesEngine("Server") postgresql = SQL("PostgreSQL") redis = Datastore("Redis") redis_storage = PersistentDisk("Redis Storage") user >> frontend >> ingress >> server >> redis >> redis_storage server >> postgresql kafka_listener = KubernetesEngine("Kafka Listener") server >> kafka >> kafka_listener >> postgresql housekeeping = KubernetesEngine("Housekeeping")