From 3886e0b21bf192cb2baab45ff10c3f4527e6312f Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Wed, 30 Oct 2024 18:43:12 +0000 Subject: [PATCH 01/22] speed up templates and workspaces --- docs/images/best-practice/build-timeline.png | 0 .../best-practices/speed-up-templates.md | 107 ++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 docs/images/best-practice/build-timeline.png create mode 100644 docs/tutorials/best-practices/speed-up-templates.md diff --git a/docs/images/best-practice/build-timeline.png b/docs/images/best-practice/build-timeline.png new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/docs/tutorials/best-practices/speed-up-templates.md b/docs/tutorials/best-practices/speed-up-templates.md new file mode 100644 index 0000000000000..e9e8e1b646fb2 --- /dev/null +++ b/docs/tutorials/best-practices/speed-up-templates.md @@ -0,0 +1,107 @@ +# Speed up your Coder templates and workspaces + +October 31, 2024 + +--- + +If it takes your workspace a long time to start, find out why and make some changes to your Coder templates to help speed things up. + +## Monitoring + +You can monitor [Coder logs](../../admin/monitoring/logs.md) through the system-native tools on your deployment platform, or stream logs to tools like Splunk, Datadog, Grafana Loki, and others. + +### Coder Observability Chart + +Use the [Observability Helm chart](https://github.com/coder/observability) for a pre-built set of monitoring integrations. + +With the Observability Helm chart, you can monitor [which specific startup metrics are a part of the Helm chart?] + +To install it with Helm: + +```shell +helm repo add coder-observability https://helm.coder.com/observability +helm upgrade --install coder-observability coder-observability/coder-observability --version 0.1.1 --namespace coder-observability --create-namespace +``` + +### Enable Prometheus metrics for Coder + +Our observability bundle gives you this for free which is nice and has instructions on how to do it with Coder + +[Prometheus.io](https://prometheus.io/docs/introduction/overview/#what-is-prometheus) is included as part of the [observability chart](#coder-observability-chart).It offers a variety of [available metrics](../../admin/integrations/prometheus.md#available-metrics). + +You can [install it separately](https://prometheus.io/docs/prometheus/latest/getting_started/) if you prefer. + +### Workspace build timeline + +Use the **Build timeline** to monitor the time it takes to start specific workspaces. Identify long scripts, resources, and other things you can potentially optimize within the template. + +![Screenshot of a workspace and its build timeline](../../images/best-practice/build-timeline.png) + +Adjust this request to match your Coder access URL and workspace: + +```shell +curl -X GET http://coder-server:8080/api/v2/workspacebuilds/{workspacebuild}/timings \ + -H 'Accept: application/json' \ + -H 'Coder-Session-Token: API_KEY' +``` + +Visit the [API documentation](../../reference/api/builds.md#get-workspace-build-timings-by-id) for more information. + +## Provisioners + +`coder server` defaults to three provisioner daemons. Each provisioner daemon can handle one single job, such as start, stop, or delete at a time and can be resource intensive. When all provisioners are busy, workspaces enter a "pending" state until a provisioner becomes available. + +### Increase provisioner daemons + +Provisioners are queue-based to reduce unpredictable load to the Coder server. However, they can be scaled up to allow more concurrent provisioners. You risk overloading the central Coder server if you use too many local provisioners, so we recommend a maximum of five provisioners. For more than five provisioners, we recommend that you move to [external provisioners](../../admin/provisioners.md). + +If you can’t move to external provisioners, use the `provisioner-daemons` flag to increase the number of provisioner daemons to five: + +```shell +coder server --provisioner-daemons=5 +``` + +Visit the [CLI documentation](../../reference/cli/server.md#--provisioner-daemons) for more information about increasing provisioner daemons and other options. + +### Adjust provisioner CPU/memory + +We recommend that you deploy Coder to its own respective Kubernetes cluster, separate from production applications. Keep in mind that Coder runs development workloads, so the cluster should be deployed as such, without production-level configurations. + +Adjust the CPU and memory values as shown in [Helm provisioner values.yaml](https://github.com/coder/coder/blob/main/helm/provisioner/values.yaml#L134-L141): + +```yaml +… + resources: + {} + # limits: + # cpu: 2000m + # memory: 4096Mi + # requests: + # cpu: 2000m + # memory: 4096Mi +… +``` + +Visit the [validated architecture documentation](../../admin/infrastructure/validated-architectures/index.md#workspace-nodes) for more information. + +## Set up Terraform Provider Caching + +Use `terraform init` to cache providers: + +Pull the templates to your local device: + +```shell +coder templates pull +``` + +Run `terraform init` to initialize the directory: + +```shell +terraform init +``` + +Push the templates back to your Coder deployment: + +```shell +coder templates push +``` From 4a42588bc29f7d2918ca32c9aa1137cff8f52200 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Wed, 30 Oct 2024 15:46:37 -0400 Subject: [PATCH 02/22] update screenshot --- docs/images/best-practice/build-timeline.png | Bin 0 -> 112612 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/best-practice/build-timeline.png b/docs/images/best-practice/build-timeline.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cb1c1191ee7ccca57309218ea2e9ca74990760b4 100644 GIT binary patch literal 112612 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 V$pjQH`Li$&69Y5-VqKSr{{U11y?_7! literal 0 HcmV?d00001 From 3073ab7528667bada5999e81c5acc6d83e092bb5 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Wed, 30 Oct 2024 19:47:34 +0000 Subject: [PATCH 03/22] make fmt --- .../best-practices/speed-up-templates.md | 63 ++++++++++++++----- 1 file changed, 47 insertions(+), 16 deletions(-) diff --git a/docs/tutorials/best-practices/speed-up-templates.md b/docs/tutorials/best-practices/speed-up-templates.md index e9e8e1b646fb2..cca021957685e 100644 --- a/docs/tutorials/best-practices/speed-up-templates.md +++ b/docs/tutorials/best-practices/speed-up-templates.md @@ -4,17 +4,22 @@ October 31, 2024 --- -If it takes your workspace a long time to start, find out why and make some changes to your Coder templates to help speed things up. +If it takes your workspace a long time to start, find out why and make some +changes to your Coder templates to help speed things up. ## Monitoring -You can monitor [Coder logs](../../admin/monitoring/logs.md) through the system-native tools on your deployment platform, or stream logs to tools like Splunk, Datadog, Grafana Loki, and others. +You can monitor [Coder logs](../../admin/monitoring/logs.md) through the +system-native tools on your deployment platform, or stream logs to tools like +Splunk, Datadog, Grafana Loki, and others. ### Coder Observability Chart -Use the [Observability Helm chart](https://github.com/coder/observability) for a pre-built set of monitoring integrations. +Use the [Observability Helm chart](https://github.com/coder/observability) for a +pre-built set of monitoring integrations. -With the Observability Helm chart, you can monitor [which specific startup metrics are a part of the Helm chart?] +With the Observability Helm chart, you can monitor [which specific startup +metrics are a part of the Helm chart?] To install it with Helm: @@ -25,15 +30,23 @@ helm upgrade --install coder-observability coder-observability/coder-observabili ### Enable Prometheus metrics for Coder -Our observability bundle gives you this for free which is nice and has instructions on how to do it with Coder +Our observability bundle gives you this for free which is nice and has +instructions on how to do it with Coder -[Prometheus.io](https://prometheus.io/docs/introduction/overview/#what-is-prometheus) is included as part of the [observability chart](#coder-observability-chart).It offers a variety of [available metrics](../../admin/integrations/prometheus.md#available-metrics). +[Prometheus.io](https://prometheus.io/docs/introduction/overview/#what-is-prometheus) +is included as part of the [observability chart](#coder-observability-chart).It +offers a variety of +[available metrics](../../admin/integrations/prometheus.md#available-metrics). -You can [install it separately](https://prometheus.io/docs/prometheus/latest/getting_started/) if you prefer. +You can +[install it separately](https://prometheus.io/docs/prometheus/latest/getting_started/) +if you prefer. ### Workspace build timeline -Use the **Build timeline** to monitor the time it takes to start specific workspaces. Identify long scripts, resources, and other things you can potentially optimize within the template. +Use the **Build timeline** to monitor the time it takes to start specific +workspaces. Identify long scripts, resources, and other things you can +potentially optimize within the template. ![Screenshot of a workspace and its build timeline](../../images/best-practice/build-timeline.png) @@ -45,29 +58,45 @@ curl -X GET http://coder-server:8080/api/v2/workspacebuilds/{workspacebuild}/tim -H 'Coder-Session-Token: API_KEY' ``` -Visit the [API documentation](../../reference/api/builds.md#get-workspace-build-timings-by-id) for more information. +Visit the +[API documentation](../../reference/api/builds.md#get-workspace-build-timings-by-id) +for more information. ## Provisioners -`coder server` defaults to three provisioner daemons. Each provisioner daemon can handle one single job, such as start, stop, or delete at a time and can be resource intensive. When all provisioners are busy, workspaces enter a "pending" state until a provisioner becomes available. +`coder server` defaults to three provisioner daemons. Each provisioner daemon +can handle one single job, such as start, stop, or delete at a time and can be +resource intensive. When all provisioners are busy, workspaces enter a "pending" +state until a provisioner becomes available. ### Increase provisioner daemons -Provisioners are queue-based to reduce unpredictable load to the Coder server. However, they can be scaled up to allow more concurrent provisioners. You risk overloading the central Coder server if you use too many local provisioners, so we recommend a maximum of five provisioners. For more than five provisioners, we recommend that you move to [external provisioners](../../admin/provisioners.md). +Provisioners are queue-based to reduce unpredictable load to the Coder server. +However, they can be scaled up to allow more concurrent provisioners. You risk +overloading the central Coder server if you use too many local provisioners, so +we recommend a maximum of five provisioners. For more than five provisioners, we +recommend that you move to [external provisioners](../../admin/provisioners.md). -If you can’t move to external provisioners, use the `provisioner-daemons` flag to increase the number of provisioner daemons to five: +If you can’t move to external provisioners, use the `provisioner-daemons` flag +to increase the number of provisioner daemons to five: ```shell coder server --provisioner-daemons=5 ``` -Visit the [CLI documentation](../../reference/cli/server.md#--provisioner-daemons) for more information about increasing provisioner daemons and other options. +Visit the +[CLI documentation](../../reference/cli/server.md#--provisioner-daemons) for +more information about increasing provisioner daemons and other options. ### Adjust provisioner CPU/memory -We recommend that you deploy Coder to its own respective Kubernetes cluster, separate from production applications. Keep in mind that Coder runs development workloads, so the cluster should be deployed as such, without production-level configurations. +We recommend that you deploy Coder to its own respective Kubernetes cluster, +separate from production applications. Keep in mind that Coder runs development +workloads, so the cluster should be deployed as such, without production-level +configurations. -Adjust the CPU and memory values as shown in [Helm provisioner values.yaml](https://github.com/coder/coder/blob/main/helm/provisioner/values.yaml#L134-L141): +Adjust the CPU and memory values as shown in +[Helm provisioner values.yaml](https://github.com/coder/coder/blob/main/helm/provisioner/values.yaml#L134-L141): ```yaml … @@ -82,7 +111,9 @@ Adjust the CPU and memory values as shown in [Helm provisioner values.yaml](http … ``` -Visit the [validated architecture documentation](../../admin/infrastructure/validated-architectures/index.md#workspace-nodes) for more information. +Visit the +[validated architecture documentation](../../admin/infrastructure/validated-architectures/index.md#workspace-nodes) +for more information. ## Set up Terraform Provider Caching From 30417eb87280261fafa345f4b0aae4084436c486 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Wed, 30 Oct 2024 20:38:37 +0000 Subject: [PATCH 04/22] add speed up to manifest --- docs/manifest.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/manifest.json b/docs/manifest.json index 05f4d5d3a7680..5bd01bbb752bf 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -723,6 +723,16 @@ "title": "FAQs", "description": "Miscellaneous FAQs from our community", "path": "./tutorials/faqs.md" + }, + { + "title": "Best practices", + "description": "Guides to help you make the most of your Coder experience", + "children": [ + { + "title": "Speed up your Coder templates and workspaces", + "path": "./tutorials/best-practices/speed-up-templates.md" + } + ] } ] }, From 2df6c0bdd2b3c195fde7eca651dd3d27de5fc80c Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Wed, 30 Oct 2024 20:56:35 +0000 Subject: [PATCH 05/22] add index to best practices --- docs/manifest.json | 1 + docs/tutorials/best-practices/index.md | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 docs/tutorials/best-practices/index.md diff --git a/docs/manifest.json b/docs/manifest.json index 5bd01bbb752bf..4422f612ea403 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -727,6 +727,7 @@ { "title": "Best practices", "description": "Guides to help you make the most of your Coder experience", + "path": "./tutorials/best-practices/index.md", "children": [ { "title": "Speed up your Coder templates and workspaces", diff --git a/docs/tutorials/best-practices/index.md b/docs/tutorials/best-practices/index.md new file mode 100644 index 0000000000000..d8fc04dbb2c15 --- /dev/null +++ b/docs/tutorials/best-practices/index.md @@ -0,0 +1,3 @@ +# Best practices + + From 00d394b6820dcb60eb3cd59b5eab0e8464b63530 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Wed, 30 Oct 2024 21:08:36 +0000 Subject: [PATCH 06/22] description to manifest --- docs/manifest.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/manifest.json b/docs/manifest.json index 4422f612ea403..10f0cda33f1e9 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -730,7 +730,8 @@ "path": "./tutorials/best-practices/index.md", "children": [ { - "title": "Speed up your Coder templates and workspaces", + "title": "Speed up your workspaces", + "description": "Speed up your Coder templates and workspaces", "path": "./tutorials/best-practices/speed-up-templates.md" } ] From 913c6caf7f0ddf63354a09e41ca6ce4305eaf2f0 Mon Sep 17 00:00:00 2001 From: Edward Angert Date: Thu, 31 Oct 2024 09:31:38 -0400 Subject: [PATCH 07/22] Update docs/tutorials/best-practices/speed-up-templates.md Co-authored-by: Muhammad Atif Ali --- docs/tutorials/best-practices/speed-up-templates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/best-practices/speed-up-templates.md b/docs/tutorials/best-practices/speed-up-templates.md index cca021957685e..84ac71a48faa2 100644 --- a/docs/tutorials/best-practices/speed-up-templates.md +++ b/docs/tutorials/best-practices/speed-up-templates.md @@ -53,7 +53,7 @@ potentially optimize within the template. Adjust this request to match your Coder access URL and workspace: ```shell -curl -X GET http://coder-server:8080/api/v2/workspacebuilds/{workspacebuild}/timings \ +curl -X GET https://coder.example.com/api/v2/workspacebuilds/{workspacebuild}/timings \ -H 'Accept: application/json' \ -H 'Coder-Session-Token: API_KEY' ``` From 072593164f901039ff49d6f579341c1135f08748 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Thu, 31 Oct 2024 14:52:06 +0000 Subject: [PATCH 08/22] suggestions from code review --- .../best-practices/speed-up-templates.md | 61 ++++++++++--------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/docs/tutorials/best-practices/speed-up-templates.md b/docs/tutorials/best-practices/speed-up-templates.md index 84ac71a48faa2..12d66521bec3b 100644 --- a/docs/tutorials/best-practices/speed-up-templates.md +++ b/docs/tutorials/best-practices/speed-up-templates.md @@ -21,22 +21,19 @@ pre-built set of monitoring integrations. With the Observability Helm chart, you can monitor [which specific startup metrics are a part of the Helm chart?] -To install it with Helm: - -```shell -helm repo add coder-observability https://helm.coder.com/observability -helm upgrade --install coder-observability coder-observability/coder-observability --version 0.1.1 --namespace coder-observability --create-namespace -``` +Visit the +[observability repository](https://github.com/coder/observability?tab=readme-ov-file#installation) +to install it with Helm. ### Enable Prometheus metrics for Coder -Our observability bundle gives you this for free which is nice and has -instructions on how to do it with Coder - [Prometheus.io](https://prometheus.io/docs/introduction/overview/#what-is-prometheus) is included as part of the [observability chart](#coder-observability-chart).It offers a variety of -[available metrics](../../admin/integrations/prometheus.md#available-metrics). +[available metrics](../../admin/integrations/prometheus.md#available-metrics), +such as `coderd_provisionerd_job_timings_seconds` and +`coderd_agentstats_startup_script_seconds`, which measure how long the workspace +takes to provision and how long the startup script takes. You can [install it separately](https://prometheus.io/docs/prometheus/latest/getting_started/) @@ -73,9 +70,10 @@ state until a provisioner becomes available. Provisioners are queue-based to reduce unpredictable load to the Coder server. However, they can be scaled up to allow more concurrent provisioners. You risk -overloading the central Coder server if you use too many local provisioners, so -we recommend a maximum of five provisioners. For more than five provisioners, we -recommend that you move to [external provisioners](../../admin/provisioners.md). +overloading the central Coder server if you use too many built-in provisioners, +so we recommend a maximum of five provisioners. For more than five provisioners, +we recommend that you move to +[external provisioners](../../admin/provisioners.md). If you can’t move to external provisioners, use the `provisioner-daemons` flag to increase the number of provisioner daemons to five: @@ -86,7 +84,8 @@ coder server --provisioner-daemons=5 Visit the [CLI documentation](../../reference/cli/server.md#--provisioner-daemons) for -more information about increasing provisioner daemons and other options. +more information about increasing provisioner daemons, configuring external +provisioners, and other options. ### Adjust provisioner CPU/memory @@ -115,24 +114,30 @@ Visit the [validated architecture documentation](../../admin/infrastructure/validated-architectures/index.md#workspace-nodes) for more information. -## Set up Terraform Provider Caching +## Set up Terraform provider caching -Use `terraform init` to cache providers: +By default, Coder downloads each Terraform provider when a workspace starts. +This can create unnecessary network and disk I/O. -Pull the templates to your local device: +`terraform init` generates a `.teraform.lock.hcl` which instructs Coder +provisioners to cache specific versions of your providers. -```shell -coder templates pull -``` +To use `terraform init` to cache providers: -Run `terraform init` to initialize the directory: +1. Pull the templates to your local device: -```shell -terraform init -``` + ```shell + coder templates pull + ``` -Push the templates back to your Coder deployment: +1. Run `terraform init` to initialize the directory: -```shell -coder templates push -``` + ```shell + terraform init + ``` + +1. Push the templates back to your Coder deployment: + + ```shell + coder templates push + ``` From 209671d1f87cd5c35e8046001ca1bfec3aeff96d Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Thu, 31 Oct 2024 14:52:50 +0000 Subject: [PATCH 09/22] typo fix --- docs/tutorials/best-practices/speed-up-templates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/best-practices/speed-up-templates.md b/docs/tutorials/best-practices/speed-up-templates.md index 12d66521bec3b..bb34b8c7c3258 100644 --- a/docs/tutorials/best-practices/speed-up-templates.md +++ b/docs/tutorials/best-practices/speed-up-templates.md @@ -119,7 +119,7 @@ for more information. By default, Coder downloads each Terraform provider when a workspace starts. This can create unnecessary network and disk I/O. -`terraform init` generates a `.teraform.lock.hcl` which instructs Coder +`terraform init` generates a `.terraform.lock.hcl` which instructs Coder provisioners to cache specific versions of your providers. To use `terraform init` to cache providers: From 5a0ab2a686a7fd97dfe2a96d1bef219f576d7d35 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Thu, 31 Oct 2024 14:57:03 +0000 Subject: [PATCH 10/22] move build timeline up in monitoring --- .../best-practices/speed-up-templates.md | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/docs/tutorials/best-practices/speed-up-templates.md b/docs/tutorials/best-practices/speed-up-templates.md index bb34b8c7c3258..ecca9cca5a75e 100644 --- a/docs/tutorials/best-practices/speed-up-templates.md +++ b/docs/tutorials/best-practices/speed-up-templates.md @@ -13,6 +13,26 @@ You can monitor [Coder logs](../../admin/monitoring/logs.md) through the system-native tools on your deployment platform, or stream logs to tools like Splunk, Datadog, Grafana Loki, and others. +### Workspace build timeline + +Use the **Build timeline** to monitor the time it takes to start specific +workspaces. Identify long scripts, resources, and other things you can +potentially optimize within the template. + +![Screenshot of a workspace and its build timeline](../../images/best-practice/build-timeline.png) + +Adjust this request to match your Coder access URL and workspace: + +```shell +curl -X GET https://coder.example.com/api/v2/workspacebuilds/{workspacebuild}/timings \ + -H 'Accept: application/json' \ + -H 'Coder-Session-Token: API_KEY' +``` + +Visit the +[API documentation](../../reference/api/builds.md#get-workspace-build-timings-by-id) +for more information. + ### Coder Observability Chart Use the [Observability Helm chart](https://github.com/coder/observability) for a @@ -39,26 +59,6 @@ You can [install it separately](https://prometheus.io/docs/prometheus/latest/getting_started/) if you prefer. -### Workspace build timeline - -Use the **Build timeline** to monitor the time it takes to start specific -workspaces. Identify long scripts, resources, and other things you can -potentially optimize within the template. - -![Screenshot of a workspace and its build timeline](../../images/best-practice/build-timeline.png) - -Adjust this request to match your Coder access URL and workspace: - -```shell -curl -X GET https://coder.example.com/api/v2/workspacebuilds/{workspacebuild}/timings \ - -H 'Accept: application/json' \ - -H 'Coder-Session-Token: API_KEY' -``` - -Visit the -[API documentation](../../reference/api/builds.md#get-workspace-build-timings-by-id) -for more information. - ## Provisioners `coder server` defaults to three provisioner daemons. Each provisioner daemon From 4d3b220925171053c17fcdcf3aa70c5ce31c0c39 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Thu, 31 Oct 2024 15:20:22 +0000 Subject: [PATCH 11/22] typo fix --- docs/tutorials/best-practices/speed-up-templates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/best-practices/speed-up-templates.md b/docs/tutorials/best-practices/speed-up-templates.md index ecca9cca5a75e..d20218e77672c 100644 --- a/docs/tutorials/best-practices/speed-up-templates.md +++ b/docs/tutorials/best-practices/speed-up-templates.md @@ -48,7 +48,7 @@ to install it with Helm. ### Enable Prometheus metrics for Coder [Prometheus.io](https://prometheus.io/docs/introduction/overview/#what-is-prometheus) -is included as part of the [observability chart](#coder-observability-chart).It +is included as part of the [observability chart](#coder-observability-chart). It offers a variety of [available metrics](../../admin/integrations/prometheus.md#available-metrics), such as `coderd_provisionerd_job_timings_seconds` and From 348fcbbe62b8e6c75c312ee71b522b210d5f80b8 Mon Sep 17 00:00:00 2001 From: Ben Potter Date: Thu, 31 Oct 2024 12:01:51 -0500 Subject: [PATCH 12/22] Update docs/tutorials/best-practices/speed-up-templates.md Co-authored-by: Edward Angert --- docs/tutorials/best-practices/speed-up-templates.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/tutorials/best-practices/speed-up-templates.md b/docs/tutorials/best-practices/speed-up-templates.md index d20218e77672c..f12075dad89cc 100644 --- a/docs/tutorials/best-practices/speed-up-templates.md +++ b/docs/tutorials/best-practices/speed-up-templates.md @@ -100,13 +100,12 @@ Adjust the CPU and memory values as shown in ```yaml … resources: - {} - # limits: - # cpu: 2000m - # memory: 4096Mi - # requests: - # cpu: 2000m - # memory: 4096Mi + limits: + cpu: "0.25" + memory: "1G" + requests: + cpu: "0.25" + memory: "1G" … ``` From 3ff3499dbfe03451d2f50dd02f0bb2ae08f5b011 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Thu, 31 Oct 2024 18:33:35 +0000 Subject: [PATCH 13/22] add intro sentence to bp category index --- docs/tutorials/best-practices/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/tutorials/best-practices/index.md b/docs/tutorials/best-practices/index.md index d8fc04dbb2c15..ccc12f61e5a92 100644 --- a/docs/tutorials/best-practices/index.md +++ b/docs/tutorials/best-practices/index.md @@ -1,3 +1,5 @@ # Best practices +Guides to help you make the most of your Coder experience. + From 046a07ba47a1cdfa37f6b3a7455d430e826ee4bc Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Thu, 31 Oct 2024 18:53:54 +0000 Subject: [PATCH 14/22] suggestions from code review --- docs/tutorials/best-practices/speed-up-templates.md | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/docs/tutorials/best-practices/speed-up-templates.md b/docs/tutorials/best-practices/speed-up-templates.md index f12075dad89cc..06c883916b879 100644 --- a/docs/tutorials/best-practices/speed-up-templates.md +++ b/docs/tutorials/best-practices/speed-up-templates.md @@ -36,14 +36,9 @@ for more information. ### Coder Observability Chart Use the [Observability Helm chart](https://github.com/coder/observability) for a -pre-built set of monitoring integrations. +pre-built set of pre-built dashboards to monitor your control plane over time. It includes Grafana, Prometheus, Loki, and Alert Manager out-of-the-box, and can be deployed on your existing Grafana instance. -With the Observability Helm chart, you can monitor [which specific startup -metrics are a part of the Helm chart?] - -Visit the -[observability repository](https://github.com/coder/observability?tab=readme-ov-file#installation) -to install it with Helm. +We recommend that all administrators deploying on Kubernetes set the observability bundle up with the control plane from the start. For installation instructions, visit the [observability repository](https://github.com/coder/observability?tab=readme-ov-file#installation), or our [Kubernetes installation guide](../../install/kubernetes.md). ### Enable Prometheus metrics for Coder From 4b4032f1161b173214943624035f486ad1ebae76 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Thu, 31 Oct 2024 19:02:20 +0000 Subject: [PATCH 15/22] make fmt --- docs/tutorials/best-practices/speed-up-templates.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/tutorials/best-practices/speed-up-templates.md b/docs/tutorials/best-practices/speed-up-templates.md index 06c883916b879..d7eefd873b6e7 100644 --- a/docs/tutorials/best-practices/speed-up-templates.md +++ b/docs/tutorials/best-practices/speed-up-templates.md @@ -36,9 +36,15 @@ for more information. ### Coder Observability Chart Use the [Observability Helm chart](https://github.com/coder/observability) for a -pre-built set of pre-built dashboards to monitor your control plane over time. It includes Grafana, Prometheus, Loki, and Alert Manager out-of-the-box, and can be deployed on your existing Grafana instance. - -We recommend that all administrators deploying on Kubernetes set the observability bundle up with the control plane from the start. For installation instructions, visit the [observability repository](https://github.com/coder/observability?tab=readme-ov-file#installation), or our [Kubernetes installation guide](../../install/kubernetes.md). +pre-built set of pre-built dashboards to monitor your control plane over time. +It includes Grafana, Prometheus, Loki, and Alert Manager out-of-the-box, and can +be deployed on your existing Grafana instance. + +We recommend that all administrators deploying on Kubernetes set the +observability bundle up with the control plane from the start. For installation +instructions, visit the +[observability repository](https://github.com/coder/observability?tab=readme-ov-file#installation), +or our [Kubernetes installation guide](../../install/kubernetes.md). ### Enable Prometheus metrics for Coder From 869ac35ddfb3b0482a7531d64b07323f437c8f8b Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Thu, 31 Oct 2024 19:06:04 +0000 Subject: [PATCH 16/22] md tweak to k8s doc --- docs/install/kubernetes.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/install/kubernetes.md b/docs/install/kubernetes.md index 600881ec0289f..5599474fbd430 100644 --- a/docs/install/kubernetes.md +++ b/docs/install/kubernetes.md @@ -1,6 +1,6 @@ # Install Coder on Kubernetes -You can install Coder on Kubernetes using Helm. We run on most Kubernetes +You can install Coder on Kubernetes (K8s) using Helm. We run on most Kubernetes distributions, including [OpenShift](./openshift.md). ## Requirements @@ -121,27 +121,27 @@ coder: We support two release channels: mainline and stable - read the [Releases](./releases.md) page to learn more about which best suits your team. -For the **mainline** Coder release: +- **Mainline** Coder release: - + -```shell -helm install coder coder-v2/coder \ - --namespace coder \ - --values values.yaml \ - --version 2.15.0 -``` + ```shell + helm install coder coder-v2/coder \ + --namespace coder \ + --values values.yaml \ + --version 2.15.0 + ``` - For the **stable** Coder release: +- **Stable** Coder release: - + -```shell -helm install coder coder-v2/coder \ - --namespace coder \ - --values values.yaml \ - --version 2.15.1 -``` + ```shell + helm install coder coder-v2/coder \ + --namespace coder \ + --values values.yaml \ + --version 2.15.1 + ``` You can watch Coder start up by running `kubectl get pods -n coder`. Once Coder has started, the `coder-*` pods should enter the `Running` state. From 858fb1228da8b0b7b71b177f4384d485cbe24fb6 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Thu, 31 Oct 2024 19:06:56 +0000 Subject: [PATCH 17/22] make fmt --- docs/install/kubernetes.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/install/kubernetes.md b/docs/install/kubernetes.md index 5599474fbd430..93abe375c0f64 100644 --- a/docs/install/kubernetes.md +++ b/docs/install/kubernetes.md @@ -125,23 +125,23 @@ We support two release channels: mainline and stable - read the - ```shell - helm install coder coder-v2/coder \ - --namespace coder \ - --values values.yaml \ - --version 2.15.0 - ``` + ```shell + helm install coder coder-v2/coder \ + --namespace coder \ + --values values.yaml \ + --version 2.15.0 + ``` - **Stable** Coder release: - ```shell - helm install coder coder-v2/coder \ - --namespace coder \ - --values values.yaml \ - --version 2.15.1 - ``` + ```shell + helm install coder coder-v2/coder \ + --namespace coder \ + --values values.yaml \ + --version 2.15.1 + ``` You can watch Coder start up by running `kubectl get pods -n coder`. Once Coder has started, the `coder-*` pods should enter the `Running` state. From 6ad8e41776a02974f54f9a9583798d3f77aceea6 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Thu, 31 Oct 2024 19:13:30 +0000 Subject: [PATCH 18/22] md tweak to k8s doc --- docs/install/kubernetes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/install/kubernetes.md b/docs/install/kubernetes.md index 93abe375c0f64..98be1b734cff0 100644 --- a/docs/install/kubernetes.md +++ b/docs/install/kubernetes.md @@ -123,7 +123,7 @@ We support two release channels: mainline and stable - read the - **Mainline** Coder release: - + ```shell helm install coder coder-v2/coder \ @@ -134,7 +134,7 @@ We support two release channels: mainline and stable - read the - **Stable** Coder release: - + ```shell helm install coder coder-v2/coder \ From 62deabc03e5b2494cf9b36720c7813fccb9be380 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Thu, 31 Oct 2024 19:27:44 +0000 Subject: [PATCH 19/22] add observability chart to k8s --- docs/install/kubernetes.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/install/kubernetes.md b/docs/install/kubernetes.md index 98be1b734cff0..eeebbc4d1754b 100644 --- a/docs/install/kubernetes.md +++ b/docs/install/kubernetes.md @@ -167,6 +167,18 @@ helm upgrade coder coder-v2/coder \ -f values.yaml ``` +## Coder Observability Chart + +Use the [Observability Helm chart](https://github.com/coder/observability) for a +pre-built set of pre-built dashboards to monitor your control plane over time. +It includes Grafana, Prometheus, Loki, and Alert Manager out-of-the-box, and can +be deployed on your existing Grafana instance. + +We recommend that all administrators deploying on Kubernetes set the +observability bundle up with the control plane from the start. For installation +instructions, visit the +[observability repository](https://github.com/coder/observability?tab=readme-ov-file#installation). + ## Kubernetes Security Reference Below are common requirements we see from our enterprise customers when From 72dd41963bf5546f0720d3774ae744ff5cbb6b65 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Thu, 31 Oct 2024 19:36:16 +0000 Subject: [PATCH 20/22] typo fix --- docs/install/kubernetes.md | 6 +++--- docs/tutorials/best-practices/speed-up-templates.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/install/kubernetes.md b/docs/install/kubernetes.md index eeebbc4d1754b..94483b7c40b57 100644 --- a/docs/install/kubernetes.md +++ b/docs/install/kubernetes.md @@ -170,9 +170,9 @@ helm upgrade coder coder-v2/coder \ ## Coder Observability Chart Use the [Observability Helm chart](https://github.com/coder/observability) for a -pre-built set of pre-built dashboards to monitor your control plane over time. -It includes Grafana, Prometheus, Loki, and Alert Manager out-of-the-box, and can -be deployed on your existing Grafana instance. +pre-built set of dashboards to monitor your control plane over time. It includes +Grafana, Prometheus, Loki, and Alert Manager out-of-the-box, and can be deployed +on your existing Grafana instance. We recommend that all administrators deploying on Kubernetes set the observability bundle up with the control plane from the start. For installation diff --git a/docs/tutorials/best-practices/speed-up-templates.md b/docs/tutorials/best-practices/speed-up-templates.md index d7eefd873b6e7..c7841ec0fca58 100644 --- a/docs/tutorials/best-practices/speed-up-templates.md +++ b/docs/tutorials/best-practices/speed-up-templates.md @@ -36,9 +36,9 @@ for more information. ### Coder Observability Chart Use the [Observability Helm chart](https://github.com/coder/observability) for a -pre-built set of pre-built dashboards to monitor your control plane over time. -It includes Grafana, Prometheus, Loki, and Alert Manager out-of-the-box, and can -be deployed on your existing Grafana instance. +pre-built set of dashboards to monitor your control plane over time. It includes +Grafana, Prometheus, Loki, and Alert Manager out-of-the-box, and can be deployed +on your existing Grafana instance. We recommend that all administrators deploying on Kubernetes set the observability bundle up with the control plane from the start. For installation From 460ef1ecd08c9c633805ccc3de890c1e7f3a627e Mon Sep 17 00:00:00 2001 From: Edward Angert Date: Thu, 31 Oct 2024 16:22:42 -0400 Subject: [PATCH 21/22] Apply suggestions from code review --- docs/tutorials/best-practices/speed-up-templates.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tutorials/best-practices/speed-up-templates.md b/docs/tutorials/best-practices/speed-up-templates.md index c7841ec0fca58..691fcbeec8428 100644 --- a/docs/tutorials/best-practices/speed-up-templates.md +++ b/docs/tutorials/best-practices/speed-up-templates.md @@ -103,10 +103,10 @@ Adjust the CPU and memory values as shown in resources: limits: cpu: "0.25" - memory: "1G" + memory: "1Gi" requests: cpu: "0.25" - memory: "1G" + memory: "1Gi" … ``` From baf32aecf0ab7ef87c4d374f1c3c259dc5928762 Mon Sep 17 00:00:00 2001 From: Edward Angert Date: Thu, 31 Oct 2024 17:15:23 -0400 Subject: [PATCH 22/22] Update docs/tutorials/best-practices/speed-up-templates.md --- docs/tutorials/best-practices/speed-up-templates.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/tutorials/best-practices/speed-up-templates.md b/docs/tutorials/best-practices/speed-up-templates.md index 691fcbeec8428..ddf08b5e51d75 100644 --- a/docs/tutorials/best-practices/speed-up-templates.md +++ b/docs/tutorials/best-practices/speed-up-templates.md @@ -40,9 +40,9 @@ pre-built set of dashboards to monitor your control plane over time. It includes Grafana, Prometheus, Loki, and Alert Manager out-of-the-box, and can be deployed on your existing Grafana instance. -We recommend that all administrators deploying on Kubernetes set the -observability bundle up with the control plane from the start. For installation -instructions, visit the +We recommend that all administrators deploying on Kubernetes or on an existing +Prometheus or Grafana stack set the observability bundle up with the control +plane from the start. For installation instructions, visit the [observability repository](https://github.com/coder/observability?tab=readme-ov-file#installation), or our [Kubernetes installation guide](../../install/kubernetes.md).