Internals: Kubernetes API¶
omni_kube.api()¶
This is the central function to invoke Kubernetes API calls. It supports both single and batch requests.
Single Request¶
| Parameter | Type | Description |
|---|---|---|
| path | text | Request path (must start with /) |
| server | text | Kubernetes server, defaults to https://kubernetes.default.svc |
| cacert | text | CA certificate |
| clientcert | omni_httpc.client_certificate | Client certificate |
| token | text | Bearer token |
| method | omni_http.http_method | HTTP method, defaults to GET |
| body | jsonb | Request body |
| stream | boolean | Stream mode for multiple JSON objects, defaults to false |
Returns: jsonb - The response body
Batch Request¶
| Parameter | Type | Description |
|---|---|---|
| paths | text[] | Array of request paths |
| server | text | Kubernetes server, defaults to https://kubernetes.default.svc |
| cacert | text | CA certificate |
| clientcert | omni_httpc.client_certificate | Client certificate |
| token | text | Bearer token |
| methods | omni_http.http_method[] | Array of HTTP methods (defaults to GET for all requests) |
| bodies | jsonb[] | Array of request bodies |
| stream | boolean | Stream mode for multiple JSON objects, defaults to false |
Returns: TABLE(response jsonb, status int2) - Response body and HTTP status for each request
Caching & Error Handling¶
- Single requests are cached per statement using request digest
- Single requests with status codes ≥ 400 raise exceptions with Kubernetes error details
- Stream mode converts newline-delimited JSON responses into JSONB arrays
omni_kube.watch()¶
This function enables watching Kubernetes resources for changes using the Kubernetes watch API.
Single Resource Watch¶
| Parameter | Type | Description |
|---|---|---|
| group_version | text | API group version (e.g., v1, apps/v1) |
| resource | text | Resource type (e.g., pods, deployments) |
| resource_version | text | Specific resource version to watch from (optional) |
| timeout | int | Watch timeout in seconds, defaults to 1 |
Returns: TABLE(events jsonb[], status int2) - Events and HTTP status for each watch stream.
Batch Resource Watch¶
| Parameter | Type | Description |
|---|---|---|
| group_versions | text[] | Array of API group versions |
| resources | text[] | Array of resource types |
| resource_versions | text[] | Array of resource versions to watch from (optional) |
| timeout | int | Watch timeout in seconds, defaults to 1 |
Returns: TABLE(events jsonb[], status int2) - Events and HTTP status for each watch stream.
Behavior Notes¶
- Resource Version Handling: When
resource_versionis not specified, the function automatically fetches the current resource version and starts watching from that point - Timeout Behavior: The function will wait for the specified timeout duration before returning. Setting a long timeout will cause the function to block for that entire duration
Example Usage¶
-- Watch pods in the default namespace with 30-second timeout
select omni_kube.watch('v1', 'pods', timeout => 30);
-- Watch multiple resources simultaneously
select *
from omni_kube.watch(
array ['v1', 'apps/v1'],
array ['pods', 'deployments'],
timeout => 60
);
Authentication & Certificates¶
token and cacert are automatically inferred from default pod's
paths (/var/run/secrets/kubernetes.io/serviceaccount/token and /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
respectively) to enable seamless use of API from within pods (through omni_kube.pod_credentials() function). They can
be overridden by corresponding function parameters or omni_kube.token and omni_kube.cacert settings. In addition,
omni_kube.clientcert and omni_kube.client_private_key settings can be used to override
the clientcert parameter.