Skip to content

Instantly share code, notes, and snippets.

@wgzhao
Last active March 20, 2023 11:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wgzhao/9c142154a9ae981aba836e74188eba10 to your computer and use it in GitHub Desktop.
Save wgzhao/9c142154a9ae981aba836e74188eba10 to your computer and use it in GitHub Desktop.
diagram collections
sequenceDiagram
    participant User
    participant ApiServer
    participant Etcd
    participant ControllerManager
    participant ReplicaSetController
    participant Scheduler
    participant Kubelet
    participant Docker

    User->>ApiServer: Create ReplicaSet (POST /apis/apps/v1/namespaces/default/replicasets)
    ApiServer->>Etcd: Persist ReplicaSet object (PUT /registry/apps/replicasets/default/my-replicaset)
    Etcd-->>ApiServer: Acknowledge write (OK)
    ApiServer-->>User: Return ReplicaSet object (201 Created)
    
    loop Watch ReplicaSets
        Etcd-xControllerManager: Notify ReplicaSet change (Event)
        ControllerManager->>ReplicaSetController: Delegate handling ReplicaSet change 
        activate ReplicaSetController
        ReplicaSetController->>ApiServer: List Pods matching ReplicaSet selector (GET /api/v1/pods?labelSelector=app=my-app)
        ApiServer-->>ReplicaSetController: Return Pod list 
        alt Desired replicas > current replicas
            loop Create missing Pods
                ReplicaSetController->>ApiServer: Create Pod (POST /api/v1/namespaces/default/pods)
                ApiServer->>Etcd: Persist Pod object (PUT /registry/pods/default/my-pod-xxx)
                Etcd-->>ApiServer: Acknowledge write (OK)
                ApiServer-->>ReplicaSetController: Return Pod object (201 Created) 
            end    
        else Desired replicas < current replicas   
            loop Delete excess Pods
                ReplicaSetController->>ApiServer: Delete Pod (DELETE /api/v1/namespaces/default/pods/my-pod-xxx)  
                ApiServer->>Etcd: Delete Pod object (DELETE /registry/pods/default/my-pod-xxx)  
                Etcd-->>ApiServer: Acknowledge delete (OK)  
                ApiServer-->>ReplicaSetController: Return status object (200 OK)   
            end    
        end    
        deactivate ReplicaSetController    
    end
    
    loop Watch Pods without Node assignment 
        Etcd-xScheduler: Notify Pod change (Event) 
        Scheduler->>ApiServer:Get Pod details  (GET /api/v1/namespaces/default/pods/my-pod-xxx)  
        ApiServer-->>Scheduler:return pod object  
        Scheduler->>ApiServer: Assign Node to Pod  (PATCH /api/v1/namespaces/default/pods/my-pod-xxx/status)  
        ApiServer->>Etcd:update pod object with node info  (PUT /registry/pods/default/my-pod-xxx)  
        Etcd-->>ApiServer:Acknowledge write  (OK)  
        ApiServer-->>Scheduler:return status object  (200 OK)   
     end

loop Watch Pods with Node assignment 
       Etcd-xKubelet: Notify Pod change  (Event) 
       Kubelet->>ApiServer:Get Pod details   (GET /api/v1/namespaces/default/pods/my-pod-xxx);
       Kubelet->>Docker:create container from pod spec   docker run ...
       Docker-->>Kubelet:return container id   xxxxxxxx 
       Kubelet->>Docker:start container   docker start xxxxxxxx 
       Docker-->>Kubelet:return status   running 
       Kubelet->>ApiServer:update pod status with container id and status   PATCH /api/v1/namespaces/default/pods/my-pod-xxx/status 
       ApiServer->>Etcd:update pod object with container id and status   PUT /registry/pods/default/my-pod-xxx 
       Etcd-->>ApiServer:Acknowledge write   OK 
       ApiServer-->>Kubelet:return status object   200 OK 
end
sequenceDiagram
    participant User
    participant API Server
    participant Etcd
    participant Scheduler
    participant Kubelet
    participant Docker
    
    User->>API Server: create deployment
    activate API Server
    API Server->>Etcd: write
    activate Etcd
    Etcd -->> API Server: OK
    deactivate Etcd
    API Server -->>User: OK
    deactivate API Server
    
    API Server ->> Scheduler: watcher - API Server(new pod)
    activate Scheduler
    Scheduler ->> API Server: bind pod
    activate API Server
    API Server ->> Etcd: write
    activate Etcd
    Etcd -->> API Server: OK
    deactivate Etcd
    API Server -->> Scheduler: OK
    deactivate API Server
    deactivate Scheduler
    
    API Server ->> Kubelet: watcher - API Server(bound pod)
    activate Kubelet
    Kubelet ->> Docker: docker run
    activate Docker
    Docker -->> Kubelet: OK
    deactivate Docker
    Kubelet ->> API Server: update pod status
    activate API Server
    API Server -> Etcd: write
    activate Etcd
    Etcd --> API Server: OK
    deactivate Etcd
    API Server --> Kubelet: OK
    deactivate API Server
    deactivate Kubelet
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment