Container Orchestration and Kubernetes
Tags: kubernetes, docker, beginners, devops
Published: 2022-12-19 07:28:47

Containers quickly became the norm for how we built and packaged our applications. They made the software delivery and development cycle easy by providing a convenient way to run applications anywhere - without having to worry about setting the environment up from scratch every time. But, to run our containerized applications in production, we still needed to solve a few pieces of the puzzle.

## Running Containers in Production
Since we shifted to a microservices based architecture, we started having a separate container for each microservice. But containers are meant to be ephemeral, and things can and do go wrong in production. This can lead to containers going down unexpectedly. And this is just one of the many problems associated with running containers in production. Long story short, we couldn’t just run containers directly to serve our applications. We needed something to manage these running containers - a container orchestrator.

Managing a few containers to serve your application might still be possible with manual effort, but to run containers at scale, we needed some way to automate all the operational tasks associated with container management. Container orchestrators take care of all this. They are responsible for managing the complete container lifecycle and ensuring your applications are always up and running for users to access. They remove the manual effort of monitoring and managing containers by automating the whole process. Some of the tasks they generally take care of are:

- Deploying containers with the correct application images
- Monitoring provisioned containers and checking if they are healthy
- Scaling up or down the number of containers based on the application traffic
- Balancing load between different running containers

When it came to container orchestrators, two prominent names appeared: [Docker Swarm](https://docs.docker.com/get-started/swarm-deploy/) and [Kubernetes](https://kubernetes.io/). Let’s see how they differ and which one might be ideal for your use case.

## Docker Swarm vs Kubernetes
Both Docker Swarm and Kubernetes can help you orchestrate your containers. Deciding between the two primarily depends on your use case. Docker Swarm is an easy to set up and maintain solution when you want to manage simple workloads. It has a lower learning curve and is lightweight. If you have a relatively simple application and don’t have the time to invest in a complex solution, Docker Swarm might be the better choice for you. Kubernetes, on the other hand, offers a lot more features and should be the choice if you want to run complex workloads at scale effectively. It has a lot larger open source community than Docker Swarm and is offered by all the major cloud providers. It also has a vast ecosystem of tools built around it which extend its capabilities and make it the ideal choice for enterprises managing their microservices based applications. But the problem with Kubernetes is that it can be tough to learn and set up when getting started initially.

> If you’re looking to get started with Kubernetes, check out our [Kubernetes for Beginners](https://www.okteto.com/blog/kubernetes-basics/) blog to get learning!

Migrating your existing applications and development workflows to containers running on Kubernetes can be a tough task. If you’re struggling with that, Okteto can help make the migration easy and simplify how you develop cloud native applications! [Reach out to us](https://www.okteto.com/get-demo/) to talk more :)

## How Kubernetes Works As Container Orchestrator
Now that you have an idea of what a container orchestrator is, you might be wondering how exactly do they work. Let’s understand this by taking the example of Kubernetes. K8s works on a declarative system to manage your containerized applications. You tell it how you want things configured by writing a YAML file, and then it will work towards bringing up all the required containers and other needed things.

Then it also continuously monitors the resources it has created and checks that they still match the state we had described in the configuration file. If that’s not the case, it takes the necessary actions required to get to that state. This is how K8s functions as a container orchestrator and avoids application downtime.

> Now that you recognize the usefullness of Kubernetes and will be using it to deliver, deploy, and run containers, [give Okteto a try](https://www.okteto.com/try-free/) and immediately get the development environment to the K8s level and save development time and resources!

## Developing Containerized Applications With Okteto
Kubernetes has become the go-to tool for running containers at scale. It has changed how we deploy our applications. But the **development** of these microservices based applications has still been an area that is lacking behind. Mainly because we’ve been using the same old tools for development that we used before containers came into the picture. Okteto simplifies the development of containerized applications by allowing you to write code in an environment that is exactly like production. This is done by leveraging Kubernetes during development as well! Check out our [Getting Started Guide](https://www.okteto.com/docs/getting-started/) and learn how to simplify the development of your containerized applications.