InsightsBeing an Engineer
DevOps Engineer Learning Path | Insights From Our Lead DevOps Engineer
In a world that is constantly changing and evolving, it is crucial for businesses to continuously and consistently adapt to new developments. As the saying goes, "if you’re not first, you’re last." By being among the first to meet the needs and desires of your customers, you can position yourself at the top of the competition. Ultimately, the primary goal of any company should be customer satisfaction.
DevOps and its methodologies enable organizations to deliver new features frequently through automation and the reduction of human error in processes such as software delivery, infrastructure configuration, and deployment phases. By learning DevOps, you will be well-positioned in the industry to help companies migrate to modern architectures or scale their current systems.
In this article, I will cover the skills and tools I’ve learned from my own experience as a DevOps Engineer, which we consider to be the foundation of this field. Let's get started!
Linux is the most widely used operating system for web servers and applications, where performance is crucial. Proficiency in Linux can open many doors and make it easier to learn new tools.
Many tools are initially developed for Unix-like systems and are later made available for other operating systems such as Windows. Linux is known for its powerful kernel, which is present on a wide range of devices, including mobile devices, servers, microcontrollers, and Internet of Things (IoT) devices. Therefore, it is important to understand Linux, or at least its fundamental concepts, such as users and groups, root users, file permissions, and text editors.
Cloud computing is a crucial aspect of DevOps. Familiarity with cloud concepts will be helpful when transitioning to a new cloud provider. Essentially, the cloud can be considered a "virtual computer" with its resources logically isolated and distributed to serve multiple users without affecting one another, but in a much more complex and efficient way when talking from a technical perspective. With cloud computing, we can start small and easily scale up with traffic in seconds without the need to physically rent a server and potentially not even use all of its resources. Instead, you only pay for what you use.
AWS has been a leader in public cloud computing since its early days. It is also becoming a major player in emerging technologies such as AI, machine learning, and serverless computing. A strong foundation of networking is necessary for daily DevOps operations. From setting up build agents and deployment pipelines to designing and setting up infrastructure or debugging internal applications communication issues, knowledge of networking is crucial for success. Familiarity with protocols such as TCP, UDP, HTTP/S, SUBNETTING, NAT, and Route Tables is an excellent place to start.
Containers and Orchestration Systems
Like the cloud, containers are an inseparable part of DevOps methodologies. They are used in almost any part of the application lifecycle, from build agents to application deployments. Like virtual machines that share specific hardware resources but are isolated from each other, the same is with containers but in a different layer.
Containers are OS, or isolated environments, inside your primary OS. They are designed to give developers independence from the environment where they develop an application and deploy it in any machine by creating a container image.
No matter the underlying environment, your application runs within a bubble inside the server as long as there is a container runtime to run that image. However, like any other system, containers or the applications within them may occasionally crash. To address this, we can use an orchestration tool to manage the desired number of containers and their health.
Whenever a container is unhealthy or not responding, the orchestration tool creates a new one and terminates the current one.
Additionally, if the desired number of containers differs from what we’ve specified, the orchestration tool will take the necessary actions to achieve that desired state and keep functioning with it.
Docker and Kubernetes are the leaders in this sphere where Kubernetes orchestrates the desired number and configuration of our containers, and Docker is a container runtime. Seeing the growing market demand for DevOps Engineers proficient in Kubernetes, Appstellar regularly holds trainings on DevOps and Kubernetes Fundamentals, where we focus on equipping the next generation of DevOps engineers in Kosovo with the necessary skills they need to start their DevOps careers right.
Infrastructure As Code And Configuration Management Tools
As a DevOps Engineer, you’ll often deal with infrastructure modification. Infrastructure As Code (IaC) removes the pain of provisioning the application environment manually by defining infrastructure in a declarative way. This allows us to create identical infrastructure in a matter of seconds by using the exact definition with different variables based on the environment being created.
Configuration management tools prepare the application environment before anything starts running. Like IaC, we define what should be triggered to prepare our server, like scripts, running different commands, creating log files, installing agents, and more.
Every time a new virtual machine runs based on that configuration, it will be ready to run your app. Various configuration management tools available can operate in separate layers, and it’s up to you to choose the one that best fits your needs. Some popular options include Terraform for IaC and Ansible for configuration management.
As a DevOps Engineer, it is beneficial to know at least one programming language. Although Bash scripting is useful for automating tasks, it can sometimes be limited or time-consuming. Knowing a scripting language like Python will make you more flexible and may help you achieve more things with less effort by using its libraries.
Additionally, learning Go language can be useful for many cloud-native tools, including Terraform, Kubernetes, Helm, Flux, etc. However, starting with a different language may be best before diving into Go.
Once you feel comfortable with the tools mentioned above, you can start diving into more advanced DevOps topics, such as deployment strategies, like Blue/Green deployments, Canary, Linear, and so on.
High availability is also important, as it allows you to plan for data center disasters and keep the application running in replicas and decoupled environments. Fault tolerance and disaster recovery will ask you to decide what the company can trade off in case of a disaster. Like what's the maximum allowed downtime or the maximum length of time that data can be backed up, sometimes meaning data loss, DevSecOps, and many more.
To become a DevOps Engineer, you must have a mix of technical skills and hands-on experience, focusing on learning key tools and technologies, understanding protocols, and gaining real-world experience. A good DevOps Engineer is also a lifelong learner who constantly looks for new technologies and methodologies to improve his work.
If you’re a DevOps Engineer dedicated to achieving excellence, embracing challenges, and seeking continuous improvement, Appstellar will be the perfect company for you.
Check out our open job position for DevOps Engineers and take advantage of the opportunity to work with a talented team of engineers in a dynamic, growth-oriented environment.
If you’re thinking about starting your DevOps journey and deepening your Kubernetes skills, but don’t know where to begin, apply now to secure your spot at our DevOps and Kubernetes Fundamentals training with ICK beginning Feb 22, 2023.
Lead Cloud/DevOps Engineer
Over the past 3 years as a DevOps Engineer, Fabian has earned multiple certifications such as AWS Certified DevOps Engineer – Professional, HashiCorp Certified: Terraform Associate, and CKA: Certified Kubernetes Administrator. Apart from leading and mentoring the Appstellar DevOps team and working with clients, he’s also involved in efforts to grow the local DevOps community by writing educational content and contributing as a DevOps trainer at ICK and internal Appstellar workshops.