Crossplane/Terraform
To help you read:
- Introduction to Cloud Computing
- What is Container Orchestration?
- Kubernetes Container Orchestration
- How to make Kubernetes user-friendly for developers?
This doc isn’t just for reading, it’s for trying too. Watch for the “Try it” texts in red throughout this document so you can learn by doing.
Introduction to Cloud Computing
You are licensed per server, you could save this cost when the organization moves to an online third-party/Cloud Server Storage Services.
There are four main types of cloud computing: private clouds, public clouds, hybrid clouds, and multi-clouds. There are also three main types of cloud computing services: Infrastructure-as-a-Service (IaaS), Platforms-as-a-Service (PaaS), and Software-as-a-Service (SaaS).
Try It: But given the cost and maintenance, it’s a smart way to switch to the cloud or virtual storage by choosing an excellent storage plan offered by the cloud hosting providers.
Other Cloud Services
XaaS, also known as “Anything as a service” (XaaS), is a broad category of cloud services linked to cloud computing and remote access.
We already know a lot about three main models (SaaS, PaaS, and IaaS), but there are others, lesser known, but still used for different purposes.
Analogs:
Disaster recovery as a service (DRaaS), monitoring as a service (MaaS) – a mobile device management platform, database as a service (DBaaS), communications as a service (CaaS), desktop as a service (DaaS), network as a service (NaaS), and storage as a service (StaaS).
Platform as a Service (PaaS) defined:
Its primary role is to provide the software and hardware tools needed for application development for a software developer. To be able to run or develop an application on PaaS, users don’t have to install hardware and the software as the PaaS provider takes care of hosting the software and hardware on their infrastructure. A few examples of PaaS providers may be Google App Engine, AWS, and Microsoft.
However, PaaS has its own limitations. PaaS execution can be a challenging task. With PaaS, there have also been multiple concerns regarding data isolation, multi-tenancy, and data security.
Finally, an organization can work with legacy applications that can be difficult to build in this environment. PaaS tools may not adequately serve the application network.
Container as a Service (CaaS) defined:
It is a combination of IaaS (Infrastructure as a Service) and PaaS. It can even be termed as a subset of IaaS. The provider offers the framework on which the containers are deployed and managed, and it’s through this orchestration that key IT functions are automated. Examples of CaaS services are Amazon Elastic Container Service (ECS), Amazon Fargate, and Azure Container Instances (ACI).
CaaS can prove to be a costly business in comparison to PaaS. Moreover, developers and designers need to be thorough with the technology and skills in order to implement their ideas on the platform.
But, how do we make it user-friendly for developers?…
What is Container Orchestration?
Container orchestration is the automation of a large portion of the operational effort required to perform containerized workloads and services. This includes a wide variety of things that software teams need to manage the life cycle of a container, including provisioning, deployment, scaling (up and down), networking, load balancing, and more.
What is Containerization?
Containerization helps developers create and deploy applications in a faster and more secure way. With traditional methods, code is developed in a specific IT environment which, once transferred to a new location, often causes bugs and errors. For example, when a developer transfers code from a desktop computer to a virtual machine (VM) or from a Linux to a Windows operating system. Containerization eliminates this problem by grouping the application code with the configuration files, libraries, and dependencies necessary for its execution. This single package of software or “container” is abstracted away from the host operating system, and hence, it stands alone and becomes portable—able to run across any platform or cloud, free of issues.
There are various container orchestration tools available on the market now, but let’s talk more about Kubernetes here.
Kubernetes Container Orchestration
Kubernetes (sometimes shortened to K8s with the 8 standing for the number of letters between the “K” and the “s”) is an open-source container orchestration platform developed by Google. It helps manage distributed container clusters, often used in microservices and other distributed applications. Kubernetes is highly resilient and supports zero downtime, rollback, scaling, and self-healing of containers.
Google Kubernetes Engine (GKE) is a simple way to automatically deploy, scale, and manage Kubernetes, that supports the common Docker container format.
Kubernetes is neither IaaS nor PaaS. It’s a container orchestration engine which makes it more like a Container as a Service or CaaS. You need an IaaS layer below Kubernetes with the help of AWS EC2 or bare metal servers.
Using Kubernetes, you can run any type of containerized application using the same toolset on-premises and in the cloud.
How to make Kubernetes user-friendly for developers?
It is easy to make kubernetes user-friendly for developers, but by essentially following the factors outlined below:
- Establish realistic goals
- Adopt strategies and scale efficiently
- You can monitor your business growth
- Automating CI (Continuous Integration) pipeline
- You can be ready for a disaster and recovery
- Defined work or structured documentation (K8s API)
- More discussions on Developer’s community forums (team collaboration improvement)
- Trying Open Source Developer Tools for Kubernetes

Kubernetes production resources are often complex parts of YAML with parameters related to security, performance, hardware utilization, observability and so on.
A typical containerized application running on Kubernetes for stateless applications will require
- deployment
- service
- service account
- roles and cluster roles
- role bindings
- secret
- config map
- network policies
- HPA (horizontal pod autoscaler)
For stateful applications:
- volumes
- persistent volume claim
- storage class configuration
- stateful sets
What is a custom resource definition (CRD)?
A custom resource definition (CRD) is a powerful feature introduced in Kubernetes 1.7. The standard Kubernetes distribution ships with many built-in API objects and resources. CRDs enable IT admins to introduce unique objects or types into the Kubernetes cluster to meet their custom requirements.
CRDs come along with additional features like service meshes, observability tech, security scanners, etc.
You can easily find the resources marked with *, and learn deeply about these resources using Kubernetes provider’s help documentation and other GitHub resources.
You can create a simple composition with only important fields, like:
- namespace to deploy to
- image with tag
A composite resource is created either directly or by a dedicated claim:
apiVersion: acmeplatform.com/v1alpha1
kind: AppClaim
metadata:
name: platform-demo
labels:
app-owner: piotrzan
spec:
id: acmeplatform
compositionSelector:
matchLabels:
type: frontend
parameters:
namespace: devops-team
image: piotrzan/nginx-demo:green
Crossplane/Terraform Kubernetes Provider
Kubernetes Provider helps us shift left without overwhelming developers with complex operational concerns. Our goal is to help developers and application teams to focus on providing reliable and fast features and fixing bugs, etc. At the same time, there are security and operational concerns that must be addressed. Those concerns will vary by team, and by the project.
The best part about the Kubernetes Provider is that it seamlessly enables collaboration between Application Teams and Platform Teams, by leveraging Kubernetes Control Plane as the convergence point where everyone meets.
You may have a patch ready to use to get away from the risks!!!
