# Network Architecture Diagram ## 🌐 Infrastructure Overview ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Home/Lab Network β”‚ β”‚ 192.168.1.0/24 β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Orange Pi (Gitea) β”‚ β”‚ K3s Cluster (RPi) β”‚ β”‚ 192.168.1.208 β”‚ β”‚ Master: 192.168.1.X β”‚ β”‚ β”‚ β”‚ Workers: 192.168.1.Y/Z β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β”‚ β”‚ Gitea Server β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ :3000 (HTTP) β”‚ β”‚ β”‚ β”‚ K3s API Server β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ :6443 (HTTPS) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Container Reg. β”‚ β”‚ β”‚ β”‚ socktop-webterm β”‚ β”‚ β”‚ β”‚ :3002 (HTTP) │◄─┼──────┼─── Deployment β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β€’ 3 replicas β”‚ β”‚ β”‚ β–² β”‚ β”‚ β”‚ β€’ Port 8082 β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β”‚ β”‚ Actions Runner β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ (act_runner) │──┼──────┼─►│ Ingress β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ webterm.example β”‚ β”‚ β”‚ β”‚ β€’ Docker builder β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β€’ kubectl client β”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ (Optional) β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Rancher (Management) β”‚ β”‚ 192.168.1.X:8443 β”‚ β”‚ β”‚ β”‚ β€’ Visual K8s mgmt β”‚ β”‚ β€’ Monitoring β”‚ β”‚ β€’ YAML editor β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## πŸ”„ CI/CD Flow ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ DEVELOPER WORKFLOW β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ [Developer Workstation] β”‚ β”‚ 1. Update Cargo.toml version β”‚ 2. git commit -m "Bump version" β”‚ 3. git push origin main β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Gitea Server β”‚ β”‚ 192.168.1.208 β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ 4. Webhook triggers Action β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Gitea Actions Runner (Orange Pi) β”‚ β”‚ β”‚ β”‚ ╔═══════════════════════════════════╗ β”‚ β”‚ β•‘ JOB 1: BUILD & PUSH β•‘ β”‚ β”‚ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• β”‚ β”‚ β”‚ β”‚ 5. Clone repository β”‚ β”‚ 6. Extract version from Cargo.toml β”‚ β”‚ 7. docker buildx build --platform arm64 β”‚ β”‚ β–Ό β”‚ β”‚ 8. Push to registry ─────────────────┐ β”‚ β”‚ 192.168.1.208:3002/ β”‚ β”‚ β”‚ jason/socktop-webterm:0.2.2 β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ ╔═══════════════════════════════════╗│ β”‚ β”‚ β•‘ JOB 2: DEPLOY β•‘β”‚ β”‚ β”‚ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ 9. kubectl --kubeconfig=(secret) β”‚ β”‚ β”‚ 10. kubectl set image deployment/... β”‚ β”‚ β”‚ socktop-webterm:0.2.2 β”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ 11. kubectl talks to k3s β”‚ β–Ό β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ K3s Cluster β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ 12. Pull new image β—„β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ from registry β”‚ β”‚ β”‚ β”‚ 13. Rolling update: β”‚ β”‚ Pod 1: old β†’ new βœ“ β”‚ β”‚ Pod 2: old β†’ new βœ“ β”‚ β”‚ Pod 3: old β†’ new βœ“ β”‚ β”‚ β”‚ β”‚ 14. Deployment complete! β”‚ β”‚ All pods running new version β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## πŸ” Authentication Flow ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ SECURITY & AUTHENTICATION β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ╔══════════════════════════════════════════════════════════════╗ β•‘ 1. CONTAINER REGISTRY ACCESS β•‘ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• Actions Runner β”‚ β”‚ docker login 192.168.1.208:3002 β”‚ Username: $REGISTRY_USERNAME (secret) β”‚ Password: $REGISTRY_PASSWORD (secret/token) β–Ό Container Registry β”‚ β”‚ Token validated β–Ό βœ“ Authenticated - can push images ╔══════════════════════════════════════════════════════════════╗ β•‘ 2. KUBERNETES CLUSTER ACCESS β•‘ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• Actions Runner β”‚ β”‚ kubectl --kubeconfig=$KUBECONFIG (secret) β”‚ Contains: Service Account Token β–Ό K3s API Server (:6443) β”‚ β”‚ Validates token β”‚ Checks RBAC permissions β–Ό ServiceAccount: gitea-deployer β”‚ β”‚ Bound to Role: gitea-deployer-role β”‚ Permissions: β”‚ - get/list/watch/update/patch deployments β”‚ - get/list/watch pods β”‚ - get/list/watch replicasets β–Ό βœ“ Authorized - can update deployment ╔══════════════════════════════════════════════════════════════╗ β•‘ 3. IMAGE PULL ACCESS (K3s β†’ Registry) β•‘ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• K3s Node β”‚ β”‚ imagePullPolicy: Always β”‚ image: 192.168.1.208:3002/jason/socktop-webterm:0.2.2 β–Ό Container Registry β”‚ β”‚ Public or registry secret configured β–Ό βœ“ Image pulled successfully ``` ## πŸ“Š Network Ports & Services ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ PORT MAPPING β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ORANGE PI (192.168.1.208) β”œβ”€ :3000 β†’ Gitea Web UI (HTTP/HTTPS) β”œβ”€ :3002 β†’ Gitea Container Registry (HTTP) └─ :22 β†’ SSH/Git access K3S MASTER NODE β”œβ”€ :6443 β†’ Kubernetes API Server (HTTPS) β”œβ”€ :8080 β†’ K3s metrics (optional) └─ :10250 β†’ Kubelet API K3S WORKER NODES β”œβ”€ :10250 β†’ Kubelet API └─ :30000+ β†’ NodePort services (if used) SOCKTOP-WEBTERM PODS β”œβ”€ :8082 β†’ HTTP server (web terminal) └─ :3001 β†’ Socktop agent RANCHER (if installed) └─ :8443 β†’ Rancher UI (HTTPS) INGRESS (External Access) └─ :80/:443 β†’ Routes to webterm service ``` ## πŸ”§ Required Network Access ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ NETWORK CONNECTIVITY MATRIX β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ FROM: Developer Workstation TO: Gitea (192.168.1.208:3000) [βœ“] HTTPS/Git Push TO: Rancher [βœ“] HTTPS (optional) TO: K3s cluster [βœ“] kubectl (optional) FROM: Actions Runner (on Orange Pi) TO: Gitea Server (localhost) [βœ“] HTTP API TO: Container Registry (localhost) [βœ“] HTTP (Docker API) TO: K3s API (192.168.1.X:6443) [βœ“] HTTPS (kubectl) TO: Internet [βœ“] Download dependencies FROM: K3s Cluster TO: Container Registry (192.168.1.208:3002) [βœ“] HTTP (image pull) TO: Internet [βœ“] External services (opt) FROM: End Users TO: Ingress/NodePort [βœ“] HTTP/HTTPS (webterm) ``` ## 🎯 Component Responsibilities ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ COMPONENT ROLES β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ╔════════════════════════════════════════════════════════════════╗ β•‘ GITEA SERVER (Orange Pi) β•‘ ╠════════════════════════════════════════════════════════════════╣ β•‘ β€’ Git repository hosting β•‘ β•‘ β€’ Actions workflow execution coordinator β•‘ β•‘ β€’ Container registry β•‘ β•‘ β€’ Secret storage β•‘ β•‘ β€’ Webhook management β•‘ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• ╔════════════════════════════════════════════════════════════════╗ β•‘ ACTIONS RUNNER (Orange Pi) β•‘ ╠════════════════════════════════════════════════════════════════╣ β•‘ β€’ Execute workflow jobs β•‘ β•‘ β€’ Build Docker images (arm64) β•‘ β•‘ β€’ Push images to registry β•‘ β•‘ β€’ Run kubectl commands β•‘ β•‘ β€’ Report status back to Gitea β•‘ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• ╔════════════════════════════════════════════════════════════════╗ β•‘ K3S CLUSTER (Raspberry Pi nodes) β•‘ ╠════════════════════════════════════════════════════════════════╣ β•‘ β€’ Container orchestration β•‘ β•‘ β€’ Service discovery & load balancing β•‘ β•‘ β€’ Rolling deployments β•‘ β•‘ β€’ Health monitoring β•‘ β•‘ β€’ Persistent storage (if needed) β•‘ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• ╔════════════════════════════════════════════════════════════════╗ β•‘ RANCHER (Optional - separate or on cluster) β•‘ ╠════════════════════════════════════════════════════════════════╣ β•‘ β€’ Visual cluster management β•‘ β•‘ β€’ YAML editor for resources β•‘ β•‘ β€’ Monitoring dashboards β•‘ β•‘ β€’ User-friendly kubectl alternative β•‘ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• ``` ## πŸ”„ Data Flow ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ BUILD PIPELINE β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ SOURCE CODE ARTIFACTS RUNTIME ──────────── Cargo.toml ─┐ Docker Image ─┐ Running Pods src/**/*.rs β”œβ”€build──► :0.2.2 β”œβ”€pull──► [webterm] templates/** β”‚ + :latest β”‚ [webterm] static/** β”‚ β”‚ β”‚ [webterm] Dockerfile β”€β”˜ β”‚ β”‚ β–Ό β”‚ Container Registry β”‚ 192.168.1.208:3002 β”‚ /jason/socktop-webterm β”‚ β”‚ Cargo.toml β”‚ version ─────────extractβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ (by workflow) β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ DEPLOYMENT PIPELINE β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ WORKFLOW K8S API CLUSTER STATE ──────── kubectl set K3s API Server Deployment image ───► validates ────► β€’ spec.image updated β”‚ RBAC β€’ triggers rollout β”‚ β–Ό β–Ό Authentication ReplicaSet β€’ Service Account β€’ New RS created β€’ Token β€’ Old RS scaled down β€’ RBAC check β–Ό Pods β€’ New pods: 0β†’1β†’2β†’3 β€’ Old pods: 3β†’2β†’1β†’0 β€’ Zero downtime ``` ## πŸ” Monitoring Points ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ WHERE TO LOOK β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ πŸ“Š BUILD STATUS β”œβ”€ Gitea β†’ Repository β†’ Actions tab β”œβ”€ Runner logs: journalctl -u act_runner -f └─ Docker build output in workflow logs πŸ“Š DEPLOYMENT STATUS β”œβ”€ kubectl get deployment socktop-webterm -n default β”œβ”€ kubectl rollout status deployment/socktop-webterm β”œβ”€ kubectl get pods -l app=socktop-webterm └─ Rancher β†’ Deployments β†’ socktop-webterm πŸ“Š APPLICATION HEALTH β”œβ”€ kubectl logs -l app=socktop-webterm --tail=100 -f β”œβ”€ HTTP health check: curl http://pod-ip:8082/ β”œβ”€ Ingress: https://webterm.yourdomain.com └─ Rancher β†’ Workloads β†’ Pod logs πŸ“Š REGISTRY β”œβ”€ Gitea β†’ Repository β†’ Packages β”œβ”€ docker images | grep socktop-webterm └─ curl http://192.168.1.208:3002/v2/jason/socktop-webterm/tags/list ``` ## πŸ’Ύ Persistent Data ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ DATA PERSISTENCE β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ GITEA (Orange Pi) /var/lib/gitea/ β”œβ”€ data/ β†’ Git repositories β”œβ”€ data/packages/ β†’ Container images └─ data/actions_logs/ β†’ Workflow logs K3S CLUSTER /var/lib/rancher/k3s/ β”œβ”€ server/manifests/ β†’ Auto-deployed manifests └─ agent/containerd/ β†’ Container images cache CONFIGMAPS & SECRETS β”œβ”€ socktop-webterm-config β†’ Application config └─ socktop-webterm-certs β†’ TLS certificates VOLUMES (if used) └─ PersistentVolumeClaims β†’ App data (not currently used) ``` --- **This diagram shows the complete network topology and data flow for your CI/CD pipeline.**