Managed Kubernetes: Cloud Shared Responsibility
Decide what a cloud Kubernetes service operates, what your team still owns, and where Ziba's OOM recovery actually lands.
The enterprise problem and today’s slice
Enterprise problem: A managed Kubernetes purchase can remove control-plane toil, but Ziba still fails if the team assumes the provider owns application memory, workload security, capacity policy, data recovery, or customer-facing availability. Whole-course context: The incoming on-premises model assigns every rack-to-pod layer to the organization; today moves selected layers behind a provider service boundary without erasing accountability. Today’s slice: We compare self-managed, managed-control-plane, managed-node, and highly managed modes, then create a responsibility matrix tied to an OOM recovery. End-of-day evidence: A provider-neutral architecture, RACI-style ownership record, mode decision, deployment mapping, and recovery drill identify who acts at every boundary. Still unsolved: AWS- and GCP-specific network, identity, billing, and provisioning details are handled in dedicated days.
The thesis is that “managed Kubernetes” moves responsibilities; it does not remove them. Begin with three boxes—provider platform, shared cluster, customer outcome—then name every interface whose failure can still reach readers.
Customer use cases
Vendor feature lists hide ownership gaps unless each operational action has an accountable party and terminal evidence. These use cases turn a service-mode selection and a live incident escalation into testable customer outcomes.
| Use case ID | Actor | Customer job | Success outcome | Denial or recovery evidence |
|---|---|---|---|---|
| D60-UC-01 | Cloud platform owner | Select the least operationally burdensome mode that still meets Ziba's control and compliance needs | Signed responsibility matrix matches provider contract, cluster mode, workload constraints, and staffing | Mode is rejected when a required host privilege, locality, upgrade control, or evidence path is unavailable |
| D60-UC-02 | On-call application operator | Recover Ziba from an OOM incident across the shared boundary | Team changes owned workload state or escalates provider-owned failure with complete evidence; readers recover | Escalation is denied or redirected with missing diagnostics, while unaffected provider and workload controls remain recorded |
Actor-centred user stories
Shared responsibility becomes useful only when it changes a decision during design or incident response. These stories require a named owner, action, and proof instead of the vague statement that “the cloud handles it.”
| Story ID | Use case IDs | User story | Observable acceptance conditions |
|---|---|---|---|
| D60-US-01 | D60-UC-01 | As a cloud platform owner, I want responsibilities mapped per service mode, so that I can buy reduced toil without surrendering required control | Matrix covers facilities, control plane, nodes, network, identity, workloads, data, observability, upgrades, and incident response; rejected modes cite a concrete constraint |
| D60-US-02 | D60-UC-02 | As an application operator, I want a boundary-aware OOM runbook, so that I act on Ziba's resources and escalate only provider-owned faults | Runbook distinguishes cgroup OOM, node capacity, control-plane availability, and provider infrastructure; replay and ticket IDs provide terminal evidence |
End-to-end product flows
A cloud console click can create a cluster while leaving critical defaults implicit, so the product flow must begin with the customer's required outcome and expose every retained responsibility. The recovery flow likewise separates workload action from provider escalation before either party changes state.
| Flow ID | Use case IDs | Path | Trigger | Numbered steps | Terminal evidence |
|---|---|---|---|---|---|
| D60-FLOW-01 | D60-UC-01 | Happy | Platform owner evaluates a managed Kubernetes service | 1. Record Ziba's availability, security, locality, workload, and evidence requirements. 2. Compare self-managed, managed-control-plane, managed-node, and highly managed modes. 3. Assign provider, customer, and shared actions. 4. Test required configuration and denial paths. 5. Approve one mode and support model. | Decision ID, service/mode, region, responsibility revision, positive and denied tests, actor, timestamp, and contract/document references |
| D60-FLOW-02 | D60-UC-02 | Recovery | Ziba returns errors and one container reports OOMKilled | 1. Capture customer, workload, node, and control-plane signals. 2. Identify the enforcing and ownership boundary. 3. Restore through customer-owned workload action if safe. 4. Escalate only provider-owned degradation with required diagnostics. 5. Replay traffic and reconcile ticket plus incident. | Deployment revision or provider case ID, pod/node identity, expected and observed result, environment, time, immutable incident ID, and unaffected control |
System design derived from the flows
A single “cloud” box conceals which API, machine, and process an operator can actually change. The architecture expands the service boundary while keeping Kubernetes control-plane state, worker execution, and Ziba's code/data distinct.
| Use case ID | Entry point | Responsible services | Authoritative store | Failure evidence |
|---|---|---|---|---|
| D60-UC-01 | Cloud organization policy and managed-cluster API | Cloud IAM, network, managed Kubernetes service, node service or node pools, policy/admission, support entitlement | Cloud resource manager and reviewed responsibility/decision record | Unsupported workload constraint, denied policy test, unavailable region/mode, or unassigned operational action |
| D60-UC-02 | Incident system, Kubernetes API, and provider support API | Ziba observability, controllers, kubelet/runtime where exposed, cloud monitoring, provider control-plane operations and support | Kubernetes desired/status state, telemetry, incident store, provider case system | OOMKilled, insufficient node capacity, unavailable API, missing telemetry, rejected case, or failed customer replay |
Google states that GKE manages the control plane, while customers retain workload code, images, data, IAM/RBAC policy, monitoring, and incident response; Standard mode also leaves more node lifecycle responsibility with the customer (GKE shared responsibility). AWS likewise separates security of the cloud from customer configuration in the cloud and lists EKS data-plane, node OS, and workload choices among customer concerns (Security in Amazon EKS). These vendor examples support a general rule, not a universal matrix: the exact boundary is service- and mode-specific.
Data model and ownership
Responsibility drifts when it lives only in onboarding slides, leaving later operators to infer ownership from permissions. Durable records connect each responsibility to a service mode, evidence path, review date, and escalation route.
Generated-application database: Not created in this slice — Ziba's domain data is unchanged; cloud resource state, Kubernetes state, responsibility decisions, provider cases, and incident evidence provide the durable records required here.
| Record or entity | Store and owner | Primary key | Foreign key or opaque reference | Tenant key | Material constraint | Lifecycle and deletion | Use case IDs |
|---|---|---|---|---|---|---|---|
| ManagedCluster | Cloud provider resource manager, owned jointly by provider service and customer cloud team according to fields | Provider cluster resource ID | Opaque cloud network, account/project, and Kubernetes cluster UID references | Cloud account/project and organization | Region, mode, version policy, endpoint exposure, and ownership revision must be explicit | Created, upgraded, disabled, deleted; provider metadata retained by contract | D60-UC-01, D60-UC-02 |
| ResponsibilityAssignment | Governance repository, owned by platform leadership | Service mode plus responsibility revision plus capability ID | Provider document/contract reference and internal runbook reference | Organization ID | Exactly one accountable customer role and one escalation route per capability; shared work is decomposed into actions | Proposed, tested, approved, periodically reviewed, superseded, retained for audit | D60-UC-01, D60-UC-02 |
| ProviderCase | Provider support system, owned by provider with customer-visible copy | Case ID | Opaque cluster resource, incident, and diagnostic bundle references | Cloud account/project | Contains only approved diagnostics; severity and entitlement meet support policy | Opened, updated, resolved, exported if available, retained by provider policy | D60-UC-02 |
| WorkloadIncident | Customer incident store, owned by operations | Incident ID | Opaque cluster ID, pod UID, revision, telemetry queries, and provider case | Service/team key | Customer and provider actions share one timeline; positive and negative controls are recorded | Opened, mitigated, reviewed, sealed, retained then expired by policy | D60-UC-02 |
The service-mode ladder
“Managed” is not binary, and comparing only product names creates a false dichotomy. Each step moves a different set of operational loops while leaving application outcome and policy choices with the customer.
| Mode | Provider typically operates | Customer still operates | Use when | Avoid when |
|---|---|---|---|---|
| Self-managed on cloud VMs | Physical facilities, hypervisor, base cloud APIs | Control plane, etcd, nodes, upgrades, network integrations, workloads, data | Exact control or portability outweighs toil | Team wants a managed control plane or lacks cluster lifecycle expertise |
| Managed control plane | Control-plane hosts, etcd availability/maintenance, service API | VPC design, nodes or node groups, add-ons, workloads, data, authorization, SLO | Standard Kubernetes API plus node flexibility | Required responsibility remains ambiguous or provider constraints conflict |
| Managed control plane and node groups | Above plus automation around node creation/update/repair | Node-pool policy and rollout timing, workload compatibility, resources, data, SLO | Reduce repetitive fleet operations while retaining shapes/configuration | Workload cannot tolerate provider node lifecycle or needs unsupported host control |
| Highly managed or autopilot mode | Above plus much node sizing, scaling, security configuration, and maintenance | Workload manifests, supported constraints, application/data security, availability design, observability and response | Most workloads fit constraints and reduced toil is the priority | Privileged agents, unusual host access, or exact hardware/network control is mandatory |
GKE currently describes Autopilot as its recommended managed mode for most production workloads and says Google manages nodes, scaling, security configuration, and other preconfigured settings; Standard preserves direct node-infrastructure control (GKE modes). This is a current product claim, not a reason to skip workload validation.
Code versus cloud, cluster, and hardware effects
Infrastructure declarations compose provider APIs and Kubernetes APIs, but they act at different ownership layers. Reviewers should be able to trace each block to the resources, software, and residual customer duty it creates.
module "managed_kubernetes" {
source = "./modules/managed-kubernetes"
region = var.region
private_endpoint = true
node_mode = "managed"
minimum_node_count = 3
}
apiVersion: apps/v1
kind: Deployment
metadata:
name: ziba-blog
spec:
replicas: 3
template:
spec:
containers:
- name: blog
image: registry.example/ziba@sha256:REPLACE_ME
resources:
requests:
memory: 384Mi
limits:
memory: 768Mi
| Code or action | Cloud/provider effect | Kubernetes/software effect | Actual compute/customer effect |
|---|---|---|---|
| Terraform managed-cluster module | Calls provider APIs to create regional service resources, endpoint, and mode-specific compute policy | Provider initializes a Kubernetes control plane and integration controllers | Provider allocates hidden control-plane compute; customer pays/operates according to service terms |
private_endpoint = true | Configures provider network reachability for the cluster API | Changes where Kubernetes clients can connect from | Does not make workloads private automatically; routes, DNS, firewall, and egress remain designed |
minimum_node_count = 3 | Requests mode-specific worker capacity or lower bound | Nodes register and expose allocatable resources when provisioning succeeds | Creates three separate machine budgets, not one pooled RAM heap |
| Ziba Deployment | No control-plane hardware is created | Controllers schedule three desired pod replicas | Processes consume real node CPU/RAM; replicas improve availability only across failures they are spread over |
| Memory request/limit | No cloud VM is resized directly | Scheduler reserves request; runtime applies limit | Kernel accounts physical/VM-backed pages and may kill a process at its boundary |
Key takeaways
Cloud Kubernetes changes the location and operator of infrastructure, but Ziba's manifest, memory behavior, data, replicas, and reader SLO remain customer concerns. The exact responsibility boundary depends on service mode and must be tested rather than inferred from the word “managed.”
- Compare operational loops and evidence, not provider feature counts alone.
- Decompose “shared” work until one party owns each concrete action.
- Route OOM, capacity, network, and control-plane failures to different owners.
Checklist
A managed-service decision is incomplete if a future on-call engineer cannot tell what they can change and what evidence a provider requires. Validate the matrix through both a workload failure and a provider-boundary simulation.
- [ ] Recorded requirements and rejected modes with concrete falsifiers.
- [ ] Assigned owner, action, evidence, and escalation route per layer.
- [ ] Mapped Terraform and Kubernetes code to provider, software, and compute effects.
- [ ] Exercised Ziba's OOM path without assuming provider ownership.
- [ ] Retained customer proof and provider case identifiers in one incident timeline.