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
Last active
March 20, 2023 11:32
-
-
Save wgzhao/9c142154a9ae981aba836e74188eba10 to your computer and use it in GitHub Desktop.
diagram collections
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