LangSmithOCP

LangSmith on OCP — Architecture

POC: Single Node OpenShift on Azure Baremetal Host

Your Laptop
    │
    │  SSH (22) · API (6443) · HTTPS (443) · HTTP (80)
    ▼
┌─────────────────────────────────────────────────────┐
│  Azure VM  (Standard_D16s_v5 · 16 vCPU / 64 GB)   │
│  "Simulated Baremetal Host"                         │
│                                                     │
│  ┌──────────────────────────────────────────────┐  │
│  │  KVM Guest: sno-master                       │  │
│  │  12 vCPU / 48 GB RAM / 400 GB disk           │  │
│  │  IP: 192.168.126.10 (virbr1 NAT bridge)      │  │
│  │                                              │  │
│  │  Single Node OpenShift 4.14                  │  │
│  │  ├── Pass 1 — In-cluster backing services    │  │
│  │  │   ├── Crunchy PGO   → PostgreSQL          │  │
│  │  │   ├── Redis          → in-cluster Redis   │  │
│  │  │   ├── MinIO          → S3-compat storage  │  │
│  │  │   └── cert-manager   → TLS (Let's Encrypt)│  │
│  │  ├── Pass 2 — LangSmith Base Platform        │  │
│  │  │   └── Helm chart (langsmith namespace)    │  │
│  │  └── Pass 3 — LangSmith Deployments          │  │
│  │      └── LangGraph Platform (optional)       │  │
│  └──────────────────────────────────────────────┘  │
│                                                     │
│  firewalld port-forward:                           │
│    :6443 → 192.168.126.10:6443  (API)             │
│    :443  → 192.168.126.10:443   (HTTPS / console) │
│    :80   → 192.168.126.10:80    (HTTP / ACME)     │
└─────────────────────────────────────────────────────┘

DNS: nip.io (zero-config)

The cluster uses nip.io — the public IP is embedded in the domain name, no DNS setup required.

Public IP: 1.2.3.4
Base domain: 1-2-3-4.nip.io

API server:  https://api.sno-langsmith.1-2-3-4.nip.io:6443
OCP console: https://console-openshift-console.apps.sno-langsmith.1-2-3-4.nip.io
LangSmith:   https://langsmith.apps.sno-langsmith.1-2-3-4.nip.io

Module Layout

ocp/infra/
├── azure-host/          Terraform — provisions the Azure "baremetal" host VM
│   ├── main.tf          Resource group, VNet, NSG, NIC, VM, data disk
│   ├── variables.tf
│   ├── outputs.tf       Exposes public IP, SSH command, nip.io URLs
│   └── templates/
│       └── cloud-init.yaml   Formats data disk; all else done manually
│
├── scripts/             Manual step-by-step install scripts (run after SSH)
│   ├── 00-check-prereqs.sh   Verify host readiness
│   ├── 01-setup-kvm.sh       Install KVM, create bridge, configure firewalld
│   ├── 02-install-ocp-tools.sh  Download oc, openshift-install, helm
│   ├── 03-generate-sno-iso.sh   Build agent ISO from install/agent configs
│   ├── 04-deploy-sno.sh      Create KVM guest, boot ISO, wait for install
│   ├── 05-post-install.sh    Verify cluster, print kubeconfig + URLs
│   └── README.md
│
└── langsmith/           (coming soon) Terraform for LangSmith on OCP

Key Differences from AKS / GKE / EKS

ConcernAKS / GKE / EKSOCP
IngressNGINX / Envoy / ALBOpenShift Route or Gateway API
Security contextStandard pod securitySCC (Security Context Constraints)
StorageCloud-native CSIODF / Rook-Ceph or in-cluster MinIO
IdentityWorkload Identity / IRSAOpenShift service account tokens
OperatorsHelm-onlyOLM (Operator Lifecycle Manager)
DNSCloud DNS / external-dnsnip.io (POC) / custom domain (prod)

VM Sizing

VM SizevCPURAMUse case
Standard_D16s_v51664 GBMinimum — SNO + LangSmith (tight)
Standard_D32s_v532128 GBRecommended — comfortable headroom

Data disk: 600 GB Premium LRS (KVM storage pool + ODF).