From 5fc13cdaef11f2335ad174c136631e8bc44f9e2f Mon Sep 17 00:00:00 2001 From: Adrien Beaudouin Date: Wed, 30 Aug 2023 14:37:40 +0200 Subject: [PATCH] proofreading --- .../posts/10-a-beautiful-gitops-day/index.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/content/posts/10-a-beautiful-gitops-day/index.md b/content/posts/10-a-beautiful-gitops-day/index.md index 3c9ab66..1d5accc 100644 --- a/content/posts/10-a-beautiful-gitops-day/index.md +++ b/content/posts/10-a-beautiful-gitops-day/index.md @@ -19,7 +19,7 @@ This guide is mainly intended for any developers or some SRE who want to build a 3. **High Availability** with cloud Load Balancer, resilient storage and DB with replication, allowing automatic upgrades or maintenance without any downtime for production apps 4. Include complete **monitoring**, **logging** and **tracing** stacks 5. Complete **CI/CD pipeline** -6. Budget target **~60$/month** for complete cluster with all above tools, can be far less if no need for HA, CI or monitoring features +6. Budget target **~$60/month** for complete cluster with all above tools, can be far less if no need for HA, CI or monitoring features ### What you'll learn 📚 @@ -29,7 +29,7 @@ This guide is mainly intended for any developers or some SRE who want to build a * Use [Traefik](https://traefik.io/) as ingress controller, combined to [cert-manager](https://cert-manager.io/) for distributed SSL certificates, and first secure access attempt to our cluster through Hetzner Load Balancer * Continuous Delivery with [Flux](https://fluxcd.io/) and test it with a sample stateless app * Use [Longhorn](https://longhorn.io/) as resilient storage, installed to dedicated storage nodes pool and volumes, include PVC incremental backups to S3 -* Install and configure some critical statefulsets as **PostgreSQL** and **Redis** clusters to specific nodes pool via well-known [Bitnami Helms](https://bitnami.com/stacks/helm) +* Install and configure some critical `StatefulSets` as **PostgreSQL** and **Redis** clusters to specific nodes pool via well-known [Bitnami Helms](https://bitnami.com/stacks/helm) * Test our resilient storage with some No Code apps, as [n8n](https://n8n.io/) and [nocodb](https://nocodb.com/), always managed by Flux * Complete monitoring and logging stack with [Prometheus](https://prometheus.io/), [Grafana](https://grafana.com/), [Loki](https://grafana.com/oss/loki/) * Mount a complete self-hosted CI pipeline with the lightweight [Gitea](https://gitea.io/) + [Concourse CI](https://concourse-ci.org/) combo @@ -50,13 +50,13 @@ I wrote a [complete dedicated 2022 guide here]({{< ref "/posts/02-build-your-own Here are the node pools that we'll need for a complete self-hosted Kubernetes cluster : -| Node pool | Description | -| ------------- | ------------------------------------------------------------------------------------------------------ | -| `controllers` | The control planes nodes, use at least 3 or any greater odd number (when etcd) for HA kube API server | -| `workers` | Workers for your production/staging apps, at least 3 for running Longhorn for resilient storage | -| `storages` | Dedicated nodes for any DB / critical statefulset pods, recommended if you won't use managed databases | -| `monitors` | Workers dedicated for monitoring, optional | -| `runners` | Workers dedicated for CI/CD pipelines execution, optional | +| Node pool | Description | +| ------------- | --------------------------------------------------------------------------------------------------------- | +| `controllers` | The control planes nodes, use at least 3 or any greater odd number (when etcd) for HA kube API server | +| `workers` | Workers for your production/staging apps, at least 3 for running Longhorn for resilient storage | +| `storages` | Dedicated nodes for any DB / critical `StatefulSets` pods, recommended if you won't use managed databases | +| `monitors` | Workers dedicated for monitoring, optional | +| `runners` | Workers dedicated for CI/CD pipelines execution, optional | Here a HA architecture sample with replicated storage (via Longhorn) and DB (PostgreSQL) that we will trying to replicate (controllers, monitoring and runners are excluded for simplicity) : @@ -116,13 +116,13 @@ storage-02 --> db-streaming As a HA Kubernetes cluster can be quickly expensive, a good cloud provider is an essential part. -After testing many providers, as Digital Ocean, Vultr, Linode, Civo , OVH, Scaleway, it seems like **Hetzner** is very well suited **in my opinion** : +After testing many providers, as Digital Ocean, Vultr, Linode, Civo, OVH, Scaleway, it seems like **Hetzner** is very well suited **in my opinion** : -* Very competitive price for middle-range performance (plan only around **$6** for 2CPU/4GB for each node) +* Very competitive price for middle-range performance (plan only around **$6** for 2CPU/4 GB for each node) * No frills, just the basics, VMs, block volumes, load balancer, DNS, firewall, and that's it * Simple nice UI + CLI tool * Official strong [Terraform support](https://registry.terraform.io/providers/hetznercloud/hcloud/latest), so GitOps ready -* In case you use Hetzner DNS, you have cert-manager support via [a third party webhook](https://github.com/vadimkim/cert-manager-webhook-hetzner)) for DSN01 challenge +* In case you use Hetzner DNS, you have cert-manager support via [a third party webhook](https://github.com/vadimkim/cert-manager-webhook-hetzner) for DSN01 challenge Please let me know in below comments if you have other better suggestions ! @@ -130,7 +130,7 @@ Please let me know in below comments if you have other better suggestions ! | Server Name | Type | Quantity | Unit Price | | ------------ | -------- | --------------------- | ---------- | -| | **LB1** | 1 | 5.39 | +| `worker` | **LB1** | 1 | 5.39 | | `manager-0x` | **CX21** | 1 or 3 for HA cluster | 0.5 + 4.85 | | `worker-0x` | **CX21** | 2 or 3 | 0.5 + 4.85 | | `storage-0x` | **CX21** | 2 for HA database | 0.5 + 4.85 | @@ -139,13 +139,13 @@ Please let me know in below comments if you have other better suggestions ! **0.5** if for primary IPs. -We will also need some expendable block volumes for our storage nodes. Let's start with **20GB**, **2\*0.88**. +We will also need some expendable block volumes for our storage nodes. Let's start with **20 GB**, **2\*0.88**. (5.39+**8**\*(0.5+4.85)+**2**\*0.88)\*1.2 = **€59.94** / month We targeted **€60/month** for a minimal working CI/CD cluster, so we are good ! -You can also prefer to take **2 larger** cx31 worker nodes (**8GB** RAM) instead of **3 smaller** ones, which [will optimize resource usage](https://learnk8s.io/kubernetes-node-size), so : +You can also prefer to take **2 larger** cx31 worker nodes (**8 GB** RAM) instead of **3 smaller** ones, which [will optimize resource usage](https://learnk8s.io/kubernetes-node-size), so : (5.39+**7**\*0.5+**5**\*4.85+**2**\*9.2+**2**\*0.88)\*1.2 = **€63.96** / month