Installation process

Installation of a management cluster via GUI/CLI, microcluster, troubleshooting.

Installation is performed from the administrator’s workstation using the shtil utility. In open loop the shtil machine and the nodes of the created cluster must have network access to the official image registry r.shturval.tech (HTTPS, port 443).

Before installation, check the Open Loop Requirements, the Installation Preparations (shtil machine, nodes, SSH, image registry), and the applicable scripts in the Internetworking Diagrams. For the general composition of the image registry, see also repository services.

Available installation scripts:

  • with GUI — install-gui, then the installation wizard in the browser;
  • with flags — install-cli and the provider subcommand;
  • with YAML - install-cli … --yaml-path / -f.

Installation from GUI

GUI installation consists of two stages: first shtil creates a local installation cluster, then the administrator configures the management cluster in the browser-based installation wizard.

The install-gui command is also available through the create-cluster and create synonyms.

Step 1: Start a local installation cluster

In an open loop, the --bootstrap-license flag is required. By default, temporary installation cluster images are loaded with r.shturval.tech.

./shtil install-gui \
  --bootstrap-license="YOUR-LICENSE"

With the given password admin:

./shtil install-gui \
  --bootstrap-license="YOUR-LICENSE" \
  --password="PASSWORD-ADMIN"

The password in --password must be at least 8 characters long and contain a lowercase letter, an uppercase letter, and a number.

Basic parameters for launching the local installer:

ParameterDescription
--bootstrap-licensePlatform license. Required for install-gui
--bootstrap-registryImage registry address; default r.shturval.tech
--bootstrap-insecureDisable TLS checking when accessing the image registry
--bootstrap-registry-certs-dirDirectory with trusted registry certificates
--bootstrap-kubeconfig-pathLocal installation cluster kubeconfig path
--passwordPlatform administrator password for logging into the GUI
--name, -nLocal installation cluster name (default help prompt: shturval-installer)
--wait, --retry, --debugWaiting for Control Plane of a local cluster node, number of retries, container saving mode in case of error
-v, --verbosityCLI log detail (up to 10; see ./shtil --help)

After a successful launch, the administrator account information and the installation wizard URL in the GUI are displayed in the console. Credentials are saved in user.conf in the installer data directory (~/.shturval/installer or /tmp/shturval/installer). Save your login and password - you will need them to log into the permanent cluster.

Browser for the GUI - see browser requirements.

If shtil install-gui is launched on a remote Linux machine, open the installation wizard in a browser using the IP address or hostname of this machine, without first forwarding ports, for example, http://10.11.12.13:30080/.

Going by hostname is only possible if the DNS is configured to resolve the domain name to an IP address.

Life cycle of a local installer: the “Cancel installation” button in the installation wizard resets the completed cluster creation form and returns to the initialization screen; refreshing a page without canceling field data usually doesn’t reset. After successful installation of a permanent cluster, the temporary (bootstrap) cluster is not deleted automatically - if necessary, clean it according to the instructions Uninstalling a temporary cluster. If there is an error without --debug, the local installer container may be deleted; for diagnostics use ./shtil install-gui ... --debug.

Step 2: Open the installation wizard in the GUI and go through the steps

  1. Open the GUI URL from the output of shtil (usually http://<shtil-machine-ip>:30080).
  2. Log in as an administrator.
  3. Click Create Management Cluster.
  4. Complete the installation wizard and click Create cluster at the data verification step.
  5. Wait for deployment to complete (approximately 15–30 minutes). Do not close the browser tab until the management cluster installation is complete.
Screenshot of the local installer start screen

Local installer start screen

Step 1. Selecting a provider

Screenshot and step fields

Management Cluster Installation Wizard - Provider Selection

FieldDescription
Cluster nameThe unique name of the management cluster. Used in service objects and FQDN. Indicate the Latin alphabet, numbers and hyphens.
Select providerSelect an infrastructure provider prepared before installation: Shturval v2, VMware vSphere, oVirt and similar, OpenStack, VK Cloud or Selectel.

Note: the provider with which the platform is deployed will be installed in the platform as a critical service - it cannot be disabledI. The remaining infrastructure providers in the platform will be disabled.

Before filling out the form, check the requirements of the selected provider: Shturval v2, VMware vSphere, oVirt and similar providers, OpenStack, VK Cloud, Selectel.

Step 2. Provider configuration

Shturval v2

The Shturval v2 provider uses pre-prepared physical or virtual hosts. A VM template is not needed for this provider: the installation wizard connects to hosts via SSH and installs components on the selected hosts.

Screenshot and step fields

Configuration of the Shturval v2 provider in the install-gui installation wizard

FieldDescription
Instance nameThe name of the provider configuration by which the installation wizard will refer to provisioned hosts.
IP PoolPool of free addresses for the API server and VIP Ingress. If the pool is not selected or there are no free addresses in it, the addresses are specified manually in the basic data step.
SSH usernameUser to connect to hosts. The user must have sudo rights without a password.
Private SSH KeyPrivate key for connecting to hosts. The public part of the key must be added to all target hosts.
HostsIP addresses or FQDN of hosts, roles (controlplane, workers, infra and others) and, if necessary, labels for selecting nodes in the installation wizard.

By default, the provider uses common credentials for all hosts. If necessary, you can specify private credentials for some or all hosts.

Credentials are stored in the Secret of the management cluster in the namespace shturval-capsm. The Secret name is formed from the name of the provider instance with the suffix capsm-v2-provider-secret. An example of Secret is given on the page Provider Shturval v2 (shturval-capsm).

VMware vSphere

For the VMware vSphere provider, use vCenter and the settings prepared before installation. Management cluster nodes will be created from VM template; if the template was not created in advance, prepare it according to the instructions and return to installation.

Screenshot and step fields

VMware vSphere provider configuration in the install-gui installation wizard

FieldDescription
Instance nameThe name of the vSphere configuration in the installation wizard.
IP Pool-addressesPool for API server and VIP Ingress. Without a pool, addresses are entered manually.
vCenter AddressIP address or FQDN of the vCenter server.
UsernamevCenter account in username@domain format.
PasswordvCenter account password.
DatacenterVirtual data center, available after checking the connection.
Resource PoolResource pool in which management cluster VMs will be created.
NetworkNetwork for VM. DHCP must be enabled on the network.
DatastoreStorage for VM disks.
VM storage pathFolder or path to Datastore for VM files.

oVirt, zVirt, HostVM, ED Virtualization, ROSA Virtualization

For oVirt and similar providers, use the Engine, network and virtualization settings prepared before installation. Management cluster nodes will be created from VM template; if the template was not created in advance, prepare it according to the instructions and return to installation.

Screenshot and step fields

oVirt provider configuration in the install-gui installation wizard

FieldDescription
Instance nameThe name of the provider configuration in the installation wizard.
URL EngineFull API Engine address, for example https://ovirt.example.com/ovirt-engine/api.
UsernameAn Engine account with a domain such as admin@internal.
PasswordEngine account password.
Certificate VerificationEngine TLS certificate verification. Disable only if trust in an enterprise or self-signed CA is not configured.
DatacenterVirtual data center from the list after successful connection verification.
ClustersVirtualization cluster where VMs will be created.
VNIC ProfileNetwork profile for VM interfaces. DHCP must be enabled on the network.
Allow CSIAllows you to enable CSI integration for Persistent Volumes in the basic data step.
IP PoolPool for API server and VIP Ingress. Without a pool, addresses are entered manually.

OpenStack, VK Cloud, Selectel

For the provider OpenStack, VK Cloud or Selectel, use the project, network, VM types and API parameters prepared before installation. The management cluster nodes will be created from the VM image/template; if it has not been created beforehand, prepare a Provider VM template and go back to installation.

Screenshots and step fields

ConfIguration of the OpenStack provider in the install-gui installation wizard

VK Cloud provider configuration in the install-gui installation wizard

Selectel provider configuration in the install-gui installation wizard

FieldDescription
Auth URL / Identity endpointKeystone Authorization Service URL.
Project IDCloud project ID.
Project Domain IDProject domain ID.
Region nameRegion or zone of placement.
InterfaceAPI access interface, usually public.
Identity API VersionIdentity API version, usually 3.
Certificate (cacert)Root certificate when using an enterprise or self-signed CA.
Check certificateEnables API TLS certificate verification.
Account TypeService user or token. For Selectel, use the service user.
Name/usernameService user name.
PasswordService user password.
User Domain NameThe user’s domain, if required in the cloud.
TokenAccess token, if the account type is Token.
Provider NameThe unique name of the provider instance.
CloudNameCloud name in configuration.
VM network interfaceInterface name on the created VMs, for example eth0.
sshKeyNameOpenStack SSH key for accessing the VM.
Host SubnetSubnet for management cluster nodes.
externalNetworkIDExternal network identifier for external access.
VM types (flavors)Available virtual machine types for hosts.
Disk types (volume types)Available volume types for VM disks.
Accessibility zonesAvailability zones if necessary.
Security Groups ManagementManagement of security groups from the platform.
Allow CSIAllows OpenStack Cinder CSI to be enabled in the basic data step.

Step 3. Basic data

Shturval v2

Screenshots and step fields

Shturval v2 - basic data, basic mode

Shturval v2 - basic data, advanced settings

Shturval v2 - external API balancer

Shturval v2 - external Ingress balancer

FieldDescription
Version Kubernetes / platform versionCompatible version of Kubernetes and platform for the management cluster.
cluster API server addressIP or FQDN for KubeAPI. You can select a free address from the pool or enter it manually.
VIP address for IngressIPv4 address for system Ingress if an external Ingress balancer is not used.
DNS record IngressWildcard FQDN for Ingress when using DNS instead of VIP.
Use external balancer for IngressLeaves the DNS record field for Ingress. The external load balancer must be provisioned before the deployment starts.
Use an external balancer for the API serverFor the API server, the FQDN of the external balancer is specified. The balancer must be ready before installation.
Set advanced information security settingsIncludes Secret Encryption for etcd, TLS connection to Kubelet and pre-configured audit policy.
PodSubnetCIDR for Pod network. Should not intersect with the network of nodes and services.
Service SubnetCIDR for Service ClusterIP. Should not interfere with the network of nodes and pods.
Cluster ProfileA set of policies and settings that apply to a cluster.

VIPs are needed if external balancers for KubeAPI and Ingress are not used. Both addresses must be free. The API address must be on the Control Plane subnet, and VIP Ingress must be accessible from the administrator workstation.

VMware vSphere

Screenshots and step fields

VMware vSphere - basic data, basic mode

VMware vSphere - basic data, advanced settings

FieldDescription
Provider TemplateA VM template for the required version of Kubernetes, prepared before installation according to instructions. If there is only one template, it is selected automatically.
cluster API server addressVIP or FQDN for KubeAPI. Select an address from the pool or enter it manually.
VIP address for IngressIPv4 address for system Ingress in basic mode.
VIP address for Ingress or DNS record for IngressIn advanced mode, you can specify an IPv4 address or Wildcard FQDN.
Platform VersionCompatible platform version for the selected template.
Enable CSI IntegrationEnables vSphere CSI for Persistent Volumes if allowed by the template and vCenter permissions.
Use external balancerTransfers Ingress traffic to an external balancer; for Ingress, a DNS record is specified.
Set advanced information security settingsIncludes Secret Encryption for etcd, TLS connection to Kubelet and pre-configured audit policy.
PodSubnetCIDR for Pod network.
Service SubnetCIDR for Service ClusterIP.
Cluster ProfileA set of policies and settings that apply to a cluster.

VIPs are needed if external balancers for KubeAPI and Ingress are not used. Both addresses must be free. The API address must be on the Control Plane subnet, and VIP Ingress must be accessible from the administrator workstation.

oVirt, zVirt, HostVM, ED Virtualization, ROSA Virtualization

Screenshots and step fields

oVirt - basic data, basic mode

oVirt - basic data, advanced settings

FieldDescription
Provider TemplateA VM template for the required version of Kubernetes, prepared before installation according to instructions.
Platform VersionCompatible platform version for the selected template.
cluster API server addressVIP or FQDN for KubeAPI. Select an address from the pool or enter it manually.
VIP address for IngressIPv4 address for system Ingress in basic mode.
VIP address for Ingress or DNS record for IngressIn advanced mode, you can specify an IPv4 address or Wildcard FQDN.
Enable CSI IntegrationEnables CSI integration if it is enabled on the provider instance.
Use external balancerTransfers Ingress traffic to an external balancer; for Ingress, a DNS record is specified.
Set advanced information security settingsIncludes Secret Encryption for etcd, TLS connection to Kubelet and pre-configured audit policy.
PodSubnetCIDR for Pod network.
Service SubnetCIDR for Service ClusterIP.
Cluster ProfileA set of policies and settings that apply to a cluster.

VIPs are needed if external balancers for KubeAPI and Ingress are not used. Both addresses must be free. The API address must be on the Control Plane subnet, and VIP Ingress must be accessible from the administrator workstation.

OpenStack, VK Cloud, Selectel

Screenshot and step fields

OpenStack - basic data

FieldDescription
Provider InstanceAn instance of OpenStack, VK Cloud or Selectel, which specifies the prepared VM image/template. If there is only one instance, it is selected automatically.
Platform VersionCompatible platform version for the selected images.
Enable CSI IntegrationEnables CSI for cloud disks if enabled by the provider instance.
Use external balancer for IngressFor a cloud scenario, usually enabled; After creating the cluster, configure the balancer in the cloud panel.
DNS record IngressWildcard FQDN. If the field is empty, the automatic scheme *.<cluster-name>.ip-<IP_EXTERNAL_LB>.shturval.link is applied.
Set advanced information security settingsIncludes Secret Encryption for etcd, TLS connection to Kubelet and pre-configured audit policy.
PodSubnetCIDR for Pod network.
Service SubnetCIDR for Service ClusterIP.
Host SubnetCIDR for nodes; if not specified, the subnet from the provider’s configuration is used.
Cluster ProfileA set of policies and settings that apply to a cluster.

Step 4. Configuring Control Plane nodes

Shturval v2

Screenshots and step fields

Shturval v2 - Control Plane

Shturval v2 - Control Plane, advanced settings

FieldDescription
Number of Control Plane nodesOdd value, no more than 5.
Potentially available hostsHosts with role controlplane or suitable labels.
Host SelectorExpanded selection of hosts by labels and expressions.

VMware vSphere

Screenshot and step fields

VMware vSphere - Control Plane

FieldDescription
Number of Control Plane nodesAn odd value, typically 1 for test or 3 for failover cluster.
CPU/memory/diskControl Plane VM resources. The values must not be below the GUI minimum limits.

oVirt, zVirt, HostVM, ED Virtualization, ROSA Virtualization

Screenshot and step fields

oVirt - Control Plane

FieldDescription
Number of Control Plane nodesOdd value, no more than 5.
Cores/Sockets/ThreadsComputationalVM Control Plane resources.
MemoryThe amount of RAM of the VM.
DiskVM disk capacity; for local storage, not less than the minimum interface value.

OpenStack, VK Cloud, Selectel

Screenshot and step fields

OpenStack - Control Plane

FieldDescription
Number of Control Plane nodesOdd value, no more than 5.
VM TypeFlavor for VM Control Plane.
Disk TypeVolume type for the VM disk.
DiskVM disk capacity.
Availability areaAvailability zone for placing Control Plane nodes.

Step 5. Configuration of Worker nodes

Shturval v2

Screenshots and step fields

Shturval v2 - Worker groups

Shturval v2 - Worker parameters

Shturval v2 - Worker selector

FieldDescription
Worker node groupA group of hosts, such as default or infra.
ZoomManual number of nodes or automatic range.
Host RoleRole for selecting hosts in basic mode, such as workers or infra.
Host SelectorExpanded selection of Worker hosts by label.

VMware vSphere

Screenshots and step fields

VMware vSphere - Worker groups

VMware vSphere - Worker parameters

FieldDescription
Worker node groupVM group, for example default or infra.
ZoomManual number of nodes or automatic range.
CPU/memory/diskResources of VM Worker nodes.
RolesRoles of nodes separated by commas; they will be added to the node labels.

oVirt, zVirt, HostVM, ED Virtualization, ROSA Virtualization

Screenshots and step fields

oVirt - Worker groups

oVirt - Worker parameters

FieldDescription
Worker node groupVM group, for example default or infra.
ZoomManual number of nodes or automatic range.
Cores/Sockets/ThreadsComputing resources of VM Worker nodes.
MemoryThe amount of RAM of Worker nodes.
DiskDisk capacity Worker-nodes.
RolesRoles of nodes separated by commas; they will be added to the node labels.

OpenStack, VK Cloud, Selectel

Screenshot and step fields

OpenStack - Worker groups

FieldDescription
Worker node groupVM group, for example default or infra.
ZoomManual number of nodes or automatic range.
VM TypeFlavor for Worker nodes.
Disk TypeVolume type for the Worker node disk.
DiskDisk capacity of Worker nodes.
Availability areaAvailability zone for placing Worker nodes.
RolesRoles of nodes separated by commas; they will be added to the node labels.

Step 6. Install the certificate

Shturval v2

Screenshot and step fields

Step “Installing a certificate”

OptionDescription
Self-SubscribedThe certificate is issued by the platform. Suitable for test and indoor benches.
IntermediateAn intermediate CA is used; download the certificate chain and private key.
ACMEACME server is used; specify the root CA and server URL.
CorporateUses a ready-made Ingress certificate and private key issued by your CA.
Let’s EncryptUses Let’s Encrypt; enter your account email.

VMware vSphere

Screenshot and step fields

Step “Installing a certificate”

OptionDescription
Self-SubscribedThe certificate is issued by the platform. Suitable for test and indoor benches.
IntermediateAn intermediate CA is used; download the certificate chain and private key.
ACMEACME server is used; specify the root CA and server URL.
CorporateUses a ready-made Ingress certificate and private key issued by your CA.
Let’s EncryptUses Let’s Encrypt; enter your account email.

oVirt, zVirt, HostVM, ED Virtualization, ROSA Virtualization

Screenshot and step fields

Step “Installing a certificate”

OptionDescription
Self-SubscribedThe certificate is issued by the platform. Suitable for test and indoor benches.
IntermediateIsuses an intermediate CA; download the certificate chain and private key.
ACMEACME server is used; specify the root CA and server URL.
CorporateUses a ready-made Ingress certificate and private key issued by your CA.
Let’s EncryptUses Let’s Encrypt; enter your account email.

OpenStack, VK Cloud, Selectel

Screenshot and step fields

Step “Installing a certificate”

OptionDescription
Self-SubscribedThe certificate is issued by the platform. Suitable for test and indoor benches.
IntermediateAn intermediate CA is used; download the certificate chain and private key.
ACMEACME server is used; specify the root CA and server URL.
CorporateUses a ready-made Ingress certificate and private key issued by your CA.
Let’s EncryptUses Let’s Encrypt; enter your account email.

Step 7. Selecting services

Shturval v2

Screenshots and step fields

Selecting services by group

Extended selection of services

FieldDescription
Critical ServicesRequired platform components. Always enabled and cannot be disabled.
MonitoringMetrics, dashboards and metrics export.
LoggingCollection and processing of logs.
Backup and RestoreBackup and snapshot services.
Application DeliveryComponents of continuous delivery and deployment strategies.
Load BalancerLoad balancing and traffic management components.
Information Security ToolsConfiguration analysis and image scanning.
Show advanced settingsSwitches the selection from groups of services to individual services and charts.

VMware vSphere

Screenshots and step fields

Selecting services by group

Extended selection of services

FieldDescription
Critical ServicesRequired platform components. Always enabled and cannot be disabled.
MonitoringMetrics, dashboards and metrics export.
LoggingCollection and processing of logs.
Backup and RestoreReserve serviceseasy copying and working with snapshot.
Application DeliveryComponents of continuous delivery and deployment strategies.
Load BalancerLoad balancing and traffic management components.
Information Security ToolsConfiguration analysis and image scanning.
Show advanced settingsSwitches the selection from groups of services to individual services and charts.

oVirt, zVirt, HostVM, ED Virtualization, ROSA Virtualization

Screenshots and step fields

Selecting services by group

Extended selection of services

FieldDescription
Critical ServicesRequired platform components. Always enabled and cannot be disabled.
MonitoringMetrics, dashboards and metrics export.
LoggingCollection and processing of logs.
Backup and RestoreBackup and snapshot services.
Application DeliveryComponents of continuous delivery and deployment strategies.
Load BalancerLoad balancing and traffic management components.
Information Security ToolsConfiguration analysis and image scanning.
Show advanced settingsSwitches the selection from groups of services to individual services and charts.

OpenStack, VK Cloud, Selectel

Screenshots and step fields

Selecting services by group

Extended selection of services

FieldDescription
Critical ServicesRequired platform components. Always enabled and cannot be disabled.
MonitoringMetrics, dashboards and metrics export.
LoggingCollection and processing of logs.
Backup and RestoreBackup and snapshot services.
Application DeliveryComponents of continuous delivery and deployment strategies.
Load BalancerLoad balancing and traffic management components.
Information Security ToolsConfiguration analysis and image scanning.
Show advanced settingsSwitches the selection from groups of services to individual services and charts.

Step 8. Data verification

Shturval v2

Step description

Check parameter summary: cluster name, provider, API and Ingress addresses, setlocal CIDR, Control Plane configuration, Worker groups, certificate and selected services. To correct a parameter, return to the desired step through the left panel or the Back button. After verification, click Create Cluster.

VMware vSphere

Step description

Check the summary of parameters: cluster name, provider, API and Ingress addresses, network CIDRs, Control Plane configuration, Worker groups, certificate and selected services. To correct a parameter, return to the desired step through the left panel or the Back button. After verification, click Create Cluster.

oVirt, zVirt, HostVM, ED Virtualization, ROSA Virtualization

Step description

Check the summary of parameters: cluster name, provider, API and Ingress addresses, network CIDRs, Control Plane configuration, Worker groups, certificate and selected services. To correct a parameter, return to the desired step through the left panel or the Back button. After verification, click Create Cluster.

OpenStack, VK Cloud, Selectel

Step description

Check the summary of parameters: cluster name, provider, API and Ingress addresses, network CIDRs, Control Plane configuration, Worker groups, certificate and selected services. To correct a parameter, return to the desired step through the left panel or the Back button. After verification, click Create Cluster.

Management cluster installation status

For a detailed description of status stages, color indication, node and service tables, see Cluster Deployment Status.

After the deployment starts, the management cluster installation status and stages are displayed on the screen. Do not close the browser tab until the installation is complete.

Upon completion of the installation, you will automatically move to the “Cluster ready” stage. At this stage the following are available:

  • static kubeconfig of the persistent management cluster - download and save it;
  • link to switch to the permanent management cluster. To log in, use the platform administrator login and password received when you started the installation.

The management cluster installation is considered complete when the minimum requirements are met:

  • infrastructure is ready;
  • at least 1 Control Plane node is ready;
  • services shturval-backend, shturval-auth, shturval-frontend, shturval-ingress-controller were successfully installed.

When kubeconfig and a link to the persistent cluster interface are already available, individual steps can stillnot executed: for example, not all services may be installed or not all NCIs may be used. You can wait for all stages to complete in the temporary cluster interface or check the status in the permanent cluster: NCI - on the Node Configuration page, if necessary, edit nodes through creating and working with NCI; services - on the Installed services page.

Installation of Shturval repository services is carried out in two stages: first, critical services are installed, then the services selected in the “Selecting services” step. The installation of Shturval repository services stage is considered completed only after installation of all services: critical and user-selected (for the composition and updating of registry artifacts, see repository services). For the management cluster, the status also displays the “Replication” stage with a list of replication conditions.

Installation with flags

Installation with flags is performed with the command install-cli (synonymous with install) without going through the platform installation wizard.

The --bootstrap-registry / --bootstrap-insecure parameters are usually not specified: the public registry of platform images is used. Pass the license for the temporary installation cluster with the --bootstrap-license flag if you are not using a pre-prepared kubeconfig (--existing-bootstrap-kubeconfig - see install-cli --help).

Providers

Provider/environmentSubcommand install-cli
Shturval v2shturvalv2
oVirt, zVirt, HostVM, ED Virtualization, ROSA Virtualizationovirt
VMware vSpherevsphere
OpenStackopenstack
VK Cloudvkcloud
Selectelselectel

General parameter groups

Network Context: Internetworking Patterns and Open Loop Requirements.

GroupParameters (example)Purpose
Basic--api-endpoint, -a, --provider-name, --cluster-namePlatform Management API Point, Provider Instance and Cluster Names
Network--pod-subnet, --service-subnetCIDR Pod and Service; see also checking the intersection of subnets
Ingress--ingress-vip, --ingress-default-fqdn, --use-external-ingress-lbAccess to Ingress
System Services--enabled-system-services, --minimalComposition of components; see installing services
Bootstrap--bootstrap-license, --bootstrap-registry, --bootstrap-insecure, --bootstrap-registry-certs-dir, --existing-bootstrap-kubeconfig, --bootstrap-kubeconfig-path, …Connecting a temporary installation cluster or using an existing bootstrap-kubeconfig; in an open loop, --bootstrap-license is often sufficient. For mutually exclusive and mandatory combinations, see --help
Other--yaml-path, -f, --platform-version, --overwrite (instead of overwrite you can write the command -y), --cluster-kubeconfig-pathAlternative presentation of settings, platform version, rewrite mode, final kubeconfig path

When combining YAML and set flags, the fields of the YAML file are read first; only those command line flags that are specified explicitly are overridden.

Shturval v2 - example

./shtil install-cli shturvalv2 \
  --bootstrap-license="YOUR-LICENSE" \
  --ssh-user="shturval" \
  --path-ssh-private-key="/home/admin/.ssh/id_ed25519" \
  --controlplane-nodes="10.11.12.1,10.11.12.2,10.11.12.3" \
  --worker-nodes="10.11.12.11,10.11.12.12,10.11.12.13" \
  --api-endpoint="10.11.12.100" \
  --ingress-vip="10.11.12.101" \
  --cluster-name="mgmt-cluster"

Mandatory combinations and short forms (-c, -w, -a, etc.) are specified in ./shtil install-cli shturvalv2 --help. Complete tables for providers are in the [flag directory](#install-cli-flags directory).

Minimum configuration (one CP):

./shtil install-cli shturvalv2 \
  --bootstrap-license="YOUR-LICENSE" \
  --ssh-user="shturval" \
  --path-ssh-private-key="/home/admin/.ssh/id_ed25519" \
  --controlplane-nodes="10.11.12.1" \
  --api-endpoint="10.11.12.100" \
  --ingress-vip="10.11.12.101" \
  --cluster-name="mgmt-cluster" \
  --minimal=true

An example of a rerun with overwriting conflicting resources on an existing bootstrap cluster:

bin/shtil install-cli shturvalv2 \
  --overwrite\
  --ssh-user="shturval" \
  --path-ssh-private-key="/home/username/sh/kubeconfigs/certs/id_ed25519" \
  --api-endpoint="10.XX.XXX.246" \
  --ingress-vip="10.XX.XXX.252" \
  --controlplane-nodes="10.XX.XXX.145" \
  --worker-nodes="10.XX.XXX.69" \
  --bootstrap-kubeconfig-path="/home/username/sh/kubeconfigs/01bt" \
  -v=10 \
  --cluster-name="mgmt617c1" \
  --provider-name="sht617p1"

Install-cli flags directory {#install-cli-flags directory}

General parameters (all providers)
ParameterRequiredDescription
-a, --api-endpoint [string]Yes for all providers except OpenStack/VK Cloud/SelectelManagement cluster API server address (IP or FQDN without port and protocol, for example 10.11.12.100)
--provider-name [string]NoProvider instance name (default cluster-management-provider)
--cluster-name [string]NoCluster name (default cluster-management)
--pod-subnet [string]NoPod subnet in CIDR format (default 172.16.0.0/16)
--service-subnet [string]NoService subnet in CIDR format (default 10.96.0.0/12)
--ingress-default-fqdn [string]Yes, if --ingress-vip is not set. No for OpenStack/VK Cloud/SelectelWildcard DNS for Ingress (eg *.apps.example.corp)
--ingress-vip [string]Yes, if --ingress-default-fqdn is not set. Not for OpenStack/VK Cloud/SelectelVIP Ingress; combination with external/internal LB, please check the help
--use-external-ingress-lbNoExternal balancer Ingress. For OpenStack/VK Cloud/Selectel usually true
--secureNoAdvanced Security Settings (default false)
--ingress-certs-*NoPaths to CA/TLS/ACME for Ingress (--ingress-certs-ca-crt-path, --ingress-certs-tls-crt-path, --ingress-certs-acme-url, etc.; see help)
--enabled-system-services [string]NoList of system services separated by commas. Ignored with --minimal=true
--bootstrap-kubeconfig-path, -bNoPath to kubeconfig temporary cluster
--bootstrap-license [string]As a rule, yes, if there is no ready-made bootstrap-kubeconfigLicense; for special characters - single quotes
--bootstrap-registry [string]NoImage Registry (default r.shturval.tech)
--bootstrap-insecureNoDo not check TLS registry
--yaml-path, -fNoPath to the YAML manifest of the persistent cluster
--minimalNoMinimum set of services (often one CP)
--platform-version [string]NoPlatform version (default = versions shtil)
-y, --overwriteNoForce update on restart
-v, --verbosityNoLog details
Shturval v2
ParameterRequiredDescription
--path-ssh-private-key [string]YesPath to private SSH key
--ssh-user [string]YesSSH user
-c, --controlplane-nodes [string]YesIP/FQDN Control Plane separated by commas
-w, --worker-nodes [string]Yes, if --minimal falseIP/FQDN Worker separated by commas
--use-external-kubeapi-lbNoKubeAPI External Balancer
oVirt / zVirt / HostVM / ED Virtualization / ROSA Virtualization
ParameterRequiredDescription
-u, --url-providerYesAPI Engine URL, with suffix /ovirt-engine/api
--user-providerYesAccount (for example admin@internal)
--password-providerYesPassword; for special characters - quotes
--tls-insecure-providerNoDisable TLS check to Engine
--tls-cert-path-providerNoPath to trusted CA
--sub-type-providerNozvirt, hostvm, redvirt, rosavirt
--datacenter-providerYesData center name
--datacenter-cluster-providerYesCluster name
--vnic-profile-providerYesVNIC profile
-t, --templateYesVM template
--provider-csi-storageYesStorage Domain for CSI
--allow-csiNoAllow CSI
--control-plane, --workersNoNumber of nodes
--cores-control-plane, --memory-control-plane, --disk-control-plane, --sockets-*, --threads-*NoControl Plane VM Resources
--cores-workers, --memory-workers, --disk-workers, …NoWorker Resources
VMware vSphere
ParameterRequiredDescription
--address-vcenterYesFQDN or IP vCenter
--user-vcenterYesAccount
--password-vcenterYesPassword
--provider-datacenterYesDatacenter
--provider-datastoreYesDatastore
--provider-resource-poolYesresource pool
--provider-networkYesNetwork (DHCP for VM nodes)
--provider-folderYesVM folder
--provider-clone-modeNolinkedClone / fullClone
--provider-storage-policyNoStorage policy if necessary
-t, --templateYesVM template
--enable-csiNoEnable CSI
--control-plane, --workersNoNumber of nodes
--cpu-control-plane, --memory-control-plane, --disk-control-planeNoCP Resources
--cpu-workers, --memory-workers, --disk-workersNoWorker Resources
OpenStack / VK Cloud / Selectel
ParameterRequiredDescription
--url-authYes for OpenStack; may not be required for VK/SelectelKeystone URL with port, for example https://openstack.example.com:5000/v3
--project-idYesProject ID
--project-domain-idYesProject Domain ID
--tls-insecure-providerNoSkip TLS check
--tls-cert-pathNoPEM CA for API
--region-nameNoRegion
--interfaceNoEndpoint interface (public, etc.)
--identity-api-versionNoIdentity API version
--tokenConditionallyToken (OpenStack; not with login/password)
--loginConditionallyService ultrasound
--passwordConditionallyUZ password
--user-domain-nameConditionallyUser Domain
--cloud-nameYesCloud name in terms of cloud API
--ssh-key-nameYesCloud SSH keypair name
--node-cidrYesHost subnet, for example 10.0.0.0/24
--external-network-idYesExternal network ID
--flavorsYesList of flavors separated by commas
--volume-typesYesVolume types separated by commas
--availability-zonesNoAvailability zones
--manage-security-groups, --disable-port-security, --dnsNoNetwork/SEC
--machine-image-nameYesVM image/template name
--enable-csiNoCSI
--control-plane, --workersNoNumber of nodes
--flavor-name-cp, --volume-type-cp, --availability-zone-cp, --disk-cpNoCP in the Cloud
--flavor-name-workers, --volume-type-workers, …NoWorkers in the cloud

Examples of commands for the selected network diagram

Ports, protocols and traffic matrices are on the Internetworking Schemes page. Below are separate commands for copying: block install-gui (default registry r.shturval.tech) and examples install-cli for the management cluster network.

Local installer (install-gui)

./shtil install-gui \
  --bootstrap-license="YOUR-LICENSE"

Shturval v2 - internal KubeAPI, external Ingress

Schemes: with CoreHA on the client, without it on the client scheme.

./shtil install-cli shturvalv2 \
  --bootstrap-license="YOUR-LICENSE" \
  --ssh-user="shturval" \
  --path-ssh-private-key="/home/admin/.ssh/id_ed25519" \
  --controlplane-nodes="10.11.12.1,10.11.12.2,10.11.12.3" \
  --worker-nodes="10.11.12.11,10.11.12.12,10.11.12.13" \
  --api-endpoint="10.11.12.100" \
  --ingress-default-fqdn="*.apps.example.corp" \
  --use-external-ingress-lb=true \
  --cluster-name="mgmt-cluster"

Shturval v2 - internal KubeAPI and internal Ingress

Scheme: internal Ingress (VIP Worker).

./shtil install-cli shturvalv2 \
  --bootstrap-license="YOUR-LICENSE" \
  --ssh-user="shturval" \
  --path-ssh-private-key="/home/admin/.ssh/id_ed25519" \
  --controlplane-nodes="10.11.12.1,10.11.12.2,10.11.12.3" \
  --worker-nodes="10.11.12.11,10.11.12.12,10.11.12.13" \
  --api-endpoint="10.11.12.100" \
  --ingress-vip="10.11.12.101" \
  --cluster-name="mgmt-cluster"

Shturval v2 - external KubeAPI and external Ingress

Scheme: both external balancers.

./shtil install-cli shturvalv2 \
  --bootstrap-license="YOUR-LICENSE" \
  --ssh-user="shturval" \
  --path-ssh-private-key="/home/admin/.ssh/id_ed25519" \
  --controlplane-nodes="10.11.12.1,10.11.12.2,10.11.12.3" \
  --worker-nodes="10.11.12.11,10.11.12.12,10.11.12.13" \
  --api-endpoint="api.example.corp" \
  --use-external-kubeapi-lb=true \
  --ingress-default-fqdn="*.apps.example.corp" \
  --use-external-ingress-lb=true \
  --cluster-name="mgmt-cluster"

Shturval v2 Stand-alone - internal KubeAPI and internal Ingress

Scheme: stand-alone, both VIPs inside the cluster.

./shtil install-cli shturvalv2 \
  --bootstrap-license="YOUR-LICENSE" \
  --ssh-user="shturval" \
  --path-ssh-private-key="/home/admin/.ssh/id_ed25519" \
  --controlplane-nodes="10.11.12.1,10.11.12.2,10.11.12.3" \
  --worker-nodes="10.11.12.11,10.11.12.12,10.11.12.13" \
  --api-endpoint="10.11.12.100" \
  --ingress-vip="10.11.12.101" \
  --cluster-name="mgmt-cluster"

Shturval v2 Stand-alone - internal KubeAPI, external Ingress

Scheme: stand-alone and external Ingress LB.

./shtil install-cli shturvalv2 \
  --bootstrap-license="YOUR-LICENSE" \
  --ssh-user="shturval" \
  --path-ssh-private-key="/home/admin/.ssh/id_ed25519" \
  --controlplane-nodes="10.11.12.1,10.11.12.2,10.11.12.3" \
  --worker-nodes="10.11.12.11,10.11.12.12,10.11.12.13" \
  --api-endpoint="10.11.12.100" \
  --ingress-default-fqdn="*.apps.example.corp" \
  --use-external-ingress-lb=true \
  --cluster-name="mgmt-cluster"

oVirt / VMware vSphere - internal KubeAPI, external Ingress

Scheme: oVirt and vSphere.

./shtil install-cli ovirt\
  --bootstrap-license="YOUR-LICENSE" \
  --api-endpoint="10.11.12.100" \
  --ingress-default-fqdn="*.apps.example.corp" \
  --use-external-ingress-lb=true \
  --url-provider="https://ovirt.example.corp/ovirt-engine/api" \
  --user-provider="admin@internal" \
  --password-provider="Example-Ovirt-Pass1" \
  --datacenter-provider="Default" \
  --datacenter-cluster-provider="Default" \
  --vnic-profile-provider="ovirtmgmt" \
  --template="rocky9-template" \
  --provider-csi-storage="data-domain-1" \
  --cluster-name="mgmt-cluster"
./shtil install-cli vsphere \
  --bootstrap-license="YOUR-LICENSE" \
  --api-endpoint="10.11.12.100" \
  --ingress-default-fqdn="*.apps.example.corp" \
  --use-external-ingress-lb=true \
  --address-vcenter="vcenter.example.corp" \
  --user-vcenter="administrator@vsphere.local" \
  --password-vcenter="Example-Vcenter-Pass1" \
  --provider-datacenter="/Example-Datacenter" \
  --provider-datastore="datastore1" \
  --provider-resource-pool="/Example-Datacenter/host/Example-Cluster/Resources/Example-Pool" \
  --provider-network="/Example-Datacenter/network/VM-Network" \
  --provider-folder="/Example-Datacenter/vm/workloads" \
  --template="rocky9-template" \
  --cluster-name="mgmt-cluster"

oVirt / VMware vSphere - CoreHA on the client

Scheme: CoreHA DNS on client. The management cluster installation commands are the same as in the “internal KubeAPI, external Ingress” subsection.

oVirt / VMware vSphere - internal KubeAPI and internal Ingress

Scheme: both VIPs inside the cluster.

./shtil install-cli ovirt \
  --bootstrap-license="YOUR-LICENSE" \
  --api-endpoint="10.11.12.100" \
  --ingress-vip="10.11.12.101" \
  --url-provider="https://ovirt.example.corp/ovirt-engine/api" \
  --user-provider="admin@internal" \
  --password-provider="Example-Ovirt-Pass1" \
  --datacenter-provider="Default" \
  --datacenter-cluster-provider="Default" \
  --vnic-profile-provider="ovirtmgmt" \
  --template="rocky9-template" \
  --provider-csi-storage="data-domain-1" \
  --cluster-name="mgmt-cluster"
./shtil install-cli vsphere \
  --bootstrap-license="YOUR-LICENSE" \
  --api-endpoint="10.11.12.100" \
  --ingress-vip="10.11.12.101" \
  --address-vcenter="vcenter.example.corp" \
  --user-vcenter="administrator@vsphere.local" \
  --password-vcenter="Example-Vcenter-Pass1" \
  --provider-datacenter="/Example-Datacenter"\
  --provider-datastore="datastore1" \
  --provider-resource-pool="/Example-Datacenter/host/Example-Cluster/Resources/Example-Pool" \
  --provider-network="/Example-Datacenter/network/VM-Network" \
  --provider-folder="/Example-Datacenter/vm/workloads" \
  --template="rocky9-template" \
  --cluster-name="mgmt-cluster"

OpenStack, VK Clouf, Selectel - external LBs

Schema: external LBs for KubeAPI and Ingress.

The install-cli help lists the openstack, vkcloud, selectel subcommands. For complete flag tables, see the [install-cli flags reference](#install-cli-flags directory) section on this page.

./shtil install-cli openstack \
  --bootstrap-license="YOUR-LICENSE" \
  --use-external-kubeapi-lb=true \
  --use-external-ingress-lb=true \
  --url-auth="https://openstack.example.com:5000/v3" \
  --project-id="example-project-id" \
  --project-domain-id="example-project-domain-id" \
  --user-domain-name="users" \
  --login="openstack-admin" \
  --password="Openstack-Example-Pass1" \
  --cloud-name="openstack" \
  --ssh-key-name="my-ssh-keypair" \
  --node-cidr="10.0.0.0/24" \
  --external-network-id="external-network-uuid" \
  --flavors="flavor-medium,flavor-large" \
  --volume-types="fast-ssd,default" \
  --machine-image-name="rocky9-shturval-template"
./shtil install-cli vkcloud \
  --bootstrap-license="YOUR-LICENSE" \
  --use-external-kubeapi-lb=true \
  --use-external-ingress-lb=true \
  --url-auth="https://openstack.example.com:5000/v3" \
  --cloud-name="vkcloud" \
  --project-id="example-project-id" \
  --project-domain-id="example-project-domain-id" \
  --user-domain-name="users" \
  --login="openstack-admin" \
  --password="Openstack-Example-Pass1" \
  --ssh-key-name="my-ssh-keypair" \
  --node-cidr="10.0.0.0/24" \
  --external-network-id="external-network-uuid" \
  --flavors="flavor-medium,flavor-large" \
  --volume-types="fast-ssd,default" \
  --machine-image-name="rocky9-shturval-template"
./shtil install-cli selectel \
  --bootstrap-license="YOUR-LICENSE" \
  --use-external-kubeapi-lb=true \
  --use-external-ingress-lb=true \
  --url-auth="https://openstack.example.com:5000/v3" \
  --cloud-name="selectel" \
  --project-id="example-project-id" \
  --project-domain-id="example-project-domain-id" \
  --user-domain-name="users"\
  --login="openstack-admin" \
  --password="Openstack-Example-Pass1" \
  --ssh-key-name="my-ssh-keypair" \
  --node-cidr="10.0.0.0/24" \
  --external-network-id="external-network-uuid" \
  --flavors="flavor-medium,flavor-large" \
  --volume-types="fast-ssd,default" \
  --machine-image-name="rocky9-shturval-template"

Example: minimum configuration (1 Control Plane)

Microcluster is a management cluster option on one Control Plane node (6 vCPUs, 8 GiB RAM, 80 GiB disk). Convenient for testing and pilots. Requirements: [minimum configuration in requirements](/2.14/en/platform-admin/installation/open-circuit/requirements/#minimum-configuration-only-1-Control Plane-node).

Note: not for production. Up to 5 client clusters. Logging, monitoring and backup are not installed in this preset.

Console (install-cli):

./shtil install-cli shturvalv2 \
  --bootstrap-license="YOUR-LICENSE" \
  --ssh-user="shturval" \
  --path-ssh-private-key="/home/admin/.ssh/id_ed25519" \
  --controlplane-nodes="10.11.12.1" \
  --api-endpoint="10.11.12.100" \
  --ingress-vip="10.11.12.101" \
  --cluster-name="mgmt-cluster" \
  --minimal=true

oVirt / compatible virtualizations

./shtil install-cli ovirt \
  --bootstrap-license="YOUR-LICENSE" \
  --url-provider="https://ovirt.example.corp/ovirt-engine/api" \
  --user-provider="admin@internal" \
  --password-provider="Example-Ovirt-Pass1" \
  --datacenter-provider="Default" \
  --datacenter-cluster-provider="Default" \
  --vnic-profile-provider="ovirtmgmt" \
  --template="rocky9-template" \
  --provider-csi-storage="data-domain-1" \
  --api-endpoint="10.11.12.100" \
  --ingress-vip="10.11.12.101" \
  --cluster-name="mgmt-cluster"

If necessary: --sub-type-provider, --control-plane, --workers, reVM resources (--cores-*, --memory-*, --disk-*), --allow-csi, --tls-insecure-provider, --tls-cert-path-provider - see ./shtil install-cli ovirt --help.

vSphere

Use ./shtil install-cli vsphere and vCenter parameters (--address-vcenter, account, datacenter, datastore, resource pool, network, folder, template). Full list: ./shtil install-cli vsphere --help.

OpenStack / VK Cloud / Selectel

LaunchPurpose
./shtil install-cli openstackOpenStack (CAPOS)
./shtil install-cli vkcloudVK Cloud
./shtil install-cli selectelSelectel

Refer to OpenStack and CAPOS and the shtil install-cli openstack --help output for listing flags (--url-auth, --project-id, --ssh-key-name, --external-network-id, machine images, etc.). Subcommand help isrequired for clouds: API and object names depend on the project.

Installation with YAML

Installation parameters are passed by the YAML file using the --yaml-path flag. YAML is applied first, then only explicitly specified CLI flags override individual fields.

Providers and document types

Examples of a YAML file for filling in parameters with your own values are displayed by the example subcommand indicating the provider:

Shturval v2:

./shtil install-cli shturvalv2 example > install.yaml

oVirt (and compatible virtualizations):

./shtil install-cli ovirt example > install.yaml

VMware vSphere:

./shtil install-cli vsphere example > install.yaml

OpenStack:

./shtil install-cli openstack example > install.yaml

VK Cloud:

./shtil install-cli vkcloud example > install.yaml

Selectel:

./shtil install-cli selectel example > install.yaml

The configuration consists of sections: the provider configuration and the cluster itself, separated by ---.

RegionFirst document typeSecond document type
Shturval v2CapsmProviderConfigCapsmClusterConfig
oVirtCapovProviderConfigCapovClusterConfig
vSphereCapvsProviderConfigCapvsClusterConfig
OpenStack, VK Cloud, SelectelCaposProviderConfigCaposClusterConfig

YAML constructors

Interactive forms to prepare manifests (two files: provider and cluster):

YAML manifest parameters

The following are required by annotated YAML templates. Fields without an explicit value can be left commented out if they are optional and the default value is appropriate.

General cluster parameters

YAML ParameterProvidersRequiredDescription
typeAllYesDocument type: CapsmProviderConfig, CapsmClusterConfig, CapovProviderConfig, CapovClusterConfig, CapvsProviderConfig, CapvsClusterConfig, CaposProviderConfig or CaposClusterConfig
clusterAll cluster documentsYesManagement Cluster Configuration
cluster.apiEndpointShturval v2, oVirt, vSphereYesCluster management API server addressApplications: IP or FQDN without port and protocol
cluster.clusterNameAllNoManagement cluster name. Default cluster-management
cluster.enabledServicesAllNoList of included services. If cluster.minimal: true, the value is ignored
cluster.externalKubeAPILBShturval v2NoUse an external balancer for the API server. Default false
cluster.externalingresslbAllNoUse an external balancer for Ingress. Default false
cluster.ingressShturval v2, oVirt, vSphereYes, if cluster.ingressvipWildcard DNS record for Ingress, for example <cluster_name>.<base_domain>
cluster.ingressOpenStack, VK Cloud, SelectelNoWildcard DNS record for Ingress
cluster.ingressvipShturval v2, vSphereYes, if cluster.externalingresslb: falseIngress controller VIP address
cluster.ingressvipoVirtNoVIP address of the Ingress controller; used with cluster.externalingresslb: false
cluster.controlPlaneNodesCountAllNoNumber of Control Plane nodes. Minimum 1, default 1
cluster.podSubnetAllNoCIDR of the Pod subnet. Default 172.16.0.0/16
cluster.serviceSubnetAllNoService subnet CIDR. Default 10.96.0.0/12
cluster.secureAllNoEnable advanced security options. Default false
cluster.shturvalVersionAllNoPlatform version. Must match version shtil; in Shturval v2 the passed value is ignored
cluster.minimalAllNoMinimum set of services. If true, cluster.enabledServices is ignored

Ingress Certificates

YAML ParameterRequiredDescription
ingressCertsNoCluster certificate. If not specified, a self-signed certificate is used. You can only select one subtype: ca, tls or acme
ingressCerts.ca.crtPathNo, but together with ingressCerts.ca.keyPathPath to certificate chain in PEM
ingressCerts.ca.keyPathNo, but together with ingressCerts.ca.crtPathPath to the private key of the intermediate CA certificate
ingressCerts.tls.crtPathNo, but together with ingressCerts.tls.keyPathPath to the enterprise or self-signed TLS certificate for the Ingress domain name
ingressCerts.tls.keyPathNo, but together with ingressCerts.tls.crtPathPath to the private key of the Ingress TLS certificate
ingressCerts.acme.rootPathNo, but together with ingressCerts.acme.urlACME CA Root Certificate Path
ingressCerts.acme.urlNo, but together with ingressCerts.acme.rootPathACME server address with port and path to resource
ingressCerts.acme.emailNoEmail for Let’s Encrypt account

Shturval v2 (CapsmProviderConfig)

YAML ParameterRequiredDescription
nameNoProvider instance name. Default cluster-management-provider
credentials.SSHYesGeneral credentials for SSH connection to hosts
credentials.SSH.privateKeyYesPath to private SSH key
credentials.SSH.userNameYesSSH username
hostsYesList of hosts for cluster nodes
hosts[].addressYesHost IP address or FQDN
hosts[].labelsSelectorYesSelector with host role label role
hosts[].credentialsNonull means use shared SSH credentials; if necessary, you can override SSH.userName and SSH.privateKey for a specific host

Shturval v2 (CapsmClusterConfig)

YAML ParameterRequiredDescription
providerNoNode group configurations; by default the Control Plane and Worker groups are pre-filled
provider.controlPlaneNodeConfig.controlPlaneSelector.matchExpressionsNoMatching Host Expressions for Control Plane Group
provider.controlPlaneNodeConfig.controlPlaneSelector.matchLabels.roleNoControl Plane hosts label. The role must be controlplane
provider.controlPlaneNodeConfig.nodeConfig.groupNameDo not overrideControl Plane Node Group Name
provider.controlPlaneNodeConfig.nodeConfig.roles[].nameDo not overrideRole of the Control Plane Node Group
provider.controlPlaneNodeConfig.nameNoProvider instance name; must match name in CapsmProviderConfig
provider.workerNodeConfigsNoConfiguration of Worker nodes; creation of additional Worker groups is not available
provider.workerNodeConfigs[].workersCountNoNumber of nodes in the default Worker group. Default 3
provider.workerNodeConfigs[].workerSelector.matchExpressionsNoMatching Host Expressions for Worker Group
provider.workerNodeConfigs[].workerSelector.matchLabels.roleNoHost role label for the Worker group. Recommended and default workers
provider.workerNodeConfigs[].nodeConfig.groupNameNoWorker group name, for example default or infra
provider.workerNodeConfigs[].nodeConfig.roles[].nameDo not overrideRole of the Worker Node Group

oVirt / zVirt / HostVM / ED Virtualization / ROSA Virtualization (CapovProviderConfig)

YAML ParameterRequiredDescription
nameNoProvider instance name. Default cluster-management-provider
credentials.oVirtYesCredentials for connecting to API Engine oVirt
credentials.oVirt.urlYesAPI Engine oVirt URL with suffix /ovirt-engine/api
credentials.oVirt.usernameYesUsername for oVirt API authentication
credentials.oVirt.passwordYesPassword for authentication in oVirt API
connectionNoSettings for TLS connection to oVirt API
connection.tlsInsecureNetDisable TLS certificate verification. Default true
connection.tlsCertPathNoPath to the CA certificate for TLS verification at tlsInsecure: false
providerConfigYesoVirt provider configuration
providerConfig.subtypeNooVirt-like provider subtype: zvirt, hostvm, redvirt, rosavirt
providerConfig.datacenterYesDatacenter name oVirt
providerConfig.datacenterClusterYesCluster name oVirt inside the data center
providerConfig.vnicProfileYesVNIC profile name for VM network interfaces
providerConfig.templateYesName of the VM template in the selected data center
providerConfig.csiStorageNoStorage domain name for dynamic persistent volumes via CSI; an empty value disables CSI
providerConfig.vmTypeNoType of VMs being created. Default server
providerConfig.templateNetInterfaceNoThe name of the network interface in the template. Default eth0

oVirt / zVirt / HostVM / ED Virtualization / ROSA Virtualization (CapovClusterConfig)

YAML ParameterRequiredDescription
providerNoNode configurations; by default the Control Plane and Worker groups are pre-filled
provider.nameNoProvider instance name. Default cluster-management-provider
provider.controlPlaneNodeConfigNoControl Plane Node Configuration
provider.controlPlaneNodeConfig.nodeConfig.groupNameDo not overrideControl Plane Node Group Name
provider.controlPlaneNodeConfig.nodeConfig.roles[].nameDo not overrideRole of the Control Plane Node Group
provider.controlPlaneNodeConfig.capovNodeConfig.cpu.coresNoNumber of CPU cores per Control Plane node. Default 4
provider.controlPlaneNodeConfig.capovNodeConfig.cpu.socketsNoNumber of CPU sockets per Control Plane node. Default 1
provider.controlPlaneNodeConfig.capovNodeConfig.cpu.threadsNoNumber of CPU threads per socket. Default 1
provider.controlPlaneNodeConfig.capovNodeConfig.memory.sizeMBNoMemory size in MB on the Control Plane node. Default 16000
provider.controlPlaneNodeConfig.capovNodeConfig.memory.guaranteedMBNoGuaranteed memory in MB; must match sizeMB. Default 16000
provider.controlPlaneNodeConfig.capovNodeConfig.osDiskSizeGBNoOS disk size in GB per Control Plane node. Default 100
provider.workerNodeConfigsNoWorker node configuration
provider.workerNodeConfigs[].nodeConfig.groupNameNoWorker group name, for example default or infra
provider.workerNodeConfigs[].nodeConfig.roles[].nameDo not overrideRole of the Worker Node Group
provider.workerNodeConfigs[].workersCountNoNumber of nodes in the default Worker group. Default 3
provider.workerNodeConfigs[].capovNodeConfig.cpu.coresNoNumber of CPU cores per Worker node. Default 8
provider.workerNodeConfigs[].capovNodeConfig.cpu.socketsNoNumber of CPU sockets per Worker node. Default 1
provider.workerNodeConfigs[].capovNodeConfig.cpu.threadsNoNumber of CPU threads per socket. Default 1
provider.workerNodeConfigs[].capovNodeConfig.memory.sizeMBNoMemory size in MB on the Worker node. Default 32000
provider.workerNodeConfigs[].capovNodeConfig.memory.guaranteedMBNoGuaranteed memory in MB; must match sizeMB. Default 32000
provider.workerNodeConfigs[].capovNodeConfig.osDiskSizeGBNoOS disk size in GB per Worker node. Default 300

vSphere (CapvsProviderConfig)

YAML ParameterRequiredDescription
nameNoProvider instance name. Default cluster-management-provider
credentials.vSphereYesCredentials for connecting to vCenter
credentials.vSphere.addressVcenterYesIP address or FQDN vCenter
credentials.vSphere.usernameVcenterYesvCenter account username
credentials.vSphere.passwordVcenterYesvCenter account password
connectionNoTLS connection settings for vCenter
connection.tlsInsecureNoDisable TLS certificate checking. Default true
connection.tlsCertPathNoPath to the CA certificate for TLS verification at tlsInsecure: false
providerConfigYesvSphere Provider Configuration
providerConfig.datacenterYesName datacenter vSphere
providerConfig.datastoreYesDatastore in datacenter
providerConfig.resourcePoolYesPath to the resource pool for the VM
providerConfig.networkYesNetwork name for VM network interfaces
providerConfig.folderYesPath to the VM folder in the vCenter inventory
providerConfig.templateYesName of the VM template in the selected data center
providerConfig.cloneModeNoClone mode: linkedClone or fullClone. Default linkedClone
providerConfig.storagePolicyNoStorage policy name for VM disks
providerConfig.enableCSINoEnable vSphere CSI driver. Default true
providerConfig.templateNetInterfaceNoThe name of the network interface in the template. Default eth0

vSphere (CapvsClusterConfig)

YAML ParameterRequiredDescription
providerNoNode configurations; by default the Control Plane and Worker groups are pre-filled
provider.nameNoProvider instance name. Default cluster-management-provider
provider.controlPlaneNodeConfigNoControl Plane Node Configuration
provider.controlPlaneNodeConfig.nodeConfig.groupNameDon’t overrideControl Plane Node Group Name
provider.controlPlaneNodeConfig.nodeConfig.roles[].nameDon’t overrideRole of the Control Plane Node Group
provider.controlPlaneNodeConfig.capvsNodeConfig.cpu.coresNoNumber of CPU cores per Control Plane node. Default 4
provider.controlPlaneNodeConfig.capvsNodeConfig.memory.sizeMBNoMemory size in MB on the Control Plane node. Default 16000
provider.controlPlaneNodeConfig.capvsNodeConfig.osDiskSizeGBNoOS disk size in GB per Control Plane node. Default 100
provider.workerNodeConfigsNoWorker node configuration
provider.workerNodeConfigs[].nodeConfig.groupNameDo not overrideDefault Worker group name
provider.workerNodeConfigs[].nodeConfig.roles[].nameDon’t overrideRole of the Worker Node Group
provider.workerNodeConfigs[].workersCountNoNumber of nodes in the default Worker group. Default 3
provider.workerNodeConfigs[].capvsNodeConfig.cpu.coresNoNumber of CPU cores per Worker node. Default 8
provider.workerNodeConfigs[].capvsNodeConfig.memory.sizeMBNoMemory size in MB per Worker node. Default 32000
provider.workerNodeConfigs[].capvsNodeConfig.osDiskSizeGBNoOS disk size in GB per Worker node. Default 300

OpenStack / VK Cloud / Selectel (CaposProviderConfig)

YAML ParameterRequiredDescription
nameNoProvider instance name. Default cluster-management-provider
cloudNameYesCloud name, such as vkcloud or openstack
connectionYesCredentials for connecting to OpenStack
connection.authURLYesOpenStack Keystone Authorization Service URL with Port
connection.projectIDYesOpenStack Project ID
connection.projectDomainIDYesOpenStack Project Domain ID
connection.tlsInsecureNoSkip OpenStack API TLS Certificate Verification
connection.tlsCertPathNoPath to CA certificate in PEM format
connection.regionNoOpenStack Region Name
connection.interfaceNoOpenStack endpoint interface, such as public or internal
connection.identityAPIVersionNoOpenStack Identity API version. Default 3
connection.tokenNoAuthentication token; OpenStack only, cannot be used simultaneously with login and password
connection.loginNo, but together with connection.passwordService account name with roles heat_stack_owner, admin
connection.passwordNo, but together with connection.loginService account password
connection.userDomainNameNoUser domain name; must be set for OpenStack and VK Cloud
resourcesYesOpenStack Provider Configuration
resources.sshKeyNameYesName of the SSH key pair for accessing the VM
resources.nodeCIDRYesHost subnet; must not intersect with cluster.podSubnet and cluster.serviceSubnet
resources.externalNetworkIDYesExternal network ID for floating IP and external access
resources.flavorsYesList of VM types
resources.volumeTypesYesList of disk types
resources.machineImageNameYesVM template name; the version of the Kubernetes template must match the version of Shturval and shtil
resources.availabilityZones ​​NoList of Availability Zones
resources.managedSecurityGroupsNoSecurity group management. Default true
resources.disablePortSecurityNoDisable port security. Default false
resources.dnsNoDNS-servers
resources.enableCSINoEnable CSI integration. Default false

OpenStack / VK Cloud / Selectel (CaposClusterConfig)

YAML ParameterRequiredDescription
providerNoNode configurations; by default the Control Plane and Worker groups are pre-filled
provider.nameNoProvider instance name. Default cluster-management-provider
provider.controlPlaneNodeConfigNoControl Plane Node Configuration
provider.controlPlaneNodeConfig.nodeConfig.groupNameDo not overrideControl Plane Node Group Name
provider.controlPlaneNodeConfig.nodeConfig.roles[].nameDo not overrideRole of the Control Plane Node Group
provider.controlPlaneNodeConfig.caposNodeConfig.openstackFlavorNameNoVM type for Control Plane nodes; if not specified, the first of resources.flavors is used
provider.controlPlaneNodeConfig.caposNodeConfig.volumeSizeNoSize of the Control Plane root volume of the nodes in GB. Default 100
provider.controlPlaneNodeConfig.caposNodeConfig.volumeTypeNoDisk type Control Plane nodes; if not specified, the first of resources.volumeTypes is used
provider.controlPlaneNodeConfig.caposNodeConfig.availabilityZoneNoAvailability zone of Control Plane nodes; if not specified, the first of the resources.availabilityZones
provider.workerNodeConfigsNoWorker node configuration
provider.workerNodeConfigs[].nodeConfig.groupNameDon’t overrideDefault Worker group name
provider.workerNodeConfigs[].nodeConfig.roles[].nameDon’t overrideRole of the Worker Node Group
provider.workerNodeConfigs[].workersCountNoNumber of nodes in the default Worker group. Default 3
provider.workerNodeConfigs[].caposNodeConfig.openstackFlavorNameNoVM type for Worker nodes; if not specified, the first of resources.flavors is used
provider.workerNodeConfigs[].caposNodeConfig.volumeSize ​​NoSize of the root volume of Worker nodes in GB. Default 300
provider.workerNodeConfigs[].caposNodeConfig.volumeTypeNoWorker node disk type; if not specified, the first of resources.volumeTypes is used
provider.workerNodeConfigs[].caposNodeConfig.availabilityZoneNoAvailability zone of Worker nodes; if not specified, the first of the resources.availabilityZones

Subnets and VIPs must be consistent with the Open Loop Requirements and the topology in the Internetworking Schemes.

In case of a collision, CIDR is checking the intersection of subnets when creating a cluster.

Steps

  1. Save the output of the desired example subcommand to a file.
  2. Edit the manifest: provider, cluster, nodes, VIP, subnets and, if necessary, certificates and services (for the list of components, see also installing services).
  3. Run the installation (open loop, standard registry - usually a license is enough):
./shtil install-cli PROVIDER-TYPE \
  --yaml-path="/home/admin/install.yaml" \
  --bootstrap-license="YOUR-LICENSE"

Example YAML manifest for Shturval v2 (two documents in one file, delimiter ---). Conditional addresses in the same format as CLI examples: nodes 10.11.12.x, KubeAPI 10.11.12.100, Ingress VIP 10.11.12.101.

The first document is the provider (CapsmProviderConfig):

---
type: CapsmProviderConfig
name: myprovidername
credentials:
  SSH:
    privateKey: /home/admin/.ssh/id_ed25519
    userName: shturval
hosts:
  - address: 10.11.12.1
    labelsSelector: { role: controlplane }
    credentials: null
  - address: 10.11.12.11
    labelsSelector: { role: workers }
    credentials: null

---

type: CapsmClusterConfig
cluster:
  apiEndpoint: 11/10/12.100
  clusterName: myclustername
  controlPlaneNodesCount: 1
  ingressvip: 10.11.12.101
  podSubnet: 172.16.0.0/16
  serviceSubnet: 10.96.0.0/12
  minimal: true
provider:
  controlPlaneNodeConfig:
    controlPlaneSelector: { matchLabels: { role: controlplane } }
    nodeConfig: { groupName: control-plane, roles: [{ name: node-role.kubernetes.io/control-plane }] }
  workerNodeConfigs:
    - nodeConfig: { groupName: default, roles: [{ name: node-role.kubernetes.io/workers }] }
      workersCount: 1
      workerSelector: { matchLabels: { role: workers } }

Example YAML manifest for oVirt with multiple groups of Worker nodes. In provider.workerNodeConfigs, set a separate element for each group, for example default and infra.

---
type: CapovProviderConfig
name: sht-capov-mgmt-prov
credentials:
  oVirt:
    url: https://ovirt.example.com/ovirt-engine/api
    username: ENTER-USER
    password: ENTER-PASSWORD
connection:
  tlsInsecure: true
providerConfig:
  datacenter:DCname
  datacenterCluster: RHVLab
  vnicProfile: CHLab_LAN_3260
  template: template-name-in-ovirt-infrastructure
  csiStorage: CHLab_Pure_VM_Store
ingressCerts:
  ##ca:
    ##crtPath:
    ##keyPath:
  ##tls:
    ##crtPath:
    ##keyPath:

---
type: CapovClusterConfig
cluster:
  apiEndpoint: 10.XX.XXX.236
  clusterName: sht-capov-mgmt7
  controlPlaneNodesCount: 1
  ingressvip: 10.XX.XXX.237
  minimal: true
provider:
  name: sht-capov-mgmt-prov
  controlPlaneNodeConfig:
    nodeConfig:
      groupName: control-plane
    roles:
      - name: node-role.kubernetes.io/control-plane
    capovNodeConfig:
      CPU:
        cores: 8
        sockets: 1
        threads: 1
      memory:
        sizeMB: 9000
        guaranteedMB: 9000
      osDiskSizeGB: 60
  workerNodeConfigs:
    - nodeConfig:
        groupName: default
        roles:
          - name: node-role.kubernetes.io/workers
      workersCount: 1
      capovNodeConfig:
        CPU:
          cores: 8
          sockets: 1
          threads: 1
        memory:
          sizeMB: 12000
          guaranteedMB: 12000
        osDiskSizeGB: 60
    - nodeConfig:
        groupName:infra
        roles:
          - name: node-role.kubernetes.io/workers
      workersCount: 1
      capovNodeConfig:
        CPU:
          cores: 8
          sockets: 1
          threads: 1
        memory:
          sizeMB: 9000
          guaranteedMB: 9000osDiskSizeGB: 60

Full annotated YAML templates

You get the structure of the fields and comments to them in an up-to-date form using the command ./shtil install-cli <provider> example (recommended method).

Installation with one command with manifest (open loop):

./shtil install-cli shturvalv2 \
  --yaml-path="/home/admin/install.yaml" \
  --bootstrap-license='YOUR-LICENSE'

For a closed loop, add --bootstrap-registry to the command and, if necessary, --bootstrap-insecure / --bootstrap-registry-certs-dir - see installation without Internet access.

First steps after installation

ActionDescription
Check accessOpen the cluster manager URL. Login: admin, password - in user.conf installer data directory (~/.shturval/installer or /tmp/shturval/installer) or specified in --password. The management cluster must be in the Ready status.
Save your credentialsSave your administrator password and kubeconfig. In the interface: user menu → Download Kubeconfig.
Set up base entitiesUser delivery, IP pool, VM provider and template. Further services - install services; platform registry - repository services; node settings - node configuration (NCI).

Before performing temporary cluster cleanup or platform uninstallation, if you need to re-access an already deployed GUI, save user.conf manually.

Note: The infrastructure provider instance that was deployed to the management cluster should not be reused as an infrastructure provider for client clusters - create a separate provider instance for workloads (see providers overview).

Diagnostics

Quick CLI check and logging

./shtil --help
./shtil install-gui --help
./shtil install-cli --help
./shtil install-cli shturvalv2 --help
./shtil version

For detailed CLI logs, use --verbosity / -v globally (up to 10).

When re-running install-cli after an erroneous configuration on the same temporary cluster, see the -y / --overwrite flag in the help. License strings with special characters ($, <, >, *, &, ?, /, \) must be wrapped in single quotes in the shell.

Local installer exits early

CheckWhat to do
docker or podman in PATHContainer tools are required for install-gui; when both are installed, Docker is preferred by default
Resources and OS on the shtil machineSee shtil machine requirements and supported OS
Image registry accessFrom the shtil machine and target cluster nodes: curl -v https://r.shturval.tech

SSH errors (Shturval v2)

SymptomAction
Permission deniedVerify the key and run ssh-copy-id before installer access
sudo: no tty presentAdd the user to sudoers, for example shturval ALL=(ALL) NOPASSWD: ALL, or another supported non-TTY access method for installation
SELinux blocks accessPer organizational policy, temporarily set permissive mode or disable SELinux for the installation window (coordinate with security)

Persistent cluster and network

SymptomAction
VIP in useFree addresses, assign non-pingable VIPs, or configure external load balancers
Subnets / overlapping CIDRSee subnet overlap check and align --pod-subnet, --service-subnet, or YAML fields
Nodes cannot pull imagesVerify network access to r.shturval.tech and firewall rules; see also repository services

Additional

  • Time: NTP/Chrony on nodes; clock skew no more than 1–2 s.
  • Disk: See the resources section in open loop requirements.
  • GUI debugging: install-gui ... --debug — the local installer container is not removed on error.