140 lines
6.9 KiB
HTML
140 lines
6.9 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>xbazzi.com</title>
|
|
<meta property="og:image"
|
|
content="https://sadgrl.online/images/og/homepage.png">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<link rel="stylesheet" href="assets/style/style.css">
|
|
<!-- <script src="assets/scripts/load.js"></script> -->
|
|
<!-- <script src="//gc.zgo.at/count.js" data-goatcounter="https://sadgrl.goatcounter.com/count" async=""></script> -->
|
|
<link rel="icon" href="/assets/images/fav.gif" type="image/gif">
|
|
</head>
|
|
|
|
<body>
|
|
<div id="container">
|
|
<div class="topbar"></div>
|
|
<div id="flex">
|
|
|
|
<main>
|
|
<div class="wrapper">
|
|
<div class="title">
|
|
<a href="index.html">../</a>
|
|
Home datacenter project
|
|
</div>
|
|
<div class="content">
|
|
What first started as a project to play around with declarative deployments and container orchestration has now grown into a server stack that runs critical services for my day to day life.
|
|
<br>
|
|
<br>
|
|
The hyper-converged infrastructure consists of 3 physical servers, all running Proxmox Virtual Environment as a hypervisor.
|
|
One of these machines has a 6-slot HDD bay, which is where the TrueNAS instance is virtualized. Another server runs an OPNsense appliance for firewalling and routing.
|
|
All servers run k3s master/worker Debian nodes, declaratively provisioned with Ansible and a gitops workflow through flux. Every server is equipped with 10gbps SFP+ NICs, and
|
|
the Juniper EX3300 L3 switch also comes with 4 SFP+ 10gbps slots, allowing for relatively fast data transfer speeds on LAN.
|
|
<br>
|
|
<br>
|
|
All these virtualized environments and containerized applications need space for persistent storage, which is where TrueNAS comes in. It's a FreeBSD-based NAS system that runs on top of ZFS, which allows
|
|
for the creation of highly available and fault tolerant networked file systems. It currently consists of 2 x 6 TB HDDs configured in a mirrored pool, with a 500 GB NVMe SSD as an L2 cache, and 64 GB of RAM as L1 cache.
|
|
Because of the layered approach to caching frequently accessed data, we are able to saturate the 10gbps line when doing large-file data transfers (i.e. restoring backups).
|
|
|
|
<br>
|
|
<br>
|
|
<a href="assets/img/dc1.JPG"><img src="assets/img/dc1.JPG" class="blog-image"></a>
|
|
<br>
|
|
<br>
|
|
|
|
The diagram below depics the logical topology of the network and the connections to external services, namely Cloudflare and AWS.
|
|
|
|
<br>
|
|
<br>
|
|
<a href="assets/img/homelab_logical.png"><img src="assets/img/homelab_logical.png" class="blog-image"></a>
|
|
<br>
|
|
<br>
|
|
|
|
Two of the servers are ultra small form factor PCs, which made installing the massive 10gbps NICs extremely fun.
|
|
|
|
<br>
|
|
<br>
|
|
<a href="assets/img/dc2.JPG"><img src="assets/img/dc2.JPG" class="blog-image"></a>
|
|
<br>
|
|
<br>
|
|
|
|
Accessing the main server BMC webUI through the IPMI interface via Ethernet, bypassing any need to output video into a monitor.
|
|
|
|
<br>
|
|
<br>
|
|
<a href="assets/img/mb1.JPG"><img src="assets/img/mb1.JPG" class="blog-image"></a>
|
|
<br>
|
|
<br>
|
|
A home datacenter is what most Americans deserve, but don't need.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
</main>
|
|
|
|
<aside>
|
|
<div class="sidebar-container">
|
|
<div class="sidebar-title">Quick links</div>
|
|
<nav id="nav">
|
|
<ul>
|
|
<li>
|
|
<a href="index.html">Home</a>
|
|
</li>
|
|
</ul>
|
|
<ul>
|
|
<li>
|
|
<a href="https://github.com/alexbazzi" target="_blank"><span class="fa-brands fa-github"></span>GitHub</a>
|
|
</li>
|
|
</ul>
|
|
<ul>
|
|
<li>
|
|
<a href="https://linkedin.com/in/alexbazzi" target="_blank"><span class="fa-brands fa-linkedin"></span>LinkedIn</a>
|
|
</li>
|
|
</ul>
|
|
<a target='_blank' rel='noreferrer noopener'
|
|
href='mailto:x@xbazzi.com'>
|
|
<img style="height: 40px; margin: 10px;" src="assets/img/email.gif">
|
|
</a>
|
|
</nav>
|
|
</div>
|
|
|
|
<div class="sidebar-container">
|
|
<div class="sidebar-title">RSS feeds</div>
|
|
<div id="rss-feed">Loading...</div>
|
|
<script src="assets/scripts/rss.js" crossorigin="anonymous"></script>
|
|
|
|
</div>
|
|
</aside>
|
|
|
|
</div>
|
|
<footer id="footer"></footer>
|
|
</div>
|
|
<style>
|
|
.update {
|
|
border: 2px dashed var(--main-color);
|
|
padding: 5px;
|
|
}
|
|
main {
|
|
background-color: transparent !important;
|
|
}
|
|
.content {
|
|
background-color: var(--background);
|
|
}
|
|
.title {
|
|
margin-top: var(--content-spacing);
|
|
}
|
|
.title:first-child {
|
|
margin-top: 0 !important;
|
|
}
|
|
.myButton {
|
|
display:flex;
|
|
margin:0 auto;
|
|
width:150px;
|
|
}
|
|
.yw-content {
|
|
text-align: center;
|
|
}
|
|
</style>
|
|
|
|
</body></html> |