From a5bf278899949c790ccda1aa4e4ef4abb9f9b1ab Mon Sep 17 00:00:00 2001 From: Joao Fernandes Date: Tue, 13 Dec 2016 13:00:54 -0800 Subject: [PATCH] Improve diagrams --- datacenter/dtr/2.1/guides/architecture.md | 67 ++-- .../dtr/2.1/guides/images/architecture-1.png | Bin 44362 -> 0 bytes .../dtr/2.1/guides/images/architecture-1.svg | 75 ++++ .../dtr/2.1/guides/images/architecture-2.svg | 225 +++++++++++ .../dtr/2.1/guides/images/architecture-3.svg | 160 ++++++++ .../dtr/2.1/guides/images/architecture-4.svg | 356 ++++++++++++++++++ .../guides/images/scale-your-deployment-1.svg | 310 +++++++++++++++ .../guides/install/scale-your-deployment.md | 2 + datacenter/ucp/2.0/guides/architecture.md | 104 ++++- .../ucp/2.0/guides/images/architecture-1.svg | 71 ++++ ...{architecture-1.png => architecture-2.png} | Bin .../ucp/2.0/guides/images/architecture-2.svg | 166 ++++++++ .../ucp/2.0/guides/images/architecture-3.svg | 233 ++++++++++++ .../guides/images/scale-your-cluster-1.svg | 156 ++++++++ .../guides/installation/scale-your-cluster.md | 34 +- 15 files changed, 1907 insertions(+), 52 deletions(-) delete mode 100644 datacenter/dtr/2.1/guides/images/architecture-1.png create mode 100644 datacenter/dtr/2.1/guides/images/architecture-1.svg create mode 100644 datacenter/dtr/2.1/guides/images/architecture-2.svg create mode 100644 datacenter/dtr/2.1/guides/images/architecture-3.svg create mode 100644 datacenter/dtr/2.1/guides/images/architecture-4.svg create mode 100644 datacenter/dtr/2.1/guides/images/scale-your-deployment-1.svg create mode 100644 datacenter/ucp/2.0/guides/images/architecture-1.svg rename datacenter/ucp/2.0/guides/images/{architecture-1.png => architecture-2.png} (100%) create mode 100644 datacenter/ucp/2.0/guides/images/architecture-2.svg create mode 100644 datacenter/ucp/2.0/guides/images/architecture-3.svg create mode 100644 datacenter/ucp/2.0/guides/images/scale-your-cluster-1.svg diff --git a/datacenter/dtr/2.1/guides/architecture.md b/datacenter/dtr/2.1/guides/architecture.md index a2b5531fe3..223213a9e1 100644 --- a/datacenter/dtr/2.1/guides/architecture.md +++ b/datacenter/dtr/2.1/guides/architecture.md @@ -4,13 +4,29 @@ keywords: docker, registry, dtr, architecture title: DTR architecture --- -Docker Trusted Registry (DTR) is a Dockerized application that runs on a Docker -Universal Control Plane cluster. +Docker Trusted Registry is a containerized application that runs on-premises +or on the cloud and allows you to store and manage your Docker images. It +needs to be deployed on a worker node managed by UCP. -![](images/architecture-1.png) +![](images/architecture-1.svg) + +Since DTR exposes the standard Docker API you can continue using the +Docker CLI client to push and pull images to DTR. +Universal Control Plane integrates out of the box with DTR so that you can +deploy services and applications to your UCP cluster, using the Docker images +you store in DTR. + +## Under the hood + +DTR needs to be deployed in a worker node managed by UCP. + +![](images/architecture-2.svg) + +For high-availability you can join multiple replicas to a DTR cluster. +[Learn more about high availability](high-availability/index.md). -## Containers +## DTR internal components When you install DTR on a node, the following containers are started: @@ -27,18 +43,8 @@ When you install DTR on a node, the following containers are started: All these components are for internal use of DTR. Don't use them in your applications. -## Networks -To allow containers to communicate, when installing DTR the following networks -are created: - -| Name | Type | Description | -|:-------|:--------|:---------------------------------------------------------------------------------------| -| dtr-br | bridge | Allows DTR components on the same node to communicate with each other in a secure way | -| dtr-ol | overlay | Allows DTR components running on different nodes to communicate, to replicate DTR data | - - -## Volumes +## Volumes used by DTR DTR uses these named volumes for persisting data: @@ -58,10 +64,23 @@ don't exist in the node, and creates them using the default volume driver. By default, the data for these volumes can be found at `/var/lib/docker/volumes//_data`. -## Image storage +## Networks used by DTR + +To allow containers to communicate, when installing DTR the following networks +are created: + +| Name | Type | Description | +|:-------|:--------|:---------------------------------------------------------------------------------------| +| dtr-br | bridge | Allows DTR components on the same node to communicate with each other in a secure way | +| dtr-ol | overlay | Allows DTR components running on different nodes to communicate, to replicate DTR data | + + +## Where DTR stores images By default, Docker Trusted Registry stores images on the filesystem of the node -where it is running. +where it is running, but you can configure it to use an external storage system. + +![](images/architecture-3.svg) You can also configure DTR to use these storage backends: @@ -74,11 +93,17 @@ You can also configure DTR to use these storage backends: For highly available installations, you should use a cloud storage system instead of an NFS mount, since they usually have better performance. -## High-availability support +## How you interact with DTR + +Since DTR exposes the standard Docker API you can continue using the +Docker CLI client to push and pull images to DTR. + +Universal Control Plane integrates out of the box with DTR so that you can +deploy services and applications to your UCP cluster, using the Docker images +you store in DTR. + +![](images/architecture-4.svg) -For load balancing and high-availability, you can install multiple replicas of -DTR, and join them to create a cluster. -[Learn more about high availability](high-availability/index.md). ## Where to go next diff --git a/datacenter/dtr/2.1/guides/images/architecture-1.png b/datacenter/dtr/2.1/guides/images/architecture-1.png deleted file mode 100644 index 1528ddecf1a29ced239e615723fc84bd235fa9bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44362 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 + + + architecture-1 + Created with Sketch. + + + + + + + + + + cloud servers + + + + + + virtual servers + + + + + + physical servers + + + + + + + CS Docker Engine + + + + + + Universal Control Plane + + + + + + Docker Trusted Registry + + + + + + your applications + + + + + + + + + docker run + + + + + + + docker push + + + + + + + \ No newline at end of file diff --git a/datacenter/dtr/2.1/guides/images/architecture-2.svg b/datacenter/dtr/2.1/guides/images/architecture-2.svg new file mode 100644 index 0000000000..055a196684 --- /dev/null +++ b/datacenter/dtr/2.1/guides/images/architecture-2.svg @@ -0,0 +1,225 @@ + + + + architecture-2 + Created with Sketch. + + + + + Docker swarm + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP worker + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP worker + + + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP worker + + + + + + DTR + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP worker + + + + + + DTR + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP worker + + + + + + DTR + + + + + + + + + + + + manager node + + + + + + + CS Docker Engine + + + + + + UCP manager + + + + + + + + + + manager node + + + + + + + CS Docker Engine + + + + + + UCP manager + + + + + + + + + + manager node + + + + + + + CS Docker Engine + + + + + + UCP manager + + + + + + + + + + \ No newline at end of file diff --git a/datacenter/dtr/2.1/guides/images/architecture-3.svg b/datacenter/dtr/2.1/guides/images/architecture-3.svg new file mode 100644 index 0000000000..ba1fd3455e --- /dev/null +++ b/datacenter/dtr/2.1/guides/images/architecture-3.svg @@ -0,0 +1,160 @@ + + + + architecture-3 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + DTR cluster + + + + + overlay network + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP worker + + + + + + DTR + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP worker + + + + + + DTR + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP worker + + + + + + DTR + + + + + + + + + + + object + storage + + + + + + \ No newline at end of file diff --git a/datacenter/dtr/2.1/guides/images/architecture-4.svg b/datacenter/dtr/2.1/guides/images/architecture-4.svg new file mode 100644 index 0000000000..13c800aaa8 --- /dev/null +++ b/datacenter/dtr/2.1/guides/images/architecture-4.svg @@ -0,0 +1,356 @@ + + + + architecture-3 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Docker swarm + + + + + + + + + your load balancer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + your load balancer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP worker + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP worker + + + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP worker + + + + + + DTR + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP worker + + + + + + DTR + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP worker + + + + + + DTR + + + + + + + + + + + + manager node + + + + + + + CS Docker Engine + + + + + + UCP manager + + + + + + + + + + manager node + + + + + + + CS Docker Engine + + + + + + UCP manager + + + + + + + + + + manager node + + + + + + + CS Docker Engine + + + + + + UCP manager + + + + + + + + + + + + + UI + + + + + + CLI + + + + + + + + UI + + + + + + CLI + + + + + + + + \ No newline at end of file diff --git a/datacenter/dtr/2.1/guides/images/scale-your-deployment-1.svg b/datacenter/dtr/2.1/guides/images/scale-your-deployment-1.svg new file mode 100644 index 0000000000..1dde3d1152 --- /dev/null +++ b/datacenter/dtr/2.1/guides/images/scale-your-deployment-1.svg @@ -0,0 +1,310 @@ + + + + scale-your-cluster-1 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Docker swarm + + + + + + + + + your load balancer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + your load balancer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP worker + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP worker + + + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP worker + + + + + + DTR + + + + + + + + + + + + + + + + + + + + + + + + + + manager node + + + + + + + CS Docker Engine + + + + + + UCP manager + + + + + + + + + + manager node + + + + + + + CS Docker Engine + + + + + + UCP manager + + + + + + + + + + manager node + + + + + + + CS Docker Engine + + + + + + UCP manager + + + + + + + + + + + + + UI + + + + + + CLI + + + + + + + + UI + + + + + + CLI + + + + + + + + \ No newline at end of file diff --git a/datacenter/dtr/2.1/guides/install/scale-your-deployment.md b/datacenter/dtr/2.1/guides/install/scale-your-deployment.md index cda1e710c2..86d4ce0dcd 100644 --- a/datacenter/dtr/2.1/guides/install/scale-your-deployment.md +++ b/datacenter/dtr/2.1/guides/install/scale-your-deployment.md @@ -8,6 +8,8 @@ Docker Trusted Registry is designed to scale horizontally as your usage increases. You can add or remove replicas to make DTR scale to your needs or for high availability. +![](../images/scale-your-deployment-1.svg) + To set up DTR for [high availability](../high-availability/index.md), you can add more replicas to your DTR cluster. Adding more replicas allows you to load-balance requests across all replicas, and keep DTR working if a diff --git a/datacenter/ucp/2.0/guides/architecture.md b/datacenter/ucp/2.0/guides/architecture.md index ffb80f5985..d834a9ee2b 100644 --- a/datacenter/ucp/2.0/guides/architecture.md +++ b/datacenter/ucp/2.0/guides/architecture.md @@ -5,12 +5,45 @@ title: UCP architecture --- Universal Control Plane is a containerized application that runs on the -Commercially Supported (CS) Docker Engine. It allows you to manage from a -centralized place a set of nodes that are part of the same swarm. +Commercially Supported (CS) Docker Engine, and extends its functionality to +make it easier to deploy, configure, and monitor your applications at scale. -![](images/architecture-1.png) +It also secures Docker with role-based access control so that only authorized +users can make changes and deploy applications to your Docker cluster. -## UCP components +![](images/architecture-1.svg) + +Once Universal Control Plane (UCP) is deployed, developers and IT operations +no longer interact with Docker Engine directly, but interact with UCP instead. +Since UCP exposes the standard Docker API this is all done transparently, so +that you can use the tools you already know and love like the Docker CLI client +and Docker Compose. + + +## Under the hood + +Docker UCP leverages the clustering and orchestration functionality provided +by Docker. + +![](images/architecture-2.svg) + + +When you deploy UCP, it starts running a globally scheduled service called +`ucp-agent`. This service monitors the node where it is running and starts +and stops UCP services, based on whether that node is a +[manager or a worker node](https://docs.docker.com/engine/swarm/key-concepts/). + +If the node is a: + +* **Manager**: the `ucp-agent` service automatically starts serving all UCP +components including the UCP web UI and data stores used by UCP. By promoting +a node to manager, UCP automatically becomes highly available and fault tolerant. +* **Worker**: on worker nodes the `ucp-agent` service starts serving a proxy +service that ensures only authorized users and other UCP services can run Docker +commands in that node. + + +## UCP internal components The core component of UCP is a globally-scheduled service called `ucp-agent`. When you install UCP on a node, or join a node to a swarm that is being managed @@ -19,24 +52,40 @@ by UCP, the `ucp-agent` service starts running on that node. Once this service is running, it deploys containers with other UCP components, and ensures they keep running. The UCP components that are deployed on a node depend on whether that node is a manager or a worker. -Manager nodes are responsible for maintaining the swarm state and scheduling -decisions. Worker nodes are responsible for executing workloads. -| Name | Node | Description | -|:--------------------|:----------------|:----------------------------------------------------------------------------------------------------------| -| ucp-auth-api | Manager | The centralized service for identity and authentication used by UCP and DTR | -| ucp-auth-store | Manager | Stores authentication configurations, and data for users, organizations and teams | -| ucp-auth-worker | Manager | Performs scheduled LDAP synchronizations and cleans authentication and authorization data | -| ucp-client-root-ca | Manager | A certificate authority to sign client bundles | -| ucp-cluster-root-ca | Manager | A certificate authority used for TLS communication between UCP components | -| ucp-controller | Manager | The UCP web server | -| ucp-kv | Manager | Used to store the UCP configurations. Don't use it in your applications, since it's for internal use only | -| ucp-proxy | Manager, worker | A TLS proxy. It allows secure access to the local Docker Engine to UCP components | -| ucp-swarm-manager | Manager | Used to provide backwards-compatibility with Docker Swarm | +### UCP components in manager nodes -## Volumes +Manager nodes run all UCP services, including the web UI and data stores that +persist the state of UCP. These are the UCP services running on manager nodes: -Docker UCP uses these named volumes to persist data: +| UCP component | Description | +|:--------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ucp-agent | Monitors the node and ensures the right UCP services are running | +| ucp-reconcile | When ucp-agent detects that the node is not running the right UCP services, it starts the ucp-reconcile service to start or stop the necessary services to converge the node to its desired state | +| ucp-auth-api | The centralized service for identity and authentication used by UCP and DTR | +| ucp-auth-store | Stores authentication configurations, and data for users, organizations and teams | +| ucp-auth-worker | Performs scheduled LDAP synchronizations and cleans authentication and authorization data | +| ucp-client-root-ca | A certificate authority to sign client bundles | +| ucp-cluster-root-ca | A certificate authority used for TLS communication between UCP components | +| ucp-controller | The UCP web server | +| ucp-kv | Used to store the UCP configurations. Don't use it in your applications, since it's for internal use only | +| ucp-proxy | A TLS proxy. It allows secure access to the local Docker Engine to UCP components | +| ucp-swarm-manager | Used to provide backwards-compatibility with Docker Swarm | + +### UCP components in worker nodes + +Worker nodes are the ones where you run your applications. These are the UCP +services running on worker nodes: + +| UCP component | Description | +|:--------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ucp-agent | Monitors the node and ensures the right UCP services are running | +| ucp-reconcile | When ucp-agent detects that the node is not running the right UCP services, it starts the ucp-reconcile service to start or stop the necessary services to converge the node to its desired state | +| ucp-proxy | A TLS proxy. It allows secure access to the local Docker Engine to UCP components | + +## Volumes used by UCP + +Docker UCP uses these named volumes to persist data in all nodes where it runs: | Volume name | Description | |:----------------------------|:-----------------------------------------------------------------------------------------| @@ -61,6 +110,23 @@ driver. By default, the data for these volumes can be found at `/var/lib/docker/volumes//_data`. +## How you interact with UCP + +There are two ways to interact with UCP: the web UI or the CLI. + +You can use the UCP web UI to manage your cluster, grant and revoke user +permissions, deploy, configure, manage, and monitor your applications. + +![](images/architecture-3.svg) + +UCP also exposes the standard Docker API, so you can continue using existing +tools like the Docker CLI client. Since UCP secures your cluster with role-based +access control, you need to configure your Docker CLI client and other client +tools to authenticate your requests using +[client certificates](access-ucp/cli-based-access.md) that you can download +from your UCP profile page. + + ## Where to go next * [System requirements](installation/index.md) diff --git a/datacenter/ucp/2.0/guides/images/architecture-1.svg b/datacenter/ucp/2.0/guides/images/architecture-1.svg new file mode 100644 index 0000000000..5128d1f28e --- /dev/null +++ b/datacenter/ucp/2.0/guides/images/architecture-1.svg @@ -0,0 +1,71 @@ + + + + architecture-1 + Created with Sketch. + + + + + + + + + + cloud servers + + + + + + virtual servers + + + + + + physical servers + + + + + + + CS Docker Engine + + + + + + Universal Control Plane + + + + + + Docker Trusted Registry + + + + + + your applications + + + + + + + deploy and manage + + + + + + + + + + + + \ No newline at end of file diff --git a/datacenter/ucp/2.0/guides/images/architecture-1.png b/datacenter/ucp/2.0/guides/images/architecture-2.png similarity index 100% rename from datacenter/ucp/2.0/guides/images/architecture-1.png rename to datacenter/ucp/2.0/guides/images/architecture-2.png diff --git a/datacenter/ucp/2.0/guides/images/architecture-2.svg b/datacenter/ucp/2.0/guides/images/architecture-2.svg new file mode 100644 index 0000000000..876db1a1d5 --- /dev/null +++ b/datacenter/ucp/2.0/guides/images/architecture-2.svg @@ -0,0 +1,166 @@ + + + + architecture-2 + Created with Sketch. + + + + + Docker swarm + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP agent + + + + + + UCP worker + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP agent + + + + + + UCP worker + + + + + + + + + + + + manager node + + + + + + + CS Docker Engine + + + + + + UCP agent + + + + + + UCP manager + + + + + + + + + + manager node + + + + + + + CS Docker Engine + + + + + + UCP agent + + + + + + UCP manager + + + + + + + + + + manager node + + + + + + + CS Docker Engine + + + + + + UCP agent + + + + + + UCP manager + + + + + + + + + + \ No newline at end of file diff --git a/datacenter/ucp/2.0/guides/images/architecture-3.svg b/datacenter/ucp/2.0/guides/images/architecture-3.svg new file mode 100644 index 0000000000..a8a3523da8 --- /dev/null +++ b/datacenter/ucp/2.0/guides/images/architecture-3.svg @@ -0,0 +1,233 @@ + + + + architecture-3 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + Docker swarm + + + + + + + + your load balancer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP agent + + + + + + UCP worker + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP agent + + + + + + UCP worker + + + + + + + + + + + + manager node + + + + + + + CS Docker Engine + + + + + + UCP agent + + + + + + UCP manager + + + + + + + + + + manager node + + + + + + + CS Docker Engine + + + + + + UCP agent + + + + + + UCP manager + + + + + + + + + + manager node + + + + + + + CS Docker Engine + + + + + + UCP agent + + + + + + UCP manager + + + + + + + + + + + + UI + + + + + + CLI + + + + + + + \ No newline at end of file diff --git a/datacenter/ucp/2.0/guides/images/scale-your-cluster-1.svg b/datacenter/ucp/2.0/guides/images/scale-your-cluster-1.svg new file mode 100644 index 0000000000..55a1d68613 --- /dev/null +++ b/datacenter/ucp/2.0/guides/images/scale-your-cluster-1.svg @@ -0,0 +1,156 @@ + + + + scale-your-cluster-1 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + Docker swarm + + + + + + + + your load balancer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + worker node + + + + + + + CS Docker Engine + + + + + + UCP agent + + + + + + UCP worker + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + manager node + + + + + + + CS Docker Engine + + + + + + UCP agent + + + + + + UCP manager + + + + + + + + + + + \ No newline at end of file diff --git a/datacenter/ucp/2.0/guides/installation/scale-your-cluster.md b/datacenter/ucp/2.0/guides/installation/scale-your-cluster.md index 5e030a86ae..2676ef8056 100644 --- a/datacenter/ucp/2.0/guides/installation/scale-your-cluster.md +++ b/datacenter/ucp/2.0/guides/installation/scale-your-cluster.md @@ -9,23 +9,33 @@ Docker UCP is designed for scaling horizontally as your applications grow in size and usage. You can add or remove nodes from the UCP cluster to make it scale to your needs. -UCP leverages the Docker Engine functionality to run multiple Docker Engines -in swarm mode. When you join a node to your cluster, you can join the node as a -manager or worker: +![](../images/scale-your-cluster-1.svg) -* Manager node +Since UCP leverages the clustering functionality provided by Docker Engine, +you use the [docker swarm join](/engine/swarm/swarm-tutorial/add-nodes.md) +command to add more nodes to your cluster. When joining new nodes, the UCP +services automatically start running in that node. + +When joining a node a a cluster you can specify its role: manager or worker. + +* **Manager nodes** Manager nodes are responsible for cluster management functionality and - dispatching tasks to worker nodes. - Having multiple manager nodes allows your cluster to be highly-available - and tolerate node failures. It also allows you to load-balance user requests - to the cluster. - [Learn more about high-availability](../high-availability/index.md). + dispatching tasks to worker nodes. Having multiple manager nodes allows + your cluster to be highly-available and tolerate node failures. -* Worker nodes + Manager nodes also run all UCP components in a replicated way, so by adding + additional manager nodes you're also making UCP highly available. + [Learn more about the UCP architecture.](../architecture.md) - Worker nodes receive and execute tasks dispatched to them. Having multiple - worker nodes allows you to scale the computing capacity of your cluster. +* **Worker nodes** + + Worker nodes receive and execute your services and applications. Having + multiple worker nodes allows you to scale the computing capacity of your + cluster. + + When deploying Docker Trusted Registry in your cluster, you deploy it to a + worker node. ## Join nodes to the cluster