Managing Kubernetes Environments Using Namespaces and Terraform

In the last several years, Kubernetes has become the “go-to” standard for managing and orchestrating containerized workloads. Thanks to its vendor-agnostic nature, you can easily run Kubernetes almost anywhere, and in fact, all the major cloud vendors offer a managed Kubernetes service (AWS EKS, Google GKE, and Azure AKS).

With Kubernetes, one of the key advantages is the ease of managing multiple environments and workloads in a single cluster, by separating the cluster into logical areas using namespaces. This post will dive into how we can manage this by using Terraform to manage the cluster provisioning as well as manage the namespaces.

An Introduction to AWS Cloud Development Kit – CDK

The introduction of Cloud Development Kit (CDK) by AWS has been a valuable addition to its bouquet of services. CDK is an Infrastructure as Code (IAC) service from AWS. Yes, you could create cloudformation scripts in json or yaml and use it to provision your infrastructure. But who likes to write json files? I have always been averse to developing large json scripts to provision and maintain my infrastructure on AWS. I always wondered why isn’t there a simpler way of doing this – like developing deployment scripts on my favourite programming language.

AWS heard me alright and came up with CDK last year. CDK helps to define infrastructure in code and provision them through Cloudformation. With CDK it’s so much easier to build reusable deployment scripts. Moreover, it facilitates the use of the core features of a programming language in structuring and generating Cloudformation scripts. I decided to take it out for a spin to ascertain whether it really keeps up to its promises. Here, I’ll provide a sneak peek - an example to create a static website on S3.

GitOps: How to Ops Your Git the Right Way

Nowadays, there’s no lack of articles about the GitOps approach, ArgoCD, and other tools for Kubernetes configuration management and application deployments. Yet most of them are pretty high level, or don’t go beyond the “hello world” level. 

In this series of articles, I’m going to explain in detail (and with examples) how to build Kubernetes infrastructure with the GitOps approach. We’ll talk about your Git repos, CI/CD pipelines for specific environments, and ways to organize your work and your automation. These guides represent and generalize my experience of building GitOps environments in different companies with different needs.

NetApp and DevOps: How We Did It

For the last several years, NetApp has been on our own DevOps journey. We made the decision to adopt DevOps methodologies and technologies into our own systems. Led by our internal IT team, we've taken the steps to a software-defined, cloud-based data center with end-to-end DevOps workflow automation. So, how is it going and what can you learn from our experience?

Want your team to stay focused through your own DevOps journey? Check out Best Practices for Adopting a DevOps Culture.

Which Three Hot Markets Are Undergoing Cloud-Native Disruption?

Cloud-native computing is perhaps the most important trend in enterprise IT today. At its core, cloud-native extends the benefits of cloud computing to the entire IT landscape, including on-premises tech as well as the edge.

The open-source container orchestration platform Kubernetes has grabbed the cloud-native flag, with a surprisingly rapid uptake in adoption across the Global 2000. Kubernetes, however, is only part of the cloud-native story.

Infrastructure-as-Code: Testing and Monitoring

In my last post, I talked about the evolution of Infrastructure-as-Code and its role in modern software development. To recap, let's take a quick look back at what an IaC process establishes: in a nutshell, IaC is a methodology that enables you to manage your servers and deploy your applications purely through code. Through some configuration language saved to a file, you define the resources and packages that servers need. These files can be checked into source control, and establish consistent behavior for your application across all of its environments, whether that's production, staging, or a local dev machine. A basic IaC workflow might look something like this:

Essentially, you come up with a top-level design of your infrastructure: what are you trying to achieve, and what services do you need to provide? You declare the dependencies that your applications need, everything from disk partitions, system packages, dependent services, and so on (e.g., if I have a web application, it depends on Apache, Memcache, and MySQL, to name a few). In parallel to that, you'd typically be writing code to provision your infrastructure as well, whether that's cloud resources or virtual machines on bare metal. That code is then reviewed and deployed into the world. Over time, as your application grows and its requirements change, these steps are iterated on over and over again.

Should We Start Baking Immutable Infrastructure Instead of Frying On-Demand?

It is an age-old dilemma that awaits me every time I walk into the chip shop. Should I go for the fried-to-order fish? Or the baked and ready-to-eat meat pie? A similar question can arise in the context of how to build infrastructure.

Photo by Laurenz Kleinheider on Unsplash

The Fried-To-Order Approach

"Frying" infrastructure on-demand is the default approach to building infrastructure. Pick up an IaC tool or two and program it to carry out the same steps as you would follow while doing a manual installation.

Infrastructure-as-Code: Evolution and Practice

As infrastructure has evolved and matured over the last decade, the way in which we build and deploy that infrastructure has — for the most part — kept pace. As the velocity of deployments increased, and practices such as continuous deployment and delivery became the norm, it became critical that we manage infrastructure and deploy applications in a similar way.

From this need arose "Infrastructure-as-Code" (IaC), the management of infrastructure (and everything therein, from networks to VMs to load balancers) that provides the foundation for your apps. By deploying and codifying your deployments in the same way, you establish one framework — one source of truth — for the state of configuration for everything from your infrastructure to your applications. As Jesse Robins and John Allspaw put it in Web Operations, IaC lets you: "Enable the reconstruction of the business from nothing but a source code repository, an application data backup, and bare metal resources."

Verifying Infrastructure, Using Ansible With Very Little Knowledge of It

Introduction

Ansible has been a popular tool for verifying Linux-based infrastructure environment. Usage of the standup module makes it extremely easy as it demands very little knowledge of Ansible itself.

An infrastructure environment, whether it is provisioned in a public cloud or private cloud or built using bare-metal machines in a data center, would need some amount of verification before deploying applications, however ephemeral the life of infrastructure would be. Typically, such verifications are needed during various stages of provisioning and configuring a cluster of machines, and, later when that cluster is available as the infrastructure for running software systems.