Thrilled to join the @MyVMUG community at VMUG Connect in Amstedam! I’ll be diving into Minimum 2 Node Homelab Setup and sharing practical insights you can use in your environment. Can’t wait to learn from other members too!


Thrilled to join the @MyVMUG community at VMUG Connect in Amstedam! I’ll be diving into Minimum 2 Node Homelab Setup and sharing practical insights you can use in your environment. Can’t wait to learn from other members too!


I made a little script that does the following:
You can download the script on my github repository: https://github.com/WardVissers/VCF-Public/blob/main/Check%20Installed%20VCF-Powercli%20Version.ps1
$installedVCFPowercli = Get-InstalledModule VCF.PowerCLI -ErrorAction SilentlyContinue
$installedVMwarePowercli = Get-InstalledModule VMware.PowerCLI -ErrorAction SilentlyContinue
$latestVCFPowercli = Find-Module VCF.PowerCLI -ErrorAction SilentlyContinue
$latestVMwarePowercli = Find-Module VMware.PowerCLI -ErrorAction SilentlyContinue
$OldModules = Get-InstalledModule VMware.* -ErrorAction SilentlyContinue
$OldModules += Get-InstalledModule VCF.* -ErrorAction SilentlyContinu | Where-Object {[version]$_.Version -lt $latestVCF.Version}
Function Uninstall-OldPowercliEditons {
$Total = $OldModules.Count
$Index = 0
foreach ($Module in $OldModules) {
$Index++
$Percent = ($Index / $Total) * 100
Write-Progress `
-Activity "Delete old PowerCLI version" `
-Status "Uninstall version $($Module.Version) ($Index from $Total)" `
-PercentComplete $Percent
try {
Uninstall-Module -Name $Module.name -AllVersions -Force # -ErrorAction silentlycontinue -ErrorVariable +err
Write-Host "🗑 Removed: PowerCLI $($Module.Name) with $($Module.Version)"
}
catch {
Write-Error "❌ Error with deleting PowerCLI $($Module.Version): $_"
}
Start-Sleep -Seconds 1
}
}
if (-not ($installedVMwarePowercli -or $installedVCFPowercli -or $OldModules )) {
"❌ VCF.PowerCLI is not installed"
Install-Module VCF.PowerCLI -AllowClobber -Scope CurrentUser # -SkipPublisherCheck
}
elseif ([version]$installedVCFPowercli.Version -eq [version]$latestVCFPowercli.Version) {
"✅ VCF PowerCLI is up-to-date ($($installed.Version))"
}
elseif ($installedVMwarePowercli) {
"⬆ VMware Powercli is installed needed upgrade to VCF Powercli"
Uninstall-OldPowercliEditons
Write-Host "Uninstall is succes vol" -ForegroundColor Yellow
Install-Module VCF.PowerCLI -AllowClobber -Scope CurrentUser # -SkipPublisherCheck
Write-Host "Install VCF Powercli is succes" -ForegroundColor Green
}
else {
"⬆ VCF Powercli Update beschikbaar $($latestVCFPowercli.Version)"
Uninstall-OldPowercliEditons
Write-Host "Uninstall is succes" -ForegroundColor Yellow
Update-Module -Name VCF.PowerCLI -Force
Write-Host "Update is succes vol" -ForegroundColor Green
}
I followed William Lam’s article about MS-A2 VCF 9.0 Lab: Configuring vSphere Kubernetes Service (VKS)
I don’t have much experience with Kubernetes but wanted to try some new things.
The only container that I have running is Home Assistant on Docker.
Got to try to get Kubedoom working. So I did with the following steps.
Maybe in the near future I’ll try to add more games: Retro DOS Games on Kubernetes
Finally having a Kubernetes cluster version 1.32, which was required for running KubeDoom.

Download kubectl


mkdir d:\kubectl
Extract the downloaded ZIP file and place both executables (kubectl.exe and kubectl-vsphere.exe) in a folder such as: d:\kubectl
.\kubectl version –client
mkdir .kube
cd .kube
New-Item config -type file
.\kubectl vsphere login –server=https://31.31.0.7 –insecure-skip-tls-verify

kubectl –kubeconfig=kubernetes-cluster-jzvx-kubeconfig.yaml get pods
![]()
kubectl –kubeconfig=kubernetes-cluster-jzvx-kubeconfig.yaml apply -f kubedoom.yaml

kubectl –kubeconfig=kubernetes-cluster-jzvx-kubeconfig.yaml -n kubedoom get svc

The password to Kubedoom is idbehold
Download VNC Viewer: https://www.realvnc.com/en/connect/download/viewer

This is funny and cool!
ERROR LCMVROPCONFIG20013 while VCF Operations update from 9.0.0 to 9.01



ERROR LCMVROPCONFIG20013
Installed Tree: apt install tree # tree

File Exsist on the Offline Depot
File Remove from the Binary Management 
Download the upgrade file again
Download the file again: sudo ./vcf-download-tool binaries download –depot-download-token-file=/home/token -d /var/www/html –vcf-version=9.0.1 –type UPGRADE –component VROPS
Pre-staged the VROPS update again

Update successfully

After shutting down the VCF 9.0 environment completely, I had 2 strange things.
I followed the shutdown order for the management domain.
Edge servers lost from NIC 2 and NIC 3 the network configuration
Edge Servers did not start, not correctly




I deployed a third edge server. Two new distributed port groups were created.
These are missing for the edge01a and edge01b servers. These should not be deleted/missing after shutdown.

Create a distributed port group with a VLAN trunk

Set NIC 2 and 3 to this network.

Edge Nodes’ Edge Cluster is running fine again 😊


I found this on the Daniel Kruger Blog: https://sdn-warrior.org/posts/vcf9-ms-a2-special/
This is a known issue with VCF 9.0.0: When an edge is created by the Setup Network Connectivity UI, the system-created dvpg consumed by the edge gets deleted when the edge is powered on after 24 hrs. The port group assigned to the NSX Edge uplink has disappeared, making it impossible to use the network through NSX Edge. You can find the release notes here.
Build my lab nested, but not enough resources to do a full upgrade to 9.0.1.
So I build the lab again, but physically. More about that later!
I love testing things; you learn so much!
VCF 9 and 9.0.1 require 10GB nic.
I use for my homelab the MS-A2 with the 2 x 10GbE Intel X710 SFP+ (NIC 1 & 2 from the left). It is silent and fast and have enough power to run VCF 9!

So I bought also the 10GbE SFP+ to Copper Transceiver
But when you connect the MS-A2 to USW Flex 2.5G switch on the switch side is 2.5G.

But on the VMware side is 10GB 😊

No need to do the following: Disable 10GbE NIC Pre-Check in the VCF 9.0 Installer or
Enhancement in VCF 9.0.1 to bypass vSAN ESA HCL & Host Commission 10GbE NIC Check
It working great! No need to buy expensive 10GB switch!


What are my things I would like to test


The VCF Cloud Foundation Installer makes lives a lot easier! More about this coming very soon

The VCF Operations Console is looking good! I used it in the VCF 9 beta
More about this also later!
For your VCF homelab you wan to keep the resources small with a little bit overhead.
In this post I will talk about how i managed to deploy a VCF Workload Domain with a single NSX Manager, instead of the standard three nsx nodes.
Warning: Use this only in a Homelab!
The trick is to SSH into your SDDC Manager using the vcf user, and the password used during bring-up of the management domain.
When logged in, run su and log in as root using the password used during bring-up.
run: vi /etc/vmware/vcf/domainmanager/application-prod.properties
Hit i in your keyboard to go into insert mode. Go to the end of the file, and append the following:
nsxt.manager.formfactor=medium
nsxt.manager.resources.validation.skip=true
nsxt.manager.cluster.size=1
nsxt.manager.wait.minutes=120
This will make it so that any workload domain you deploy has one NSX Manager, and that it uses a smaller size. Once done, hit ESC in your keyboard, then type :wq and hit enter to save the file. (w = write, q = quit).
Then run systemctl restart domainmanager and you are good to go!
This worked in my nested Cloud Foundation deployment in my lab running 5.2.1.0.
You will still have to fill in the information for the extra nodes in the UI.
When you build your VCF Lab environment you want to create your DNS records automatically. I use for DNS a Windows Server.
The Script:
function ConvertTo-DecimalIP {
param ([string]$ip)
$parts = $ip.Split(‘.’) | ForEach-Object { [int]$_ }
return ($parts[0] -shl 24) + ($parts[1] -shl 16) + ($parts[2] -shl 8) + $parts[3]
}
function ConvertTo-DottedIP {
param ([int]$intIP)
$part1 = ($intIP -shr 24) -band 0xFF
$part2 = ($intIP -shr 16) -band 0xFF
$part3 = ($intIP -shr 8) -band 0xFF
$part4 = $intIP -band 0xFF
return “$part1.$part2.$part3.$part4”
}
$zone = “testlab.nl”
$startip = “192.168.200.10”
$dnsrecords = “vcf-m01-cb01″,”vcf-m01-sddcm01″,”vcf-m01-esx01″,”vcf-m01-esx02″,”vcf-m01-esx03″,”vcf-m01-esx04″,”vcf-w01-esx02″,”vcf-w01-esx03″,”vcf-w01-esx04″,”vcf-w01-esx04″,”vcf-m01-nsx01a”,”vcf-m01-nsx01b”,”vcf-m01-nsx01c”,”vcf-m01-nsx01″,”vcf-w01-nsx01a”,”vcf-w01-nsx01b”,”vcf-w01-nsx01c”,”vcf-w01-nsx01″,”vcf-m01-vc01″,”vcf-w01-vc01″
$count = $dnsrecords.count
# Convert start IP to decimal
$decimalIP = ConvertTo-DecimalIP $startIP
$i = 0
# Loop and print incremented IPs
foreach ($dnsrecord in $dnsrecords) {
$i -lt
$count;
$i++
$currentDecimalIP = $decimalIP + $i
$currentIP = ConvertTo-DottedIP $currentDecimalIP
Add-DnsServerResourceRecordA -Name $dnsrecord -ZoneName $zone -AllowUpdateAny -IPv4Address $currentIP -CreatePtr
Write-Output “DNS record $dnsrecord in $zone with $currentIP is created” -ForegroundColor Green
You must be logged in to post a comment.