From f36f484940c5118f45677b52e272779002014c43 Mon Sep 17 00:00:00 2001 From: Adrien Beaudouin Date: Sat, 13 May 2023 19:53:04 +0200 Subject: [PATCH] wip kube --- .../10-build-your-kubernetes-cluster/index.md | 72 +++++++++++-------- .../index.md | 8 ++- 2 files changed, 48 insertions(+), 32 deletions(-) diff --git a/content/posts/10-build-your-kubernetes-cluster/index.md b/content/posts/10-build-your-kubernetes-cluster/index.md index 0cc9f2f..f5035cd 100644 --- a/content/posts/10-build-your-kubernetes-cluster/index.md +++ b/content/posts/10-build-your-kubernetes-cluster/index.md @@ -14,12 +14,12 @@ Build your self-hosted Kubernetes cluster and be free from any SaaS solutions by This guide is mainly intended for any developers or some SRE who want a Kubernetes cluster that respect following conditions : -1. On-Premise management (The Hard Way), no managed Kubernetes provider -2. Follow the GitOps principles -3. High availability with cloud Load Balancer and resilient storage and DB -4. Fully monitored -5. Complete CI/CD pipeline -6. Not too much expensive (from $30 to $70 /month depending on your needs) +1. On-Premise management (The Hard Way), no managed Kubernetes provider, will use `K3s` as lightweight solution +2. Follow the **GitOps** principles +3. **High availability** with cloud Load Balancer and resilient storage and DB +4. Fully **monitored** +5. Complete **CI/CD pipeline** +6. Not too much expensive (from €30 to €70 /month depending on your needs) ### You may don't need Kubernetes @@ -43,60 +43,74 @@ Please let me know in below comments if you have other better suggestions ! ## Cluster Architecture 🏘️ -Note as this cluster will be intended for developer user with complete self-hosted CI/CD solution. So for a good cluster architecture starting point, we can imagine the following nodes : +Here are the nodes that we'll need for a complete self-hosted kubernetes cluster : -| server | description | -| --------------- | ----------------------------------------------------------------------------------------------------- | -| `controller-0x` | The control planes nodes, use at least 3 or any greater odd number (when etcd) for HA kube API server | -| `worker-0x` | Workers for your production/staging apps, at least 3 for running Longhorn for resilient storage | -| `data-0x` | Data nodes for any DB / critical statefulset pods | -| `monitor-0x` | Workers dedicated to monitoring | -| `runner-0x` | Workers dedicated to CI/CD pipelines execution | +| server | description | +| --------------- | ------------------------------------------------------------------------------------------------------ | +| `controller-0x` | The control planes nodes, use at least 3 or any greater odd number (when etcd) for HA kube API server | +| `worker-0x` | Workers for your production/staging apps, at least 3 for running Longhorn for resilient storage | +| `data-0x` | Dedicated nodes for any DB / critical statefulset pods, recommended if you won't use managed databases | +| `monitor-0x` | Workers dedicated for monitoring, optional | +| `runner-0x` | Workers dedicated for CI/CD pipelines execution, optional | + +Basic target complete HA architecture for a basic app that needs replicated storage (with Longhorn) and DB (PostgreSQL) : ```mermaid flowchart TD lb((Load Balancer)) subgraph worker-01 traefik-01([Traefik]) - apps-01[Apps] + app-01[App] longhorn-01[/Longhorn/] - traefik-01 --> apps-01 - longhorn-01 --> apps-01 + traefik-01 --> app-01 + longhorn-01 --> app-01 end subgraph worker-02 traefik-02([Traefik]) - apps-02[Apps] + app-02[App] longhorn-02[/Longhorn/] - traefik-02 --> apps-02 - longhorn-02 --> apps-02 + traefik-02 --> app-02 + longhorn-02 --> app-02 end subgraph worker-03 traefik-03([Traefik]) - apps-03[Apps] + app-03[App] longhorn-03[/Longhorn/] - traefik-03 --> apps-03 - longhorn-03 --> apps-03 + traefik-03 --> app-03 + longhorn-03 --> app-03 end lb --> traefik-01 lb --> traefik-02 lb --> traefik-03 -subgraph data-01 +subgraph data [data-0x] + direction LR postgresql[(PostgreSQL Primary)] -end -subgraph data-02 postgresql-replica[(PostgreSQL Replica)] end -apps-01 --> postgresql -apps-02 --> postgresql -apps-03 --> postgresql +app-01 --> data +app-02 --> data +app-03 --> data postgresql --> postgresql-replica ``` ## Cheap solution with Hetzner VPS πŸ–₯️ +| Server Name | Type | Quantity | Unit Price | +| ------------ | -------- | ------------------------------- | ---------- | +| | **LB1** | | 5.39 | +| `manager-0x` | **CX21** | 1 or 3 for HA cluster | 0.5 + 4.85 | +| `worker-0x` | **CX21** | 3 minimum required for Longhorn | 0.5 + 4.85 | +| `data-0x` | **CX21** | 2 for HA database | 0.5 + 4.85 | +| `monitor-0x` | **CX21** | 1 can be enough | 0.5 + 4.85 | +| `runner-0x` | **CX21** | 1 for start | 0.5 + 4.85 | + +(5.39+**10**\*(0.5+4.85))*1.2 = **€70.67** / month + +This is of course for a complete HA cluster, for a minimal working cluster, you can easily get down to **4 nodes**, i.e. **€32.15**. You can even get rid of Load Balancer and simply use basic DNS round-robin. + ## Let’s party πŸŽ‰ Enough talk, [let's go Charles !]({{< ref "/posts/11-build-your-kubernetes-cluster-part-2" >}}). diff --git a/content/posts/11-build-your-kubernetes-cluster-part-2/index.md b/content/posts/11-build-your-kubernetes-cluster-part-2/index.md index 904b67a..18ef533 100644 --- a/content/posts/11-build-your-kubernetes-cluster-part-2/index.md +++ b/content/posts/11-build-your-kubernetes-cluster-part-2/index.md @@ -10,9 +10,11 @@ draft: true Build your self-hosted Kubernetes cluster and be free from any SaaS solutions by following this opinionated guide πŸŽ‰ {{< /lead >}} -1. Terraform -2. K3S usage -3. Hetzner CSI drivers +## Terraform + +## K3s usage + +## Hetzner CSI drivers ## 1st check βœ