Google’s massive application scaling requirements conceived the Kubernetes project in 2003. Since Google donated the open-source Kubernetes project to the Cloud Native Computing Foundation in 2015, it has become synonymous with modern application paradigms like immutable architecture, microservices, and infrastructure as code. We dedicated our guide’s introductory chapter to explain this relationship.
The team required to manage Kubernetes must be versed in handling the same modern application paradigms. The team’s skills should include designing self-service applications, autoscaling the infrastructure based on workload, and supporting users around the clock.
This article examines the expertise required to develop, operate, and support modern applications hosted on Kubernetes.
The application lifecycle
Managing applications throughout their lifecycle requires different skills depending on the stage. It starts with defining the application needs by a product manager, architecting the application based on modern principles, implementing the application in code, releasing and operating the application code, and finally support the end-users. The diagram below illustrates the five stages.
Expertise by stage
We devoted a section to each of the five stages mentioned above to highlight the top three new skills required in each area of responsibility.
The primary responsibility of a product manager is to define the application functionality and coordinate its implementation with engineers. Modern applications require new product management expertise outlined below.
Consumer applications have set a high bar of expectation for enterprise application user experience. In the past, users expected to attend training classes to learn how to use an enterprise application. Now, it’s the responsibility of product managers to design intuitive self-service applications, which is a rare skill to find and recruit.
The product manager partners with engineering managers to lead the development process by decomposing the product requirements into actionable development tasks that can be implemented and tested within a few days. Kubernetes allows the application updates to be immediately available to end-users. Product managers must leverage this advantage to minimize wasted effort by seeking weekly feedback from the end-users. Such short (also known as lean) cycles of feedback require an organizational commitment and a product manager with the skills to lead this agile development process.
The architect is a software developer with sufficient experience and a strategic perspective to select software technologies and provide technical direction to the development team.
The Kubernetes design assumes that the application functionality is separated and implemented as microservices hosted in “pods” of containers. You can learn more about this paradigm in our chapter dedicated to this topic. Kubernetes can autoscale each microservice by scaling it horizontally to accommodate a varying workload. The success of this approach requires an experienced software architect at the helm since the concepts are too different from client-server application architecture.
There was a time when applications were shipped to customers who were responsible for installing and operating them. In those times, architects dealt only indirectly with high-scale application performance. The architects of applications hosted on Kubernetes, consumed by thousands of users, must address performance issues in real-time. This approach requires architects to also specialize in managing application performance. It’s not an easy task to find an architect with many years of experience in designing and operating large-scale hosted applications.
The use of the public cloud is commonplace; however, developing an expertise in public cloud services is a full-time commitment since each provider offers over one hundred different services. Applications can be more simple and scalable by using native cloud infrastructure services such as identity access management (IAM), application messaging (such AWS SQS), NoSQL database (such as AWS DynamoDB), machine learning (such as AWS SageMaker), and serverless functions (such AWS Lambda). Modern software architects must be public cloud experts.
The job of software development has changed over the last few years. Hosted applications require developers to work closely with operations teams and co-own application uptime.
Earlier, we discussed the need for architects to be well versed in software applications based on microservices. This job requirement extends to developers since the coding patterns and the software release processes differ for hosted applications designed based on modern architecture even though the programming language may be the same.
Before organizations released software daily onto a Kubernetes hosting platform, developers didn’t need advanced system administration skills. They could develop code that compiled into a standalone application package with its scalability flaws only discovered once installed by customers. Modern hosted applications require developers to know Linux commands and database query language to test and support software in production.
The professionals who choose to be in IT operations accept to support users in different time zones and usually organize themselves in shifts of eight hours to ensure that applications are available at any time. On the other hand, developers traditionally expect to work during conventional business hours. The DevOps paradigm requires developers to be reachable at night for escalations to help recover from an outage. This expectation must be a part of the new job description, yet even then, an unstable platform could still result in developers feeling burnt-out due to too many interruptions.
|Platform||Dashboards||Alerts||On Premises||Multi Cloud||Machine Learning||Workflow Automation|
|Native Cloud Tools||✔||✔|
|Open Source Tools||✔||✔||✔|
Release Manager and DevOps Engineers
We have combined in this section two of the most crucial roles in successfully delivering applications hosted in Kubernetes. The release manager collaborates closely with the DevOps team but is usually not part of the same team. Together they make sure that software code updates make it to the live production environment and run uninterruptedly.
A release management process founded on continuous integration and continuous delivery (CI/CD) is part and parcel of a hosted application. Indispensable open-source projects such as Jenkins are created solely for this purpose. The release manager ensures that all the steps between coding and live software deployment are automated. The release steps include the contribution and compilation of code (source and build stages), the unit and functional tests (test stage), and the deployment of the Kubernetes pods that host the code (deployment stage). Implementing and maintaining this process requires an experienced leader who has successfully managed multiple code deploys per day or at least per week.
DevOps specialists monitor more than just the CPU and memory of the pods and containers hosted in Kubernetes. They also rely on distributed application traces (a map of the flow of requests across microservices) and logs (errors, events, and warnings written by systems and applications into a file) for rapid troubleshooting. A successful operation also relies on custom metrics measuring the volume and latency of the communication across microservices. Small organizations can’t afford to dedicate someone to monitoring, but it’s a specialized skill given its intricacies.
When thousands of business users can’t access your application due to an outage, the mood feels more like a medical emergency room than a software company. Kubernetes provides fault tolerance, rollback, and autoscaling features that mitigate slowdowns and outages, but they will still happen. Crisis management skills during these times include troubleshooting calmly under pressure, avoiding finger-pointing, conducting post-mortem analysis, implementing improvement measures, and updating end-users. The nurturing of these soft skills requires an experienced DevOps leader with a steady hand.
The mention of software support conjures the traditional idea of a technician helping a user through an application user interface. In the world of hosted applications, the support function must instead be more intertwined with operations.
The service team should maintain the service status page. It’s common practice for service providers to maintain such a page to communicate the state of their applications (available, slow, or down), or scheduled maintenance, simultaneously with thousands or millions of users. Here is an example of a service page maintained by AWS that is regularly checked by millions of administrators globally. The sharing of this information falls into the realm of customer support even though the DevOps team provides the status. This page must be updated continuously during an outage as users around the world lose access to their applications seeking information. The status page is emblematic of the need for support teams to collaborate with DevOps teams around the clock. Support engineers must also understand the inner workings of the application and not just the user interface. Therefore, modern support managers must recruit individuals with sufficient system administration skills.
Many advanced users avoid the user interface of a hosted application product and instead use its Application Programming Interface (API) to integrate its services with their other applications. This approach means that customer support teams receive inquiries from developers (who are configuring the application integration via API) instead of simply end-users. Once again, this requires the customer support team to recruit employees with a more technical background who are comfortable with scripting and JSON or YAML files commonly used in APIs.
An application environment hosted on Kubernetes implies that the application is designed based on modern paradigms. Operating a modern hosted application has many facets, including product management, architecture, development, operations, and support. A successful Kubernetes operation requires managers to understand the necessary skills and recruit experienced candidates.