Introduction
The Kubernetes developer landscape remains enormously complex, spanning hundreds of available tools. At the same time, what developers need to know to create Kubernetes-optimized applications is very container-driven, representing a departure from the knowledge required to create applications for VMs and monolithic environments. These two truisms are applicable to any developer’s Kubernetes learning journey.
Kubernetes adoption continues to surge – in fact, it’s highly likely that your organization is already creating or running applications with it, directly or indirectly. According to a Cloud Native Computing Foundation (CNCF) survey published in February 2022, 93% of the respondents were using or planning to use containers in production, while 96% of those surveyed said their organizations were either using or evaluating Kubernetes. Consequently, the number of developers overall that use Kubernetes has increased 67% to 5.6 million, compared to 2020, when there were just 3.9 million Kubernetes developers worldwide.
These developers have different levels of experience and know-how, and varying job descriptions. Some may have completed a master’s degree or a coding bootcamp and are proficient in Python, JavaScript or other popular languages, but have only cursory knowledge of Kubernetes. Others may be experienced with Linux, Unix, JavaScript or other languages and develop applications that run on VMs, but have gaps in their knowledge of how Kubernetes relates to the applications and code they develop.
Both of these different developer personas need to understand how Kubernetes works in a way that helps them to be more proficient. The seasoned developer with little working knowledge of Kubernetes, might be tasked with creating applications or services such as a distributed database. These developers might also require a solid understanding of how certain operations tasks – for example, managing storage and backups for stateful data – function in a Kubernetes environment.
In this article, we cover what all these developers need to know when creating applications that run on Kubernetes, and offer some ways to complete the learning journey.
A Kubernetes Learning Checklist for Developers
Kubernetes is a platform that manages the overall lifecycle of applications, including scheduling, self-healing and elasticity. While this simplifies application management in production, it also forces development teams to adopt a container-first mindset.
Key skills and knowledge the developer must acquire include:
- How to package, share and manage the lifecycle of containerized applications orchestrated by Kubernetes: Developers must know how to use Docker or buildpacks to package an application, as well as configuration-management tools such as Helm or Kustomize and troubleshooting tools such as kubectl CLI and monitoring dashboards. They must be able to configure packages to run on a Kubernetes cluster, including all dependencies the application requires.
- Security checks for distributed environments: The highly distributed nature of Kubernetes can make clusters especially vulnerable to an attack. Once an intruder gains access to an exposed port, they may be able to access an entire cluster environment and compromise any associated stateful data. This calls for a shift left in security, which means it is now the developer’s responsibility to use tools and processes to check for security vulnerabilities in code as it is being developed.
- Application Security: Kubernetes offers a wide range of tools to manage secure access to an application and control container capabilities, such as network policies, well-defined ingress rules and container-security contexts. With security shifting left and the emergence of DevSecOps, developers must expand their skill sets and learn how to use these tools.
- Tool selection for the CI/CD process: In many cases, developers will be involved with the tool-selection process. In addition to learning the intricacies of Kubernetes, it is critical to have an intimate understanding of the different tool sets that you will be working with, not only for CI (think Jenkins), but for continuous development and management workflows, as well.
- How pods are configured and how they interact with other services: A Pod – “the smallest, most basic deployable objects in Kubernetes” – represents a single container or a set of containers in a cluster, according to Kubernetes.io. The developer may or may not need to understand the intricacies of pod configuration and management, but at a minimum, it’s necessary to know the basics.
- How containerized applications will function and integrate with other applications and platforms once deployed: Developers must understand how Kubernetes interacts with a stateless application, a workflow that does not save client data generated in one session for use in the next session with that client, such as a microservice. For stateful applications and data management, the developer should have more than a cursory understanding of storage and disaster-recovery solutions, such as when MySQL and other databases are in use.
- Knowledge of different deployment environments: A Kubernetes application is pre-built and production-ready as a template that is interoperable for any Kubernetes environment — in theory. However it is often up to the developer to reconfigure the application for deployment across different environments, involving load balancers, DNS and many other network-related configurations, whether running on AWS, Google Cloud, or on-premises. While tools and platforms exist that might help to solve interoperability problems, difficulties can remain – and it often falls on the development team’s shoulders to remediate them.
- Networking know-how: Developers must possess extensive knowledge in storage and disaster recovery for Kubernetes applications.
Find Your Path
The road to proficiency as a Kubernetes developer can seem daunting at first, but it can also be interesting and even fun. There are many different ways to learn how to develop applications for Kubernetes environments, to meet the preferences of learners: lectures and demos, books and white papers, one-on-one in-person training, and hands-on labs.
However, the efficiency of these different learning methods varies significantly. Retention is higher when acquired knowledge is applied in practice.
The free Kubernetes Learning Site was designed by Kasten by Veeam® to make the most use of your time by offering highly efficient “learning by doing” and “practice by doing” training, under the participatory-learning category. The “Building a Kubernetes Application Lab” is one of several labs that delivers hands-on training and skills assessment. Together with the other labs, it also provides a number of resources, including links to eBooks, presentations and articles, to complement the developer’s self-service learning journey.
This lab focuses on developing applications to run on Kubernetes and covers these important areas:
- How to build container images
- How to run your application directly and locally on Kubernetes
- Tools you can use to improve your workflow
- How to manage manifests for deployment.
- Kubestr, an open source collection of tools to discover, validate and evaluate your Kubernetes storage options
While the road to becoming a proficient application developer for Kubernetes can be long and challenging, Kasten’s hands-on training can help you to get up and running faster, and helps to reinforce the skills you learn through hands-on application.
Visit Kasten’s Learning Site today to learn more and get started.