Configurable Settings - Server on Kubernetes
How to apply changes to the Kubernetes environment
Changes in the installation.yaml can be applied by running the install.sh script or the upgrade.sh script in a Kubernetes environment. Note that re-running the install.sh script will delete any database information that would have been stored previously.
Required fields in installation.yaml
|
String | The server.host value needs to start with http:// or https://. The value can be an IP Address or a FQDN. This value needs to match the URL that Developers will use in a browser to access this server. |
|
String | Used as an identifier for the Organization using vFunction |
|
String | Accepted characters include A-Z a-z 0-9 . _ % + - @ |
|
String | Used an an identifier for the logged in user in the vFunction Server UI |
|
String | Used for the Admin as the password for first logging into the Server UI. The Admin can then change the password from the Server UI if desired. Minimum requirements: 8 characters, lower & uppercase letter, number and a special character ! @ # $ % ^ & |
|
Integer | The default value is 2. The Nodes in the Cluster may need to be adjusted to accomodate the two Measurements Pods Replicas created by default |
|
Integer | The default value is 10. |
|
String | Default value for the Maximum Memory used by each Measurements Pod is 16gb. The Nodes in the Cluster may need to be adjusted to accomodate the two Measurements Pods Replicas created by default. The Maximum Meory can be increased with guidance from the vFunction Support Team if needed |
|
String | Default value for the Maximum CPU used by the Measurements Pods is 1. This value can be increased if needed |
|
String | Default value for the Ephemeral Storage used by the Measurements Pod(s) is 2500M. This value is used for temporary storage on the Pod |
|
String | The default value for the Quality of Service Class is A second values is A third value is |
|
String | Default value is No. With the Value set to, "Yes", a Persistent Volume will be created to manage the SSL Certificate through Let's Encrypt to auto-renew the expired Certificate |
|
String | Default value is No. The force_http key can be used if the SSL certificate used in the environment is not going to be added to the vFunction Nginx Pod. With force_http set to Yes, TLS will be terminated on the route. And, the vFunction Nginx Pod will listen to http traffic on Port 80 even if https is used in the server.host field |
|
String | Default value is No. When set to, "Yes", the ipv6_disabled key will disable the vFunction Nginx pod from listening to and from sending traffic to other Pods over IPv6. The default value is, "No" to allow the Nginx Pod to listen for IPv6 traffic |
|
String | The default value is Use value, "No" if no Ingress is planned at all in the environment. |
|
String | Default value is Changing the value to, "Yes" should be used to send traffic through a third-party Ingress. If using a third-party Ingress, also configure the third-party Ingress to send traffic from the External Ingress to the vfunction-nginx Pod |
|
String | Default value is With, "passthrough" set, the Kubernetes Cluster will ignore the TLS termination even if there is an Ingress Controller. Termination of TLS will be done on the vfunction-nginx Pod. A valid SSL certificate is needed in the tls.crt along with the Key in tls.key. With, "reencrypt" set, the Kubernetes Cluster will terminate TLS termination on the Ingress Controller using one SSL certificate and key. The traffic will be reencrypted and will be decrypted again on the vfunction-nginx Pod. A valid SSL certificate is needed in the tls.crt along with the Key in tls.key for the vfunction-nginx Pod's decryption. |
|
String | The default value is set to No. Setting , "Yes" will require the installation.yaml's tls.crt to be populated with the SSL Certificate and tls.key with the Key |
|
String | Default value is set to If using a separate third-party External Ingress, please contact the vFunction Support Team and provide the name of this product so we can work towards adding support. In the meantime, set ingress.external_ingress: Yes and set ingress.use_ingress: Yes. Then point the External Ingress to the vfunction-nginx Pod once the installation is complete. |
|
String | Default value is set to Alternatively, the commerical Nginx Inc. controller value, "nginx-ingress-controller" can also be used manage this Ingress from the vFunction installation |
|
String | Default value is nginx. This key is only relevant if the tls.ingress_type: "nginx". If an organization uses a third-party Nginx Ingress but this Ingress uses a different class, such as "nginx-v2", this value can be modified. The organization can then manage this Ingress from the vFunction installation
|
|
String | Default value is kong. This key is only relevant if the server.tls.ingress_type: "kong" |
|
String | Default value is set to internet-facing. "Internal" is another available option. This key is only relevant if the server.tls.ingress_type: "alb" |
|
String | Default value is traefik which refers to the IngressClass name. This key is only relevant if the server.tls.ingress_type: "traefik" |
|
String | Default value is web. This key is only relevant if the server.tls.ingress_type: "traefik" |
|
String | Default value is websecure. This key is only relevant if the server.tls.ingress_type: "traefik" |
|
String | Default value is set to traefik.io/v1alpha1 as the Traefik v3+ CRD API version for IngressRouteTCP is using passthrough mode. Alternatively, use, "traefik.containo.us/v1alpha1" for Traefik v2. This key is only relevant if the server.tls.ingress_type: "traefik"
|
|
String | Default value is No. This key is only relevant if the server.tls.ingress_type: "istio" |
|
String | Default value is istio-system. This key is only relevant if the server.tls.ingress_type: "istio" |
|
String | Default value is 4gb. This value can be increased if needed |
|
String | Default value is 1. This value can be increased if needed |
|
String | Default value is 1G. This is used for temporary storage on the MySQL Pod
|
|
String | Default value is A second values is, "BestEffort" where no CPU nor Memory Requests and Limits are provided. When allocating Nodes for Pods, this Pod will receive the lowest priority and will be evicted if other Pods need additional resources and the Node is throttled. A third value is, "Guaranteed" where a Pod's Request size for CPU and Memory are equal to its Limits size. This provides predictable performance and may be require for some Resource Management Tools like Karpenter. |
|
String | Default value is ReadWriteOnce. Defines the way that the MySQL Pod connects to the MySQL Persistent Volume |
|
String | Default value is ReadWriteOnce. Defines the way that the Storage Pod connects to the Storage Persistent Volume |
|
String | Default value is ReadWriteOnce. Defines the way that the Nginx Pod connects to the Lets Encrypt Persistent Volume. This setting is only relevant if tls.use_letsencrypt = "Yes" |
|
String | Default value is ReadWriteOnce. Defines the way that the Fluentd Pod connects to the Fluentd Volume. This setting is only relevant if logging.use_fluentd = "Yes" |
|
String | Default value is No. Setting, "Yes" allows for persistent logs to be written to a Fluentd Persistent Volume so that, if a Container crashes, the vFunction logging will remain available for troubleshooting purposes. This setting adds a Fluentd Pod and a Fluentd Persistent Volume to the Namespace. A Fluentd Container is added to each vFunction Pod in the Namespace. |
|
Integer | Default value is 1. This defines the minimum number of OTLP Pods in the environment. This Pod is used to receive Open Telemetry Protocol traces for Distributed Applications |
|
Integer | Default value is 10. This defines the maximum number of OTLP Pods in the environment |
|
String | Default value is 8G. This can be increased if needed |
|
String | Default value is 1. This value can be increased if needed |
|
String | Default value is 1G. This value is used for the size of the temporary storage on the Pod |
|
String | Default value is 200. This value denotes the maximum storage per Distributed Application in MB. The Best Practice is to set this value at roughly twice what the OTLP Service is receiving and can handle per minute |
|
String | Default value is A second values is, "BestEffort" where no CPU nor Memory Requests and Limits are provided. When allocating Nodes for Pods, this Pod will receive the lowest priority and will be evicted if other Pods need additional resources and the Node is throttled. A third value is, "Guaranteed" where a Pod's Request size for CPU and Memory are equal to its Limits size. This provides predictable performance and may be require for some Resource Management Tools like Karpenter. |
|
Integer | Default value is 1. This defines the minimum number of DM Pods in the environment. This Pod is used for Distributed Measurements to analyze local Service Maps received from the OTLP Pod during Learning to display the Architecture for a Distributed Architecture Application |
|
Integer | Default value is 10. This defines the maximum number of DM Pods in the environment |
|
String | Default value is 8G. This can be increased if needed |
|
String | Default value is 1. This can be increased if needed |
|
String | Default value is 1G. This is used for the temporary storage size on the DM Pods |
|
String | Default value is A second values is, "BestEffort" where no CPU nor Memory Requests and Limits are provided. When allocating Nodes for Pods, this Pod will receive the lowest priority and will be evicted if other Pods need additional resources and the Node is throttled. A third value is, "Guaranteed" where a Pod's Request size for CPU and Memory are equal to its Limits size. This provides predictable performance and may be require for some Resource Management Tools like Karpenter. |
|
String | Default value is |
|
String | Default value is Yes. With "Yes" set, the vFunction resource settings are used with the deployment to set minimum and maximum CPU and RAM levels. For environments that prefer / require Best Effort resource utilization rather than reserving resources, set the value to, "No" and the resources will scale until environmental limits are hit. With, "No" in place, all other installation.yaml settings for CPU and RAM are ignored |
|
String | Default value is Yes. With "Yes" set, the vFunction resource settings are used with the deployment to set minimum and maximum RAM levels. For environments that prefer / require Best Effort resource utilization rather than reserving resources, set the value to, "No" and the resources will scale until environmental limits are hit. With, "No" in place, all other installation.yaml settings for RAM are ignored |
|
String | Default value is 1G. This setting sets the RAM Limit for all Pods besides the DM, OTLP, Measurements and MySQL Pods |
|
String | Default value is Yes. With "Yes" set, the vFunction resource settings are used with the deployment to set minimum and maximum CPU levels. For environments that prefer / require Best Effort resource utilization rather than reserving resources, set the value to, "No" and the resources will scale until environmental limits are hit. With, "No" in place, all other installation.yaml settings for CPU are ignored |
|
String | Default value is 1. This setting sets the CPU Limit for all Pods besides the DM, OTLP, Measurements and MySQL Pods |
|
String | Default value is Yes. With "Yes" set, the vFunction resource settings are used with the deployment to set Pod Ephemeral Storage levels. For environments that prefer / require Best Effort resource utilization rather than reserving resources, set the value to, "No" and the Cluster defaults will be used. With, "No" in place, all other installation.yaml settings for CPU are ignored |
|
String | Default value is 1. This setting sets the Pod Ephemeral Storage Limit for all Pods besides the DM, OTLP, Measurements and MySQL Pods |
|
String | Default value is Burstable. This setting sets the Pod Quality of Service Class for all Pods besides the DM, OTLP, Measurements and MySQL Pods |
|
String | Default value is No. Setting value to, "Yes" implements ingress and egress rules within the cluster to limit how traffic flows between Services |
|
String | Default value is No. Setting value to, "No" ensures that the vFunction Server will try to process every request that it receives. This creates a risk that excessive requests will slow down the Server or result in a Denial of Service attack. By setting, "Yes", an organization can also use server.security.proxy.requests_per_second to define how many of the same API the Server will answer per second before throwing an error |
|
String | Default value is 10. This value is only relevant if security.use_rate_limiting: "Yes". This value defines how many of the same API the Server will answer per second before throwing an error |
Sample installation.yaml with required fields
server:
host: "http://my.domain.com"
org_name: "MyCompany"
admin:
email: "admin@mycompany.com"
name: "Admin"
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:
bucket: ""
key: ""
secret: ""
region: ""
authentication:
authority: ""
client_id: ""
client_secret: ""
jwks_url: ""
issuer: ""
ca_root_crt: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
tls:
use_letsencrypt: "No"
crt: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
key: |
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE 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: ""
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"
Optional fields in installation.yaml
- offline.custom_docker_registry
- offline.custom_image_pull_secret
- server.affinity.node_affinity
- server.affinity.node_selectors
- server.affinity.additional_labels
- server.affinity.additional_annotations
- server.authentication
- server.backup
- server.ingress.additional_hosts
- server.ingress.alb.additional_annotations
- server.ingress.nginx.additional_annotations
- server.mysql.external_mysql_*
- server.nginx
- server.security.proxy
- server.smtp
- server.storage
- server.tls
offline.custom_docker_registry
offline:
custom_docker_registry: private.registry.ecr.us-east-1.amazonaws.com/vfunction
|
|
offline.custom_image_pull_secret
server:
custom_image_pull_secret: imagePullSecretValue
|
|
server.affinity.node_affinity
affinity:
node_affinity:
- key: "node-type"
operator: "In"
values: "cpu-optimized"
services: "vfapi-measurements"
|
|
server.affinity.node_selectors
affinity:
node_selectors:
- key: "cpu"
value: "high"
services: "mysql"
- key: "memory"
  ; value: "high"
services: "vfapi-measurements,vfapi-dm,vfapi-otlp"
|
|
server.affinity.additional_labels
affinity:
additional_labels:
- key: "memory"
value: "high"
services: "vfapi-measurements,vfapi-dm,vfapi-otlp"
|
|
server.affinity.additional_annotations
affinity:
additional_annotations:
- key: "owner"
value: "peter@myorg.com"
services: ""
|
|
server.authentication
authentication:
authority: "https://accounts.google.com"
client_id: "clientID-xyz"
client_secret: "clientSecret-xyz"
jwks_url: "https://www.googleapis.com/oauth2/v3/certs"
issuer: "https://accounts.google.com"
ca_root_crt: |
-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- |
|
server.backup
backup:
mysql:
S3:
bucket: "awsBucket"
key: "awsKey"
secret:"awsSecret"
region: "awsRegion"
|
|
server.ingress.additional_hosts
ingress:
additional_hosts: ""
|
vFunction supports using additional hostnames to manage the flow of traffic to the vFunction Server |
server.ingress.alb.additional_annotations
ingress:
alb:
additional annotations:
- key: "alb.ingress.kubernetes.io/xxx" value: "true" |
vFunction supports annotations for ALB Ingress Controllers |
server.ingress.nginx.additional_annotations
ingress:
nginx:
additional annotations:
- key: "nginx.ingress.kubernetes.io/xxx" value: "true" |
vFunction support annotations for ingress-nginx and for nginx-ingress-controller Nginx Ingress Controllers Default annotations for
Default annotations for
|
server.mysql.external_mysql_*
mysql:
external_mysql_ip: "ipAddress"
external_mysql_user: "username"
external_mysql_password: "password"
|
|
server.nginx
nginx:
service_type: ""
|
|
security.proxy
security:
proxy:
http_proxy:
https_proxy:
additional_no_proxy:
|
By default, "no_proxy" entries are automatically added to the ConfigMaps for each Pod for routing to localhost,127.0.0.1,vfunction-mysql,vfunction-storage,vfunction-vfapi-idp,vfunction-vfapi-measurements,vfunction-vfapi-measurements,vfunction-vfapi-organizations,vfunction-vfapi-parser,vfunction-vfapi-users,vfunction-nginx. If additional no_proxy entries are needed or to route external traffic through a proxy via http_proxy or https_proxy, add these entries here. These proxy entries may be necessary if the environment has been configured to use a third-party OpenID Identity Provider for authentication, e.g. login.microsoftonline.com.
|
server.smtp
smtp:
user: notifications@mycompany.com
password: my$uperS3cr3t
identity:
url: smtp://smtp.gmail.com:587
|
|
server.storage
storage:
storage_class: notDefault
mysql_persistent_volume:
mysql_persistent_volume_claim:
storage_persistent_volume:
storage_persistent_volume_claim:
lets_encrypt_persistent_volume:
lets_encrypt_persistent_volume_claim:
|
|
server.tls
tls:
crt: |
-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- key: |
-----BEGIN PRIVATE KEY----- ... -----END PRIVATE KEY----- |
|