# Topologies Catalog A `Topology` is the logical representation of your infrastructure and its `Capabilities`. You select a `Topology` in your Harmony project to define _where_ your `Scores` will be applied. - [Topologies Catalog](#topologies-catalog) - [HAClusterTopology](#haclustertopology) - [K8sAnywhereTopology](#k8sanywheretopology) ### HAClusterTopology - **`HAClusterTopology::autoload()`** This `Topology` represents a high-availability, bare-metal cluster. It is designed for production-grade deployments like OKD. It models an environment consisting of: - At least 3 cluster nodes (for control plane/workers) - 2 redundant firewalls (e.g., OPNsense) - 2 redundant network switches **Provided Capabilities:** This topology provides a rich set of capabilities required for bare-metal provisioning and cluster management, including: - `K8sClient` (once the cluster is bootstrapped) - `DnsServer` - `LoadBalancer` - `DhcpServer` - `TftpServer` - `Router` (via the firewalls) - `Switch` - `NetworkManager` (for host-level network config) --- ### K8sAnywhereTopology - **`K8sAnywhereTopology::from_env()`** This `Topology` is designed for development and application deployment. It provides a simple, abstract way to deploy to _any_ Kubernetes cluster. **How it works:** 1. By default (`from_env()` with no env vars), it automatically provisions a **local K3D (k3s-in-docker) cluster** on your machine. This is perfect for local development and testing. 2. If you provide a `KUBECONFIG` environment variable, it will instead connect to that **existing Kubernetes cluster** (e.g., your staging or production OKD cluster). This allows you to use the _exact same code_ to deploy your application locally as you do to deploy it to production. **Provided Capabilities:** - `K8sClient` - `HelmCommand` - `TenantManager` - `Ingress` - `Monitoring` - ...and more.