From e2810559efd5d403cca8362112ea3c998de46769 Mon Sep 17 00:00:00 2001 From: Viktor Barzin Date: Sat, 8 Jun 2024 19:22:35 +0000 Subject: [PATCH] add ollama deployment with a ui [ci skip] --- modules/kubernetes/main.tf | 5 + modules/kubernetes/ollama/main.tf | 163 ++++++++++++++++++++++++++ modules/kubernetes/ollama/values.yaml | 18 +++ 3 files changed, 186 insertions(+) create mode 100644 modules/kubernetes/ollama/main.tf create mode 100644 modules/kubernetes/ollama/values.yaml diff --git a/modules/kubernetes/main.tf b/modules/kubernetes/main.tf index 68b360a0..3f0dcb22 100644 --- a/modules/kubernetes/main.tf +++ b/modules/kubernetes/main.tf @@ -455,3 +455,8 @@ module "servarr" { # source = "./dnscat2" # # tls_secret_name = var.tls_secret_name # } + +module "ollama" { + source = "./ollama" + tls_secret_name = var.tls_secret_name +} diff --git a/modules/kubernetes/ollama/main.tf b/modules/kubernetes/ollama/main.tf new file mode 100644 index 00000000..4feb2356 --- /dev/null +++ b/modules/kubernetes/ollama/main.tf @@ -0,0 +1,163 @@ +variable "tls_secret_name" {} + +resource "kubernetes_namespace" "ollama" { + metadata { + name = "ollama" + } +} + +module "tls_secret" { + source = "../setup_tls_secret" + namespace = "ollama" + tls_secret_name = var.tls_secret_name +} +resource "kubernetes_persistent_volume_claim" "ollama-pvc" { + metadata { + name = "ollama-pvc" + namespace = "ollama" + } + + spec { + access_modes = ["ReadWriteOnce"] + resources { + requests = { + storage = "30Gi" + } + } + volume_name = "ollama-pv" + } +} + +resource "kubernetes_persistent_volume" "ollama-pv" { + metadata { + name = "ollama-pv" + } + spec { + capacity = { + "storage" = "30Gi" + } + access_modes = ["ReadWriteOnce"] + persistent_volume_source { + nfs { + path = "/mnt/main/ollama" + server = "10.0.10.15" + } + } + } +} + +resource "helm_release" "ollama" { + namespace = "ollama" + name = "ollama" + + repository = "https://otwld.github.io/ollama-helm/" + chart = "ollama" + + values = [templatefile("${path.module}/values.yaml", {})] +} + +# Web UI +resource "kubernetes_deployment" "ollama-ui" { + metadata { + name = "ollama-ui" + namespace = "ollama" + labels = { + app = "ollama-ui" + } + } + spec { + replicas = 1 + selector { + match_labels = { + app = "ollama-ui" + } + } + template { + metadata { + labels = { + app = "ollama-ui" + } + } + spec { + container { + image = "ghcr.io/open-webui/open-webui:main" + name = "ollama-ui" + env { + name = "OLLAMA_BASE_URL" + value = "http://ollama:11434" + } + + port { + container_port = 8080 + } + volume_mount { + name = "data" + mount_path = "/app/backend/data" + } + } + volume { + name = "data" + nfs { + path = "/mnt/main/ollama" + server = "10.0.10.15" + } + } + } + } + } +} + +resource "kubernetes_service" "ollama-ui" { + metadata { + name = "ollama-ui" + namespace = "ollama" + labels = { + app = "dashy" + } + } + + spec { + selector = { + app = "ollama-ui" + } + port { + name = "http" + port = 80 + target_port = 8080 + } + } +} + + +resource "kubernetes_ingress_v1" "ollama-ui" { + metadata { + name = "ollama" + namespace = "ollama" + annotations = { + "kubernetes.io/ingress.class" = "nginx" + } + } + + spec { + tls { + hosts = ["ollama.viktorbarzin.me"] + secret_name = var.tls_secret_name + } + rule { + host = "ollama.viktorbarzin.me" + http { + path { + path = "/" + backend { + service { + name = "ollama-ui" + port { + number = 8080 + } + } + } + } + } + } + } +} diff --git a/modules/kubernetes/ollama/values.yaml b/modules/kubernetes/ollama/values.yaml new file mode 100644 index 00000000..1a893909 --- /dev/null +++ b/modules/kubernetes/ollama/values.yaml @@ -0,0 +1,18 @@ +ollama: + gpu: + # -- Enable GPU integration + enabled: false + + # -- GPU type: 'nvidia' or 'amd' + type: "nvidia" + + # -- Specify the number of GPU to 1 + number: 1 + + # -- List of models to pull at container startup + models: + - llama3 + +persistentVolume: + enabled: true + existingClaim: "ollama-pvc"