Migrate Code Queue infra target to G14
This commit is contained in:
@@ -63,8 +63,9 @@ fn read_microservices_env() -> anyhow::Result<Vec<MicroserviceConfig>> {
|
||||
}
|
||||
if service.deployment.mode != "unidesk-direct"
|
||||
&& service.deployment.mode != "k3sctl-managed"
|
||||
&& service.deployment.mode != "internal-sidecar"
|
||||
{
|
||||
bail!("MICROSERVICES_JSON[{index}].deployment.mode must be unidesk-direct or k3sctl-managed");
|
||||
bail!("MICROSERVICES_JSON[{index}].deployment.mode must be unidesk-direct, k3sctl-managed, or internal-sidecar");
|
||||
}
|
||||
service.backend.allowed_methods = service
|
||||
.backend
|
||||
|
||||
@@ -175,7 +175,15 @@ fn json_i64(value: &Value, path: &[&str]) -> Option<i64> {
|
||||
current.as_i64()
|
||||
}
|
||||
|
||||
fn code_queue_route_postgres_check(scheduler_body: &Value) -> Value {
|
||||
fn code_queue_infra_service_names(service: &MicroserviceConfig) -> (String, String) {
|
||||
let provider_slug = service.provider_id.to_ascii_lowercase();
|
||||
(
|
||||
format!("{provider_slug}-provider-egress-proxy"),
|
||||
format!("{provider_slug}-tcp-egress-gateway"),
|
||||
)
|
||||
}
|
||||
|
||||
fn code_queue_route_postgres_check(scheduler_body: &Value, tcp_egress_service: &str) -> Value {
|
||||
let storage = scheduler_body
|
||||
.get("queue")
|
||||
.and_then(|queue| queue.get("storage"))
|
||||
@@ -187,7 +195,7 @@ fn code_queue_route_postgres_check(scheduler_body: &Value) -> Value {
|
||||
let last_error = storage.get("lastError").cloned().unwrap_or(Value::Null);
|
||||
json!({
|
||||
"ok": postgres_ready && last_error.is_null(),
|
||||
"route": "d601-tcp-egress-gateway.unidesk.svc.cluster.local:15432",
|
||||
"route": format!("{tcp_egress_service}.unidesk.svc.cluster.local:15432"),
|
||||
"postgresReady": postgres_ready,
|
||||
"lastError": last_error,
|
||||
"source": "scheduler.health.queue.storage"
|
||||
@@ -1746,17 +1754,18 @@ async fn code_queue_health_response(
|
||||
&& scheduler_body.get("ok").and_then(Value::as_bool) != Some(false);
|
||||
let scheduler_diagnostics =
|
||||
code_queue_adapter_diagnostics(state, service, "code-queue-scheduler").await;
|
||||
let (provider_egress_service, tcp_egress_service) = code_queue_infra_service_names(service);
|
||||
let provider_egress_diagnostics =
|
||||
code_queue_adapter_diagnostics(state, service, "d601-provider-egress-proxy").await;
|
||||
code_queue_adapter_diagnostics(state, service, &provider_egress_service).await;
|
||||
let tcp_egress_diagnostics =
|
||||
code_queue_adapter_diagnostics(state, service, "d601-tcp-egress-gateway").await;
|
||||
code_queue_adapter_diagnostics(state, service, &tcp_egress_service).await;
|
||||
let scheduler_dependency =
|
||||
code_queue_dependency_check("code-queue-scheduler", &scheduler_diagnostics);
|
||||
let provider_egress =
|
||||
code_queue_dependency_check("d601-provider-egress-proxy", &provider_egress_diagnostics);
|
||||
code_queue_dependency_check(&provider_egress_service, &provider_egress_diagnostics);
|
||||
let tcp_egress =
|
||||
code_queue_dependency_check("d601-tcp-egress-gateway", &tcp_egress_diagnostics);
|
||||
let postgres_route = code_queue_route_postgres_check(&scheduler_body);
|
||||
code_queue_dependency_check(&tcp_egress_service, &tcp_egress_diagnostics);
|
||||
let postgres_route = code_queue_route_postgres_check(&scheduler_body, &tcp_egress_service);
|
||||
let stale_reconcile = code_queue_reconcile_check(&scheduler_body);
|
||||
let dependencies_ok = scheduler_dependency
|
||||
.get("ok")
|
||||
@@ -1791,15 +1800,15 @@ async fn code_queue_health_response(
|
||||
"scheduler": { "ok": scheduler_healthy, "status": scheduler_status, "body": scheduler_body, "timedOut": false, "requiredFor": ["running task steer", "running task interrupt", "scheduler claim/runner execution", "dev-container control"] },
|
||||
"checks": {
|
||||
"scheduler": scheduler_dependency,
|
||||
"d601ProviderEgressProxy": provider_egress,
|
||||
"d601TcpEgressGateway": tcp_egress,
|
||||
"providerEgressProxy": provider_egress,
|
||||
"tcpEgressGateway": tcp_egress,
|
||||
"postgresRoute": postgres_route,
|
||||
"staleActiveReconcile": stale_reconcile
|
||||
},
|
||||
"diagnostics": {
|
||||
"scheduler": scheduler_diagnostics,
|
||||
"d601ProviderEgressProxy": provider_egress_diagnostics,
|
||||
"d601TcpEgressGateway": tcp_egress_diagnostics
|
||||
"providerEgressProxy": provider_egress_diagnostics,
|
||||
"tcpEgressGateway": tcp_egress_diagnostics
|
||||
},
|
||||
});
|
||||
if head_only {
|
||||
@@ -1981,17 +1990,18 @@ async fn k3sctl_managed_diagnostics_response(
|
||||
.unwrap_or(Value::Null);
|
||||
let scheduler_diagnostics =
|
||||
code_queue_adapter_diagnostics(state, service, "code-queue-scheduler").await;
|
||||
let (provider_egress_service, tcp_egress_service) = code_queue_infra_service_names(service);
|
||||
let provider_egress_diagnostics =
|
||||
code_queue_adapter_diagnostics(state, service, "d601-provider-egress-proxy").await;
|
||||
code_queue_adapter_diagnostics(state, service, &provider_egress_service).await;
|
||||
let tcp_egress_diagnostics =
|
||||
code_queue_adapter_diagnostics(state, service, "d601-tcp-egress-gateway").await;
|
||||
code_queue_adapter_diagnostics(state, service, &tcp_egress_service).await;
|
||||
let scheduler_dependency =
|
||||
code_queue_dependency_check("code-queue-scheduler", &scheduler_diagnostics);
|
||||
let provider_egress =
|
||||
code_queue_dependency_check("d601-provider-egress-proxy", &provider_egress_diagnostics);
|
||||
code_queue_dependency_check(&provider_egress_service, &provider_egress_diagnostics);
|
||||
let tcp_egress =
|
||||
code_queue_dependency_check("d601-tcp-egress-gateway", &tcp_egress_diagnostics);
|
||||
let postgres_route = code_queue_route_postgres_check(&scheduler_body);
|
||||
code_queue_dependency_check(&tcp_egress_service, &tcp_egress_diagnostics);
|
||||
let postgres_route = code_queue_route_postgres_check(&scheduler_body, &tcp_egress_service);
|
||||
let stale_reconcile = code_queue_reconcile_check(&scheduler_body);
|
||||
code_queue_ok = scheduler_dependency
|
||||
.get("ok")
|
||||
@@ -2015,20 +2025,20 @@ async fn k3sctl_managed_diagnostics_response(
|
||||
.unwrap_or(false);
|
||||
code_queue_checks = json!({
|
||||
"scheduler": scheduler_dependency,
|
||||
"d601ProviderEgressProxy": provider_egress,
|
||||
"d601TcpEgressGateway": tcp_egress,
|
||||
"providerEgressProxy": provider_egress,
|
||||
"tcpEgressGateway": tcp_egress,
|
||||
"postgresRoute": postgres_route,
|
||||
"staleActiveReconcile": stale_reconcile
|
||||
});
|
||||
code_queue_dependencies = json!({
|
||||
"postgresRoute": "d601-tcp-egress-gateway.unidesk.svc.cluster.local:15432",
|
||||
"requiredDeployments": ["d601-tcp-egress-gateway", "d601-provider-egress-proxy", "code-queue"],
|
||||
"requiredEndpoints": ["d601-tcp-egress-gateway", "d601-provider-egress-proxy", "code-queue-scheduler"]
|
||||
"postgresRoute": format!("{tcp_egress_service}.unidesk.svc.cluster.local:15432"),
|
||||
"requiredDeployments": [tcp_egress_service, provider_egress_service, "code-queue".to_string()],
|
||||
"requiredEndpoints": [tcp_egress_service, provider_egress_service, "code-queue-scheduler".to_string()]
|
||||
});
|
||||
code_queue_adapter = json!({
|
||||
"scheduler": scheduler_diagnostics,
|
||||
"d601ProviderEgressProxy": provider_egress_diagnostics,
|
||||
"d601TcpEgressGateway": tcp_egress_diagnostics
|
||||
"providerEgressProxy": provider_egress_diagnostics,
|
||||
"tcpEgressGateway": tcp_egress_diagnostics
|
||||
});
|
||||
}
|
||||
let ok = (200..300).contains(&status2)
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
services:
|
||||
k3sctl-adapter-g14:
|
||||
image: unidesk-k3sctl-adapter:g14
|
||||
build:
|
||||
context: ../../../..
|
||||
dockerfile: src/components/microservices/k3sctl-adapter/Dockerfile
|
||||
args:
|
||||
K3SCTL_ADAPTER_BASE_IMAGE: ${K3SCTL_ADAPTER_BASE_IMAGE:-oven/bun:1-debian}
|
||||
container_name: k3sctl-adapter-g14
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- path: ${K3SCTL_ADAPTER_ENV_FILE:-../../../../.state/k3sctl-adapter-g14.env}
|
||||
required: false
|
||||
ports:
|
||||
- "127.0.0.1:${K3SCTL_ADAPTER_HOST_PORT:-4266}:4266"
|
||||
environment:
|
||||
HOST: "0.0.0.0"
|
||||
PORT: "4266"
|
||||
LOG_FILE: "/var/log/unidesk/k3sctl-adapter-g14.jsonl"
|
||||
K3SCTL_CLUSTER_ID: "${K3SCTL_CLUSTER_ID:-unidesk-k3s-g14}"
|
||||
K3SCTL_NODE_ID: "${K3SCTL_NODE_ID:-G14}"
|
||||
K3SCTL_KUBECTL_ENABLED: "${K3SCTL_KUBECTL_ENABLED:-false}"
|
||||
K3SCTL_KUBE_API_PROXY_ENABLED: "${K3SCTL_KUBE_API_PROXY_ENABLED:-true}"
|
||||
K3SCTL_KUBECONFIG_PATH: "/var/lib/unidesk/k3s/kubeconfig"
|
||||
K3SCTL_KUBE_API_CONNECT_HOST: "${K3SCTL_KUBE_API_CONNECT_HOST:-host.docker.internal}"
|
||||
K3SCTL_KUBE_API_SSH_TUNNEL_ENABLED: "${K3SCTL_KUBE_API_SSH_TUNNEL_ENABLED:-false}"
|
||||
K3SCTL_KUBE_API_SSH_HOST: "${K3SCTL_KUBE_API_SSH_HOST:-host.docker.internal}"
|
||||
K3SCTL_KUBE_API_SSH_USER: "${K3SCTL_KUBE_API_SSH_USER:-root}"
|
||||
K3SCTL_KUBE_API_SSH_KEY: "${K3SCTL_KUBE_API_SSH_KEY:-/run/host-ssh/id_ed25519}"
|
||||
K3SCTL_KUBE_API_LOCAL_HOST: "${K3SCTL_KUBE_API_LOCAL_HOST:-127.0.0.1}"
|
||||
K3SCTL_KUBE_API_LOCAL_PORT: "${K3SCTL_KUBE_API_LOCAL_PORT:-6443}"
|
||||
K3SCTL_KUBE_API_REMOTE_HOST: "${K3SCTL_KUBE_API_REMOTE_HOST:-127.0.0.1}"
|
||||
K3SCTL_KUBE_API_REMOTE_PORT: "${K3SCTL_KUBE_API_REMOTE_PORT:-6443}"
|
||||
K3SCTL_NATIVE_SERVICE_PROXY_ENABLED: "${K3SCTL_NATIVE_SERVICE_PROXY_ENABLED:-true}"
|
||||
K3SCTL_NATIVE_SERVICE_SSH_TUNNEL_ENABLED: "${K3SCTL_NATIVE_SERVICE_SSH_TUNNEL_ENABLED:-true}"
|
||||
K3SCTL_NATIVE_SERVICE_PROBE_TIMEOUT_MS: "${K3SCTL_NATIVE_SERVICE_PROBE_TIMEOUT_MS:-1200}"
|
||||
K3SCTL_NATIVE_SERVICE_FAILURE_COOLDOWN_MS: "${K3SCTL_NATIVE_SERVICE_FAILURE_COOLDOWN_MS:-10000}"
|
||||
K3SCTL_NATIVE_SERVICE_RESOLUTION_TTL_MS: "${K3SCTL_NATIVE_SERVICE_RESOLUTION_TTL_MS:-30000}"
|
||||
K3SCTL_NATIVE_SERVICE_TUNNEL_CONNECT_TIMEOUT_MS: "${K3SCTL_NATIVE_SERVICE_TUNNEL_CONNECT_TIMEOUT_MS:-3000}"
|
||||
K3SCTL_NATIVE_SERVICE_URL_CODE_QUEUE: "${K3SCTL_NATIVE_SERVICE_URL_CODE_QUEUE:-}"
|
||||
K3SCTL_NATIVE_SERVICE_URL_CODE_QUEUE_READ: "${K3SCTL_NATIVE_SERVICE_URL_CODE_QUEUE_READ:-}"
|
||||
K3SCTL_NATIVE_SERVICE_URL_CODE_QUEUE_WRITE: "${K3SCTL_NATIVE_SERVICE_URL_CODE_QUEUE_WRITE:-}"
|
||||
K3SCTL_NATIVE_SERVICE_URL_CODE_QUEUE_SCHEDULER: "${K3SCTL_NATIVE_SERVICE_URL_CODE_QUEUE_SCHEDULER:-}"
|
||||
K3SCTL_MANIFEST_PATHS: "${K3SCTL_MANIFEST_PATHS:-k3s/code-queue.g14.k3s.json}"
|
||||
K3SCTL_SERVICES_JSON: "${K3SCTL_SERVICES_JSON:-[]}"
|
||||
UNIDESK_LOG_RETENTION_BYTES: "${UNIDESK_LOG_RETENTION_BYTES:-512MiB}"
|
||||
volumes:
|
||||
- ${K3SCTL_ADAPTER_LOG_DIR:-../../../../.state/k3sctl-adapter-g14/logs}:/var/log/unidesk
|
||||
- ${K3SCTL_KUBECONFIG_HOST_PATH:-/etc/rancher/k3s/k3s.yaml}:/var/lib/unidesk/k3s/kubeconfig:ro
|
||||
- ${K3SCTL_HOST_SSH_KEY_DIR:-/root/.unidesk/host-ssh}:/run/host-ssh:ro
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
networks:
|
||||
- default
|
||||
- provider-gateway
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -fsS --max-time 2 http://127.0.0.1:4266/health >/dev/null"]
|
||||
interval: 5s
|
||||
timeout: 3s
|
||||
retries: 20
|
||||
|
||||
networks:
|
||||
provider-gateway:
|
||||
external: true
|
||||
name: ${K3SCTL_PROVIDER_GATEWAY_NETWORK:-unidesk-g14_default}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,228 @@
|
||||
[
|
||||
{
|
||||
"apiVersion": "unidesk.ai/k3s/v1",
|
||||
"kind": "ManagedKubernetesService",
|
||||
"metadata": {
|
||||
"name": "code-queue",
|
||||
"namespace": "unidesk"
|
||||
},
|
||||
"spec": {
|
||||
"adapterServiceId": "k3sctl-adapter-g14",
|
||||
"controlPlane": {
|
||||
"type": "kubernetes",
|
||||
"cluster": "unidesk-k3s",
|
||||
"context": "unidesk-k3s"
|
||||
},
|
||||
"route": {
|
||||
"kind": "kubernetes-service",
|
||||
"serviceName": "code-queue-scheduler",
|
||||
"servicePort": 4222,
|
||||
"deploymentName": "code-queue"
|
||||
},
|
||||
"activeInstanceId": "G14",
|
||||
"singleWriter": true,
|
||||
"expectedNodeIds": [
|
||||
"G14"
|
||||
],
|
||||
"instances": [
|
||||
{
|
||||
"id": "G14",
|
||||
"nodeId": "G14",
|
||||
"role": "primary",
|
||||
"baseUrl": "kubernetes://unidesk/services/code-queue-scheduler:4222",
|
||||
"healthPath": "/health",
|
||||
"healthMode": "service-proxy"
|
||||
}
|
||||
],
|
||||
"requireAllInstancesHealthy": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"apiVersion": "unidesk.ai/k3s/v1",
|
||||
"kind": "ManagedKubernetesService",
|
||||
"metadata": {
|
||||
"name": "code-queue-read",
|
||||
"namespace": "unidesk"
|
||||
},
|
||||
"spec": {
|
||||
"adapterServiceId": "k3sctl-adapter-g14",
|
||||
"controlPlane": {
|
||||
"type": "kubernetes",
|
||||
"cluster": "unidesk-k3s",
|
||||
"context": "unidesk-k3s"
|
||||
},
|
||||
"route": {
|
||||
"kind": "kubernetes-service",
|
||||
"serviceName": "code-queue-read",
|
||||
"servicePort": 4222
|
||||
},
|
||||
"activeInstanceId": "G14-read",
|
||||
"singleWriter": false,
|
||||
"expectedNodeIds": [
|
||||
"G14"
|
||||
],
|
||||
"instances": [
|
||||
{
|
||||
"id": "G14-read",
|
||||
"nodeId": "G14",
|
||||
"role": "standby",
|
||||
"baseUrl": "kubernetes://unidesk/services/code-queue-read:4222",
|
||||
"healthPath": "/live",
|
||||
"healthMode": "service-proxy"
|
||||
}
|
||||
],
|
||||
"requireAllInstancesHealthy": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"apiVersion": "unidesk.ai/k3s/v1",
|
||||
"kind": "ManagedKubernetesService",
|
||||
"metadata": {
|
||||
"name": "code-queue-write",
|
||||
"namespace": "unidesk"
|
||||
},
|
||||
"spec": {
|
||||
"adapterServiceId": "k3sctl-adapter-g14",
|
||||
"controlPlane": {
|
||||
"type": "kubernetes",
|
||||
"cluster": "unidesk-k3s",
|
||||
"context": "unidesk-k3s"
|
||||
},
|
||||
"route": {
|
||||
"kind": "kubernetes-service",
|
||||
"serviceName": "code-queue-write",
|
||||
"servicePort": 4222
|
||||
},
|
||||
"activeInstanceId": "G14-write",
|
||||
"singleWriter": true,
|
||||
"expectedNodeIds": [
|
||||
"G14"
|
||||
],
|
||||
"instances": [
|
||||
{
|
||||
"id": "G14-write",
|
||||
"nodeId": "G14",
|
||||
"role": "primary",
|
||||
"baseUrl": "kubernetes://unidesk/services/code-queue-write:4222",
|
||||
"healthPath": "/health",
|
||||
"healthMode": "service-proxy"
|
||||
}
|
||||
],
|
||||
"requireAllInstancesHealthy": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"apiVersion": "unidesk.ai/k3s/v1",
|
||||
"kind": "ManagedKubernetesService",
|
||||
"metadata": {
|
||||
"name": "code-queue-scheduler",
|
||||
"namespace": "unidesk"
|
||||
},
|
||||
"spec": {
|
||||
"adapterServiceId": "k3sctl-adapter-g14",
|
||||
"controlPlane": {
|
||||
"type": "kubernetes",
|
||||
"cluster": "unidesk-k3s",
|
||||
"context": "unidesk-k3s"
|
||||
},
|
||||
"route": {
|
||||
"kind": "kubernetes-service",
|
||||
"serviceName": "code-queue-scheduler",
|
||||
"servicePort": 4222,
|
||||
"deploymentName": "code-queue"
|
||||
},
|
||||
"activeInstanceId": "G14-scheduler",
|
||||
"singleWriter": true,
|
||||
"expectedNodeIds": [
|
||||
"G14"
|
||||
],
|
||||
"instances": [
|
||||
{
|
||||
"id": "G14-scheduler",
|
||||
"nodeId": "G14",
|
||||
"role": "primary",
|
||||
"baseUrl": "kubernetes://unidesk/services/code-queue-scheduler:4222",
|
||||
"healthPath": "/health",
|
||||
"healthMode": "service-proxy"
|
||||
}
|
||||
],
|
||||
"requireAllInstancesHealthy": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"apiVersion": "unidesk.ai/k3s/v1",
|
||||
"kind": "ManagedKubernetesService",
|
||||
"metadata": {
|
||||
"name": "g14-provider-egress-proxy",
|
||||
"namespace": "unidesk"
|
||||
},
|
||||
"spec": {
|
||||
"adapterServiceId": "k3sctl-adapter-g14",
|
||||
"controlPlane": {
|
||||
"type": "kubernetes",
|
||||
"cluster": "unidesk-k3s",
|
||||
"context": "unidesk-k3s"
|
||||
},
|
||||
"route": {
|
||||
"kind": "kubernetes-service",
|
||||
"serviceName": "g14-provider-egress-proxy",
|
||||
"servicePort": 18789,
|
||||
"deploymentName": "g14-provider-egress-proxy"
|
||||
},
|
||||
"activeInstanceId": "G14-provider-egress",
|
||||
"singleWriter": false,
|
||||
"expectedNodeIds": [
|
||||
"G14"
|
||||
],
|
||||
"instances": [
|
||||
{
|
||||
"id": "G14-provider-egress",
|
||||
"nodeId": "G14",
|
||||
"role": "primary",
|
||||
"baseUrl": "kubernetes://unidesk/services/g14-provider-egress-proxy:18789",
|
||||
"healthPath": "/__unidesk/egress-proxy/health",
|
||||
"healthMode": "pod-ready"
|
||||
}
|
||||
],
|
||||
"requireAllInstancesHealthy": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"apiVersion": "unidesk.ai/k3s/v1",
|
||||
"kind": "ManagedKubernetesService",
|
||||
"metadata": {
|
||||
"name": "g14-tcp-egress-gateway",
|
||||
"namespace": "unidesk"
|
||||
},
|
||||
"spec": {
|
||||
"adapterServiceId": "k3sctl-adapter-g14",
|
||||
"controlPlane": {
|
||||
"type": "kubernetes",
|
||||
"cluster": "unidesk-k3s",
|
||||
"context": "unidesk-k3s"
|
||||
},
|
||||
"route": {
|
||||
"kind": "kubernetes-service",
|
||||
"serviceName": "g14-tcp-egress-gateway",
|
||||
"servicePort": 18080,
|
||||
"deploymentName": "g14-tcp-egress-gateway"
|
||||
},
|
||||
"activeInstanceId": "G14-tcp-egress",
|
||||
"singleWriter": false,
|
||||
"expectedNodeIds": [
|
||||
"G14"
|
||||
],
|
||||
"instances": [
|
||||
{
|
||||
"id": "G14-tcp-egress",
|
||||
"nodeId": "G14",
|
||||
"role": "primary",
|
||||
"baseUrl": "kubernetes://unidesk/services/g14-tcp-egress-gateway:18080",
|
||||
"healthPath": "/health",
|
||||
"healthMode": "service-proxy"
|
||||
}
|
||||
],
|
||||
"requireAllInstancesHealthy": false
|
||||
}
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user