<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Architecture Decision Records on Nimbus</title><link>https://k-s-pavan-kumar.github.io/hugo-nimbus/adr/</link><description>Recent content in Architecture Decision Records on Nimbus</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 01 Jun 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://k-s-pavan-kumar.github.io/hugo-nimbus/adr/index.xml" rel="self" type="application/rss+xml"/><item><title>Adopt GitOps for cluster configuration</title><link>https://k-s-pavan-kumar.github.io/hugo-nimbus/adr/0002-gitops-cluster-config/</link><pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate><guid>https://k-s-pavan-kumar.github.io/hugo-nimbus/adr/0002-gitops-cluster-config/</guid><description>&lt;h2 id="context"&gt;Context&lt;/h2&gt;
&lt;p&gt;Cluster configuration changes currently happen via direct &lt;code&gt;kubectl apply&lt;/code&gt;
from engineer laptops. We have no audit trail and drift between clusters is
common.&lt;/p&gt;
&lt;h2 id="decision"&gt;Decision&lt;/h2&gt;
&lt;p&gt;Adopt a GitOps workflow (Argo CD) where the Git repository is the single
source of truth for cluster state, and all changes go through pull request
review.&lt;/p&gt;
&lt;h2 id="consequences"&gt;Consequences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Every config change is reviewable and revertible via Git history.&lt;/li&gt;
&lt;li&gt;Emergency changes need a documented break-glass procedure, since direct
&lt;code&gt;kubectl apply&lt;/code&gt; will be restricted in production namespaces.&lt;/li&gt;
&lt;li&gt;Requires migrating ~40 existing manifests into the GitOps repo before
enforcement can begin.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Use PostgreSQL as the primary datastore</title><link>https://k-s-pavan-kumar.github.io/hugo-nimbus/adr/0001-postgresql-primary-datastore/</link><pubDate>Sat, 10 Feb 2024 00:00:00 +0000</pubDate><guid>https://k-s-pavan-kumar.github.io/hugo-nimbus/adr/0001-postgresql-primary-datastore/</guid><description>&lt;h2 id="context"&gt;Context&lt;/h2&gt;
&lt;p&gt;We need a primary datastore for the new billing service. The team has
production experience with both PostgreSQL and MongoDB, and the data model
is relational (accounts, invoices, line items with foreign keys).&lt;/p&gt;
&lt;h2 id="decision"&gt;Decision&lt;/h2&gt;
&lt;p&gt;We will use PostgreSQL 16, managed via RDS, as the primary datastore for all
new services unless a specific workload has a strong document-store or
time-series justification.&lt;/p&gt;
&lt;h2 id="consequences"&gt;Consequences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Schema migrations require a formal review (see &lt;code&gt;docs/migrations&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;We standardize on one connection-pooling strategy (PgBouncer) across
services, simplifying on-call runbooks.&lt;/li&gt;
&lt;li&gt;Document-shaped data (e.g. audit logs) will need a deliberate exception
request rather than defaulting to Postgres JSONB columns.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>