The sequence of events that transpired with the kubectl create -f go-demo-2.yml command is as follows.
Kubernetes client (kubectl) sent a request to the API server requesting the creation of a ReplicaSet defined in the go-demo-2.yml file.
The controller is watching the API server for new events, and it detected that there is a new ReplicaSet object.
The controller creates two new pod definitions because we have configured replica value as 2 in go-demo-2.yml file.
Since the scheduler is watching the API server for new events, it detected that there are two unassigned Pods.
The scheduler decided which node to assign the Pod and sent that information to the API server.
Kubelet is also watching the API server. It detected that the two Pods were assigned to the node it is running on.
Kubelet sent requests to Docker requesting the creation of the containers that form the Pod. In our case, the Pod defines two containers based on the mongo and api image. So in total four containers are created.
Finally, Kubelet sent a request to the API server notifying it that the Pods were created successfully.