When you need high availability, all you really need to think about is redundancy. Let me explain…
If you want to make your database highly available for reads, add replicas. If you want to make sure your disk can tolerate hardware wear and tear, configure RAID. The core idea is to make sure your data lives in multiple places so if one copy fails, you have got backups ready to serve.
If you want to make sure your system does not go down when an API server fails, add redundancy - more API servers abstracted behind a load balancer, with appropriate scaling policies in place. This is an example of compute redundancy.
Similarly, you can make your network redundant to attain high availability. For example, you can deploy your application in multiple data centers, use CDNs with edge nodes distributed worldwide, and so on.
In data centers, there is physical redundancy through network cables, power supplies, and network switches so that physical damage to any component does not cause an interruption.
The pattern is always the same - identify your single points of failure and add redundancy. More copies, more paths, more options.
High availability is all about making sure that when (not if) something breaks, you have got a backup ready to take over.
Hope this helps.