Skip to content

Commit b5bf8f0

Browse files
committed
Merge branch 'main' into e2e-test-improvements
2 parents 80516fd + b06452e commit b5bf8f0

31 files changed

+775
-135
lines changed

.github/workflows/ci.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,7 @@ jobs:
485485
CODER_E2E_ENTERPRISE_LICENSE: ${{ secrets.CODER_E2E_ENTERPRISE_LICENSE }}
486486
CODER_E2E_REQUIRE_ENTERPRISE_TESTS: "1"
487487
working-directory: site
488+
continue-on-error: true
488489

489490
- name: Upload Playwright Failed Tests
490491
if: always() && github.actor != 'dependabot[bot]' && runner.os == 'Linux' && !github.event.pull_request.head.repo.fork

docs/about/architecture.md

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,3 +162,160 @@ offer the fastest developer experience.
162162
- Session persistence (sticky sessions) can be disabled as _coderd_ instances
163163
are stateless.
164164
- WebSocket and long-lived connections must be supported.
165+
166+
### Multi-cloud architecture
167+
168+
By distributing Coder workspaces across different cloud providers, organizations
169+
can mitigate the risk of downtime caused by provider-specific outages or
170+
disruptions. Additionally, multi-cloud deployment enables organizations to
171+
leverage the unique features and capabilities offered by each cloud provider,
172+
such as region availability and pricing models.
173+
174+
![Architecture Diagram](../images/architecture-multi-cloud.png)
175+
176+
#### Components
177+
178+
The deployment model comprises:
179+
180+
- `coderd` instances deployed within a single region of the same cloud provider,
181+
with replicas strategically distributed across availability zones.
182+
- Workspace provisioners deployed in each cloud, communicating with `coderd`
183+
instances.
184+
- Workspace proxies running in the same locations as provisioners to optimize
185+
user connections to workspaces for maximum speed.
186+
187+
Due to the relatively large overhead of cross-regional communication, it is not
188+
advised to set up multi-cloud control planes. It is recommended to keep coderd
189+
replicas and the database within the same cloud-provider and region.
190+
191+
Note: The _multi-cloud architecture_ follows the deployment principles outlined
192+
in the _multi-region architecture_. However, it adapts component selection based
193+
on the specific cloud provider. Developers can initiate workspaces based on the
194+
nearest region and technical specifications provided by the cloud providers.
195+
196+
##### Workload resources
197+
198+
**Workspace provisioner**
199+
200+
- _Security recommendation_: Create a long, random pre-shared key (PSK) and add
201+
it to the regional secret store, so that local _provisionerd_ can access it.
202+
Remember to distribute it using safe, encrypted communication channel. The PSK
203+
must also be added to the _coderd_ configuration.
204+
205+
**Workspace proxy**
206+
207+
- _Security recommendation_: Use `coder` CLI to create
208+
[authentication tokens for every workspace proxy](../admin/workspace-proxies.md#requirements),
209+
and keep them in regional secret stores. Remember to distribute them using
210+
safe, encrypted communication channel.
211+
212+
**Managed database**
213+
214+
- For AWS: _Amazon RDS for PostgreSQL_
215+
- For Azure: _Azure Database for PostgreSQL - Flexible Server_
216+
- For GCP: _Cloud SQL for PostgreSQL_
217+
218+
##### Workload supporting resources
219+
220+
**Kubernetes platform (optional)**
221+
222+
- For AWS: _Amazon Elastic Kubernetes Service_
223+
- For Azure: _Azure Kubernetes Service_
224+
- For GCP: _Google Kubernetes Engine_
225+
226+
See how to deploy
227+
[Coder on Azure Kubernetes Service](https://github.com/ericpaulsen/coder-aks).
228+
229+
Learn more about [security requirements](../install/kubernetes.md) for deploying
230+
Coder on Kubernetes.
231+
232+
**Load balancer**
233+
234+
- For AWS:
235+
- _AWS Network Load Balancer_
236+
- Level 4 load balancing
237+
- For Kubernetes deployment: annotate service with
238+
`service.beta.kubernetes.io/aws-load-balancer-type: "nlb"`, preserve the
239+
client source IP with `externalTrafficPolicy: Local`
240+
- _AWS Classic Load Balancer_
241+
- Level 7 load balancing
242+
- For Kubernetes deployment: set `sessionAffinity` to `None`
243+
- For Azure:
244+
- _Azure Load Balancer_
245+
- Level 7 load balancing
246+
- Azure Application Gateway
247+
- Deploy Azure Application Gateway when more advanced traffic routing
248+
policies are needed for Kubernetes applications.
249+
- Take advantage of features such as WebSocket support and TLS termination
250+
provided by Azure Application Gateway, enhancing the capabilities of
251+
Kubernetes deployments on Azure.
252+
- For GCP:
253+
- _Cloud Load Balancing_ with SSL load balancer:
254+
- Layer 4 load balancing, SSL enabled
255+
- _Cloud Load Balancing_ with HTTPS load balancer:
256+
- Layer 7 load balancing
257+
- For Kubernetes deployment: annotate service (with ingress enabled) with
258+
`kubernetes.io/ingress.class: "gce"`, leverage the `NodePort` service
259+
type.
260+
- Note: HTTP load balancer rejects DERP upgrade, Coder will fallback to
261+
WebSockets
262+
263+
**Single sign-on**
264+
265+
- For AWS:
266+
[AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)
267+
- For Azure:
268+
[Microsoft Entra ID Sign-On](https://learn.microsoft.com/en-us/entra/identity/app-proxy/)
269+
- For GCP:
270+
[Google Cloud Identity Platform](https://cloud.google.com/architecture/identity/single-sign-on)
271+
272+
### Dev Container
273+
274+
Note: _Dev containers_ are at early stage and considered experimental at the
275+
moment.
276+
277+
This architecture enhances a Coder workspace with a
278+
[development container](https://containers.dev/) setup built using the
279+
[envbuilder](https://github.com/coder/envbuilder) project. Workspace users have
280+
the flexibility to extend generic, base developer environments with custom,
281+
project-oriented [features](https://containers.dev/features) without requiring
282+
platform administrators to push altered Docker images.
283+
284+
Learn more about
285+
[Dev containers support](https://coder.com/docs/v2/latest/templates/devcontainers)
286+
in Coder.
287+
288+
![Architecture Diagram](../images/architecture-devcontainers.png)
289+
290+
#### Components
291+
292+
The deployment model includes:
293+
294+
- _Workspace_ built using Coder template with _envbuilder_ enabled to set up the
295+
developer environment accordingly to the dev container spec.
296+
- _Container Registry_ for Docker images used by _envbuilder_, maintained by
297+
Coder platform engineers or developer productivity engineers.
298+
299+
Since this model is strictly focused on workspace nodes, it does not affect the
300+
setup of regional infrastructure. It can be deployed alongside other deployment
301+
models, in multiple regions, or across various cloud platforms.
302+
303+
##### Workload resources
304+
305+
**Workspace**
306+
307+
- Docker and Kubernetes based templates are supported.
308+
- The `docker_container` resource uses `ghcr.io/coder/envbuilder` as the base
309+
image.
310+
311+
_Envbuilder_ checks out the base Docker image from the container registry and
312+
installs selected features as specified in the `devcontainer.json` on top.
313+
Eventually, it starts the container with the developer environment.
314+
315+
##### Workload supporting resources
316+
317+
**Container Registry (optional)**
318+
319+
- Workspace nodes need access to the Container Registry to check out images. To
320+
shorten the provisioning time, it is recommended to deploy registry mirrors in
321+
the same region as the workspace nodes.
188 KB
Loading

docs/changelogs/v2.10.0.md

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
## Changelog
2+
3+
> [!NOTE]
4+
> This is a mainline Coder release. We advise enterprise customers without a staging environment to install our [latest stable release](https://github.com/coder/coder/releases/latest) while we refine this version. Learn more about our [Release Schedule](../install/releases.md).
5+
6+
### BREAKING CHANGES
7+
8+
- Removed `max_ttl` from templates (#12644) (@Emyrk)
9+
> Maximum Workspace Lifetime, or `MAX_TTL`, has been removed from the product in favor of Autostop Requirement. Max Lifetime was designed to automate workspace shutdowns to enable security policy enforcement, enforce routine updates, and reduce idle resource costs.
10+
>
11+
> If you use Maximum Lifetime in your templates, workspaces will no longer stop at the end of this timer. Instead, we advise migrating to Autostop Requirement.
12+
>
13+
> Autostop Requirement shares the benefits of `MAX_TTL`, but also respects user-configured quiet hours to avoid forcing shutdowns while developers are connected.
14+
>
15+
> We only completely deprecate features after a 2-month heads up in the UI.
16+
17+
### Features
18+
19+
- Make agent stats' cardinality configurable (#12535) (@dannykopping)
20+
- Upgrade tailscale fork to set TCP options for performance (#12574) (@spikecurtis)
21+
- Add AWS IAM RDS Database auth driver (#12566) (@f0ssel)
22+
- Support Windows containers in bootstrap script (#12662) (@kylecarbs)
23+
- Add `workspace_id` to `workspace_build` audit logs (#12718) (@sreya)
24+
- Make OAuth2 provider not enterprise-only (#12732) (@code-asher)
25+
- Allow number options with monotonic validation (#12726) (@dannykopping)
26+
- Expose workspace statuses (with details) as a prometheus metric (#12762) (@dannykopping)
27+
- Agent: Support adjusting child process OOM scores (#12655) (@sreya)
28+
> This opt-in configuration protects the Agent process from crashing via OOM. To prevent the agent from being killed in most scenarios, set `CODER_PROC_PRIO_MGMT=1` on your container.
29+
- Expose HTTP debug server over tailnet API (#12582) (@johnstcn)
30+
- Show queue position during workspace builds (#12606) (@dannykopping)
31+
- Unhide support bundle command (#12745) (@johnstcn)
32+
> The Coder support bundle grabs a variety of deployment health information to improve and expedite the debugging experience.
33+
> ![Coder Support Bundle](https://raw.githubusercontent.com/coder/coder/main/docs/changelogs/images/support-bundle.png)
34+
- Add golden tests for errors (#11588) (#12698) (@elasticspoon)
35+
- Enforce confirmation before creating bundle (#12684) (@johnstcn)
36+
- Add enabled experiments to telemetry (#12656) (@dannykopping)
37+
- Export metric indicating each experiment's status (#12657) (@dannykopping)
38+
- Add sftp to insights apps (#12675) (@mafredri)
39+
- Add `template_usage_stats` table and rollup query (#12664) (@mafredri)
40+
- Add `dbrollup` service to rollup insights (#12665) (@mafredri)
41+
- Use `template_usage_stats` in `GetTemplateInsights` query (#12666) (@mafredri)
42+
- Use `template_usage_stats` in `GetTemplateInsightsByInterval` query (#12667) (@mafredri)
43+
- Use `template_usage_stats` in `GetTemplateAppInsights` query (#12669) (@mafredri)
44+
- Use `template_usage_stats` in `GetUserLatencyInsights` query (#12671) (@mafredri)
45+
- Use `template_usage_stats` in `GetUserActivityInsights` query (#12672) (@mafredri)
46+
- Use `template_usage_stats` in `*ByTemplate` insights queries (#12668) (@mafredri)
47+
- Add debug handlers for logs, manifest, and token to agent (#12593) (@johnstcn)
48+
- Add linting to all examples (#12595) (@mafredri)
49+
- Add C++ icon (#12572) (@michaelbrewer)
50+
- Add support for `--mainline` (default) and `--stable` (#12858) (@mafredri)
51+
- Make listening ports scrollable (#12660) (@BrunoQuaresma)
52+
- Fetch agent network info over tailnet (#12577) (@johnstcn)
53+
- Add client magicsock and agent prometheus metrics to support bundle (#12604) (@johnstcn)
54+
55+
### Bug fixes
56+
57+
- Server: Fix data race in TestLabelsAggregation tests (#12578) (@dannykopping)
58+
- Dashboard: Hide actions and notifications from deleted workspaces (#12563) (@aslilac)
59+
- VSCode: Importing api into vscode-coder (#12570) (@code-asher)
60+
- CLI: Clean template destination path for `pull` (#12559) (@dannykopping)
61+
- Agent: Ensure agent token is from latest build in middleware (#12443) (@f0ssel)
62+
- CLI: Handle CLI default organization when none exists in <v2.9.0 coderd (#12594) (@Emyrk)
63+
- Server: Separate signals for passive, active, and forced shutdown (#12358) (@kylecarbs)
64+
- Docs: Correct typo error about minTerraformVersion (#12621) (@garylavayou)
65+
- Docs: Correct troubleshooting links (#12608) (@dannykopping)
66+
- Server: Prevent single replica proxies from staying unhealthy (#12641) (@deansheather)
67+
- Database: Implicit schema in dump (#12646) (@mtojek)
68+
- Server: Disable workspace auto-create if external auth requirements aren't met (#12538) (@aslilac)
69+
- Server: Allow proxy version mismatch (with warning) (#12433) (@deansheather)
70+
- Server: Disable relay if built-in DERP is disabled (#12654) (@coadler)
71+
- Dashboard: Create workspace with optional auth providers (#12729) (@aslilac)
72+
- Always use bash when executing web terminal tests (#12755) (@aslilac)
73+
- Server: Nil ptr dereference when removing a license (#12785) (@coadler)
74+
- Use latest coder/tailscale (@spikecurtis)
75+
- Agent: remove unused token debug handler (#12602) (@johnstcn)
76+
- CLI: Show error/hide help for unsupported subcommands (#10760) (#12624) (@elasticspoon)
77+
- CLI: Port-forward: update workspace last_used_at (#12659) (@johnstcn)
78+
- CLI: Fix newline escape sequence in support blurb (#12749) (@johnstcn)
79+
- Server: Skip logging error for cancelled query in agent report stats (#12730) (@mafredri)
80+
- Server: Add timeout to websocket waitgroup on shutdown (#12754) (@coadler)
81+
- Server: Use insights for DAUs, simplify metricscache (#12775) (@mafredri)
82+
- API: always write agent stats when provided (#12699) (@mafredri)
83+
- Database: Improve data exclusion in `UpsertTemplateUsageStats` (#12764) (@mafredri)
84+
- Database: Improve query performance of `GetTemplateAppInsights` (#12767) (@mafredri)
85+
- Database: Improve performance of `GetTemplateInsightsByInterval` (#12773) (@mafredri)
86+
- Database: Add FK index for `workspace_agent_scripts` (#12791) (@mafredri)
87+
- API: Abort in-progress writes/reads when closing websocket (#12650) (@ammario)
88+
- Update base image in lima/coder.yaml example, remove usage of deprecated LIMA_CIDATA (#12613) (@johnstcn)
89+
- Removed hardcoded public (#12620) (@95gabor)
90+
- API: change test to use bash script instead of binary echo (#12759) (@spikecurtis)
91+
- Dashboard: Display not found page when pagination page is invalid (#12611) (@BrunoQuaresma)
92+
- Dashboard: Fix and improve pending state on template editor UI (#12766) (@BrunoQuaresma)
93+
- Also sanitize agent environment (#12615) (@johnstcn)
94+
- Sanitize manifest for tests (#12711) (@johnstcn)
95+
96+
### Documentation
97+
98+
- Add updated architecture diagrams (#12584) (@ericpaulsen)
99+
- Describe reference architectures (#12609) (@mtojek)
100+
- Use scale testing utility (#12643) (@mtojek)
101+
- Describe Coder's operational readiness (#12723) (@mtojek)
102+
- Add guide for JFrog Xray integration (#12629) (@matifali)
103+
- Document how to run workspace-proxy as a system service (#12810) (@michaelbrewer)
104+
- Describe mutually exclusive create workspace template fields (#12834) (@Emyrk)
105+
- Describe single region and multi-region deployments (#12779) (@mtojek)
106+
- Fix coder-logstream-kube typo in deployment-logs.md (#12845) (@toshikish)
107+
- Remove phone number, we do not offer phone support yet (#12658) (@bpmct)
108+
109+
### Performance improvements
110+
111+
- Optimize `GetWorkspaceAgentAndLatestBuildByAuthToken` query (#12809) (@mafredri)
112+
113+
### Tests
114+
115+
- Apptest was accidently choosing ports in use (#12580) (@Emyrk)
116+
- Ensure `RequireActiveVersion` is actually set when testing with AGPL store (#12843) (@aslilac)
117+
- Add an E2E test for removing a group (#12844) (@aslilac)
118+
- Enable `dbrollup` service for insights tests (#12673) (@mafredri)
119+
- Fix TODO for increased accuracy in insights test (#12727) (@mafredri)
120+
- Fix template name too long in TestPatchTemplateMeta (#12781) (@mafredri)
121+
122+
Compare: [`v2.9.0...v2.10.0`](https://github.com/coder/coder/compare/v2.9.0...v2.10.0)
123+
124+
## Container image
125+
126+
- `docker pull ghcr.io/coder/coder:v2.10.0`
127+
128+
## Install/upgrade
129+
130+
Refer to our docs to [install](https://coder.com/docs/v2/latest/install) or [upgrade](https://coder.com/docs/v2/latest/admin/upgrade) Coder, or use a release asset below.

0 commit comments

Comments
 (0)