In this article, we’ll look at whether you should learn Kubernetes based on your current role and future objectives. If you’re not being tasked with managing a cluster, the decision ultimately comes down to the skill set you want to acquire and the areas you might move into down the line.
What Is Kubernetes?
First it’s helpful to understand what Kubernetes is all about. The technology is an orchestrator for running containers in distributed environments. It takes container images built with tools such as Docker and starts multiple instances of them across several physical hosts. This results in scalable deployments with built-in redundancy.
Kubernetes also comes with solutions for networking, persistent storage, monitoring, and logging which let you configure your environment and keep tabs on its status. A Kubernetes cluster is effectively an all-in-one platform for defining, creating, and maintaining your workloads. Resource manifests expressed as declarative YAML files specify what your infrastructure should look like; when the files are applied to your cluster, Kubernetes makes the necessary changes to transition to the declared state.
The scope of the system means there is significant innate complexity. Kubernetes has gained a reputation for being tricky to learn, confusing to newcomers, and unwieldy for simpler use cases. However, pushing through the initial learning curve puts you at the forefront of cloud-native application deployment and gives you a better understanding of how to architect systems for production.
Kubernetes for Developers
Kubernetes is increasingly popular with developers because it lets you replicate production infrastructure in your development environment. You can test applications using a local cluster on your device, then deploy them to production using the same resource manifests.
Learning Kubernetes as a developer also prompts awareness of how your software will be deployed and managed after you’ve merged your code. This can make it easier to implement optimizations for performance, reliability, and security. Handing off code to a dedicated team that puts it into production tends to separate you from your work, causing improvement opportunities to fall through the gap.
Another benefit is increased awareness of how Ops and Security teams detect and respond to incidents. When you’re working on the same infrastructure, you’ll be more aware of the correct processes and techniques to use when the application goes down. This awareness may help you to anticipate future problems and add mitigations at the application level.
Having knowledge about Kubernetes gives you a more holistic view of the entire software lifecycle. Particularly in larger organizations, development is usually seen as writing, reviewing, and merging code, after which a CI pipeline comes along and “deploys” it. This routine can appear opaque to developers with no knowledge of cloud operations and container orchestration. Taking time to understand what Kubernetes does and how other teams gain value from it makes you more informed of your code’s operating environment. It can also provide a route for improvements to trickle back through to the development stage.
Kubernetes for Operations Managers
If you’re already working in operations, learning Kubernetes will equip you with sought-after knowledge of the leading tool for cloud-native deployments.
Kubernetes can be daunting when seen from the perspective of a systems administrator used to physical hardware and virtual machines. Writing YAML files, issuing terminal commands, and waiting for the orchestrator to achieve your desired state can seem like they’re “code” tasks for a developer to handle.
Once you’re past the initial learning curve, Kubernetes can significantly simplify your everyday workflow by automating the provisioning and scaling of resources. Changes can be quickly rolled back by reverting to an earlier version of your YAML manifest, drastically streamlining a task which can be a time-consuming chore with other technologies.
Kubernetes can make your deployments more resilient to change. The technology is cloud agnostic and abstracts the differences between individual vendors. Consider a move from Google Cloud to AWS as an example: if you were running applications with plain VMs, you’d need to craft a fairly involved migration strategy to recreate your environment on AWS; with Kubernetes, you’d simply apply your manifests to a new cluster created in your AWS account.
Using Kubernetes also helps lower the barriers between teams. You may already have developers using their own local clusters as part of their everyday workflow. Learning and using Kubernetes at the organizational level lets you meet engineers where they are, facilitating shared insights, more collaboration, and streamlined development flows. Taking the time to understand it will put you ahead of your peers and can make your deployments safer, more efficient, and less of a maintenance overhead.
Kubernetes for Security Specialists
As a security practitioner, it’s your business to understand the risk associated with your software and its environment. When deployments are running in Kubernetes, having an understanding of the platform and its characteristics will guide you into making more informed assessments of your security posture.
Kubernetes security is a topic unto itself. There are many built-in features that let you enforce access control restrictions and container-level security policies. These should be used to create a hardened environment that presents less room for error by Dev and Ops teams.
There’s less need to learn Kubernetes if your team or organization isn’t already using it. However, a passing familiarity with its features, attack surface, and available hardening measures could help prepare you for the future. If a cluster is being used in production, it should be properly secured first; developers may not have the depth of Kubernetes security expertise to make sound choices, so your input could be vital to avoid problems.
It’s important to stay abreast of the tools that are being used, as well as those which might be adopted in the future. Many organizations will now include Kubernetes on the latter list, if not the former.
Other Considerations
One key consideration when “learning Kubernetes” should be its alignment with your immediate objectives. If you’re a developer who wants to gain a better understanding of the whole deployment pipeline and perhaps run a cluster locally, it may make sense to take the plunge. Conversely, if you’re a release manager that’s using an established workflow based on other technologies, you may see less short-term value from your time investment.
You should also be prepared for the scope and scale of Kubernetes. To learn it all would be a substantial undertaking; as we’ve seen, not all areas are equally relevant to each discipline. As a starting point, developers might learn the basic Kubernetes objects, how they fit together, and how they’re created, while those in ops roles may place a greater emphasis on the monitoring and scaling capabilities.
Hence it’s a good idea to narrow your objectives and focus on what you want to achieve with Kubernetes. There’s no single learning path as you’ll need to use different components depending on the make-up of your software stack. Of course, if you’re hearing a lot about Kubernetes, you think it sounds interesting, and you’re keen to expand your skillset, that’s as good a reason as any if you’re comfortable with investing the time. Wherever you begin, you’ll be gaining familiarity with a tool that’s increasingly shaping what cloud deployments look like.
Summary
Developers, operations managers, and security practitioners should all consider adding Kubernetes to their toolkit. Learning Kubernetes will introduce you to best practice approaches for configuring, running, and maintaining production workloads in the cloud. It encourages unification of the Dev, Sec, and Ops disciplines by providing a shared surface which everyone can look into and collaborate on.
That’s not to say Kubernetes is something you must learn. If you’re not yet using containers, or you’re deploying with a different orchestrator, you won’t see much benefit from your hours of learning. Gaining Kubernetes experience is most worthwhile if you’re already working with adjacent technologies such as Docker, CI/CD systems, and load balanced servers.
Like many other cloud-native technologies, Kubernetes is evolving apace with regular updates adding deprecations and removals. That means your knowledge could quickly become outdated if you don’t get to actively use it. In this instance, acquiring a firm understanding of the Kubernetes architecture and the problems it solves may be more beneficial than practical experience of writing and applying YAML files that are subject to change.
The Kubernetes documentation is generally the best place to start when you decide it’s time to learn. You can create your own cluster using a single-package distribution such as MicroK8s or use a managed cloud service for an even simpler experience. Once your application’s packaged as a container it can run in any Kubernetes cluster, giving you freedom to switch between cloud environments in the future.