<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[alpa.sh]]></title><description><![CDATA[10x Software Development, Architecture and the Cloud]]></description><link>https://alpa.sh</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1724160830520/d8e9670b-c050-45ef-b120-26bed99994b6.png</url><title>alpa.sh</title><link>https://alpa.sh</link></image><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 21:56:58 GMT</lastBuildDate><atom:link href="https://alpa.sh/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[A Strange Death of DevOps]]></title><description><![CDATA[About 15 years ago DevOps was born: a movement that promised unseen improvements in time to market and software quality. It aimed to remove the silos between the development and operations teams, thus DevOps, and make the process of software delivery...]]></description><link>https://alpa.sh/a-strange-death-of-devops</link><guid isPermaLink="true">https://alpa.sh/a-strange-death-of-devops</guid><category><![CDATA[Devops]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[System administration]]></category><dc:creator><![CDATA[Alexander Pashkov]]></dc:creator><pubDate>Sun, 08 Dec 2024 10:45:04 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/6luVOchQ934/upload/8007cd31486510bddba0997ddbb40615.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>About 15 years ago DevOps was born: a movement that promised unseen improvements in time to market and software quality. It aimed to remove the silos between the development and operations teams, thus DevOps, and make the process of software delivery to the end user, which involved both, much more efficient.</p>
<p>Nowadays, “DevOps Engineer” (and some newer derivatives like DevSecOps and MLOps) jobs are an industry standard, and required skills usually include knowledge of cloud platforms like AWS, infrastructure-as-code tools, container orchestrators like Kubernetes, build-servers like Jenkins and monitoring solutions like Prometheus and Grafana. The actual job responsibilities usually include provisioning, configuring, and maintaining cloud infrastructure, build pipelines, and monitoring. Many roles require only minimal interaction with the developers, some close to none. But wait, we were supposed to get rid of the division between development and operations, weren’t we?</p>
<p>I call such roles “Cloud System Administration”, inspired by a book with almost the same name. Let’s see how Wikipedia defines “System administrator”:</p>
<p><em>An IT administrator, system administrator, sysadmin, or admin is a person who is responsible for the upkeep, configuration, and reliable operation of computer systems, especially multi-user computers, such as servers. The system administrator seeks to ensure that the uptime, performance, resources, and security of the computers they manage meet the needs of the users, without exceeding a set budget when doing so.</em></p>
<p>If you add the word “cloud” a few times here and there, you will get an accurate description of what the vast majority of freshly coined DevOps engineers do, despite in the cloud.</p>
<p>So how can we revive DevOps? Let’s remember a few things.</p>
<h3 id="heading-devops-is-not-about-tools-its-about-the-process"><strong>DevOps is not about tools, it’s about the process</strong></h3>
<p>DevOps is about making the delivery of the features to the end users more efficient. It’s about increasing the development speed and decreasing the number of bugs in production. It’s about decreasing the lead time (how much time has elapsed between committing code and deploying it to production), increasing MTBF - mean time between failures (elapsed time between inherent failures of a mechanical or electronic system during normal system operation), and decreasing MTTR - mean time to restore (the time it takes to restore service after production failure). As you work on improving these metrics, you will likely have to use the cloud and all other aforementioned tools, but tools are just tools, they are not the end goal.</p>
<p>For example, if your application suffers from a memory leak that your development team doesn’t have time to fix, you can increase the mean time between failures (MTBF) observed by the user by deploying a set of its replicas to a container orchestrator (e.g. Kubernetes, or AWS ECS) with a configured memory-limits. After a certain threshold, the application will be restarted and operational until the threshold is reached again. By having more than one replica we increase the chances of app availability when one of the replicas is restarted. However, deploying to the container orchestrator is just a tool to solve a problem, it’s not a goal in itself. To do DevOps you don’t have to be in the cloud or use any of the tools mentioned in the CNCF landscape.</p>
<h3 id="heading-you-cannot-outsource-devops">You cannot outsource DevOps</h3>
<p>DevOps is about improving your end-to-end process, and if you are not interested in that, no one is, especially the contractors you hire. The contractors can be an extremely valuable asset by bringing the expertise you may lack in-house, but why you need those assets has to be driven from the inside and continuously reconciled to make sure, that the contractors’ work is aligned with your initial goals. I’ve seen atrocious cases of ignorance that cost the company a lot. The contractors come, do their work, get paid and the company ends up with a hefty bill and a complex useless system that has to be thrown out.</p>
<p>Thus, understand your goals, focus on simplicity, and try to develop or hire the expertise in-house.</p>
<h3 id="heading-summary">Summary</h3>
<p>To sum up, there is no such role as a DevOps engineer, you are either a cloud system administrator or a software engineer practicing DevOps and it’s more interesting to be the latter, than the former.</p>
]]></content:encoded></item><item><title><![CDATA[Robust Istio Upgrades in 7 easy steps]]></title><description><![CDATA[There are many articles that describe how to progressively roll out applications with Istio, but not about upgrading it itself. This article presents some shortcomings of the methods described in official documentation and proposes an alternative sol...]]></description><link>https://alpa.sh/robust-istio-upgrades-in-7-easy-steps</link><guid isPermaLink="true">https://alpa.sh/robust-istio-upgrades-in-7-easy-steps</guid><category><![CDATA[#istio]]></category><category><![CDATA[Kubernetes]]></category><dc:creator><![CDATA[Alexander Pashkov]]></dc:creator><pubDate>Sun, 18 Aug 2024 11:05:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/lbOllm0HCfc/upload/052730f46f644d480b3e94d7fbc24927.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>There are many articles that describe how to progressively roll out applications with Istio, but not about upgrading it itself. This article presents some shortcomings of the methods described in official documentation and proposes an alternative solution.</em></p>
<p>Istio consists of multiple components divided into the control plane and the data plane. Those components can be installed in multiple ways, in our case we were using Helm. The documentation presents two upgrade methods: in-place and canary and doesn't recommend using in-place upgrades for production.</p>
<h2 id="heading-canary-upgrade-and-its-problems">Canary upgrade and its problems</h2>
<p>Istio supports running two versions of the control plane in the cluster with them managing different namespaces with the help of revisions:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723974805405/d680d892-8cb4-46b6-96ce-d3f6b5bb7cb3.png" alt class="image--center mx-auto" /></p>
<p>Istio documentation suggests:</p>
<ol>
<li><p>deploying another canary control plane</p>
</li>
<li><p>deploying a new version of Istio Ingress Gateway</p>
</li>
<li><p>migrating existing workloads to the new revision by relabelling their namespaces</p>
</li>
</ol>
<p>The docs also admit that you probably won't be able to use Helm if don't want to create a new load-balancer for your Ingress Gateway:</p>
<blockquote>
<p>Because other installation methods bundle the gateway <code>Service</code>, which controls its external IP address, with the gateway <code>Deployment</code>, only the <a target="_blank" href="https://istio.io/latest/docs/setup/additional-setup/gateway/#tabset-docs-setup-additional-setup-gateway-1-2-tab">Kubernetes YAML method is supp</a>orted for this upgrade method.</p>
<p><a target="_blank" href="https://istio.io/v1.22/docs/setup/additional-setup/gateway/#canary-upgrade-advanced">https://istio.io/v1.22/docs/setup/additional-setup/gateway/#canary-upgrade-advanced</a></p>
</blockquote>
<p>This is, of course, an issue, because with a new load-balancer you would need to move all the traffic to it. In highly-secured environments this can be further complicated by security policies tightly coupled to fixed IP addresses.</p>
<p>To summarise, the officially proposed upgrade process involves multiple manual steps with direct access to the cluster. Coming back to highly-secured environments, sometimes it's not possible.</p>
<h2 id="heading-semi-canary-upgrade">Semi-canary upgrade</h2>
<p>Here I present an alternative solution that doesn't require as many manual steps. The idea is taken from Pratima Nambiar and her talk at the Isito meetup demo. The process is the following:</p>
<ol>
<li><p>Upgrade the CRDs</p>
</li>
<li><p>Install a canary control plane (skip this step if you have it running)</p>
</li>
<li><p>Have sample services managed by the canary control plane, and validate that everything is OK, e.g:</p>
<ol>
<li><p>Deploy a new service with new versions of Istio CRDs</p>
</li>
<li><p>Run smoke tests eon the services, checking that the traffic is flowing as expected</p>
</li>
<li><p>Observe control-plane metrics for apparent issues, pay special attention to metrics like <code>pilot_proxy_convergence_time</code>, <code>pilot_proxy_queue_time</code>, <code>pilot_xds_push_time</code>, <code>pilot_inbound_updates</code>, and <code>pilot_total_xds_rejects</code>. Read more about the metrics in the <a target="_blank" href="https://istio.io/v1.22/docs/reference/commands/pilot-agent/">documentation</a>.</p>
</li>
</ol>
</li>
<li><p>In-place upgrade the main control plane</p>
</li>
<li><p>Run the validations and observe the metrics</p>
</li>
<li><p>Rolling-restart production workloads for them to pick up new side-cars</p>
</li>
<li><p>Upgrade Ingress Gateway</p>
</li>
</ol>
<p>One of the crucial components of the reliability of this method is performing it on lower-tier environments first, thus reducing the likelihood of any issues to a minimum. Of course, upgrades on the lower-tier environments must be performed with the same versions of the components. It would not make sense to upgrade the <strong>istiod</strong> from 1.15.x to 1.16.x on dev and expect no issues upgrading from 1.21.x to 1.22.x in production.</p>
<h3 id="heading-why-this-works-and-why-its-robust">Why this works and why it's robust?</h3>
<p>When we upgrade Istio CRDs we don't expect incompatible changes in the save version. Thus, if we have a <code>DestinationRule</code> with <code>apiVersion: networking.istio.io/v1alpha3</code> we expect it to continue working and incompatibilities potentially introduced in <code>v1beta1</code>. To make sure that this is the case we should carefully read the release notes and do the testing on low-tier environments.</p>
<p>When we upgrade the canary-control plane we don't risk anything because it only manages sample workloads we use for smoke-testing. Istio can have multiple versions of the control planes in the cluster working simultaneously.</p>
<p>After we did the tests on the sample workloads we are sure that the control plane can work with new CRDs and the traffic is correctly flowing. If we use an existing gateway for the tests, we also test that traffic is flowing between two versions of the proxies: the Gateway is still running an old version, and sample workload running with new ones (in the side-cars). Now it's time to upgrade the main control plane and the ingress. We observe the metrics again and are prepared to do a swift rollback if we see issues.</p>
]]></content:encoded></item><item><title><![CDATA[Unquantifiable Value Propositions Flood the Market: Kubernetes This, AI That]]></title><description><![CDATA[Nowadays, advertisements bombard us with promises to revolutionize our lives: claims of unseen scalability, cost optimizations, agility, and enhanced developer productivity. The pitch is always the same: buy our service, and our magical software will...]]></description><link>https://alpa.sh/unquantifiable-value-propositions-flood-the-market-kubernetes-this-ai-that</link><guid isPermaLink="true">https://alpa.sh/unquantifiable-value-propositions-flood-the-market-kubernetes-this-ai-that</guid><category><![CDATA[software development]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[Values & Purpose]]></category><dc:creator><![CDATA[Alexander Pashkov]]></dc:creator><pubDate>Wed, 10 Jul 2024 07:11:09 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/nrnd1-fTsdQ/upload/806af5cf11e5ca50edbfb3565c7706bb.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Nowadays, advertisements bombard us with promises to revolutionize our lives: claims of unseen scalability, cost optimizations, agility, and enhanced developer productivity. The pitch is always the same: buy our service, and our magical software will solve all your problems.</p>
<p>Here lies the problem. Forty-nine years ago, Fred Brooks, in his seminal book The Mythical Man-Month, asserted that there is no silver bullet — no single software development technique, tool, or methodology that can increase development speed by an order of magnitude. His observation was that most time (and money) is spent dealing with the essential complexity of a project: domain models, data flow, and the like. Thus, the magical promises often fail to materialize. At best, these tools might reduce some accidental complexity, but it’s crucial to ensure that the cost of the tool or service is less than the benefit it brings.</p>
<p>Consider this example: a small company decides to “modernize” its infrastructure because it feels outdated, running a few services on mostly manually configured VMs. They see everyone moving to Kubernetes and feel the pressure to follow suit.</p>
<p>They embark on the journey, but the internal team needs to gain the skills and be eager to acquire them. The company needs help, so they hire external contractors who swear to deliver.</p>
<p>And deliver they do. The applications are containerized, Kubernetes clusters are spun up, and the GitOps methodology is strictly followed (God bless Flux and ArgoCD).</p>
<p>And what does the company get? An enormous amount of new accidental complexity on top of the essential one, and a hefty bill for the services delivered.</p>
<p>The developers need learn how to deal with containers, services, scheduling rules, new pipelines, etc. And remember: this is not what brings the revenue, this is new accidental stuff.</p>
<p>Thus arises the question: where is the money, Lebowski?</p>
<p>When embarking on such journeys, make sure you know what you’re doing and aren’t blindly following the latest trend. Remember, there’s no silver bullet.</p>
<p>Real value must be delivered for the greater benefit of everyone, whether you are the company that seeeks the service or a contactor that aims to provide it.</p>
]]></content:encoded></item></channel></rss>