Really? Yes, really.
We live in a highly designed world - from inception through the full lifespan of a system, design plays a critical role in the success of your product or service. Usability and user experience (UX) are driven by a comprehensive process that includes a high level design strategy (“What should be built?”), interaction design (“How will the system work?”) and visual design (“What will the system look like?”). Do you know what is at the root of those decisions? Infrastructure.
In this article we will elaborate on the benefits of container-based infrastructure and how Kubernetes and Flannel (not the shirt) work together to help you utilize and manage your applications.
What are containers and what are the benefits of using them?
A container is an instance of an image. A base image is essentially a blank computer that can be configured to run services using a set instructions such as those provided in a DockerFile. To ensure a high level of modularity images are generally configured such that they contain only what is needed to run a particular service (such as a web server or a preprocessor such as PHP).
Tools such as Docker Compose help glue together several single purpose image modules into a running set of containers that serve a greater purpose such as running a full web application stack. Configurations such as a docker-compose.yaml file contains a rule set for how related containers should start, communicate and share resources. This configuration may be used to deploy an application on any host running a container runtime, such as Docker.
Benefits of a container-based system:
Increased software reliability when moving between environments:
Since containers hold everything needed to run an application, differences in operating systems and other computing environments will not have an impact on how your container runs.
Improved server usability and performance:
Unlike virtual machines, which require the application AND an entire operating system to run, containers can share a single platform. Due to their comparatively small size, a server could host many more containers than virtual machines. Additionally, containers, unlike virtual machines, boot up instantly and can be closed just as quickly, allowing for improved resource availability on their host.
Expanded modularity capabilities:
Containerization allows for flexibility when packaging your complex application. Applications can be split into modules, allowing for easier management and reprogramming.
What programs are available to deploy and maintain containerized applications?
Kubernetes, an open-source container management platform developed by Google, is by far the most popular container management system available and it’s open-source. Multi-container infrastructure technology is the future, and Kubernetes offers the whole package.
Benefits of Kubernetes:
Efficient container management:
Kubernetes allows you to cluster multiple hosts. The Kubernetes scheduling component allows you to set rules for how your containers should run within the host cluster and then does everything within its power to ensure that the state of your running containers matches your rules. Kubernetes scheduling rules can be leveraged to greatly simplify advanced infrastructure operations such as advanced networking configurations, persistent storage for containers, vertical and horizontal scaling of hosts and services, healthchecks, centralized log output and self healing. Configurations are flexible to ensure that any application can be setup to run smoothly.
High level of compatibility:
Kubernetes supports multiple development languages, including Spring, Java, .NET, .NET Core, Go, Ruby, and more, meaning it will easily integrate with your existing technologies.
Exceptional hardware utilization:
Kubernetes is able to efficiently utilize existing hardware, potentially decreasing your overall hardware costs.
Kubernetes, through self-healing, automatically detects, analyzes, reports and attempts to repair container errors. Moreover, through a unique replication process, Kubernetes has self-correcting abilities to keep your container functioning.
So how does Flannel fit into this?
Flannel is a useful design tool that can be implemented in conjunction with Kubernetes to connect containers across multiple hosts.
Kubernetes provides the foundation for running and managing containers running across a cluster of hosts but it does not provide a solution for network communication from container to container. This is where Flannel comes in. Flannel provides a networking abstraction that allows for seamless communication between containers, even if they are running on different hosts in the cluster, without the added complexities of port mapping or complex configuration.
Interested in learning more about design, infrastructure and flannel? Give us a shout! We’re Troy Web Consulting and we know design. The team at Troy Web has extensive knowledge in multiple frameworks, coding languages and infrastructures. Our mission is to build kick-ass software that is reliable, adaptable, elegant and efficient. We design, build and deliver technology that works for you.