st4sd-olm

An Operator Lifecycle Manager (OLM) operator to automate installing and upgrading ST4SD deployments on OpenShift clusters

https://github.com/st4sd/st4sd-olm

Science Score: 44.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.1%) to scientific vocabulary
Last synced: 10 months ago · JSON representation ·

Repository

An Operator Lifecycle Manager (OLM) operator to automate installing and upgrading ST4SD deployments on OpenShift clusters

Basic Info
  • Host: GitHub
  • Owner: st4sd
  • License: apache-2.0
  • Language: Go
  • Default Branch: main
  • Size: 634 KB
Statistics
  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • Open Issues: 2
  • Releases: 10
Created over 3 years ago · Last pushed over 1 year ago
Metadata Files
Readme Contributing License Code of conduct Citation

README.md

Deploy ST4SD using OperatorLifecycleManager (OLM)

This repository contains the code to build the Operator for deploying the Simulation Toolkit for Scientific Discovery (ST4SD). The ST4SD-Runtime is a python framework, and associated services, for creating and deploying virtual-experiments - data-flows which embody the measurement of properties of systems.

There are three parts to the ST4SD-Runtime - st4sd-runtime-core: The core python framework for describing and executing virtual experiments - st4sd-runtime-k8s: Extensions which enable running and managing virtual-experiments on k8s clusters
- st4sd-runtime-service: A RESTapi based service allowing users to add, start, stop and query virtual-experiments

Features

  • Cross-platform data-flows
    • Supports multiple backends (LSF, OpenShift/Kubernetes, local)
    • Abstracts the differences between backends allowing a single component description to be used
    • Variables can be used to encapsulate platform specific options
    • Can define component and platform specific environments
  • Co-processing model
    • Consumers can be configured to run repeatedly while their producers are alive
  • Simple to replicate workflow sub-graphs over sets of inputs
  • Supports do-while constructs
  • Handles task persistence across backend allocation windows and allows user customisable restarts
  • Deploy workflows directly from GitHub (Kubernetes stack)
  • Store and retrieve data and metadata from st4sd-datastore

More Information

Our documentation website contains detailed information on installing ST4SD, writing and running virtual-experiments, along with much more.

Installation

You can install ST4SD by first installing this operator in your cluster, configuring it, and then asking it to deploy ST4SD Cloud under a namespace in your cluster.

Requirements:

  1. Access to an OpenShift cluster with cluster-admin permissions
    • Required for creation of a kubernetes objects (such as CustomResourceDefinition and Role Based Access Control (RBAC)).
  2. OpenShift command line tools (oc v4.9+)

Before you continue any further, ensure that you have logged in your OpenShift cluster using the oc command-line interface.

Install the operator

Add the Simulation Toolkit for Scientific Discovery (ST4SD) operator to the Operator Catalog of your OpenShift cluster:

oc apply -f https://raw.githubusercontent.com/st4sd/st4sd-olm/main/examples/deploy.yaml

Then wait for the pod st4sd-catalog-xxxx in the namespace openshift-marketplace to transition to the Running state.

Configure the operator

Navigate to the OperatorHub in the OpenShift Web Console of your OpenShift cluster and install the operator Simulation Toolkit for Scientific Discovery (ST4SD) in the openshift-operators namespace.

Expand to see step-by-step instructions 1. Switch back to the OpenShift Web Console page on your browser. Make sure you are in the `Administrator` view. 2. On the left panel, expand the menu `Operators`, and then click the `OperatorHub` option. 3. In the search box type `ST4SD`. The right panel should filter out unrelated entries and display one with the label `Simulation Toolkit For Scientific Discovery (ST4SD)`. 4. Click on the `Simulation Toolkit For Scientific Discovery (ST4SD)` entry and wait for a new panel to pop up. Click the `Install` button at the top left of this panel - you will transition to a new page. If the button label is `Uninstall`, then the operator is already installed on your cluster. In this case, you do not need to re-install the operator, you may skip to the last step. 5. In the new page, select the `stable` update channel. Set the `Installed Namespace` dropdown to `openshift-operators`. Set `Update approval` to `Automatic` if you wish that ST4SD deployments you create via this operator to be auto-updated. Set it to `Manual` if you wish to manually update this operator and therefore control when you receive new updates to your ST4SD instance. We recommend using the option `Automatic`. Finally, click the `Install` button at the bottom left - you will transition to a new page. The page reports the installation status of the operator. Wait for it to become `Installed operator - ready for use`. 6. Verify that the `st4sd-olm` operator pod is up and running. You should see it in the namespace that you deployed the operator in Step 11 (e.g. `openshift-operators`).


If you followed the above, and you are a cluster-admin, you are now able to install ST4SD in any namespace on your cluster using the st4sd-olm operator (this repository). You can enable other users of your Cluster to install st4sd in their own namespaces by granting them Role-Based Access Control (RBAC) privileges to handle simulationtoolkits.deploy.st4sd.ibm.com objects in their namespaces. You can find more information about this in our documentation website.

See example-role.yaml for an example Role object you can use (with a RoleBinding) to give users permissions to deploy ST4SD in a namespace.

Note: Update the metadata.namespace field in example-role.yaml to the name of the namespace that you wish for users to deploy ST4Sd to. Then oc apply -f examples/example-role.yaml. Now, you can create a RoleBinding object in the same namespace and use the RoleBinding to map users to this new Role. These users will be able to install ST4SD using st4sd-olm in this namespace.

Deploy ST4SD Cloud using the operator

  1. Create the 3 PVCs following the st4sd-deployment instructions. In short create 1 PVC for each of the 3 fields in the basic.yaml:
    • spec.setup.pvcInstances: The PersistentVolumeClaim (PVC) (e.g. workflow-instances) should support mounting under multiple pods in Read/Write, filesystem mode (i.e. ReadWriteMany). ST4SD stores the outputs of components on this PVC.
    • spec.setup.pvcDatastore: This PVC (e.g. datastore-mongodb) should support mounting on multiple pods in Read/Write, filesystem mode (i.e. ReadWriteMany). The ST4SD Datastore uses this PVC to store its MongoDB database.
    • spec.setup.pvcRuntimeService: This PVC (e.g. runtime-service) should support mounting under multiple pods in Read/Write, filesystem mode (i.e. ReadWriteMany). The ST4SD Runtime Service uses this PVC to store the metadata of virtual experiments of your ST4SD Registry.
  2. (Optional) Configure the Internal Experiments feature of st4sd-runtime-service. This switches on the Build Canvas functionality of st4sd-runtime-service thereby enabling users to create experiments using an interactive Build Canvas. These "internal experiments" are stored on a S3 bucket and users have the option of making changes to them using the same Build Canvas feature. To enable this feature record the credentials and information of a S3 bucket in a Kubernetes secret using the following keys:

    • S3_ENDPOINT (required)
    • S3_BUCKET (required)
    • S3ACCESSKEY_ID (optional)
    • S3SECRETACCESS_KEY (optional)
    • S3_REGION (optional)

    The st4sd-runtime-service will store the DSL 2.0 workflow definitions in the referenced S3 bucket with the prefix experiments/.

  3. (Optional) Configure the Graph Library feature of st4sd-runtime-service. This feature enables users to access re-usable Graph recipes that are stored in a Graph Library. They can also manage the contents of the library. To enable this feature record the credentials and information of a S3 bucket (can be the same as the one above) in a Kubernetes secret using the following keys:

    • S3_ENDPOINT (required)
    • S3_BUCKET (required)
    • S3ACCESSKEY_ID (optional)
    • S3SECRETACCESS_KEY (optional)
    • S3_REGION (optional)

    The st4sd-runtime-service will store the Graph Templates in the referenced S3 bucket with the prefix library/.

  4. Modify the basic.yaml YAML file to modify the names of the PVCs (unless you used the ones we suggested above) and the desired RouteDomain of your ST4SD instance

    • If you are using an OpenShift cluster on IBM Cloud, st4sd-olm can auto-detect your cluster ingress. You can use ${CLUSTER_INGRESS} to reference it in your spec.setup.routeDomain field (see example).
    • If you have created the Secret(s) for the Internal Experiments (i.e. Build Canvas) and/or Graph Library also fill in the optional fields spec.secretS3InternalExperiments and spec.secretS3InternalExperiments.
  5. Create the basic.yaml YAML file (e.g. oc apply -f examples/basic.yaml).

Note: If you have already installed ST4SD Cloud manually using the st4sd-deployment instructions then inspect the deployment-options.yaml file you created for ST4SD. You can re-use the PersistentVolumeClaim (PVC) objects and routePrefix you selected when you deployed ST4SD manually. The st4sd-olm operator will import your existing deployment and automatically keep it up to date.

References

If you use ST4SD in your projects, please consider citing the following:

bibtex @software{st4sd_2022, author = {Johnston, Michael A. and Vassiliadis, Vassilis and Pomponio, Alessandro and Pyzer-Knapp, Edward}, license = {Apache-2.0}, month = {12}, title = {{Simulation Toolkit for Scientific Discovery}}, url = {https://github.com/st4sd/st4sd-runtime-core}, year = {2022} }

Owner

  • Name: ST4SD: Simulation Tookit for Scientific Discovery
  • Login: st4sd
  • Kind: organization

Citation (CITATION.cff)

# This CITATION.cff file was generated with cffinit.
# Visit https://bit.ly/cffinit to generate yours today!

cff-version: 1.2.0
title: Simulation Toolkit for Scientific Discovery
message: >-
  If you use this software, please cite it using the
  metadata from this file.
type: software
authors:
  - given-names: Michael A.
    family-names: Johnston
    affiliation: IBM Research
  - given-names: Vassilis
    family-names: Vassiliadis
    affiliation: IBM Research
  - given-names: Alessandro
    family-names: Pomponio
    affiliation: IBM Research
    orcid: 'https://orcid.org/0000-0003-1655-7500'
  - given-names: Edward
    family-names: Pyzer-Knapp
    affiliation: IBM Research
identifiers:
  - type: url
    value: 'https://github.com/st4sd/st4sd-runtime-core'
    description: ST4SD Runtime
repository-code: 'https://github.com/st4sd/st4sd-runtime-core'
url: 'https://st4sd.github.io/overview/'
keywords:
  - accelerated-discovery
  - simulation
  - toolkit
license: Apache-2.0
date-released: '2022-12-08'

GitHub Events

Total
  • Release event: 3
  • Push event: 1
  • Create event: 3
Last Year
  • Release event: 3
  • Push event: 1
  • Create event: 3

Packages

  • Total packages: 1
  • Total downloads: unknown
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 0
proxy.golang.org: github.com/st4sd/st4sd-olm
  • Versions: 0
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 7.3%
Average: 7.7%
Dependent repos count: 8.2%
Last synced: 10 months ago

Dependencies

Dockerfile docker
  • gcr.io/distroless/static nonroot build
  • golang 1.19 build
go.mod go
  • github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1
  • github.com/BurntSushi/toml v1.2.1
  • github.com/MakeNowJust/heredoc v1.0.0
  • github.com/Masterminds/goutils v1.1.1
  • github.com/Masterminds/semver/v3 v3.2.0
  • github.com/Masterminds/sprig/v3 v3.2.3
  • github.com/Masterminds/squirrel v1.5.3
  • github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d
  • github.com/beorn7/perks v1.0.1
  • github.com/cespare/xxhash/v2 v2.2.0
  • github.com/chai2010/gettext-go v1.0.2
  • github.com/containerd/containerd v1.6.18
  • github.com/cyphar/filepath-securejoin v0.2.3
  • github.com/davecgh/go-spew v1.1.1
  • github.com/docker/cli v20.10.22+incompatible
  • github.com/docker/distribution v2.8.1+incompatible
  • github.com/docker/docker v20.10.22+incompatible
  • github.com/docker/docker-credential-helpers v0.7.0
  • github.com/docker/go-connections v0.4.0
  • github.com/docker/go-metrics v0.0.1
  • github.com/docker/go-units v0.5.0
  • github.com/emicklei/go-restful/v3 v3.10.1
  • github.com/evanphx/json-patch v5.6.0+incompatible
  • github.com/evanphx/json-patch/v5 v5.6.0
  • github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f
  • github.com/fatih/color v1.13.0
  • github.com/fsnotify/fsnotify v1.6.0
  • github.com/go-errors/errors v1.4.2
  • github.com/go-gorp/gorp/v3 v3.1.0
  • github.com/go-logr/logr v1.2.3
  • github.com/go-logr/zapr v1.2.3
  • github.com/go-openapi/jsonpointer v0.19.5
  • github.com/go-openapi/jsonreference v0.20.0
  • github.com/go-openapi/swag v0.22.3
  • github.com/gobwas/glob v0.2.3
  • github.com/gogo/protobuf v1.3.2
  • github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da
  • github.com/golang/protobuf v1.5.2
  • github.com/google/btree v1.1.2
  • github.com/google/gnostic v0.6.9
  • github.com/google/go-cmp v0.5.9
  • github.com/google/gofuzz v1.2.0
  • github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
  • github.com/google/uuid v1.3.0
  • github.com/gorilla/mux v1.8.0
  • github.com/gosuri/uitable v0.0.4
  • github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79
  • github.com/huandu/xstrings v1.4.0
  • github.com/imdario/mergo v0.3.13
  • github.com/inconshreveable/mousetrap v1.1.0
  • github.com/jmoiron/sqlx v1.3.5
  • github.com/josharian/intern v1.0.0
  • github.com/json-iterator/go v1.1.12
  • github.com/klauspost/compress v1.15.13
  • github.com/lann/builder v0.0.0-20180802200727-47ae307949d0
  • github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0
  • github.com/lib/pq v1.10.7
  • github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de
  • github.com/mailru/easyjson v0.7.7
  • github.com/mattn/go-colorable v0.1.13
  • github.com/mattn/go-isatty v0.0.17
  • github.com/mattn/go-runewidth v0.0.14
  • github.com/matttproud/golang_protobuf_extensions v1.0.4
  • github.com/mitchellh/copystructure v1.2.0
  • github.com/mitchellh/go-wordwrap v1.0.1
  • github.com/mitchellh/reflectwalk v1.0.2
  • github.com/moby/locker v1.0.1
  • github.com/moby/spdystream v0.2.0
  • github.com/moby/term v0.0.0-20221205130635-1aeaba878587
  • github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
  • github.com/modern-go/reflect2 v1.0.2
  • github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00
  • github.com/morikuni/aec v1.0.0
  • github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822
  • github.com/onsi/ginkgo/v2 v2.6.0
  • github.com/onsi/gomega v1.24.1
  • github.com/opencontainers/go-digest v1.0.0
  • github.com/opencontainers/image-spec v1.1.0-rc2
  • github.com/openshift/api v0.0.0-20221013123534-96eec44e1979
  • github.com/openshift/client-go v0.0.0-20220603133046-984ee5ebedcf
  • github.com/peterbourgon/diskv v2.0.1+incompatible
  • github.com/pkg/errors v0.9.1
  • github.com/prometheus/client_golang v1.14.0
  • github.com/prometheus/client_model v0.3.0
  • github.com/prometheus/common v0.39.0
  • github.com/prometheus/procfs v0.9.0
  • github.com/rivo/uniseg v0.4.3
  • github.com/rubenv/sql-migrate v1.2.0
  • github.com/russross/blackfriday/v2 v2.1.0
  • github.com/shopspring/decimal v1.3.1
  • github.com/sirupsen/logrus v1.9.0
  • github.com/spf13/cast v1.5.0
  • github.com/spf13/cobra v1.6.1
  • github.com/spf13/pflag v1.0.5
  • github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb
  • github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415
  • github.com/xeipuuv/gojsonschema v1.2.0
  • github.com/xlab/treeprint v1.1.0
  • go.starlark.net v0.0.0-20221205180719-3fd0dac74452
  • go.uber.org/atomic v1.10.0
  • go.uber.org/multierr v1.9.0
  • go.uber.org/zap v1.24.0
  • golang.org/x/crypto v0.5.0
  • golang.org/x/net v0.5.0
  • golang.org/x/oauth2 v0.3.0
  • golang.org/x/sync v0.1.0
  • golang.org/x/sys v0.4.0
  • golang.org/x/term v0.4.0
  • golang.org/x/text v0.6.0
  • golang.org/x/time v0.3.0
  • gomodules.xyz/jsonpatch/v2 v2.2.0
  • google.golang.org/appengine v1.6.7
  • google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef
  • google.golang.org/grpc v1.51.0
  • google.golang.org/protobuf v1.28.1
  • gopkg.in/inf.v0 v0.9.1
  • gopkg.in/yaml.v2 v2.4.0
  • gopkg.in/yaml.v3 v3.0.1
  • helm.sh/helm/v3 v3.11.1
  • k8s.io/api v0.26.0
  • k8s.io/apiextensions-apiserver v0.26.0
  • k8s.io/apimachinery v0.26.0
  • k8s.io/apiserver v0.26.0
  • k8s.io/cli-runtime v0.26.0
  • k8s.io/client-go v0.26.0
  • k8s.io/component-base v0.26.0
  • k8s.io/klog/v2 v2.80.1
  • k8s.io/kube-openapi v0.0.0-20221207184640-f3cff1453715
  • k8s.io/kubectl v0.26.0
  • k8s.io/utils v0.0.0-20221128185143-99ec85e7a448
  • oras.land/oras-go v1.2.2
  • sigs.k8s.io/controller-runtime v0.14.1
  • sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd
  • sigs.k8s.io/kustomize/api v0.12.1
  • sigs.k8s.io/kustomize/kyaml v0.13.9
  • sigs.k8s.io/structured-merge-diff/v4 v4.2.3
  • sigs.k8s.io/yaml v1.3.0
go.sum go
  • 980 dependencies