Skip to content

Commit 3e7973f

Browse files
committed
Docs and release notes for 2.24.0
Signed-off-by: Thomas Hallgren <thomas@tada.se>
1 parent ecb198e commit 3e7973f

File tree

136 files changed

+13119
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

136 files changed

+13119
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Telepresence Documentation
2+
3+
This folder contains the Telepresence documentation in a format suitable for a versioned folder in the
4+
telepresenceio/telepresence.io repository. The folder will show up in that repository when a new minor revision
5+
tag is created here.
6+
7+
Assuming that a 2.20.0 release is pending, and that a release/v2.20.0 branch has been created, then:
8+
```console
9+
$ export TELEPRESENCE_VERSION=v2.20.0
10+
$ make prepare-release
11+
$ git push origin {,rpc/}v2.20.0 release/v2.20.0
12+
```
13+
14+
will result in a `docs/v2.20` folder with this folder's contents in the telepresenceio/telepresence.io repository.
15+
16+
Subsequent bugfix tags for the same minor tag, i.e.:
17+
```console
18+
$ export TELEPRESENCE_VERSION=v2.20.1
19+
$ make prepare-release
20+
$ git push origin {,rpc/}v2.20.1 release/v2.20.1
21+
```
22+
will not result in a new folder when it is pushed, but it will update the content of the `docs/v2.20` folder to
23+
reflect this folder's content for that tag.
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
---
2+
description: Main menu when using plain markdown. Excluded when generating the website
3+
---
4+
# <img src="images/logo.png" height="64px"/> Telepresence Documentation
5+
raw markdown version, more bells and whistles at [telepresence.io](https://telepresence.io)
6+
7+
- [Quick start](quick-start.md)
8+
- Install Telepresence
9+
- [Install Client](install/client.md)
10+
- [Upgrade Client](install/upgrade.md)
11+
- [Install Traffic Manager](install/manager.md)
12+
- [Cloud Provider Prerequisites](install/cloud.md)
13+
- Core concepts
14+
- [The developer experience and the inner dev loop](concepts/devloop.md)
15+
- [Making the remote local: Faster feedback, collaboration and debugging](concepts/faster.md)
16+
- [Intercepts](concepts/intercepts.md)
17+
- How do I...
18+
- [Code and debug an application locally](howtos/engage.md)
19+
- [Use Telepresence with Docker](howtos/docker.md)
20+
- [Extend Docker Compose with Telepresence](howtos/docker-compose.md)
21+
- [Work with large clusters](howtos/large-clusters.md)
22+
- [Host a cluster in Docker or a VM](howtos/cluster-in-vm.md)
23+
- [Use Telepresence with Azure (Microsoft Learn)](https://learn.microsoft.com/en-us/azure/aks/use-telepresence-aks.md)
24+
- Technical reference
25+
- [Architecture](reference/architecture.md)
26+
- [Telepresence CLI](reference/cli/telepresence.md)
27+
- [telepresence completion](reference/cli/telepresence_completion.md)
28+
- [telepresence compose](reference/cli/telepresence_compose.md)
29+
- [attach](reference/cli/telepresence_compose_attach.md)
30+
- [build](reference/cli/telepresence_compose_build.md)
31+
- [commit](reference/cli/telepresence_compose_commit.md)
32+
- [config](reference/cli/telepresence_compose_config.md)
33+
- [cp](reference/cli/telepresence_compose_cp.md)
34+
- [create](reference/cli/telepresence_compose_create.md)
35+
- [down](reference/cli/telepresence_compose_down.md)
36+
- [events](reference/cli/telepresence_compose_events.md)
37+
- [exec](reference/cli/telepresence_compose_exec.md)
38+
- [export](reference/cli/telepresence_compose_export.md)
39+
- [images](reference/cli/telepresence_compose_images.md)
40+
- [kill](reference/cli/telepresence_compose_kill.md)
41+
- [logs](reference/cli/telepresence_compose_logs.md)
42+
- [ls](reference/cli/telepresence_compose_ls.md)
43+
- [pause](reference/cli/telepresence_compose_pause.md)
44+
- [port](reference/cli/telepresence_compose_port.md)
45+
- [ps](reference/cli/telepresence_compose_ps.md)
46+
- [publish](reference/cli/telepresence_compose_publish.md)
47+
- [pull](reference/cli/telepresence_compose_pull.md)
48+
- [push](reference/cli/telepresence_compose_push.md)
49+
- [restart](reference/cli/telepresence_compose_restart.md)
50+
- [rm](reference/cli/telepresence_compose_rm.md)
51+
- [run](reference/cli/telepresence_compose_run.md)
52+
- [scale](reference/cli/telepresence_compose_scale.md)
53+
- [start](reference/cli/telepresence_compose_start.md)
54+
- [stats](reference/cli/telepresence_compose_stats.md)
55+
- [stop](reference/cli/telepresence_compose_stop.md)
56+
- [top](reference/cli/telepresence_compose_top.md)
57+
- [unpause](reference/cli/telepresence_compose_unpause.md)
58+
- [up](reference/cli/telepresence_compose_up.md)
59+
- [version](reference/cli/telepresence_compose_version.md)
60+
- [wait](reference/cli/telepresence_compose_wait.md)
61+
- [watch](reference/cli/telepresence_compose_watch.md)
62+
- [telepresence config](reference/cli/telepresence_config.md)
63+
- [view](reference/cli/telepresence_config_view.md)
64+
- [telepresence connect](reference/cli/telepresence_connect.md)
65+
- [telepresence curl](reference/cli/telepresence_curl.md)
66+
- [telepresence docker-run](reference/cli/telepresence_docker-run.md)
67+
- [telepresence gather-logs](reference/cli/telepresence_gather-logs.md)
68+
- [telepresence genyaml](reference/cli/telepresence_genyaml.md)
69+
- [annotations](reference/cli/telepresence_genyaml_annotations.md)
70+
- [annotations](reference/cli/telepresence_genyaml_annotations.md)
71+
- [config](reference/cli/telepresence_genyaml_config.md)
72+
- [container](reference/cli/telepresence_genyaml_container.md)
73+
- [initcontainer](reference/cli/telepresence_genyaml_initcontainer.md)
74+
- [volume](reference/cli/telepresence_genyaml_volume.md)
75+
- [telepresence helm](reference/cli/telepresence_helm.md)
76+
- [helm install](reference/cli/telepresence_helm_install.md)
77+
- [helm lint](reference/cli/telepresence_helm_lint.md)
78+
- [helm uninstall](reference/cli/telepresence_helm_uninstall.md)
79+
- [helm upgrade](reference/cli/telepresence_helm_upgrade.md)
80+
- [helm version](reference/cli/telepresence_helm_version.md)
81+
- [telepresence ingest](reference/cli/telepresence_ingest.md)
82+
- [telepresence intercept](reference/cli/telepresence_intercept.md)
83+
- [telepresence leave](reference/cli/telepresence_leave.md)
84+
- [telepresence list](reference/cli/telepresence_list.md)
85+
- [telepresence list-contexts](reference/cli/telepresence_list-contexts.md)
86+
- [telepresence list-namespaces](reference/cli/telepresence_list-namespaces.md)
87+
- [telepresence loglevel](reference/cli/telepresence_loglevel.md)
88+
- [telepresence quit](reference/cli/telepresence_quit.md)
89+
- [telepresence replace](reference/cli/telepresence_replace.md)
90+
- [telepresence serve](reference/cli/telepresence_serve.md)
91+
- [telepresence status](reference/cli/telepresence_status.md)
92+
- [telepresence uninstall](reference/cli/telepresence_uninstall.md)
93+
- [telepresence version](reference/cli/telepresence_version.md)
94+
- [telepresence wiretap](reference/cli/telepresence_wiretap.md)
95+
- [Laptop-side configuration](reference/config.md)
96+
- [Cluster-side configuration](reference/cluster-config.md)
97+
- [Using Docker for engagements](reference/docker-run.md)
98+
- [Telepresence Compose Extensions](reference/compose.md)
99+
- [Running Telepresence in a Docker container](reference/inside-container.md)
100+
- [Environment variables](reference/environment.md)
101+
- Engagements
102+
- [Configure intercept using CLI](reference/engagements/cli.md)
103+
- [Traffic Agent Sidecar](reference/engagements/sidecar.md)
104+
- [Target a specific container](reference/engagements/container.md)
105+
- [Telepresence Docker Plugins](reference/plugins.md)
106+
- [Volume mounts](reference/volume.md)
107+
- [DNS resolution](reference/dns.md)
108+
- [RBAC](reference/rbac.md)
109+
- [Telepresence and VPNs](reference/vpn.md)
110+
- [Networking through Virtual Network Interface](reference/tun-device.md)
111+
- [Connection Routing](reference/routing.md)
112+
- [Monitoring](reference/monitoring.md)
113+
- Comparisons
114+
- [Telepresence vs mirrord](compare/mirrord.md)
115+
- [FAQs](faqs.md)
116+
- [Troubleshooting](troubleshooting.md)
117+
- [Community](community.md)
118+
- [Release Notes](release-notes.md)
119+
- [Licenses](licenses.md)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
title: Quantity
3+
---
4+
Quantity is measured in bytes. You can express it as a plain integer or as a fixed-point number using E, G, M, or K. You can also use the power-of-two equivalents: Gi, Mi, Ki. For example, the following represent roughly the same value:
5+
```
6+
128974848, 129e6, 129M, 123Mi
7+
```
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
title: Community
3+
hide_table_of_contents: true
4+
---
5+
6+
# Community
7+
8+
## Contributor's guide
9+
Please review our [contributor's guide](https://github.com/telepresenceio/telepresence/blob/release/v2/CONTRIBUTING.md)
10+
on GitHub to learn how you can help make Telepresence better.
11+
12+
## Meetings
13+
Check out our community [meeting schedule](https://github.com/telepresenceio/telepresence/blob/release/v2/MEETING_SCHEDULE.md) for opportunities to interact with Telepresence developers.
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
---
2+
title: "Telepresence vs mirrord"
3+
hide_table_of_contents: true
4+
---
5+
6+
## Telepresence
7+
8+
Telepresence is a very feature rich tool, designed to handle a large majority of use-cases. You can use it as a cluster VPN only, or use one of its three different ways (replace, intercept, or ingest) to engage with the cluster's resources.
9+
10+
Telepresence is intended to be installed in the cluster by an administrator and then let clients connect with a very limited set of permissions. This model is generally required by larger companies.
11+
12+
The client can be either completely contained in Docker or run directly on the workstation. The latter will require the creation of a virtual network device, and hence admin access.
13+
14+
## mirrord
15+
16+
Mirrord was designed with simplicity in mind. You install the CLI tool, and that's it. It will do the rest automatically under the hood.
17+
18+
Mirrord solves the same problem as Telepresence, but in a different way. Instead of providing a proper network
19+
device and remotely mounted filesystems, mirrord will link the client application with a `mirrord-layer` shared library. This library will inject code that intercepts accesses to the network, file system, and environment variables, and reroute them to a corresponding process in the cluster (the `mirrord-agent`) which then interacts with the targeted pod.
20+
21+
### Limitations with Code Injection
22+
23+
Telepresence 1.x used the [code injection approach](https://www.getambassador.io/blog/code-injection-on-linux-and-macos), but desided to abandon it due to several limitations:
24+
25+
1. It will only work on Linux and macOS platforms. There's no native support on Windows.
26+
2. It will only work with dynamically linked executables.
27+
3. It cannot be used with docker unless you rebuild the container and inject the `mirrord-layer` into it.
28+
4. `DYLD_INSERT_LIBRARIES` causes various problems on macOS (SIP prevents it from being used), especially on silicon-based machines where mirrord will require Rosetta.
29+
5. Should Apple decide to protect their intel-based platform the same way as the silicon-based one in a future release, then mirrord will likely be problematic to use on that platform.
30+
31+
### Cluster Permissions
32+
33+
Mirrord does not require a sidecar. Instead they install a the `mirror-agent` into the namespace of the pod that it impersonates. That agent requires several permissions that a cluster admin might consider a security risk:
34+
35+
* `CAP_NET_ADMIN` and `CAP_NET_RAW` - required for modifying routing tables
36+
* `CAP_SYS_PTRACE` - required for reading target pod environment
37+
* `CAP_SYS_ADMIN` - required for joining target pod network namespace
38+
39+
Unless using "mirrord for Teams" (proprietary), all users must have permissions to create the job running the `mirror-agent` in the cluster.
40+
41+
## Comparison Telepresence vs mirrord
42+
43+
This comparison chart applies to the Open Source editions of both products.
44+
45+
| Feature | Telepresence | mirrord |
46+
|----------------------------------------------------------------------------|--------------|---------|
47+
| Run or Debug your cluster containers locally |||
48+
| Does not need administrative permission on workstation |[^1] ||
49+
| Can be used with very large clusters |||
50+
| Works without interrupting the remote service |[^2] ||
51+
| Doesn't require injection of a sidecar |[^3] ||
52+
| Supports connecting to clusters over a corporate VPN |||
53+
| Can intercept traffic |||
54+
| Can mirror traffic |||
55+
| Can ingest a container |||
56+
| Can replace a container |||
57+
| Can act as a cluster VPN only |||
58+
| Will work with statically linked binaries |||
59+
| Runs natively on windows |||
60+
| Can intercept traffic to and from pod's localhost |||
61+
| Remotely mounted file system available from all applications |||
62+
| Cluster network available to all applications (including browser) |||
63+
| Can run the same docker container locally without rebuilding it |||
64+
| Provides remote mounts as volumes in docker |||
65+
| Does not require special capabilities such as CAP_SYS_ADMIN in the cluster |||
66+
| Centralized client configuration using Helm chart |||
67+
| Installed using a JSON-schema validated Helm chart |||
68+
| Client need no special RBAC permissions |||
69+
70+
[^1]: Telepresence will not require root access on the workstation when running in docker mode.
71+
72+
[^2]: The remote service will only restart when a traffic-agent sidecar is installed. Pod disruption budgets or pre-installed agents can be used to avoid interruptions.
73+
74+
[^3]: A traffic-agent is necessary when engaging with a pod. It is unnecessary when using Telepresence as a VPN.
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
---
2+
title: The developer experience and the inner dev loop
3+
hide_table_of_contents: true
4+
---
5+
6+
# The developer experience and the inner dev loop
7+
8+
## How is the developer experience changing?
9+
10+
The developer experience is the workflow a developer uses to develop, test, deploy, and release software.
11+
12+
Typically this experience has consisted of both an inner dev loop and an outer dev loop. The inner dev loop is where the individual developer codes and tests, and once the developer pushes their code to version control, the outer dev loop is triggered.
13+
14+
The outer dev loop is _everything else_ that happens leading up to release. This includes code merge, automated code review, test execution, deployment, controlled (canary) release, and observation of results. The modern outer dev loop might include, for example, an automated CI/CD pipeline as part of a GitOps workflow and a progressive delivery strategy relying on automated canaries, i.e. to make the outer loop as fast, efficient and automated as possible.
15+
16+
Cloud-native technologies have fundamentally altered the developer experience in two ways: one, developers now have to take extra steps in the inner dev loop; two, developers need to be concerned with the outer dev loop as part of their workflow, even if most of their time is spent in the inner dev loop.
17+
18+
Engineers now must design and build distributed service-based applications _and_ also assume responsibility for the full development life cycle. The new developer experience means that developers can no longer rely on monolithic application developer best practices, such as checking out the entire codebase and coding locally with a rapid “live-reload” inner development loop. Now developers have to manage external dependencies, build containers, and implement orchestration configuration (e.g. Kubernetes YAML). This may appear trivial at first glance, but this adds development time to the equation.
19+
20+
## What is the inner dev loop?
21+
22+
The inner dev loop is the single developer workflow. A single developer should be able to set up and use an inner dev loop to code and test changes quickly.
23+
24+
Even within the Kubernetes space, developers will find much of the inner dev loop familiar. That is, code can still be written locally at a level that a developer controls and committed to version control.
25+
26+
In a traditional inner dev loop, if a typical developer codes for 360 minutes (6 hours) a day, with a traditional local iterative development loop of 5 minutes — 3 coding, 1 building, i.e. compiling/deploying/reloading, 1 testing inspecting, and 10-20 seconds for committing code — they can expect to make ~70 iterations of their code per day. Any one of these iterations could be a release candidate. The only “developer tax” being paid here is for the commit process, which is negligible.
27+
28+
![traditional inner dev loop](../images/trad-inner-dev-loop.png#devloop)
29+
30+
## In search of lost time: How does containerization change the inner dev loop?
31+
32+
The inner dev loop is where writing and testing code happens, and time is critical for maximum developer productivity and getting features in front of end users. The faster the feedback loop, the faster developers can refactor and test again.
33+
34+
Changes to the inner dev loop process, i.e., containerization, threaten to slow this development workflow down. Coding stays the same in the new inner dev loop, but code has to be containerized. The _containerized_ inner dev loop requires a number of new steps:
35+
36+
* packaging code in containers
37+
* writing a manifest to specify how Kubernetes should run the application (e.g., YAML-based configuration information, such as how much memory should be given to a container)
38+
* pushing the container to the registry
39+
* deploying containers in Kubernetes
40+
41+
Each new step within the container inner dev loop adds to overall development time, and developers are repeating this process frequently. If the build time is incremented to 5 minutes — not atypical with a standard container build, registry upload, and deploy — then the number of possible development iterations per day drops to ~40. At the extreme that’s a 40% decrease in potential new features being released. This new container build step is a hidden tax, which is quite expensive.
42+
43+
44+
![container inner dev loop](../images/container-inner-dev-loop.png#devloop)
45+
46+
## Tackling the slow inner dev loop
47+
48+
A slow inner dev loop can negatively impact frontend and backend teams, delaying work on individual and team levels and slowing releases into production overall.
49+
50+
For example:
51+
52+
* Frontend developers have to wait for previews of backend changes on a shared dev/staging environment (for example, until CI/CD deploys a new version) and/or rely on mocks/stubs/virtual services when coding their application locally. These changes are only verifiable by going through the CI/CD process to build and deploy within a target environment.
53+
* Backend developers have to wait for CI/CD to build and deploy their app to a target environment to verify that their code works correctly with cluster or cloud-based dependencies as well as to share their work to get feedback.
54+
55+
New technologies and tools can facilitate cloud-native, containerized development. And in the case of a sluggish inner dev loop, developers can accelerate productivity with tools that help speed the loop up again.

0 commit comments

Comments
 (0)