VCF 101 - Understanding Compatibility Sets

Laraib Kazi

During upgrades of VCF components from the SDDC Manager, we often run into situations where a component upgrade bundle does not show up for a particular VCF version upgrade. This can also present itself as skipping a component through the upgrade process. In this article, I will explain what compatibility sets are, how they work, and how they affect the VCF component upgrade process.

What are Compatibility Sets?

Compatibility sets are set of version entries for the 3 primary core VCF products - namely vCenter, ESXi and NSX(T/V), which are marked as compatible with one another. Lets break it down further.

Example of contents of the compatibility_set table in LCM DB

Each entry in the compatibility sets contains one version each for the vCenter, ESXi and NSX component.

For example, from the screenshot above, the final entry indicates that vCenter version, ESXi version 7.0.3, and NSX-T version are basically marked as compatible to work with each other in a VCF environment.

There will be multiple such entry sets for different versions of each component, essentially going through all the combinations possible for the different versions of the components that are 1) compatible with other and 2) supported to work with each other in a VCF environment.

Why does this matter when we have a fixed Bill of Materials for each VCF version?

Compatibility sets come into play only during upgrades of workload domains. During a upgrade one VCF version to the next, as the components are upgraded step by step, the WLD will have versions that are across two bill of materials. This can get even more convoluted if we are performing a skip level upgrades with running Tanzu - as the vCenter cannot skip major versions at that point, it has to upgrade to incremental versions. As we are going through these upgrades, the Compatibility Sets dictate what versions are supported and compatible with each other in the VCF environment.

If we are missing a upgrade for a particular component, one of the important things to check (as reported in the LCM logs) is if the upgrade bundle for that component is being marked as not compatible, if the upgrade results in a violation of the Compatibility Sets.

The version of a component that is checked against the Compatibility Sets is the one aliased after using the VersionAlias.yml file. You can read more about that file and version aliasing in VCF in this blog post.