Every render manager works in a different manner and facilities’ requirements for their pipeline integration vary, so here is a very brief example describing the basic concept of integrating a render manager.
Tip
You can find more information on this on Nukepedia (look for “Render Manager”).
Here is a simple panel example for collecting information that might be relevant to a render farm submission:
p = nuke.Panel( 'submit to farm' )
p.addSingleLineInput( 'first', nuke.root().firstFrame() )
p.addSingleLineInput( 'last', nuke.root().lastFrame() )
p.addEnumerationPulldown( 'threads', '1 2 4 8' )
p.addSingleLineInput( 'batch size', '10' )
p.addBooleanCheckBox( 'local render', 0 )
p.show()
 
You could then collect the user input in variables and build the required command for the submission. This snippet just generates pseudo code, which could be tweaked to create a valid submission command:
if p.show():
    args = dict( first = p.value('first'),
        last = p.value('last'),
        threads = p.value('threads'),
        batchSize = p.value('batch size'),
        local = p.value('local'))
    application = 'echo'
    #args = [ application, first, last, threads, batchSize, local ]
    cmdString = application + ' -range %(first)s-%(last)s -threads %(threads)s -batch %(batchSize)s' % args
    subprocess.Popen( cmdString.split() )
The above could then be wrapped into a function and placed in NUKE’s Render menu:
def submitToFarm():
    p = nuke.Panel( 'submit to farm' )
    p.addSingleLineInput( 'first', nuke.root().firstFrame() )
    p.addSingleLineInput( 'last', nuke.root().lastFrame() )
    p.addEnumerationPulldown( 'threads', '1 2 4 8' )
    p.addSingleLineInput( 'batch size', '10' )
    p.addBooleanCheckBox( 'local render', 0 )
    if p.show():
        args = dict( first = p.value('first'),
            last = p.value('last'),
            threads = p.value('threads'),
            batchSize = p.value('batch size'),
            local = p.value('local'))
        application = 'echo'
        #args = [ application, first, last, threads, batchSize, local ]
        cmdString = application + ' -range %(first)s-%(last)s -threads %(threads)s -batch %(batchSize)s' % args
        subprocess.Popen( cmdString.split() )
nuke.menu( 'Nuke' ).addCommand( 'Render/Send to Farm', submitToFarm )
 
You can use Python Panels to create more complex panels and non-modal panels that can be docked to the UI and saved with layouts. You could also add custom knobs to the Write nodes to launch a network render. See Adding Controls to Nodes for details on this.