Originally published on LinkedIn on 2023-05-12.

Intro Link zu Überschrift

In 2007, when I started to work in tech, IT administrators relied often on shell scripts to automate their workflows. Virtualisation was not that popular and tools like PXE boot and bootstrap files where used to automate the installation of operating systems on multiple servers simultaneously. The network layer was very often operated without automation at all. Later, KVM was also gaining popularity, enabling administrators to create and manage virtual machines. As infrastructure became more complex, configuration management tools like Chef and Ansible became popular, allowing administrators to define infrastructure as code and apply configuration changes across multiple servers quickly and easily.

OpenNebula, an open-source cloud computing platform, emerged in 2008 as a popular alternative to commercial cloud providers. OpenNebula provided IT administrators with a way to build private cloud infrastructures, enabling organizations to retain complete control over their data. OpenNebula offers a simple and flexible solution to build and manage virtualized infrastructures in both private and hybrid cloud environments.

The rise of cloud computing led to the development of Infrastructure as Code (IaC) tools like Terraform and Packer. Terraform made it possible to define infrastructure as code and manage cloud resources across multiple cloud providers, while Packer enabled IT administrators to create machine images for different cloud platforms.

With the emergence of containerization, IT administrators turned to container orchestration tools like Kubernetes. Kubernetes provided features like automatic scaling, load balancing, and self-healing, making it possible to manage containers at scale.

To manage sensitive information like passwords and API keys, IT administrators turned to tools like Vault. Vault is an open-source tool that enables IT administrators to securely store and manage secrets, ensuring that sensitive information is kept secure and accessible only to authorized users.

Kubernetes operators like cloudnative-pg and external-secrets-operator have been particularly helpful in managing Kubernetes applications and secrets stored in external systems. The cloudnative-pg operator automates the management of PostgreSQL databases, while the external-secrets-operator enables IT administrators to manage secrets stored in external systems like Vault.

Finally, IT administrators have adopted GitOps workflows using tools like ArgoCD to manage their infrastructure as code. With GitOps, all configuration is stored in a Git repository, and ArgoCD enables IT administrators to define their infrastructure as code and manage it using Git.

In conclusion, building and managing IT infrastructure has become more complex over the past two decades, but the emergence of new tools and technologies has made it possible to build highly efficient, secure, and scalable infrastructures. From PXE and KVM to OpenNebula and GitOps, IT administrators have had to adapt to new tools and technologies to keep up with the ever-changing IT landscape.

GitOPS with ArgoCD Link zu Überschrift

GitOps is a modern approach to managing IT infrastructure that emphasizes the use of Git repositories to store and manage configuration. The idea is to store everything related to infrastructure as code in a Git repository, including configuration, policies, and even application code. By doing so, IT teams can easily manage and version control all aspects of their infrastructure, making it more reliable, consistent, and secure.

ArgoCD is an open-source GitOps tool that makes it easy to deploy and manage Kubernetes applications. ArgoCD can be used to automate the deployment of applications to Kubernetes clusters, monitor the state of the deployed applications, and roll back changes if necessary.

The workflow starts with the creation of a Git repository that contains all the configuration files for the kubernetes infrastructure. This Git repository is then connected to ArgoCD, which is configured to watch for changes in the repository. Whenever there is a change, ArgoCD automatically deploys the new version of the infrastructure to the target environment.

One of the key features of ArgoCD is the concept of ApplicationSets. ApplicationSets are a way to deploy multiple similar applications using a single configuration. This is particularly useful when deploying applications across multiple environments or clusters, where each environment or cluster requires a slightly different configuration. With ApplicationSets, IT teams can define a single configuration that can be customized for each environment or cluster, making it easy to manage and deploy multiple similar applications.

ArgoCD also provides several other features that make it easy to manage and deploy Kubernetes applications, including:

  • Rollouts: ArgoCD provides a built-in rollouts feature that enables IT teams to manage the deployment of new versions of applications, ensuring that updates are rolled out gradually and safely.
  • Health monitoring: ArgoCD provides real-time monitoring of the health of deployed applications, enabling IT teams to quickly identify and fix issues as they arise.
  • Automated deployment: ArgoCD can automatically deploy new versions of applications as soon as they are available in the Git repository, ensuring that the infrastructure is always up-to-date.

Overall, ArgoCD provides a powerful and flexible GitOps tool for managing Kubernetes applications. By using ApplicationSets, IT teams can easily deploy and manage multiple similar applications, making it easy to manage large and complex infrastructures. With its advanced features like rollouts and health monitoring, ArgoCD makes it easy to deploy and manage applications with confidence, knowing that they are always up-to-date and running smoothly.

Kustomize Overlays Link zu Überschrift

Kustomize is a tool for Kubernetes that allows you to customize and configure your Kubernetes applications by using declarative configuration files. It is used for managing complex deployments that require customization of resources across different environments.

Kustomize uses a simple directory structure to organize your Kubernetes resources. By using overlays and patches, it can make changes to a base configuration without modifying the base directly. This makes it easy to maintain and reuse common configurations while still allowing for environment-specific customizations.

One of the key benefits of Kustomize is that it allows you to manage configuration files in a scalable and maintainable way. Rather than creating multiple copies of the same configuration files for different environments, Kustomize enables you to maintain a single base configuration and create overlays for each environment. This reduces the amount of duplication and makes it easier to manage configuration files as they change over time.

Es wurde kein Alt-Text für dieses Bild angegeben. kustomize overlay for environments

Kustomize also provides a simple way to manage environment-specific variables and secrets. By using Kubernetes ConfigMaps and Secrets, you can create environment-specific values that can be used to customize your application at runtime.

Another benefit of Kustomize is that it is integrated with other Kubernetes tools, such as kubectl. This means that you can use Kustomize alongside other tools to manage your Kubernetes resources.

Overall, Kustomize is a powerful tool that simplifies the management of Kubernetes configurations. By using a declarative approach to configuration management, it makes it easier to maintain and scale your Kubernetes applications.

App of Apps Link zu Überschrift

The “app of apps” pattern is a design pattern used in Kubernetes to manage complex applications and environments. It allows you to organize multiple related applications or components into a single parent application that can be managed as a whole.

The basic idea behind the app of apps pattern is to create a top-level application that is responsible for deploying and managing multiple child applications, or “sub-applications”. Each sub-application can be a complex application with its own deployment, services, and other Kubernetes resources.

By using the app of apps pattern, you can manage your entire application stack as a single entity. This makes it easier to deploy and manage complex applications and environments, especially in cases where you have many interdependent components.

Es wurde kein Alt-Text für dieses Bild angegeben.

Es wurde kein Alt-Text für dieses Bild angegeben. app of apps pattern

Secrets Management Link zu Überschrift

HashiCorp Vault is a tool for managing secrets and sensitive data in modern IT environments. It provides a secure and centralized way to store, access, and manage secrets such as passwords, encryption keys, API keys, and other sensitive data.

The main goal of Vault is to provide a secure storage system for secrets, while also providing fine-grained access control and auditing capabilities. Vault uses a variety of encryption techniques, such as encryption-at-rest and encryption-in-transit, to ensure the security of the data it manages. It also provides a range of access control features, such as role-based access control (RBAC), that allow IT teams to manage who has access to which secrets.

Es wurde kein Alt-Text für dieses Bild angegeben. manage and version secrets with vault-ui

Vault provides a simple API for accessing and managing secrets, making it easy to integrate with other tools and applications. IT teams can use Vault’s API to programmatically retrieve and manage secrets, allowing them to build secure and automated workflows.

One of the key features of Vault is its ability to generate dynamic secrets. With dynamic secrets, Vault can generate and manage temporary credentials for various systems and services, such as databases, cloud providers, and SSH. This enables IT teams to automatically generate and rotate credentials for these systems and services, reducing the risk of credential theft and misuse.

Overall, Vault is a powerful and flexible tool for managing secrets in modern IT environments. By providing a secure and centralized way to manage sensitive data, Vault enables IT teams to build secure and automated workflows while reducing the risk of data breaches and credential theft.

External Secrets within Kubernetes Link zu Überschrift

The External Secrets Operator is a Kubernetes operator that enables the Kubernetes cluster to securely access secrets stored outside of the cluster, such as in HashiCorp Vault or AWS Secrets Manager. It simplifies the process of managing secrets by providing a declarative way to define external secret mappings, and automatically syncing secrets between the external store and Kubernetes.

The External Secrets Operator uses the Kubernetes Custom Resource Definition (CRD) to define external secrets. These CRDs describe the metadata of an external secret, such as the name, key-value pairs, and where the secret is stored. Once these CRDs are created, the External Secrets Operator retrieves the secrets from the external store and stores them in a Kubernetes secret. This ensures that the secrets are accessible to Kubernetes workloads, without requiring direct access to the external store.

Es wurde kein Alt-Text für dieses Bild angegeben. manifest to define ExternalSecret

One of the key benefits of the External Secrets Operator is that it simplifies the management of secrets. It eliminates the need for developers to manually manage secrets and provides a centralized location to manage and audit secrets. Additionally, because secrets are managed externally, developers do not need to have direct access to the secret store, which improves security and reduces the risk of credential leaks.

Another benefit of the External Secrets Operator is that it is highly flexible and can be easily integrated with a variety of external secret stores, including HashiCorp Vault, AWS Secrets Manager, and Azure Key Vault. This makes it easy for Kubernetes clusters to securely access secrets stored in different environments.

Overall, the External Secrets Operator is a powerful tool that simplifies the management of secrets in Kubernetes clusters. By enabling Kubernetes clusters to securely access external secrets, it makes it easier for developers to build secure and scalable applications.

Monitoring Link zu Überschrift

Prometheus Operator is a tool for managing and deploying Prometheus instances on Kubernetes clusters. It simplifies the process of setting up, configuring, and scaling Prometheus, making it easier to monitor Kubernetes applications and infrastructure.

One of the key components of Prometheus Operator is kube-prometheus. Kube-prometheus is a bundle of Kubernetes manifests and Grafana dashboards that are used to deploy and configure Prometheus and Grafana on Kubernetes clusters. It provides a set of pre-configured dashboards that can be used to monitor Kubernetes components such as nodes, pods, and services, as well as the health and performance of Kubernetes applications.

Kube-prometheus includes Prometheus itself, which is responsible for collecting metrics data from various sources, such as Kubernetes API servers, nodes, and applications. It also includes Alertmanager, which is used to manage and send alerts based on the metrics collected by Prometheus.

In addition, kube-prometheus includes Grafana, which is used to visualize and analyze the metrics collected by Prometheus. Grafana provides a rich set of visualization options, including charts, graphs, and dashboards, which can help operators and developers to understand the performance and health of their Kubernetes applications and clusters.

Kube-prometheus also includes a set of Kubernetes manifests that define the various components of the Prometheus and Grafana deployments. These manifests are used to configure and customize the deployments to suit the needs of the Kubernetes cluster.

Overall, kube-prometheus is a powerful tool that makes it easy to set up and manage Prometheus and Grafana on Kubernetes clusters. It provides a set of pre-configured dashboards and tools that can be used to monitor Kubernetes applications and infrastructure, making it easier for operators and developers to troubleshoot issues and optimize the performance of their Kubernetes deployments.

Es wurde kein Alt-Text für dieses Bild angegeben.

Logs Link zu Überschrift

Loki is a horizontally-scalable, highly-available, multi-tenant log aggregation system designed to be very cost-effective. It allows users to collect, store, and query log data from their applications and services in a highly efficient and customizable way. Loki uses a unique indexing and storage strategy that enables it to quickly search through and retrieve logs, making it an ideal solution for managing large amounts of log data in a cloud-native environment. Additionally, Loki integrates seamlessly with other popular logging and monitoring tools such as Prometheus and Grafana

I ran Loki since a while outside of kubernetes, one of my next projects will be to figure out how to use loki-operator and integrate it into my kubernetes environments.

Conclustion Link zu Überschrift

The advent of GitOps and tools like ArgoCD and Kustomize have further streamlined the process of managing and deploying infrastructure, allowing administrators to define and manage complex applications and environments in a simple and scalable way. The app of apps pattern has also emerged as a powerful way to manage complex deployments, allowing administrators to define and manage entire application stacks as a single unit.

Throughout all of these changes, the role of the IT administrator has remained essential. While the tools and technologies have evolved, the need for skilled professionals who can design, build, and manage complex IT environments has remained constant. As we move forward into an increasingly digital and automated world, the role of the IT administrator will only continue to grow in importance.

It’s very welcome if you would like to share your experience with these topics. Just write a comment or write me a message.

Es wurde kein Alt-Text für dieses Bild angegeben. CowAI

Yes some parts of this article are written by AI, I’m a technician and not a writer. And as convinient IT Admin/DevOps Engineer I like to use tools. ;-)

There are plenty of tutorials and sources about these topic. Perhaps some of these links can help to get a better understanding.

Embedded: What is GitOps?

Embedded: Infrastructure as Code with Terraform and GitLab | GitLab

Embedded: Overview ¶

Embedded: Introduction

Embedded: Kustomize

Embedded: Overview ¶

Embedded: Cluster Bootstrapping ¶

Embedded: HashiCorp Vault - Manage Secrets & Protect Sensitive Data

Embedded: Prometheus Operator

Embedded: Grafana Loki OSS | Log aggregation system