Private cloud and storage

Private cloud and storage, built to recover

I design the layers that sit on a data centre pod: virtualisation, containers, storage and the copies that bring it all back after a failure or an attack. This page shows how each layer works, with diagrams you can step through, and where I have used it.

  • VMware Cloud Foundation
  • vSphere and vSAN
  • NSX
  • vMotion
  • OpenShift
  • Block, file, object
  • NVMe over Fabrics
  • Cyber recovery
A private cloud pod with protected copies A request from the self service portal reaches the automation layer, which builds virtual machines, containers or bare metal servers on shared compute, network and storage. Users reach their applications through the pod network. Data written to storage is copied to a metro site, to another region and, through the backups, to an isolated vault. PRIVATE CLOUD POD Portal and APIself service Userstheir apps Automation and self service VMsvSphere ContainersOpenShift Bare metalGPU, DB Computeservers Networkfabric Storagearrays Metro sitesync copy Other regionasync copy Cyber vaultisolated copy
Live view · one pod, three platforms, copies kept elsewhere
Private cloud stack

Five layers, one pod

A private cloud is a stack of layers on a data centre pod. Each layer depends on the one below it. Select a layer in the diagram, or use the buttons, to see what it holds and what flows through it.

The private cloud stack on a pod Five layers stacked from the bottom up. Facility: racks, power and cooling. Infrastructure: compute, storage and network. Platforms: virtual machines on VMware, containers on OpenShift and bare metal servers. Automation: a self service catalogue, APIs and infrastructure as code. Workloads: applications, data and AI, used by people. A panel on the right lists what the selected layer holds. Users Workloads Appsweb, ERP Datadatabases AIanalytics Automation Catalogue, APIs and codeself service · Terraform · Ansible Platforms VMsVCF ContainersOpenShift Bare metalphysical Infrastructure Computeservers Storagearrays Networkleaf, spine Facility Racks, power and coolingA and B feeds · hot and cold aisles Layer 1 of 5 Facility Racks, cabling and pathways A and B power to every rack Cooling matched to rack load Out of band management Building systems monitored The base every layer needs Layer 2 of 5 Infrastructure Compute: x86 and GPU servers Storage: block, file, object Network: leaf and spine Firewalls at the pod edge Spare capacity for failures Same design in every pod Layer 3 of 5 Platforms VMs on VMware Cloud Foundation Containers on OpenShift Bare metal for heavy jobs All three on one fabric Patched in tested waves Right platform per workload Layer 4 of 5 Automation Self service catalogue APIs and Terraform Quotas and policy Usage measured and charged Changes kept as code Built the same way every time Layer 5 of 5 Workloads Business applications Databases AI and analytics On the platform that suits it Each with a recovery target Users see a service address

Swipe sideways to see the whole diagram.

Facility. Racks, structured cabling, A and B power and cooling sized for the load in each rack. An out of band network lets me reach every device even when the pod itself is down. The detail is on the data centre page.

Infrastructure. Servers, storage arrays and a leaf and spine fabric, with firewalls at the edge of the pod. Every pod is built to the same tested design, so the second one is a copy of the first.

Platforms. Three ways to run work on the same kit: virtual machines (VMs) on VMware Cloud Foundation, containers on OpenShift, and bare metal servers for databases, big data and GPU (graphics processing unit) jobs that want the whole machine.

Automation. This is what turns a virtualised data centre into a cloud. Teams order from a catalogue or an application programming interface (API), and code builds the same thing every time. The US National Institute of Standards and Technology (NIST) lists five traits in NIST SP 800-145: on demand self service, broad network access, pooled resources, rapid elasticity and measured use.

Workloads. Applications, databases and AI jobs, each placed on the platform that suits it. Users see a service with an address. The servers, disks and switches stay out of sight.

Animation

Built in repeatable pods

Each pod has the same racks, fabric, compute, storage and tools. Growth means adding another tested pod.

The right platform for each job

VMs for most applications, containers for software built to scale out, and bare metal where a job needs the whole server.

Recovery is designed in

Every layer has a way back: spare capacity for failures, copies in other places, and a clean copy that an attacker cannot reach.

Pod lifecycle

A pod's life, from design to disposal

A private cloud grows one pod at a time, and every pod follows the same life. It is designed once, built and proven in a factory, accepted on site, joined to the fabric, patched in waves, then retired safely. The governance around it is on the design authority page.

The life of a private cloud pod Six stages from left to right: design, factory integration and burn in, site acceptance, joining the fabric and automation, patching in waves, and refresh with secure disposal. A panel below shows each stage. Design takes demand, standards and risks into a signed pod design. In the factory a rack is burned in and checked by an automated test system. On site every cable and link is checked. The pod then joins the spines and is configured by automation. Firmware goes to a canary pod first, then to waves, with paired pods in different waves. At the end, drives are sanitised to NIST SP 800-88 and certified, and lessons feed the next design. Designstandard pod Factoryrack and roll Siteacceptance Fabricand automation Runpatch in waves RetireNIST SP 800-88 Step 1 · DesignSigned off before anything is ordered Step 2 · Factory and burn inBuilt, burned in and shipped whole Step 3 · Site acceptanceAccepted against the plan Step 4 · Join the fabricConfigured from the source of truth Step 5 · Patch in wavesA pair is never patched in one wave Step 6 · Refresh and retireDrives certified, lessons fed back Demand and capacity Standards and patterns Risks and failure domains Pod design Racks and elevations Fabric and addressing Compute and storage Bill of materials Test plan Signed at design authority Rack Test systemsame tests every rack Burn in: one to three days Ships as a whole rack Evidence pack Cabled and labelled Firmware at baseline Burn in passed Links at line rate Each power feed pulled Signed against the design Leaf A Leaf B Newpod Acceptance Power on the site feeds Every cable matches the plan Every link at line rate NCCL tests on GPU pods Results added to the pack NEW POD Spine 1 Spine 2 Leaf A Leaf B Automationpipeline Source of truthnames, IPs, VLANs Monitoringfrom day one Cataloguenew capacity Wave 1 · canary Wave 2 Wave 3 Firmwaretested in the lab Canary pod Pod A1 Pod B1 Pod A2 Pod B2 Soak and health checks between waves Old pod Sanitiseclear, purge, destroy Certificateper serial number Records kept for audit New podfrom the factory

Swipe sideways to see the whole diagram.

Step 1
  1. Each pod starts as a standard design: racks, fabric, addressing, compute, storage and a fixed bill of materials, with the test plan written up front. It is reviewed and signed at design authority before anything is ordered.

  2. Racks are built off site, cabled and labelled to the design, and brought to the agreed firmware. They run under load, typically for one to three days, so weak parts fail in the factory. Results go into an evidence pack, and the rack ships whole. This is often called rack and roll.

  3. In the hall the rack is powered from the real feeds and cabled to the leaves. Every cable is checked against the cabling plan, and every link is tested at line rate. GPU pods also run NCCL (NVIDIA Collective Communications Library) tests to prove the bandwidth between GPUs. I have trained in NVIDIA's Cable Validation Tool (CVT), which checks fabric cabling against the planned topology.

  4. The pod's leaves peer with the spines, and the automation pipeline builds their configuration from the source of truth. Monitoring starts at once, and the new capacity appears in the self service catalogue.

  5. Firmware and patches are proven in the lab, then go to a canary pod and soak there. They then roll out in waves, with health checks between them. The two pods that carry the same service are never in the same wave.

  6. Hardware is refreshed on a planned cycle. Old drives are sanitised to NIST SP 800-88, the US guide to media sanitisation: clear, purge or destroy, with cryptographic erase where drives encrypt themselves. Each drive gets a certificate tied to its serial number, and lessons from the old pod feed the next design.

Moving workloads to a new pod

MethodWhen I use itWhat I watch
vMotion between clustersSame vCenter, compatible processors or Enhanced vMotion Compatibility (EVC), the same networks on both pods.The maximum transmission unit (MTU) and the vMotion VMkernel path between pods.
Cross vCenter vMotionA new pod with its own vCenter.Networks must exist on both sides, or the VMs given new addresses.
VMware HCX (Hybrid Cloud Extension)Different versions or sites, bulk or live moves, with networks extended for the move.Licensing, and removing extended networks once the move is done.
Storage replicationVery large VMs, or data that must move ahead of the compute.Time, bandwidth and the cutover window.
RedeployStateless and container workloads.The pipeline must be able to rebuild everything.

Blockers I look for early: raw device mappings, Universal Serial Bus (USB) licence keys, VMs pinned to a host, very old virtual hardware, and software licensed to a media access control (MAC) address or processor.

All flash platforms and subscriptions

PlatformShapeWhere it fits
Pure Storage FlashArrayBlock, with file services. ActiveCluster for synchronous replication.VM and database pods.
Pure Storage FlashBladeScale out file and object.Backup landing zones, analytics and AI data.
VAST DataDisaggregated and shared everything: stateless servers reach shared flash enclosures over NVMe fabrics.Large file and object estates, and AI training data.
NetApp AFF and ASAUnified block and file with ONTAP (AFF), or block only (ASA).Mixed estates with large file shares.
Dell PowerStore and PowerMaxMidrange unified storage (PowerStore), high end block (PowerMax).Existing Dell estates, and mainframe storage on PowerMax.

Subscriptions such as Pure's Evergreen replace controllers in place on a schedule, so the array refreshes without moving data. I match the subscription term to the pod's life and check what happens to capacity and price at renewal.

VMware

VMware Cloud Foundation, piece by piece

VMware Cloud Foundation (VCF) bundles the hypervisor, storage, networking and management tools into one tested stack. Step through how the parts fit together.

How VMware Cloud Foundation fits together Four ESXi hosts form a cluster managed by vCenter. vSAN pools their local disks into one datastore. NSX carries networks and firewall rules in software, with a Tier 0 gateway that peers with the leaf and spine fabric. A management domain holds vCenter, NSX Manager, SDDC Manager, VCF Operations and VCF Automation, apart from the workload domain. MANAGEMENT DOMAIN WORKLOAD DOMAIN CLUSTER · HA AND DRS vCentermanages clusters NSX Managernetwork policy SDDC Managerbuild and lifecycle VCF Operationshealth and capacity VCF Automationself service catalogue runs on its own cluster ESXi 1 ESXi 2 ESXi 3 ESXi 4 VMVM VMVM VMVM VMVM VM VM patching vSAN datastore · local disks pooled NSX overlay · segments and firewall Tier 0 gatewayBGP to the fabric Leaf and spinecarries IP only One hypervisor on each server HA restarts VMs, DRS balances load Each write kept on two hosts Network and firewall in software Tools kept apart from workloads One host at a time, no downtime

Swipe sideways to see the whole diagram.

Step 1
  1. ESXi is the hypervisor. It runs on each server and shares the processors, memory and network cards between many virtual machines, each with its own operating system.

  2. vCenter groups hosts into clusters and manages them as one. If a host fails, HA (high availability) restarts its VMs on the others. DRS (Distributed Resource Scheduler) moves running VMs to balance the load.

  3. vSAN pools the local disks in each host into one shared datastore. With a mirroring policy, each write is kept on two hosts, so one host can fail without losing data. External arrays are the other choice.

  4. NSX runs switching, routing and the firewall inside the hypervisor on every host. Networks travel in tunnels over the physical fabric, which only has to move IP between hosts. A Tier 0 gateway peers with the fabric using BGP (Border Gateway Protocol).

  5. VCF keeps its management tools in a management domain. Each workload domain gets its own vCenter, which runs in the management domain. A busy or broken workload domain cannot take the tools down with it.

  6. VCF upgrades the whole stack in a tested order, so versions always match. Each host goes into maintenance mode in turn: vMotion moves its VMs away, the host is patched, then it rejoins the cluster.

Licensing and platform choice

Since Broadcom bought VMware in late 2023, VMware has been sold only as a subscription, priced per processor core, in a small set of bundles led by VCF. Licences already bought keep working, but no new perpetual licences are sold. Many customers have publicly reported higher renewal costs, so for many clients the licence bill now drives the platform choice. I compare VCF with three alternatives on cost, skills and the effort to move off later.

PlatformWhat it isCostSkillsEffort to move off later
VMware VCFvSphere, vSAN, NSX and automation sold as one stackPer core subscription, sold as a bundleWidely availableHigh once NSX, vSAN and VCF Automation are in daily use
NutanixThe AHV hypervisor and storage on the same nodes, managed through PrismPer core term licencesClose to VMware for day to day workMedium. Tools convert the VMs, but operations are built around the platform
OpenStackOpen source cloud software: Nova for compute, Neutron for networks, Cinder for block storageNo licence fee. Support and a skilled team are the costScarce, and it needs a larger team to runLow vendor lock in, but you own all the integration
OpenShift VirtualizationVMs run as Kubernetes workloads beside containers, based on KubeVirtRed Hat subscriptionNeeds Kubernetes skills in operationsMedium. A migration toolkit moves VMs, but ways of working change the most

Based on public reporting up to October 2026. Prices, bundles and minimum orders change often, so I check current terms for each client.

Live migration with vMotion

vMotion moves a running virtual machine from one host to another without stopping it. I use it in my home lab to move running VMs between my ESXi hosts, and it is what makes patching without downtime possible.

vMotion moves a running VM between hosts A VM runs on host A while users reach it through a leaf pair. Its disks sit on shared storage that both hosts can reach. vMotion copies its memory to host B over a dedicated network, copies the pages that changed, then usually pauses the VM for under a second and resumes it on host B. User traffic then flows to host B. disks never move vMotion network own VMkernel port Shared storagevSAN or array ESXi host A ESXi host B App VMrunning memory pages free to patch Copy of App VMnot running yet App VMrunning memory pages Usersopen sessions Leaf pairsame VLANs on both Running on host A Pass 1: all memory Pass 2: only what changed Pause usually under a second Running on host B

Swipe sideways to see the whole diagram.

Step 1
  1. A VM runs on host A and serves users. Its disks sit on shared storage that both hosts can reach, so only its memory and running state need to move.

  2. vMotion copies the VM's memory to host B over its own VMkernel network while the VM keeps running. Some pages change during the copy.

  3. The changed pages are sent again. Each pass is smaller than the last, until what is left can move in a moment.

  4. The VM usually pauses for under a second while the last pages and the processor state move. It resumes on host B, which tells the switches where the VM's hardware (MAC) address now lives.

  5. Sessions stay up and users notice nothing. Host A is now free for patching. For this to work, both hosts need the same networks and compatible processors.

A packet walk through NSX

NSX moves the switch and the firewall into the hypervisor. I have not run NSX in production. The ideas are the ones I have used on VXLAN (Virtual Extensible LAN) fabrics with Cisco Nexus and ACI (Application Centric Infrastructure): tunnel endpoints, an overlay, and policy set centrally.

A packet walk through NSX A web VM on host A sends to a database VM on host B on the same segment. The distributed firewall checks the packet at the web VM's virtual network card. Host A's tunnel endpoint wraps it in Geneve over UDP port 6081 and sends it across the leaf and spine fabric to host B, which unwraps it and checks it again before delivery. A test VM's attempt to reach the database is dropped at its own virtual network card and never leaves host A. Host A Host B Web VMapp segment Test VMapp segment DFW DFW NSXswitch TEPhost A TEPhost B NSXswitch DFW DFW DB VMapp segment App VMapp segment Leaf 1 Leaf 2 Spine Dropped at its own vNIC Web to DB, same segment, two hosts Rule: web may reach DB on its port Outer IP: TEP A to TEP B UDP 6081 Geneve header Original frame: Web to DB Unwrapped, checked again, delivered No rule allows Test to DB Fabric MTU 1700 or more At 1500, large packets drop The wrapper makes packets bigger

Swipe sideways to see the whole diagram.

Step 1
  1. A web VM on host A talks to a database VM on host B. Both sit on the same NSX segment, a layer 2 network that exists only in software.

  2. The distributed firewall (DFW) checks the packet at the web VM's virtual network card, before it reaches the switch. A rule allows web to database on the database port.

  3. Host A's tunnel endpoint (TEP) wraps the frame in a Geneve header inside User Datagram Protocol (UDP) port 6081 and sends it to host B's TEP. The fabric only sees IP traffic between two hosts.

  4. Host B removes the wrapper. The firewall checks the packet again at the database VM's virtual card, then delivers it.

  5. The test VM tries to reach the database. No rule allows it, so the firewall drops the packet at the test VM's own card. It never leaves host A or touches the fabric.

  6. The wrapper adds bytes to every packet, so the fabric needs a maximum transmission unit (MTU), the largest packet it carries, of at least 1,600 bytes. 1,700 or more is recommended. A mismatch shows up as small packets working while large transfers stall.

Containers

Kubernetes and OpenShift, in plain terms

OpenShift is Red Hat's Kubernetes platform, and it runs on bare metal or on VMs in the pod. I have not delivered a container platform as a project, so I show this as knowledge: how it works, and what the network and storage under it must provide.

A request reaching a pod in an OpenShift cluster An OpenShift cluster with three control plane nodes and three worker nodes. The app runs as three pods, one on each worker, joined by a pod network. A Service gives the pods one stable address. A user request passes a load balancer, then the router on worker 1, then the Service, and crosses the pod network to the pod on worker 3. When that pod fails, a replacement starts on worker 2. OPENSHIFT CLUSTER Control 1API · etcd Control 2API · etcd Control 3API · etcd Worker 1 Worker 2 Worker 3 router app pod app pod app pod failed new pod Serviceone stable address Pod network · OVN, Geneve tunnels Usersbrowser Load balanceroutside Three control nodes keep a majority Three copies, one per worker Every pod has its own address One name, many healthy pods Outside traffic enters at the router Replaced automatically

Swipe sideways to see the whole diagram.

Step 1
  1. A cluster has control plane nodes, which hold the API and the cluster database (etcd), and worker nodes, which run the applications. With three control nodes, the cluster keeps a majority if one fails.

  2. A pod is one or more containers that share an address. The scheduler places pods on workers with spare capacity. Here the app runs as three copies, one on each worker.

  3. Every pod gets its own IP address on the pod network. In OpenShift the default network plugin, built on OVN (Open Virtual Network), carries traffic between nodes in Geneve tunnels, much like NSX.

  4. Pods come and go, so their addresses change. A Service gives the app one stable name and address, and spreads requests across the healthy pods.

  5. Traffic from outside reaches a load balancer, then the router, which is OpenShift's ingress. The router matches the host name, looks up the healthy pods behind the Service and sends the request straight to one of them. This one lands on worker 3.

  6. If a pod or a whole worker fails, the cluster starts a replacement on another worker, and the Service stops sending it traffic. The app stays up while copies run on more than one node.

What the pod must give a cluster

  1. Address space planned up front. Pod and Service ranges must not overlap the rest of the network, and they are hard to change once the cluster is built.
  2. MTU with room for the tunnel. The Geneve wrapper in OpenShift's default plugin uses about 100 bytes, so the pod MTU sits below the fabric MTU.
  3. Persistent storage through a driver. Containers are short lived but their data is not. Volumes come from the arrays through a storage driver that follows the Container Storage Interface (CSI).
  4. A load balancer in front. Two or more routers behind a load balancer, so ingress survives a worker failure.

The networking pieces, one by one

PieceWhat it doesWhat I watch
Service typesClusterIP is reachable only inside the cluster. NodePort opens the same port on every node. LoadBalancer asks for an outside address.On premises, LoadBalancer needs something to hand out those addresses.
MetalLBGives LoadBalancer Services an address on bare metal, announced with address resolution protocol (ARP) in layer 2 mode, or with Border Gateway Protocol (BGP) to the leaves.In BGP mode it peers with the leaf pair, and the leaves filter what it may announce.
NetworkPolicyRules, chosen by labels, for which pods may talk to which. With no policy at all, every pod can reach every other pod.I start each namespace with a default deny, then allow named flows.
Ingress and Gateway APIRoute web traffic from outside to Services. Gateway API is the newer, role based successor to Ingress.Who owns the gateway, its certificates and its host names.
Egress IPGives a namespace's outbound traffic a fixed source address.Lets firewalls outside the cluster tell one application from another.
MultusGives a pod a second network interface, for example a VLAN for storage or for a virtual machine.Each extra network bypasses the cluster's own policy, so it needs its own controls.
Service meshSidecars or a proxy on each node add mutual transport layer security (TLS), retries and telemetry between services.More latency and more moving parts. Only where the security or visibility need is real.

OpenShift defaults to plan around

RangeDefaultWhy it matters
Cluster network (pods)10.128.0.0/14, a /23 per nodeMust not overlap anything the pods need to reach.
Service network172.30.0.0/16Internal only, but a clash still breaks routing.
OVN join subnet100.64.0.0/16Used inside OVN. If the wider network already uses it, change it at install or later through the cluster network operator.
OVN transit switch subnet100.88.0.0/16Same rule: check it against the address plan, and change it at install or later through the cluster network operator.
Masquerade subnet169.254.0.0/17Link local, used for traffic between the host and OVN. New clusters from 4.17 use this. Upgraded clusters keep 169.254.169.0/29.

From Red Hat's OpenShift networking documentation. Defaults can change between releases, so I check the notes for the version being installed.

OpenShift Virtualization

Virtual machines run inside pods, using KubeVirt. Multus connects them to existing VLANs, and the Migration Toolkit for Virtualization moves them from vSphere. Live migration needs shared storage that many nodes can mount at once (ReadWriteMany). Before a pilot I agree criteria for backup, disaster recovery and day to day operations, because those differ most from vSphere.

Bare metal or virtual machines

On bare metal, containers get the full server and no hypervisor licence is needed, but each node is bigger, so a failure takes more pods with it and rebuilds are slower. On virtual machines, nodes are small and easy to replace, at the cost of licences and some overhead.

Bare metal as a service

Servers are driven through Redfish, the standard API on the baseboard management controller (BMC): power, boot order and firmware. They boot an installer over the network with the preboot execution environment (PXE) or iPXE. Metal3 brings the Ironic provisioning service into Kubernetes, so a server is declared like any other resource. OpenShift uses it for bare metal installs.

How each platform joins the fabric

PlatformHow it attachesHow tenants are kept apart
VMware with NSXHosts dual homed to the leaf pair. Overlay tunnel endpoints on one VLAN. Tier 0 gateways peer over BGP with the border or service leaves.NSX segments and Tier 1 gateways per tenant, each mapped to a routing instance (VRF) on the fabric.
VMware without NSXPort groups on VLANs trunked to the leaf pair. The gateway is the fabric's anycast gateway.One VRF per zone on the fabric, with the firewall between zones.
OpenShiftNodes on a routed VLAN, Geneve between nodes, MetalLB or an external load balancer for ingress.Namespaces, NetworkPolicy and egress IPs, with a VRF per cluster or zone.
Bare metalServers dual homed with link aggregation (LACP) to the leaf pair, or routed to each leaf.A VRF and VLAN per tenant on the fabric.

Whatever the platform, I keep one tenant model: a zone is a VRF on the fabric, and each platform maps its own constructs onto it. NSX in depth is on the VMware NSX page.

Storage tiers

Block, file and object, and when to use each

All three put data on disks across a network. They differ in how the data is addressed, how it travels and what it is good at. Switch between them, or pick something to store and see where it belongs.

Block, file and object storage compared Block storage gives a server a raw volume over two separate paths using Fibre Channel, iSCSI or NVMe over Fabrics, and the server puts its own file system on it. File storage shares folders and files over NFS or SMB. Object storage keeps objects in buckets, each found by a key, over the S3 API on HTTPS. A raw disk over the network Shared folders over the network Objects through a web API path A path B Fibre Channel iSCSI NVMe over Fabrics shared by many NFS SMB PUT and GET S3 API over HTTPS ServerVM host or DBown file system Clientsusers and appsopen by path Applicationsbackup, data lakeask by key Block array LUN · numbered blocks File server (NAS) /shares /finance /projects plan.docx data.csv paths and file names Object store bucket · key · metadata Addressed by Best at Typical use Block numbers on a volume (LUN)Low, steady latency for one systemDatabases and VM datastores Folder paths and file namesMany users and apps sharing dataTeam shares, home drives, AI datasets A bucket and a unique keyHuge scale at a low cost per TBBackups, archives, logs, data lakes

Swipe sideways to see the whole diagram.

Block. The array hands a server a raw volume, a logical unit number (LUN), and the server puts its own file system on it. Two separate paths, A and B, with multipathing on the host, so one failure never cuts the server off.

File. A file server, or network attached storage (NAS), shares folders over the network. NFS (Network File System) is the Linux and Unix standard, SMB (Server Message Block) the Windows one. Many clients open the same files by name.

Object. Data is stored as objects in buckets, each with a key and metadata, read and written over the S3 (Simple Storage Service) API. It scales to billions of objects, and Object Lock can make copies unchangeable.

What are you storing?

Animation
TypeProtocols and portsGood forWatch out for
BlockFibre Channel; iSCSI (SCSI over IP) on TCP 3260; NVMe over Fabrics, such as NVMe/TCP on port 4420 or NVMe over RoCE (remote direct memory access over Converged Ethernet)Databases, VM datastores, container volumesZoning and masking decide which server sees which volume
FileNFS on TCP 2049; SMB on TCP 445Shared files, home drives, AI training dataUsers can write to it, so ransomware can too
ObjectS3 API over HTTPS on TCP 443Backups, archives, logs, data lakesNot for transactional databases; check which S3 features a product supports

How storage should connect to the pod

  1. Its own VRF (virtual routing and forwarding table). Storage traffic sits in its own routing domain, so a change made for applications cannot touch a storage path.
  2. Two paths that share nothing. Path A and path B on separate switches, or Fibre Channel fabrics A and B, with multipathing on the host instead of bundled links.
  3. Jumbo frames, tested end to end. MTU 9000 on hosts and arrays and 9216 on switch ports, checked before anything goes live.
  4. No firewall in the data path. The VRF and access lists control storage traffic. A firewall in line adds delay and one more thing to fail.
  5. NVMe/TCP as the default. It gives most of the speed of NVMe on the normal fabric. RoCE works best on a lossless class, with priority flow control (PFC) and explicit congestion notification (ECN) tuned end to end, so it belongs on a separate network and only where a workload proves the need.
  6. Management out of band. Array management sits on the out of band network, with admin access through privileged access controls.
Storage networks

How data reaches the disks

Block storage needs two separate paths from every host to every array, so that one failure never stops the data. The protocol decides how those paths are built. Underneath, RAID or erasure coding decides what survives a failed disk.

How block storage travels: Fibre Channel, iSCSI, NVMe over TCP and FCoE A host with two adapters reaches an array with two controllers over two separate paths. With Fibre Channel the paths are fabrics A and B on their own switches, never joined, with zoning on the switches and masking on the array. With iSCSI and NVMe over TCP the paths are two subnets on the Ethernet fabric. With FCoE, Fibre Channel frames cross two lossless Ethernet switches, one for SAN A and one for SAN B, before reaching native Fibre Channel. Hosttwo adapters Arraytwo controllers FABRIC AFABRIC BFC switch A32GFCFC switch B32GFCnever joined Zone: host HBA 1 with array port A1Zone: host HBA 2 with array port B1LUN masking Leaf pairpath A subnetLeaf pairpath B subnet PATH A · VLAN 101 PATH B · VLAN 102 queue per core LOSSLESS ETHERNETFCoE switch ASAN AFCoE switch BSAN BFC frames in Ethernetnative FC Two fabrics, never joined: one can fail completely Zoning on the switch, masking on the array iSCSI on TCP 3260: two subnets, multipathing, not LACP NVMe/TCP on TCP 4420, discovery on 8009 FCoE: lossless Ethernet, SAN A and SAN B on two switches

Swipe sideways to see the whole diagram.

Fibre Channel. A dedicated block network at 32G or 64G, on Cisco MDS or Brocade switches. Each server has a host bus adapter (HBA) on each fabric, and fabrics A and B are never joined, so one can fail completely. Buffer to buffer credits make it lossless.

Zoning and masking. Devices are known by their worldwide port names (WWPNs). Zoning on the switch decides which ports may talk, ideally one initiator and one target per zone. LUN masking on the array decides which volumes each host sees. The host runs multipathing across both fabrics.

iSCSI. SCSI over TCP on port 3260, so no separate network is needed. I use two subnets or VLANs, path A and path B, with multipathing on the host, never LACP, and keep it off routed firewall paths. Hosts are named by IQNs (iSCSI qualified names) and authenticate with CHAP (Challenge Handshake Authentication Protocol).

NVMe over TCP. NVMe has up to 65,535 queues, each up to 65,536 commands deep, where SCSI had one. NVMe/TCP carries that over any IP network on port 4420, with discovery on 8009, and needs no lossless Ethernet. It is my default for new pods.

Fibre Channel over Ethernet. FCoE carries Fibre Channel frames in Ethernet, so it needs data centre bridging: priority flow control (PFC) and enhanced transmission selection (ETS). The two storage area networks, SAN A and SAN B, still stay apart, each on its own switch and FCoE VLAN. It was popular on converged access switches but is fading in favour of NVMe/TCP.

Animation
ProtocolTransport and portsNamesWhere I use it
Fibre ChannelIts own network at 16, 32 or 64GFC, lossless by buffer to buffer creditsWWPN, zoning on the switchExisting estates and the most critical databases
NVMe/FCNVMe over the same Fibre Channel fabric, with recent Gen 6 or later adapters, often 32GNQN (NVMe qualified name)Getting more from an existing FC investment
iSCSITCP 3260 on Ethernet, two subnets for the two pathsIQN, with CHAPSmaller sites and older arrays
NVMe/TCPTCP 4420, discovery on 8009, any routed IP networkNQNMy default for new pods
NVMe over RoCE (RDMA over Converged Ethernet)RDMA on UDP 4791, needs PFC and ECN (explicit congestion notification) tunedNQNThe lowest latency, run by specialists
FCoEEthernet with data centre bridgingWWPNOlder converged designs only

Other ports I keep in mind: NFS on TCP 2049, SMB on TCP 445, S3 over HTTPS on 443, and the Key Management Interoperability Protocol (KMIP) for encryption keys on TCP 5696.

RAID and erasure coding

RAID levels and erasure coding, and how each rebuilds Disks drawn as columns of data blocks and parity blocks, with disk 2 failed in each RAID layout, and two nodes failed in the erasure coded layout. RAID 1 mirrors two disks. RAID 5 spreads one parity block across four disks. RAID 6 adds a second parity block across five disks. RAID 10 stripes across mirrored pairs. Erasure coding spreads 8 data pieces and 2 parity pieces across 10 nodes. Any 8 of the surviving pieces rebuild the lost ones onto spare capacity on the other nodes. Disk 1D1D2D3D4 Disk 2D1D2D3D4 Disk 1D1D4D7P Disk 2D2D5PD10 Disk 3D3PD8D11 Disk 4PD6D9D12 Disk 1D1D4D7P Disk 2D2D5PQ Disk 3D3PQD10 Disk 4PQD8D11 Disk 5QD6D9D12 Disk 1D1D3D5D7 Disk 2D1D3D5D7 Disk 3D2D4D6D8 Disk 4D2D4D6D8 mirror pair 1mirror pair 2 Node 1D1Node 2D2Node 3D3Node 4D4Node 5D5Node 6D6Node 7D7Node 8D8Node 9P1Node 10P2Spare capacityany 8 of the 10 pieces rebuild the data Hot sparerebuild target RAID 1: 50% usable, survives one disk RAID 5: 75% usable on four disks, survives one RAID 6: 60% usable on five disks, survives two RAID 10: 50% usable, one disk in each mirror Erasure coding 8 + 2: 80% usable, survives any two nodes

Swipe sideways to see the whole diagram.

RAID 1, mirroring. Every block is written to two disks. Half the raw capacity is usable, reads can come from either disk, and one disk can fail. Rebuild is a straight copy, so it is quick.

RAID 5, single parity. One parity block per stripe, rotated across the disks. Three quarters of four disks are usable and one disk can fail. With today's large drives a rebuild takes many hours, and a second failure or a read error during it loses data, so I avoid it for important data.

RAID 6, double parity. Two parity blocks, P and Q, per stripe, so any two disks can fail. It suits capacity tiers with large drives. Writes cost more, because both parity blocks must be updated.

RAID 10, mirrors striped. Data is striped across mirrored pairs. It gives the best write performance and fast rebuilds, so I use it for write heavy, latency sensitive work such as databases. It survives one disk in each pair.

Erasure coding. Data is split into k pieces with m parity pieces spread across drives or nodes, and any k pieces rebuild it. 8 + 2 survives two failures with 25 percent overhead, against 200 percent for three full copies. Across nodes it survives a node or rack loss, but rebuilds use CPU and network, as in vSAN and scale out storage.

Animation

vSAN or an external array

vSAN builds storage from the hosts' own drives, so compute and storage grow together, per VM policies set how many failures to tolerate, and it is included in VMware Cloud Foundation. An external array grows separately, offers array snapshots and replication, and serves VMware, containers and bare metal alike. A standard vSAN cluster needs three hosts, a two node cluster needs a witness, and four or more leave room to rebuild during maintenance.

Hyperconverged or disaggregated

Hyperconverged pods grow in host sized steps with one stack and one lifecycle, and suit general virtual machine pods and edge sites. Disaggregated pods scale compute and storage separately, with a storage leaf pair or Fibre Channel, and suit storage heavy, shared, AI and big data work. I decide on the expected ratio of compute to storage growth, licence cost and the data protection design.

Trusting data reduction

Deduplication, compression and thin provisioning stretch capacity. Virtual machines and desktops reduce well. Encrypted, compressed or media data barely reduces, and encryption inside a VM defeats deduplication. I plan on ratios measured from our own data, and ask for them as a guarantee in the contract.

Terms I use

TermMeaning
WWPN, NPIV, FLOGIA Fibre Channel port's worldwide name, several virtual logins on one port, and the login a port makes to the fabric.
IQN and NQNThe names of iSCSI and NVMe hosts and targets.
CHAP and iSERiSCSI authentication, and iSCSI over RDMA.
FTTFailures to tolerate: in vSAN, how many failures a VM's data can survive.
vVolsOne array volume per virtual disk, so array features work per VM.
RS(6,3)A Reed Solomon erasure code with 6 data and 3 parity pieces.
ALUAAsymmetric logical unit access: the array tells the host which paths are active and optimised, and which are standby, so multipathing prefers the right controller.
VSAN (Cisco MDS)A virtual SAN: separate fabric services and zoning on shared Fibre Channel switches. Not the same thing as VMware vSAN.
Queue depthHow many commands a host, adapter or volume may have outstanding. Too low starves fast arrays, too high moves the queue into the array.
Boot from SANHosts boot from an array volume instead of a local disk, so a failed server is replaced by pointing a new one at the same volume.
Data protection

Copies that survive a failure or an attack

Each kind of copy protects against a different problem. Watch the copies flow out from production, then see which ones are still clean after a ransomware attack.

Layers of data protection A primary array in production takes snapshots, replicates synchronously to a metro site, with a witness in a third location that can reach both sites, and asynchronously to another region. Backups go to a separate system, then to an immutable copy, then to an isolated cyber vault. When ransomware encrypts production, replication copies the damage to the metro and region arrays, but the immutable copy and the vault stay clean. Recovery happens in a clean room: identity first, then data, a scan, and release back to production. PRODUCTION METRO SITE OTHER REGION CYBER VAULT CLEAN ROOM Apps and VMs Encrypted by an attacker Primary arraylive volumes 09:00 10:00 11:00 snapshots on the same array Metro arraysynchronous Witnesssees both sites DR arrayasynchronous damage copied damage copied Backup copyown system Immutable copycompliance mode air gap Vault copyown identity still clean Identityfirst Datarestored Scanmalware Releaseto live Fast rollback, but on the same array Zero data loss across the metro Any distance, seconds to minutes behind Separate system, kept for weeks or years Nobody can change or delete it early Isolated, with its own identity Replication copies the damage Restore, prove it clean, then return

Swipe sideways to see the whole diagram.

Step 1
  1. The array takes point in time snapshots, often every hour. They are almost instant and give a fast rollback after a mistake. They live on the same array, so on their own they are not a backup.

  2. A write is confirmed only once the metro array has it too, so a site failure loses no data. Every write waits for the round trip, which in practice keeps the two sites within about 100 km. A witness in a third location decides which side keeps running if the link breaks.

  3. Changes ship to another region a few seconds or minutes behind. It works over any distance and covers a regional event, at the cost of the last moments of data.

  4. A backup is a separate copy in a different system, kept for weeks or years. It protects against corruption and deletion, which replication would copy straight across.

  5. With object lock in compliance mode, or locked snapshots, nobody can change or delete a copy before its retention ends, not even an administrator. Governance mode can be overridden, so this copy uses compliance mode, and the time source it relies on is protected too. Attackers go after backups first, so this matters most.

  6. The vault sits outside the production trust domain, with its own identity and admin accounts. The link opens for a short window so the vault can pull a copy, then closes again.

  7. Attackers encrypt production. Replication does its job and copies the encrypted data to the metro and disaster recovery (DR) arrays. The immutable copy and the vault are untouched.

  8. Recovery starts in an isolated clean room. Identity comes back first, then data from the last clean copy is restored and scanned. Only then do systems return to production.

The 3, 2, 1, 1, 0 rule

  1. 3copies of the data, counting production
  2. 2different storage types or systems
  3. 1copy in another place
  4. 1copy offline or immutable
  5. 0errors, proven by regular restore tests

Two targets for every workload

I set two targets for every workload: the recovery point objective (RPO), how much data it can afford to lose, and the recovery time objective (RTO), how long it can be down. Each kind of copy gives a different answer to both.

SnapshotReplicationBackup
What it isA point in time copy on the same systemA running copy on another system or siteA separate copy in another system, kept for a set time
Protects againstMistakes, with a quick rollbackLosing an array or a siteCorruption, deletion, ransomware, long term retention
Copies corruption?Not once it is takenYes, straight awayNot into older restore points
Data you could lose (RPO)Back to the last snapshot, often up to an hourNone if synchronous. Seconds to minutes if asynchronousBack to the last backup, often up to a day
Time to recover (RTO)Seconds to minutesMinutes, by failing overHours, depending on size and speed

Recovery classes

I group workloads into a few recovery classes, so each one gets the protection it needs and pays for no more. Switch between the classes to see how the two targets change.

Recovery point and recovery time for three recovery classes A timeline with a failure in the middle. To the left, the recovery point objective is the data that could be lost since the last good copy. To the right, the recovery time objective is the time until service is back. Gold loses no data and recovers in minutes. Silver loses seconds to minutes of data and recovers in minutes to hours. Bronze can lose up to a day of data and takes hours to days. The diagram is not to scale. Recovery point (RPO) Recovery time (RTO) time Failure or attack last good copy last good copy service back service back service back None for a site failureMinutes Seconds to minutesMinutes to hours Up to a dayHours to days not to scale

Swipe sideways to see the whole diagram.

Gold. Synchronous replication across the metro, frequent snapshots, and immutable and vault copies. A site failure loses no data, and service returns in minutes. For the few services that cannot stop.

Silver. Asynchronous replication to another region, snapshots and an immutable backup. Seconds to minutes of data are at risk, and service is back in minutes to hours.

Bronze. A daily backup with an immutable copy. Up to a day of data is at risk, and a restore takes hours to days. Right for systems the business can do without for a while.

Every class keeps an immutable copy, because an attacker can reach every other kind of copy.

Animation

Recovery after an attack takes longer than these targets suggest. The last clean copy may be days old, and identity has to be rebuilt before anything else, so I plan and test the two separately. Public cloud and disaster recovery patterns are on the cloud page.

Disaster recovery patterns

PatternHow it worksData loss (RPO)Recovery time (RTO)
Metro active and activeSynchronous replication between sites, a witness in a third siteNear zeroNear zero to minutes
Warm standbyAsynchronous replication, infrastructure running at the second siteSeconds to minutesMinutes to hours
Asynchronous to another regionReplication to a distant site, started on demandMinutesHours
Backup and restoreRestore from backup onto rebuilt or spare infrastructureHoursHours to days
Cyber recovery vaultRestore the last clean copy into an isolated environment firstThe last clean copyDays

Indicative. For active and active I prefer the application to replicate its own data, rather than stretching layer 2 between sites.

Distance limits for stretched designs

DesignRound trip limit between sitesNotes
vSAN stretched cluster5 ms between the data sitesThe witness can sit much further away, up to about 200 ms, in a third site or the cloud.
vSphere Metro Storage ClusterUnder 10 ms for the networkSynchronous storage usually needs 5 ms or less. The array vendor's statement applies.
Cisco ACI Multi-PodUp to 50 msOne Application Policy Infrastructure Controller (APIC) cluster across pods.

These are support ceilings, not targets. I check the current vendor guidance and test the real application at the real latency.

The backup platform itself

PartWhat it doesHow I protect it
Control serverHolds the catalogue, schedules, plans and reports.Its own disaster recovery plan, with a copy in the vault. Without it, restores are slow or impossible.
Media servers or proxiesMove and deduplicate the data, with the deduplication database on fast flash.Enough of them to meet restore times, not just backup windows.
TargetsDisk, object storage, appliances, cloud storage or tape.An immutable copy with object lock in compliance mode, and an air gapped copy.
Agents and snapshotsAgents for databases and file systems, hypervisor APIs for VMs, and array snapshot orchestration.Credentials kept separate from production identity.

Choosing a cyber recovery platform

I judge it on recovery within tolerance. That means immutability with retention that administrators cannot shorten, an isolated recovery environment with its own identity, and more than one person to approve destructive actions. It also needs anomaly detection, and restore at scale, hundreds of VMs and large databases, timed in a proof of concept.

Media sanitisation

NIST SP 800-88 Revision 2 replaced the 2014 version. Clear overwrites, purge uses block erase, cryptographic erase or degaussing, and destroy shreds. Each device gets a certificate with its serial, method, tool and who verified it. Cryptographic erase only counts if the data was always encrypted and every copy of the key, including any escrowed copy, is destroyed.

IT asset disposition

Hardware is redeployed, resold or returned through a certified partner, or recycled under the UK Waste Electrical and Electronic Equipment (WEEE) regulations, with a chain of custody for every serial number. The CMDB and the financial asset register are reconciled, and disposal partners are managed as third parties for operational resilience.

Engagement

How I run a private cloud programme, from service catalogue to refresh

A private cloud is a product that application teams consume, not just a set of hosts. I run every programme the same way: agree the service, size it from real data, design the platform and its protection, then hand over something the platform team can run, patch and grow.

How an engagement runs, from first conversation to lifecycle Seven stages from left to right: engage (stakeholders), requirements (FR and NFR), discovery (facts first), design (HLD and LLD), build and test (factory), support (handover), lifecycle (evergreen). For each stage the panel shows who I work with and what comes out of it. After the lifecycle stage the loop returns to the start. Engagestakeholders RequirementsFR and NFR Discoveryfacts first DesignHLD and LLD Buildfactory Supporthandover Lifecycleevergreen Step 1 · EngageAgree the service before the platformWho I work withWhat comes outApplication and data ownersPlatform and storage teamsFinance and licensingService catalogue and tiersScope: VMs, containers, dataLicensing position and risksRACI for the platform Step 2 · RequirementsCapacity, recovery and isolation in numbersWho I work withWhat comes outApplication ownersSecurity and riskOperationsWorkload profiles and growthRPO and RTO by recovery classIsolation and compliance needsRequirements traced to tests Step 3 · DiscoverySize from real usage, not from guessesWho I work withWhat comes outVirtualisation teamStorage administratorsBackup and DR ownersVM, CPU, memory and storage profileData reduction measuredDependencies between applicationsProtection gaps against targets Step 4 · DesignOne pod type, with protection designed inWho I work withWhat comes outDesign authorityPlatform architectsVendor specialistsPlatform and pod designStorage and network attachmentProtection and recovery designDecision records and BOM Step 5 · Build and testBuilt, tested and restored before go liveWho I work withWhat comes outIntegration partnerPlatform engineersChange advisory boardBuilt from templates and baselinesFailure and restore test resultsMigration waves and rollbackSigned evidence pack Step 6 · SupportPlatform team runs it, app teams consume itWho I work withWhat comes outPlatform operationsService deskBackup operationsRunbooks and known errorsCapacity and performance alertsRestore tests on a scheduleSelf service catalogue live Step 7 · LifecyclePatched in waves, refreshed by podWho I work withWhat comes outVendor account teamsCapacity and financeDesign authorityVersion and patch planLicence and support renewalsCapacity triggers per podRefresh and disposal plan

Swipe sideways to see the whole diagram.

Step 1
  1. I start by agreeing what the private cloud must offer: virtual machines, containers, bare metal and storage tiers, with the recovery each tier promises. Licensing and cost come into the first conversation, because they now shape the platform choice as much as features do.

  2. Functional requirements say what the platform must run and how teams request it. Non functional ones give numbers: overcommit per tier, recovery point and time objectives, storage performance, isolation between zones and how fast a request is fulfilled.

  3. I collect inventory and performance history from the current estate with tools such as RVTools and LiveOptics, measure real data reduction, map dependencies between applications and test whether today's backups really meet their recovery targets.

  4. I design the pod: compute, the hypervisor or container platform, storage and its network, management domains, recovery classes and the backup and vault design. The design authority approves it, with the platform choice recorded as a decision.

  5. Pods are built from templates and firmware baselines, then failure tested: a host, a switch, a storage controller and a full restore of sample workloads. Workloads move in waves through change control, each with a rollback point.

  6. Before handover the platform team has runbooks, capacity and performance alerts, a schedule of restore tests and a self service catalogue for application teams. Hypercare ends only when the agreed exit criteria are met and the first restore test has passed.

  7. Hypervisor, firmware, storage and backup software each follow a release plan, patched in waves. Licences and support renewals are tracked, the next pod is ordered on a capacity trigger, and old pods are drained, sanitised and retired.

Functional requirements

What it must do.

  • Offer virtual machines, containers and bare metal from one catalogue.
  • Provide block, file and object storage, with tiers by performance.
  • Keep tenants and zones apart, with policy that follows the workload.
  • Back up every workload, with an immutable copy and an isolated vault copy.
  • Recover a workload, a cluster or a whole pod within its recovery class.
  • Let application teams request and change services through an API or portal.

Non functional requirements

How well it must do it, with a number wherever one can be agreed.

Recovery
RPO and RTO per recovery class, for example near zero for gold and 24 hours for bronze.
Capacity
N+1 hosts in every cluster, with overcommit set per tier.
Performance
Storage latency targets per tier, measured from the guest.
Availability
No single host, switch, path or controller failure stops a workload.
Security
Encryption at rest, separate backup identity, and destructive actions approved by two people.
Operability
Changes from templates and pipelines, patching without downtime, drift reported.
Cost
Cost per VM, per TB and per pod tracked, including licences.

These are typical starting targets. Each organisation sets its own numbers for each recovery class, and proves them in a restore or failover test.

Projects

Where I have worked with it

My virtualisation and data centre work has always sat alongside network and security design, rather than apart from it.

Certification

VMware Certified Professional

Data Centre Virtualisation. The version I hold is VCP5, for vSphere 5. VMware has changed a lot since then, and I keep current through my lab and my reading.

AVEVA · 2020 to 2021

Data centre transitions at 99.99 percent

Safeguarded over £200 million of transactional services through data centre transitions, holding 99.99 percent uptime throughout.

iSystems Integration · three engagements, 2015 to 2019

Cloud and disaster recovery

Cloud, software defined networking (SDN), disaster recovery and security architecture for enterprise clients. On my last engagement I directed architecture and delivery across AWS, Google Cloud, Azure and disaster recovery.

Penguin Random House · 2013 to 2015

Enterprise data centre

Post merger infrastructure integration across a multi site estate, with an enterprise data centre on Cisco, Palo Alto and VMware.

JJ Food Wholesale · 2007 to 2011

Virtualisation across the group

Local and wide area networks, voice over IP, virtualisation and security across the group, including the systems at the food depots.

Home lab

ESXi, vCenter and vMotion

Three HP servers run VMware ESXi, managed through vCenter, with vMotion to move running VMs between hosts. Virtual firewalls, Cisco Identity Services Engine (ISE) and a wireless controller run on them. See the lab

Containers and Kubernetes appear on this page as knowledge, not as delivered projects. The racks, power and cooling under the pod are on the data centre page, and public cloud on the cloud page.