Skip to content

Commit ba61d9d

Browse files
authored
Added Azure AKS
This PR adds AKS as an implementation option for installing CoderOSS within 10 minutes.
1 parent 1e744e9 commit ba61d9d

File tree

3 files changed

+146
-7
lines changed

3 files changed

+146
-7
lines changed

aks/Readme.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
## Getting Coder Installed
2+
3+
1. Create an [Azure Account](https://portal.azure.com/) and [a service principal](https://docs.spacelift.io/integrations/cloud-providers/azure#create-a-service-principal).
4+
2. Fork this repo and set it up with [spacelift.io](https://spacelift.io/) or equivalent
5+
3. Set ARM_CLIENT_ID, ARM_CLIENT_SECRET, ARM_SUBSCRIPTION_ID, ARM_TENANT_ID using the values when you created the service principal.
6+
4. Make sure to set the directory to aks
7+
4. Run and apply the Terraform (takes 10 minutes).
8+
9+
## Coder setup Instructions
10+
11+
1. Navigate to the IP address of the load balancer (Kubernetes services / coder-k8s-cluster / Services & Ingresses.
12+
2. Create the initial username and password.
13+
3. Go to Templates / Kubernetes / Create Workspace and give the workspace a name.
14+
4. Within three minutes, the workspace should launch.
15+
5. Click the code-server button, and start coding.

aks/main.tf

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
terraform {
2+
required_providers {
3+
azurerm = {
4+
source = "hashicorp/azurerm"
5+
version = "=3.0.0"
6+
}
7+
}
8+
}
9+
10+
variable "coder_version" {
11+
default = "0.12.7"
12+
}
13+
14+
# Configure the Microsoft Azure Provider
15+
provider "azurerm" {
16+
features {}
17+
}
18+
19+
resource "azurerm_resource_group" "coder" {
20+
name = "coder-resources"
21+
location = "Central US"
22+
}
23+
24+
resource "azurerm_kubernetes_cluster" "coder" {
25+
name = "coder-k8s-cluster"
26+
location = azurerm_resource_group.coder.location
27+
resource_group_name = azurerm_resource_group.coder.name
28+
dns_prefix = "coder-aks"
29+
30+
default_node_pool {
31+
name = "default"
32+
node_count = 1
33+
vm_size = "standard_d2ads_v5"
34+
}
35+
36+
identity {
37+
type = "SystemAssigned"
38+
}
39+
}
40+
41+
###############################################################
42+
# K8s configuration
43+
###############################################################
44+
provider "kubernetes" {
45+
host = azurerm_kubernetes_cluster.coder.kube_config.0.host
46+
username = azurerm_kubernetes_cluster.coder.kube_config.0.username
47+
password = azurerm_kubernetes_cluster.coder.kube_config.0.password
48+
client_certificate = base64decode(azurerm_kubernetes_cluster.coder.kube_config.0.client_certificate)
49+
client_key = base64decode(azurerm_kubernetes_cluster.coder.kube_config.0.client_key)
50+
cluster_ca_certificate = base64decode(azurerm_kubernetes_cluster.coder.kube_config.0.cluster_ca_certificate)
51+
}
52+
53+
resource "kubernetes_namespace" "coder_namespace" {
54+
metadata {
55+
name = "coder"
56+
}
57+
}
58+
59+
###############################################################
60+
# Coder configuration
61+
###############################################################
62+
provider "helm" {
63+
kubernetes {
64+
host = azurerm_kubernetes_cluster.coder.kube_config.0.host
65+
client_certificate = base64decode(azurerm_kubernetes_cluster.coder.kube_config.0.client_certificate)
66+
client_key = base64decode(azurerm_kubernetes_cluster.coder.kube_config.0.client_key)
67+
cluster_ca_certificate = base64decode(azurerm_kubernetes_cluster.coder.kube_config.0.cluster_ca_certificate)
68+
}
69+
}
70+
71+
resource "helm_release" "pg_cluster" {
72+
name = "postgresql"
73+
namespace = kubernetes_namespace.coder_namespace.metadata.0.name
74+
75+
repository = "https://charts.bitnami.com/bitnami"
76+
chart = "postgresql"
77+
78+
set {
79+
name = "auth.username"
80+
value = "coder"
81+
}
82+
83+
set {
84+
name = "auth.password"
85+
value = "coder"
86+
}
87+
88+
set {
89+
name = "auth.database"
90+
value = "coder"
91+
}
92+
93+
set {
94+
name = "persistence.size"
95+
value = "10Gi"
96+
}
97+
}
98+
99+
resource "helm_release" "coder" {
100+
name = "coder"
101+
namespace = kubernetes_namespace.coder_namespace.metadata.0.name
102+
103+
chart = "https://github.com/coder/coder/releases/download/v${var.coder_version}/coder_helm_${var.coder_version}.tgz"
104+
105+
values = [
106+
<<EOT
107+
coder:
108+
env:
109+
- name: CODER_PG_CONNECTION_URL
110+
value: "postgres://coder:coder@postgresql.coder.svc.cluster.local:5432/coder?sslmode=disable"
111+
- name: CODER_AUTO_IMPORT_TEMPLATES
112+
value: "kubernetes"
113+
EOT
114+
]
115+
116+
depends_on = [
117+
helm_release.pg_cluster
118+
]
119+
}

gke/main.tf

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ resource "google_container_cluster" "primary" {
4747
}
4848

4949
###############################################################
50-
# Generic K8s configuration
50+
# K8s configuration
5151
###############################################################
5252
data "google_client_config" "default" {
5353
depends_on = [google_container_cluster.primary]
@@ -61,8 +61,14 @@ provider "kubernetes" {
6161
)
6262
}
6363

64+
resource "kubernetes_namespace" "coder_namespace" {
65+
metadata {
66+
name = "coder"
67+
}
68+
}
69+
6470
###############################################################
65-
# Coder configuration
71+
# Helm configuration
6672
###############################################################
6773
provider "helm" {
6874
kubernetes {
@@ -74,11 +80,6 @@ provider "helm" {
7480
}
7581
}
7682

77-
resource "kubernetes_namespace" "coder_namespace" {
78-
metadata {
79-
name = "coder"
80-
}
81-
}
8283

8384
resource "helm_release" "pg_cluster" {
8485
name = "postgresql"
@@ -124,4 +125,8 @@ coder:
124125
value: "kubernetes"
125126
EOT
126127
]
128+
129+
depends_on = [
130+
helm_release.pg_cluster
131+
]
127132
}

0 commit comments

Comments
 (0)