Install - Server on Kubernetes Operator Offline


Installation Wizard

To help with the installation process, vFunction offers an Installation Wizard. This Wizard provides additional information about the Prerequisites as well as the Required and Optional Settings for installing the vFunction Server and Agents. This Wizard also walks you through each step in the Installation process.

For organizations looking to start a trial with vFunction, a simplified Installation Wizard will get you started quickly without reviewing the additional Optional Settings.

Please contact support@vfunction.com or your vFunction Contact(s) for the password to start using this Wizard.


Installation Steps

Take the following steps to install the vFunction Server in a Kubernetes Cluster with no access to Docker Hub:

  1. Ensure Prerequisites are met
  2. Download the vFunction Kubernetes Operator Offline Installation TGZ
  3. SCP the Kubernetes Operator Offline Installation TGZ package to the Linux VM with kubectl access to the Kubernetes Cluster
  4. Unpack the Installation Package
### Replace VERSION with the actual value
tar -xvzf vfunction-server-offline-installation-kubernetes.vVERSION.tgz
  1. Open the installation.yaml by running the following command:
vi vfunction-server-for-kubernetes/config/installation.yaml
  1. Set the required Configurable 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. Server.custom_docker_registry and server.custom_image_pull_secret. These can be set via the vfunction-server-for-kubernetes/offline/load-offline-images.sh script outlined in the Prereqs
### 3. Ingress. By default, this creates an Nginx Ingress Object. This can be modified to use an existing external or integrate with a number of other providers
### 4. 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"
  offline: "Yes"
  custom_docker_registry: ""
  custom_image_pull_secret: ""
  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:
  authentication:
  tls:
    use_letsencrypt: "No"
    crt: 
    key: 
  nginx:
    force_http: "No"
    ipv6_disabled: "No"
    service_type: ""
  ingress:
    use_ingress: "Yes"
    external_ingress: "No"
    tls_termination: "edge"
    use_tls_certificate: "No"
    additional_hosts: ""
    ingress_type: "nginx"
    nginx:
      controller_type: "ingress-nginx"
      class: "nginx"
      additional_annotations:
    kong:
      class: "kong"
      additional_annotations:
    alb:
      scheme: "internet-facing"
      certificate_arn: ""
      additional_annotations:
    traefik:
      class: "traefik"
      entrypoint_http: "web"
      entrypoint_https: "websecure"
      api_version: "traefik.io/v1alpha1"
      additional_annotations:
    istio:
      gateway:
        controller: ""
        external_gateway: "No"
        external_gateway_name: ""
        external_gateway_namespace: "istio-system"
        external_secret_name: ""
  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_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: ""
    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
  1. Run the installation script:
### Replace NAMESPACE with the actual Namespace to be used, such as "vfunction"
bash vfunction-server-for-kubernetes/install.sh -n NAMESPACE
  1. Verify the installation was successful by running the following command.
### Replace NAMESPACE with the actual Namespace that was used, such as "vfunction"
### Verify that the "state" property shows the value "Working" 
### Verify that the "installed" property shows the value "Yes"
kubectl get vfunctionserver vfunction-server -n NAMESPACE -o yaml | grep status: -A 100
  1. If, in Step #9, the “state” property shows the value “Failed”, this indicates that the Operand was not installed correctly. Check the Events and Logs for all of the Pod, the Operator and Server Containers, for any issues
  2. If any issues arise, see the:
  1. Install the vFunction Agents for a Monolithic Application or a Distributed Application