Homelab: Downsizing NSX Controller

One of the problems of testing NSX in homelab environment is that it is really resource hungry. For example NSX Manager VM deploys with 12 GB RAM. While it is simple to edit its settings and lower memory to about 8 GB without any major impact, VMs that are deployed by NSX automatically (Controllers and Edges) cannot be edited in vSphere Client as the Edit Settings menu option is disabled. Each NSX Controller requires 4 vCPUs and 2.05 GHz CPU reservation. If you go by the book and deploy 3 of them it creates quite a resource impact.

vCPUs can be changed by editing VMs VMX file or by hacking NSX Manager OVF file from which it is deployed from on NSX Manager (located in common/em/components/vdn/controller/ovf/nsx-controller-<version>.vxlan.ovf) if you know how to get to support engineer mode or are not afraid of mounting linux partitions. The CPU reservation cannot be changed this way.

The approach I use is to disable vCenter Server protection of NSX Controller VMs. Find their MoRefIDs (for example with vCenter Managed Object Browser) and then delete respective records from vCenter Server VPX_DISABLED_METHODS table. Afer a restart of vCenter service the VMs are no longer protected and you can simply edit their settings in vSphere Client.

Disclaimer: this is unsupported and should not be done in production environments.

Edit 1/25/1018: Came up with much simpler way of re-enabling disabled method on the NSX Controller VMs. Just use MOB.

11 thoughts on “Homelab: Downsizing NSX Controller

  1. Hi Tom,
    thank you for your article, but I find easier way to downsize NSX controller.
    You just need to directly connect to ESXi host with legacy VIclient and downsize VM, you still can’t decrease shares but that would be enough in most cases.

  2. Hi Tom, I’m at the MOB, but I can’t find the MoRefIDs of the NSX Controller VMs. I want to delete the respective records from the VPX_DISABLED_METHODS table as you say.
    Could you please explain how to find them?
    Thanks.
    Alfonso

  3. I still can’t find how to do this from the Managed Object Browser… Could you tell me if it’s even possible or if you must do it via SQL?

  4. has anybody else tried powering off the controllers one at a time, and modifying the cpu and memory in the vmx file

    numvcpus = “2”
    memSize = “2048”

    I decided to leave sched.cpu.min = “2048” unchanged

    Afterward reload the .vmx file using this command:
    # vim-cmd vmsvc/getallvms
    # vim-cmd vmsvc/reload

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.