Kubernetes Architecture

Published on: September 07, 2025

Tags: #kubernetes


graph TD
    subgraph "Cloud Provider"
        CloudAPI["Cloud Provider API"]
    end

    subgraph "Kubernetes Cluster"
        direction LR
        subgraph "Control Plane"
            direction TB

            subgraph "Manager node (leader)"
                APIServer["API Server"]
                ControllerManager["Controller Manager"]
                Scheduler["Scheduler"]
            end

            subgraph "Manager node (follower)"
                direction TB
                FollowerControllerManager["Controller Manager (replica)"]
                FollowerScheduler["Scheduler (replica)"]
            end

            etcd["etcd"]

            APIServer -- "stores cluster state" --> etcd
            ControllerManager -- "watches" --> APIServer
            Scheduler -- "watches" --> APIServer

            FollowerControllerManager -- "watches" --> APIServer
            FollowerScheduler -- "watches" --> APIServer

        end

        subgraph "Worker Nodes"
            direction TB

            subgraph "Worker node 1"
                Kubelet1["Kubelet"]
                KubeProxy1["Kube-proxy"]

                subgraph "Pod 1"
                    ContainerA["Container A"]
                    ContainerB["Container B"]
                end

                subgraph "Pod 2"
                    ContainerC["Container C"]
                    ContainerD["Container D"]
                end
            end

            subgraph "Worker node 2"
                Kubelet2["Kubelet"]
                KubeProxy2["Kube-proxy"]
            end

            subgraph "Worker node 3"
                Kubelet3["Kubelet"]
                KubeProxy3["Kube-proxy"]
            end

        end

        CloudControlManager["Cloud Control Manager"]

        CloudControlManager -- "interacts with" --> CloudAPI
        CloudControlManager -- "interacts with" --> APIServer

        APIServer -- "manages" --> Kubelet1
        APIServer -- "manages" --> KubeProxy1
        APIServer -- "manages" --> Kubelet2
        APIServer -- "manages" --> KubeProxy2
        APIServer -- "manages" --> Kubelet3
        APIServer -- "manages" --> KubeProxy3
    end

    style CloudAPI fill:#cce5ff,stroke:#333,stroke-width:2px
    style etcd fill:#cce5ff,stroke:#333,stroke-width:2px
    style APIServer fill:#b3d9ff,stroke:#333,stroke-width:2px
    style ControllerManager fill:#b3d9ff,stroke:#333,stroke-width:2px
    style Scheduler fill:#b3d9ff,stroke:#333,stroke-width:2px
    style FollowerControllerManager fill:#d9e6f2,stroke:#333,stroke-width:1px,stroke-dasharray: 5 5
    style FollowerScheduler fill:#d9e6f2,stroke:#333,stroke-width:1px,stroke-dasharray: 5 5
    style Kubelet1 fill:#e6f2ff,stroke:#333,stroke-width:1px
    style KubeProxy1 fill:#e6f2ff,stroke:#333,stroke-width:1px
    style Kubelet2 fill:#e6f2ff,stroke:#333,stroke-width:1px
    style KubeProxy2 fill:#e6f2ff,stroke:#333,stroke-width:1px
    style Kubelet3 fill:#e6f2ff,stroke:#333,stroke-width:1px
    style KubeProxy3 fill:#e6f2ff,stroke:#333,stroke-width:1px
    style ContainerA fill:#ffffff,stroke:#333,stroke-width:1px
    style ContainerB fill:#ffffff,stroke:#333,stroke-width:1px
    style ContainerC fill:#ffffff,stroke:#333,stroke-width:1px
    style ContainerD fill:#ffffff,stroke:#333,stroke-width:1px
    style CloudControlManager fill:#f0f8ff,stroke:#333,stroke-width:2px

Share this post

Share on X  •  Share on LinkedIn  •  Share via Email