Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@ Each {{ece}} runner can take on several roles:
: Allocates the available computing resources to {{es}} nodes or {{kib}} instances. In larger installations, a majority of the machines will be allocators.

`coordinator`
: Serves as a distributed coordination system and resource scheduler.
: Serves as a distributed coordination system and resource scheduler. Hosts with this role run the Constructor, Admin Console, and Cloud UI services. For details on what each service does, refer to [Service-oriented architecture](ece-architecture.md).

:::{note}
The Cloud UI displays this role as **Controller**. The internal role identifier used in API calls and role tokens is `coordinator`.
:::

`proxy`
: Manages communication between a user and an {{es}} or {{kib}} instance.
Expand Down
37 changes: 22 additions & 15 deletions deploy-manage/deploy/cloud-enterprise/ece-architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,30 +25,34 @@ products:

The *control plane* of ECE include the following management services:

**ZooKeeper**
### ZooKeeper

* [ZooKeeper](http://zookeeper.apache.org/) is a distributed, strongly consistent data store.
* Holds essential information for ECE components: Proxy routing tables, memory capacity advertised by the allocators, changes committed through Admin Console, and so on.
* Acts as a message bus for communication between the services.
* Talks to ECE components using STunnel.
* Stores the state of the ECE installation and the state of all deployments running in ECE.
* Runs on hosts with the [`director` role](assign-roles-to-hosts.md).

**Director**
### Director

* Manages the ZK data store and signs the CSRs (certificate signing requests) for internal clients that want to communicate with ZooKeeper.
* Maintains the stunnels used by ZooKeeper for communication and establishes quorum when new ZooKeeper nodes are created.
* Runs on hosts with the [`director` role](assign-roles-to-hosts.md).

**Constructor**
### Constructor

* Works like a scheduler that monitors requests from the Admin console.
* Determines what needs to be changed, and writes the changes to ZooKeeper nodes monitored by the allocators.
* Assigns cluster nodes to allocators.
* Maximizes the utilization of underlying allocators to reduce the need to spin up extra hardware for new deployments.
* Places cluster nodes and instances within different availability zones to ensure that the deployment can survive any downtime of a whole zone. You can designate these availability zones when you install ECE.
* Runs on hosts with the [`coordinator` role](assign-roles-to-hosts.md), shown as **Controller** in the Cloud UI.

**Cloud UI and API**
### Cloud UI and API

Provide web and API access for administrators to manage and monitor the ECE installation.
* Provide web and API access for administrators to manage and monitor the ECE installation.
* Run on hosts with the [`coordinator` role](assign-roles-to-hosts.md), shown as **Controller** in the Cloud UI.


## Proxies [ece_proxies]
Expand All @@ -57,18 +61,18 @@ Provide web and API access for administrators to manage and monitor the ECE inst
* Keep track of the state and availability of zones, if you have a highly available {{es}} cluster. If one of the zones goes down, the proxy will not route any requests there.
* Help with no-downtime scaling and upgrades. Before performing an upgrade, a snapshot is taken, and data is migrated to the new nodes. When the migration is complete, a proxy switches the traffic to the new nodes and disconnects the old ones.
* Multiple proxies are usually configured behind a load balancer to ensure that the system remains available.

* Run on hosts with the [`proxy` role](assign-roles-to-hosts.md).

## Allocators [ece-architecture-allocators]

* Run on all the machines that host {{es}} nodes and {{kib}} instances.
* Control the lifecycle of cluster nodes by:
* Manage the lifecycle of {{stack}} application instances, such as {{es}} cluster nodes and {{kib}} instances, by:

* Creating new containers and starting {{es}} nodes when requested
* Restarting a node if it becomes unresponsive
* Removing a node if it is no longer needed
* Creating and starting new instances when requested
* Restarting an instance if it becomes unresponsive
* Removing an instance when it is no longer needed

* Advertise the memory capacity of the underlying host machine to ZooKeeper so that the Constructor can make an informed decision on where to deploy.
* Run on hosts with the [`allocator` role](assign-roles-to-hosts.md).

## Services as Docker containers [ece-containerization]

Expand All @@ -94,6 +98,8 @@ Each {{ece}} service runs as a dedicated container. These containers are automat
ECE service containers run as `root` (UID 0). This is an architectural requirement and is not configurable: the containers interact directly with the Docker or Podman socket and perform privileged operations, including cgroup management and resource allocation. {{stack}} containers, such as {{es}} and {{kib}}, run as a non-root user (UID ≥ 1000).
:::

:::{table}
:widths: 5-3-4
| Container | Host roles | Description |
|---|---|---|
| `frc-runners-runner` | All roles | Runs on every ECE host and provides a supervisor service to deploy and manage containers based on the host's assigned roles, ensuring required containers are started at the proper version. |
Expand All @@ -103,11 +109,12 @@ ECE service containers run as `root` (UID 0). This is an architectural requireme
| `frc-allocators-allocator` | Allocator | Manages container lifecycle for {{stack}} application instances, such as {{es}} and {{kib}}. |
| `frc-allocator-metricbeats-allocator-metricbeat` | Allocator | Collects metrics from the {{stack}} containers running in the allocator. |
| `frc-container-task-services-container-task-service` | Allocator | Supports autoscaling and tracks feature usage. |
| `frc-admin-consoles-admin-console` | Controller | Backend service for the ECE UI that handles API requests. |
| `frc-blueprints-blueprint` | Controller | Coordinates container startup by providing configuration data to runners based on their role and token. |
| `frc-cloud-uis-cloud-ui` | Controller | Web frontend for the ECE UI, served to users in the browser. |
| `frc-constructors-constructor` | Controller | Schedules and coordinates deployment changes; assigns instances to allocators and balances zones. |
| `frc-admin-consoles-admin-console` | Controller (`coordinator`) | Backend service for the ECE UI that handles API requests. |
Comment thread
eedugon marked this conversation as resolved.
| `frc-blueprints-blueprint` | Controller (`coordinator`) | Coordinates container startup by providing configuration data to runners based on their role and token. |
| `frc-cloud-uis-cloud-ui` | Controller (`coordinator`) | Web frontend for the ECE UI, served to users in the browser. |
| `frc-constructors-constructor` | Controller (`coordinator`) | Schedules and coordinates deployment changes; assigns instances to allocators and balances zones. |
| `frc-directors-director` | Director | Coordinates the ZooKeeper cluster by ensuring there's a quorum; maintains stunnel configuration and certificates. |
| `frc-zookeeper-servers-zookeeper` | Director | Consistent distributed data store used to track ECE state and coordinate communication between services. |
| `frc-proxies-proxyv2` | Proxy | Routes user traffic to the {{stack}} deployments. |
| `frc-proxies-route-server` | Proxy | Manages the routing tables used by the proxy service. |
:::
Loading