This is a creation in Article, where the information may have evolved or changed.
swarmctlEssentially, by controlClient swarm cluster sending an order. controlClientdefined in api/control.pb.go :
// Client API for Control servicetype ControlClient interface { GetNode(ctx context.Context, in *GetNodeRequest, opts ...grpc.CallOption) (*GetNodeResponse, error) ListNodes(ctx context.Context, in *ListNodesRequest, opts ...grpc.CallOption) (*ListNodesResponse, error) ......}type controlClient struct { cc *grpc.ClientConn}func NewControlClient(cc *grpc.ClientConn) ControlClient { return &controlClient{cc}}func (c *controlClient) GetNode(ctx context.Context, in *GetNodeRequest, opts ...grpc.CallOption) (*GetNodeResponse, error) { out := new(GetNodeResponse) err := grpc.Invoke(ctx, "/docker.swarmkit.v1.Control/GetNode", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil}......