Verifying an install#
When using the make try-eda
command you will hopefully have a running EDA instance in under 10 minutes without any manual intervention. We embedded necessary checks in the Makefile to ensure that the steps are executed in the correct order and that the system is in a healthy state.
However, while testing the setup process on several different platforms, we couldn't cover all the possible cases. If you encounter installation issues, this section may help you pinpoint the issue.
EDA core#
You should be able to use kubectl -n eda-system get pods
to verify that EDA core components have started and in the Ready state:
You can also check the EngineConfig
to verify the ConfigEngine has started correctly, checking the .status.run-status
field:
Started
is good, anything else is bad!
Node connectivity#
The example topology deployed as part of the quickstart resulted in creation of topology nodes, with each node represented by an SR Linux simulator. The topology nodes in EDA are represented by the TopoNode
resource, and this resource has a status field to indicate its health.
The easiest way to tell the current state of nodes is via the UI, or via kubectl
:
In particular, the NPP
and NODE
columns define the state of the ConfigEngine to NPP connection, and the NPP to node connection. A node must be Synced
or it will reject transactions.
It is useful to verify the underlying Pod resources for the network simulator nodes have been created - this can take a while if it is your first time starting a simulator of a given version. You should see all your sims and the associated NPP (Node Push Pull) pods running:
Note the cx-eda-*
Pods (one for each TopoNode
in the topology), these pods are SR Linux container images. You should also note there are three NPP Pods (also one for each TopoNode
) each designated to a corresponding TopoNode
.
Transactions#
The EDA's brain - Config Engine - works off a sequential transaction log, processing transactions as they come in. "in" here is doing some heavy lifting, as items for processing may come in via:
- the UI.
- the API.
- the Kubernetes API.
For items coming in via the UI and API, a failed transaction does not impact future transactions. For Kubernetes this behavior is inverse - the ConfigEngine will always try to ingest the full set of changes available for processing, and so an object that can never transact can cause other items to fail. You can verify transactions in the system with:
If you see any transactions with a result of Failed
, these should be investigated - especially if they came in via the Kubernetes interface. Like in the example the last transaction has a Failed
result.
You can investigate the transaction further with:
The transaction details will give you a hint as to what went wrong. In the example above NPP Pod for leaf1
and spine1
did not start, and so the transaction to push the configs failed.
UI access#
As covered in the Configure your deployment section, the EDA service requires a user to provide the desired DNS name/IP and port for external access. These parameters become the part of the Engine Config resource that, as the name suggests, configures the central part of EDA - the Config Engine.
The values you provided in the prefs.mk file or in the CLI can be found in the Engine Config resource:
kubectl -n eda-system get engineconfig engine-config \
-o jsonpath='{.spec.cluster.external}' | yq -p json #(1)!
- The
yq
CLI tool is installed in the./tools
directory of the playground repo.
The configuration above means that the EDA UI client (a browser) should use https://vm.home.lab:9443
to access the EDA UI. You can change the engine-config
resource post-install and change the domainName
and/or port numbers, the changes will be in effect immediately without requiring a redeploy of the EDA.
If you're trying EDA on a remote machine, then you typically would set the DNS name or IP address of this machine in the EXT_DOMAIN_NAME
variable.
Another popular option is to use SSH local port forwarding to access the EDA UI, in this case you would need to set the EXT_DOMAIN_NAME
variable to localhost
and EXT_HTTPS_PORT
to the local port you are using for the port forwarding.
If left unset, the hostname of the machine where you executed the make
command will be used.
Secure-by-design
In the secure-by-design paradigm, EDA exposes APIs and UI for its users only over the secure transport. That makes HTTPS the only supported transport for UI access.
EDA UI is exposed in the k8s cluster via the eda-api
service