Install - Server on OpenShift Online


Installation Steps

Take the following steps to install the vFunction Server in a OpenShift Cluster via the OperatorHub:

  1. Ensure Prerequisites are met
  2. Log into the OpenShift Console
  3. Select Operators > OperatorHub from the left-hand sidebar
  4. Search for vfunction in the center pane’s search bar
  5. Select the vFunction Operator. If two options are presented, select the Certified version
  6. A dialog box will be displayed with an introduction to the vFunction platform as well as an overview of the configurable settings
  7. On the left-hand side of the dialog box, use the dropdowns to select Channel: stable and select the newest available Version. Then click the blue Install button
  8. On the next page, define the Installed Namespace and set Update approval to Manual. Then click the blue Install button
  9. Once the Operator has finished installing, you will be taken to a page for the installed vFunction Operator under Operators > Installed Operators
  10. In the center pane, click Create instance below where it says “VS vFunction Represents an instance of vFunction running on your cluster.”
  11. On the Create VfunctionServer page, toggle between Form View and YAML view based on your preference
  12. Set the required Configuration Settings
### Sample Yaml with Required Configurable Settings
### The Required sections of this Yaml to review are:
### 1. Server.host, server.org_name, server.admin section for the URL and first-user login
### 2. Route. By default, this creates an Route Object
### 3. Storage. By default, this automatically creates two Volumes of 50gb each using the "default" StorageClass
server:
  host: https://vfunction.mycompany.com
  org_name: MyCompany
  admin:
    email: peter@mycompany.com
    name: Peter
    password: Password1!
  upgrade: "Never"
  measurements:
    min_number_of_services: "2"
    max_number_of_services: "10"
    max_pod_memory_capacity: "16G"
    max_pod_cpu_capacity: "1"
    pod_ephemeral_storage: "2500M"
    quality_of_service_class: "Burstable"
    S3:
      bucket: ""
      key: ""
      secret: ""
      region: ""
  authentication:
    authority: ""
    client_id: ""
    client_secret: ""
    jwks_url: ""
    issuer: ""
    ca_root_crt:
  tls:
    use_letsencrypt: "No"
    crt:
    key:
  nginx:
    force_http: "No"
    ipv6_disabled: "No"
    service_type: ""
  route:
    use_route: "Yes"
    tls_termination: "edge"
    use_tls_certificate: "No"
  mysql:
    external_mysql_ip: ""
    external_mysql_user: ""
    external_mysql_password: ""
    max_pod_memory_capacity: "4G"
    max_pod_cpu_capacity: "1"
    pod_ephemeral_storage: "1G"
    quality_of_service_class: "Burstable"
  storage:
    storage_class: ""
    mysql_persistent_volume: ""
    mysql_persistent_volume_claim: ""
    mysql_persistent_volume_claim_access_mode: "ReadWriteOnce"
    storage_persistent_volume: ""
    storage_persistent_volume_claim: ""
    storage_persistent_volume_claim_access_mode: "ReadWriteOnce"
    lets_encrypt_persistent_volume: ""
    lets_encrypt_persistent_volume_claim: ""
    lets_encrypt_persistent_volume_claim_access_mode: "ReadWriteOnce"
    logs_persistent_volume: ""
    logs_persistent_volume_claim: ""
    logs_pvc_access_mode: "ReadWriteOnce"
  logging:
    use_fluentd: "No"
  distributed:
    otlp:
      min_number_of_services: "1"
      max_number_of_services: "10"
      max_pod_memory_capacity: "8G"
      max_pod_cpu_capacity: "1"
      pod_ephemeral_storage: "1G"
      max_folder_size_in_mb: "200"
      quality_of_service_class: "Burstable"
    dm:
      min_number_of_services: "1"
      max_number_of_services: "10"
      max_pod_memory_capacity: "8G"
      max_pod_cpu_capacity: "1"
      pod_ephemeral_storage: "1G"
      quality_of_service_class: "Burstable"
  backup:
    mysql:
      restore_during_installation: "No"
      S3:
        bucket: ""
        key: ""
        secret: ""
        region: ""
  affinity:
    node_affinity:
    node_selectors:
    additional_labels:
    additional_annotations:
  resources:
    set_pod_resources: "Yes"
    set_pod_memory_capacity_resource: "Yes"
    default_pod_memory_capacity: "1G"
    set_pod_cpu_capacity_resource: "Yes"
    default_pod_cpu_capacity: "1"
    set_pod_ephemeral_storage_resource: "Yes"
    default_pod_ephemeral_storage: "1G"
    quality_of_service_class: "Burstable"
  security:
    image_pull_policy: ""
    force_hashed_images: "No"
    use_network_policies: "No"
    proxy:
      http_proxy: ""
      https_proxy: ""
      additional_no_proxy: ""
    use_rate_limiting: "No"
    requests_per_second: "10"
  1. If needed, configure optional Configurable Settings. It is recommended to review the following optional sections and size the Pods according to the size of your biggest application to be analyzed:
  • server.authentication: if planning to use OIDC for authentication
  • server.measurements: for larger (8k+ Classes) Monolithic Applications
  • server.mysql: for larger Monolithic or Distributed Applications
  • server.otlp: for larger (20+ Services) Distributed Applications
14. Click the blue **Create** button 15. The **Installed Operators** screen will display that the **vfunction-server** (the Operand) is in **Status = State: Installing** 16. Go to the **Workloads** > **Pods** and filter the search results by **Name: vfunction** 17. 13 Pods should come up as **Ready** with 1/1 before the installation has completed 18. The **vfunction-route** should be created under the **Networking** > **Routes** and the vFunction Server should be accessible for first-login at the Server FQDN using the Admin credentials defined in Step #12

As next steps:

  • If using vFunction for a Monolithic Application, install the vFunction Runtime Agent
  • If using vFunction for a Distributed Application, install the OpenTelemetry Agent