Deckhouse Virtualization Platform for bare metal

Platform installation is complete. Verify the cluster and configure DNS to access DVP web interfaces.

Verify the cluster

  1. Connect to the master node:

    ssh ubuntu@<MASTER_IP>
    
  2. Verify that all nodes are Ready:

    sudo -i d8 k get nodes
    

    Example output

    NAME            STATUS   ROLES                  AGE   VERSION
    dvp-master-0    Ready    control-plane,master   30m   v1.29.x
    dvp-worker-1    Ready    worker                 5m    v1.29.x
    

    DVP components may take some time to start after installation.

  3. Wait until the platform finishes converging — the task queue must be empty:

    sudo -i d8 system queue list
    

    Example output

    Summary:
    - 'main' queue: empty.
    - 132 other queues (0 active, 132 empty): 0 tasks.
    - no tasks to handle.
    

    While the queue has tasks, platform components are still being deployed. This is normal right after installation and may take up to 15 minutes.

  4. Make sure every enabled module is running:

    sudo -i d8 k get module | grep -E "True[[:space:]]+False"
    

    The command lists modules that are enabled but not ready yet. Empty output means all of them are ready.

  5. Make sure the platform is ready to run VMs:

    sudo -i d8 k get vmclass generic
    

    Wait until the status is Ready.

    On RHEL-based operating systems (AlmaLinux, Rocky Linux, CentOS), the initial node configuration downloads additional packages — while this is in progress, the generic class stays in the Pending phase.

Configure DVP web interfaces

Make sure the cluster is healthy and set up DNS so you can open DVP web interfaces from your workstation.

  1. On the master node, make sure the ingress-nginx pods are running:

    sudo -i d8 k -n d8-ingress-nginx get po -l app=kruise
    sudo -i d8 k -n d8-ingress-nginx get po -l app=controller
    

    Wait until the Ingress controller pods are Ready.

    Example output

    NAME                                         READY   STATUS    RESTARTS   AGE
    kruise-controller-manager-7dfcbdc549-b4wk7   3/3     Running   0          15m
    
    NAME                   READY   STATUS    RESTARTS   AGE
    controller-nginx-r6hxc   3/3     Running   0          5m
    
  2. Configure DNS for DVP web interfaces. The DNS name template (publicDomainTemplate) defines hostnames for Ingress: for %s.domain.my, Grafana is at grafana.domain.my, the DVP web interface — at console.domain.my.

    The domain in the template must not match clusterDomain (for example cluster.local) or internal service zones from your cluster configuration.

    On the master node, check the template and the Ingress node IP:

    sudo -i d8 k get mc global -ojsonpath='{.spec.settings.modules.publicDomainTemplate}{"\n"}'
    sudo -i d8 k get pods -n d8-ingress-nginx -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.hostIP}{"\n"}{end}' | grep '^controller' | awk '{print $2}'
    

    Add DNS records:

    • Wildcard template (for example %s.domain.my) — one wildcard A record pointing to the Ingress node IP.
    • Non-wildcard template (for example %s-kube.company.my) — A or CNAME records for each hostname:

      api.domain.my
      code.domain.my
      commander.domain.my
      console.domain.my
      dex.domain.my
      documentation.domain.my
      grafana.domain.my
      hubble.domain.my
      istio.domain.my
      istio-api-proxy.domain.my
      kubeconfig.domain.my
      openvpn-admin.domain.my
      registry.domain.my
      prometheus.domain.my
      status.domain.my
      tools.domain.my
      upmeter.domain.my
      virtualization.domain.my
      

    If you do not manage DNS, add static mappings on your workstation (on Windows — %SystemRoot%\system32\drivers\etc\hosts):

    export PUBLIC_IP="<MASTER_IP>"
    sudo -E bash -c "cat <<EOF >> /etc/hosts
    $PUBLIC_IP api.domain.my
    $PUBLIC_IP code.domain.my
    $PUBLIC_IP commander.domain.my
    $PUBLIC_IP console.domain.my
    $PUBLIC_IP dex.domain.my
    $PUBLIC_IP documentation.domain.my
    $PUBLIC_IP grafana.domain.my
    $PUBLIC_IP hubble.domain.my
    $PUBLIC_IP istio.domain.my
    $PUBLIC_IP istio-api-proxy.domain.my
    $PUBLIC_IP kubeconfig.domain.my
    $PUBLIC_IP openvpn-admin.domain.my
    $PUBLIC_IP registry.domain.my
    $PUBLIC_IP prometheus.domain.my
    $PUBLIC_IP status.domain.my
    $PUBLIC_IP tools.domain.my
    $PUBLIC_IP upmeter.domain.my
    $PUBLIC_IP virtualization.domain.my
    EOF
    "
    

The DVP cluster is deployed and ready to use.