diff --git a/docs/source/distributions/k8s/apply.sh b/docs/source/distributions/k8s/apply.sh index 8e834680b..8a45fc8c6 100755 --- a/docs/source/distributions/k8s/apply.sh +++ b/docs/source/distributions/k8s/apply.sh @@ -13,6 +13,8 @@ export POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-llamastack} export INFERENCE_MODEL=${INFERENCE_MODEL:-meta-llama/Llama-3.2-3B-Instruct} export SAFETY_MODEL=${SAFETY_MODEL:-meta-llama/Llama-Guard-3-1B} +export NEXT_PUBLIC_LLAMA_STACK_BASE_URL=${NEXT_PUBLIC_LLAMA_STACK_BASE_URL:-} + set -euo pipefail set -x @@ -28,3 +30,5 @@ kubectl apply -f stack-configmap.yaml envsubst < ./stack-k8s.yaml.template | kubectl apply -f - envsubst < ./ingress-k8s.yaml.template | kubectl apply -f - + +envsubst < ./ui-k8s.yaml.template | kubectl apply -f - diff --git a/docs/source/distributions/k8s/ingress-k8s.yaml.template b/docs/source/distributions/k8s/ingress-k8s.yaml.template index 1cd95b5e5..9ebe86b69 100644 --- a/docs/source/distributions/k8s/ingress-k8s.yaml.template +++ b/docs/source/distributions/k8s/ingress-k8s.yaml.template @@ -7,6 +7,11 @@ spec: selector: app.kubernetes.io/name: llama-stack ports: - - port: 8321 + - name: llama-stack-api + port: 8321 targetPort: 8321 protocol: TCP + - name: llama-stack-ui + port: 8322 + targetPort: 8322 + protocol: TCP diff --git a/docs/source/distributions/k8s/stack-k8s.yaml.template b/docs/source/distributions/k8s/stack-k8s.yaml.template index 1e51e611b..1cfc63ef5 100644 --- a/docs/source/distributions/k8s/stack-k8s.yaml.template +++ b/docs/source/distributions/k8s/stack-k8s.yaml.template @@ -18,10 +18,12 @@ spec: selector: matchLabels: app.kubernetes.io/name: llama-stack + app.kubernetes.io/component: server template: metadata: labels: app.kubernetes.io/name: llama-stack + app.kubernetes.io/component: server spec: containers: - name: llama-stack @@ -65,16 +67,3 @@ spec: - name: llama-config configMap: name: llama-stack-config ---- -apiVersion: v1 -kind: Service -metadata: - name: llama-stack-service -spec: - selector: - app.kubernetes.io/name: llama-stack - ports: - - protocol: TCP - port: 8321 - targetPort: 8321 - type: ClusterIP diff --git a/docs/source/distributions/k8s/ui-k8s.yaml.template b/docs/source/distributions/k8s/ui-k8s.yaml.template new file mode 100644 index 000000000..a87de4bf2 --- /dev/null +++ b/docs/source/distributions/k8s/ui-k8s.yaml.template @@ -0,0 +1,62 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: llama-stack-ui + labels: + app.kubernetes.io/name: llama-stack + app.kubernetes.io/component: ui +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: llama-stack + app.kubernetes.io/component: ui + template: + metadata: + labels: + app.kubernetes.io/name: llama-stack + app.kubernetes.io/component: ui + spec: + containers: + - name: llama-stack-ui + image: node:18-alpine + command: ["/bin/sh"] + env: + - name: NEXT_PUBLIC_LLAMA_STACK_BASE_URL + value: ${NEXT_PUBLIC_LLAMA_STACK_BASE_URL} + - name: LLAMA_STACK_UI_PORT + value: "8322" + args: + - -c + - | + # Install git (not included in alpine by default) + apk add --no-cache git + + # Clone the repository + echo "Cloning repository..." + git clone https://github.com/meta-llama/llama-stack.git /app + + # Navigate to the UI directory + echo "Navigating to UI directory..." + cd /app/llama_stack/ui + + # Check if package.json exists + if [ ! -f "package.json" ]; then + echo "ERROR: package.json not found in $(pwd)" + ls -la + exit 1 + fi + + # Install dependencies with verbose output + echo "Installing dependencies..." + npm install --verbose + + # Verify next is installed + echo "Checking if next is installed..." + npx next --version || echo "Next.js not found, checking node_modules..." + ls -la node_modules/.bin/ | grep next || echo "No next binary found" + + npm run dev + ports: + - containerPort: 8322 + workingDir: /app