Life Cycle Management (LCM) is performed to check the behavior and functionality, among other parameters, of containerized application pods. A containerized application is an application that runs in an isolated runtime environment called a container. The container encapsulates all the dependencies of its application, including binaries, system libraries, configuration files, and the like. Containers are portable, that is, they run consistently across multiple hosts. A pod is a collection of one or more containers encapsulating applications. LCM testing helps to determine how a pod will behave in a production environment, that is, how the pod will behave when made accessible to end-users. Testing a pod prior to deployment helps, for example, improve the health of a pod (e.g., reliability and performance) so that the pod behaves as predicted when moved to a production environment. LCM testing is used to check, for example, level of application availability, response to an infrastructure event, distribution of microservices across multiple servers, communication between microservices, resilience of applications after a network interruption, and to make sure applications continue to run after an instance or pod reboot, an application component crash, or central processing unit (CPU) starvation of an instance or a pod.
Aspects of the present disclosure are best understood from the following detailed description when read with the accompanying figures. It is noted that, in accordance with the standard practice in the industry, various features are not drawn to scale. In fact, the dimensions of the various features may be arbitrarily increased or reduced for clarity of discussion.
The following disclosure provides many different embodiments, or examples, for implementing different features of the provided subject matter. Specific examples of components, values, operations, materials, arrangements, or the like, are described below to simplify the present disclosure. These are, of course, merely examples and are not intended to be limiting. Other components, values, operations, materials, arrangements, or the like, are contemplated. For example, the connection of a first feature to a second feature in the description that follows may include embodiments in which the first and second features are directly connected, and may also include embodiments in which additional features may be connected and/or arranged between the first and second features, such that the first and second features may not be in direct connection or contact. In addition, the present disclosure may repeat reference numerals and/or letters in the various examples. This repetition is for the purpose of simplicity and clarity and does not in itself dictate a relationship between the various embodiments and/or configurations discussed.
A pod is the smallest execution unit of a containerized application system. If a pod or the node a pod is running on fails, a new replica of the pod can be created and launched in order to keep that pod's one or more applications up and running. A node is a machine that runs the pod housing the containerized applications and can be a physical or virtual machine. Containers differ from virtual machines because containers do not include their own operating systems.
When not running, a container exists as a container image, which is a packaged save file containing the application source code, binaries, and other files that exist within the container and allow it to function when the container is running. A container image can instantiate any number of container iterations needed to provide the desired functionality. The containers can be deployed to a cloud network in order to provide application services to network users.
In order to run containerized applications at scale, for example, on networks that may have thousands or millions of users, an orchestration (i.e., container management) platform is generally used in order to manage the deploying and scaling of the containerized applications. Kubernetes is an example of one such containerized management/orchestration platform.
Before a pod can move from the development stage to the production stage, LCM testing is conducted to test the behavior of the pod under different operating conditions. The lifecycle of a pod includes, but is not limited to: initialization of the pod, a pending state when the pod is ready to run and on standby, a create container state when the pod creates containers, a running state, where the pod is up and running, and an error state, which is entered upon the output of an error associated with the pod, for example, when one of the containers fails to run. The type of error output depends on the particular malfunction of the pod. LCM testing of pods and their containerized applications allows for the gathering of data related to the performance of the pods and applications under production conditions, that is, when the pods and applications are deployed to be accessible to the intended users of the applications.
In some approaches, testing is conducted through user interfaces such as a command line interface (CLI) and/or a graphical user interface (GUI). Depending on the scale of the deployment, using graphical user interfaces (GUIs) and command line interfaces (CLIs) may add significantly to LCM testing and deployment time. This contributes to application release delays. Further, attempts at avoiding application release delays by rushing application deployment contributes to the release of unreliable applications that may frustrate users.
In contrast, an LCM testing regime that relies less on GUIs and CLIs can help increase the efficiency, speed, and reliability of LCM testing and contribute to shorter testing and deployment schedules, while also maintaining quality and reliability over GUI and CLI-dependent LCM testing.
LCM testing helps determine the health of a pod prior to deployment. Pods have both a specification and a status. The specification indicates where the pod is in its lifecycle and the status indicates the specific status of a pod. LCM testing involves the analysis of certain parameters associated with a pod. Specifically, LCM testing of a pod can include verification of pod parameters such as liveliness, readiness, affinity and anti-affinity, size of container images, highly available (HA)/node failover, replicas, multi-node, and Horizontal Pod Autoscaling (HPA).
A liveliness probe indicates the health of a pod, that is whether the pod is running. If a pod is unhealthy (e.g., fails to run), the pod can be restarted. For example, if the liveliness probe returns a “success” result, then the pod is determined to be healthy (i.e., running). If the liveliness probe returns a “failure” result, the pod is unhealthy according to the liveliness probe. A liveliness probe may be configured with a timer which triggers periodic liveliness checking of a pod. A readiness probe indicates whether a pod is ready to handle (e.g., respond to) a request. A “success” result indicates that the pod is ready to handle a request. A “failure” result indicates that a pod is not ready to handle a request. The readiness probe helps determine whether traffic to a pod should sent or not, based on whether the pod is ready to receive traffic. Affinity and Antiaffinity defines the conditions or placement of the scheduling of a pod. Scheduling refers to the assignment of a pod to a node. Pods can be grouped together based on affinity. For example if two or more pods have affinity for one another, they can be scheduled on the same node. However, if two or more pods should not be scheduled on the same node, this is referred to as antiaffinity. Determining affinity and antiaffinity of pods allows for pods to be effectively spread across multiple nodes, which provides enhanced availability in the case of node failure. Container image size refers to the data size of a container image. Smaller images can be downloaded more quickly than larger images. In general, images should be smaller than 25 megabytes (MB), however, image sizes up to 50 MB are acceptable. If an image is greater than 100 MB, the image will be flagged. Image size is not a required parameter in LCM testing and does not decide whether the LCM test returns a pass or fail result. High availability (HA)/node failover testing is associated with redundancy, which can provide both high availability and load balancing features. For example, multiple pods having the same roles that are spread across multiple nodes provide high availability in the case of node failure because traffic can be shifted from one pod to another pod on a different node without significant interruption in service. The Horizontal Pod Autoscaler (HPA) helps automatically scale the number of pods based on metrics such as CPU utilization or other appropriate metric. For example, the number of pods on a node may be reduced if CPU and or memory utilization is at or above a predetermined threshold. Minimum thresholds may also be set for memory and CPU utilization. The HPA is not a required parameter in LCM testing and does not decide whether the LCM test returns a pass or fail result.
In some embodiments of the present disclosure, a test script is executed by a first containerized application, thereby causing an Application Programming Interface (API) call to be issued to at least one automated testing system, at least one automated testing system runs a testing sequence on a second containerized application which is different from the first containerized application, based on the issued API call, and testing sequence results associated with the second containerized application are automatically displayed which include an assessment of the health of the second containerized application. In some embodiments, the testing sequence includes testing pod parameters such as liveliness, readiness, affinity and anti-affinity, size of container images, highly available (HA)/node failover, replicas, multi-node, and Horizontal Pod Auto-scaling (HPA). In some embodiments, other components, such as binaries or other appropriate application components are verified. In some embodiments, a representational state transfer (REST) API call is used as the API call. In some embodiments, the at least one automated testing system is an automated test suite such as Jenkins™.
In some embodiments, the processor 310 is a central processing unit (CPU), a multiprocessor, a distributed processing system, an application specific integrated circuit (ASIC), and/or a suitable processing unit.
In some embodiments, the computer readable storage medium 350 is an electronic, magnetic, optical, electromagnetic, infrared, and/or a semiconductor system (or apparatus or device). For example, the computer readable storage medium 350 includes a semiconductor or solid-state memory, a magnetic tape, a removable computer diskette, a random-access memory (RAM), a read-only memory (ROM), a rigid magnetic disk, and/or an optical disk. In some embodiments using optical disks, the computer readable storage medium 350 includes a compact disk-read only memory (CD-ROM), a compact disk-read/write (CD-R/W), and/or a digital video disc (DVD).
In some embodiments, the storage medium 350 stores the computer program code 370 configured to cause system 300 to perform method 200. In some embodiments, the storage medium 350 also stores information needed for performing a method 200 as well as information generated and/or used during performing the method 200, such as test script data 352, first containerized application 353, and second containerized application 354 and/or a set of executable instructions to perform the operation of method 200.
In some embodiments, the storage medium 350 stores instructions 351 for interfacing with external components within the network. The instructions 351 enable processor 310 to generate instructions readable by the external components to effectively implement method 200.
System 300 includes I/O interface 320. I/O interface 320 is coupled to external circuitry. In some embodiments, I/O interface 320 includes a keyboard, keypad, mouse, trackball, trackpad, and/or cursor direction keys for communicating information and commands to processor 310.
System 300 also includes network interface 330 coupled to the processor 310. Network interface 330 allows system 300 to communicate with network 340, to which one or more other computer systems are connected. Network interface 330 includes wireless network interfaces such as BLUETOOTH, WIFI, WIMAX, GPRS, or WCDMA; or wired network interface such as ETHERNET, USB, or IEEE-1394. In some embodiments, method 200 is implemented in two or more systems 300, and information such as memory type, memory array layout, I/O voltage, and I/O pin location are exchanged between different systems 300 via network 340.
An aspect of this disclosure relates to a system for lifecycle management testing of containerized applications, the system that includes a memory that stores instructions, and at least one processor configured by the instructions to perform operations that include executing a test script by a first containerized application thereby causing an Application Programming Interface (API) call to be issued to at least one automated testing system, running, by the at least one automated testing system, a testing sequence on a second containerized application, different from the first containerized application, based on the API call, and automatically displaying testing sequence results, wherein the results comprise an assessment of the health of the second containerized application. In some embodiments, the first containerized application runs in a separate container from the first containerized application. In some embodiments, the operations further include running, by a second automated testing system, a second test sequence on the second containerized application, using the testing sequence results as an input parameter. In some embodiments, the operations further include running, by a third automated testing system, a third test sequence on the second containerized application, using the testing sequence results as an input parameter. In some embodiments, the first and second containerized applications are in different pods on a same cluster of a network. In some embodiments, the operations further include executing a second testing script, and the execution of the testing script causes the at least one automated testing system to generate a testing pipeline to be used as the testing sequence. In some embodiments, the assessment of the health of the second containerized application includes at least one of: checking whether the application is up and running, checking whether the application is ready to accept traffic, checking node scheduling of the application, checking how many copies of the application should be scheduled, checking a container image size of the application, or checking node failover information associated with the application.
An aspect of this disclosure relates to a computer-implemented method for lifecycle management testing of containerized applications. The method includes executing a test script by a first containerized application thereby causing an Application Programming Interface (API) call to be issued to at least one automated testing system, running, by the at least one automated testing system, a testing sequence on a second containerized application, different from the first containerized application, based on the API call, and automatically displaying testing sequence results, wherein the results comprise an assessment of the health of the second containerized application. In some embodiments, the first containerized application exists in a separate container from the first containerized application. In some embodiments, the method further includes running, by a second automated testing system, a second test sequence on the second containerized application, using the testing sequence results as an input parameter. In some embodiments, the method further includes running, by a third automated testing system, a third test sequence on the second containerized application, using the testing sequence results as an input parameter. In some embodiments, the first and second containerized applications are in different pods on a same cluster of a network. In some embodiments, the method further includes executing a second testing script, wherein the execution of the testing script causes the at least one automated testing system to generate a testing pipeline to be used as the testing sequence. In some embodiments, the assessment of the health of the second containerized application includes at least one of: checking whether the application is up and running, checking whether the application is ready to accept traffic, checking node scheduling of the application, checking how many copies of the application should be scheduled, checking a container image size of the application, or checking node failover information associated with the application.
An aspect of this disclosure relates to a non-transitory computer readable medium for lifecycle management testing of containerized applications, storing instructions that, when executed by at least one processor, cause the at least one processor to perform operations including executing a test script by a first containerized application thereby causing an Application Programming Interface (API) call to be issued to at least one automated testing system, running, by the at least one automated testing system, a testing sequence on a second containerized application, different from the first containerized application, based on the API call, and automatically displaying testing sequence results, wherein the results include an assessment of the health of the second containerized application. In some embodiments, the first containerized application exists in a separate container from the first containerized application. In some embodiments, the method further includes running, by a second automated testing system, a second test sequence on the second containerized application, using data output by the first test sequence. In some embodiments, the first and second containerized applications are in different pods on a same cluster of a network. In some embodiments, the method further comprises executing a second testing script, and the execution of the testing script causes the at least one automated testing system to generate a testing pipeline to be used as the testing sequence. In some embodiments, the assessment of the health of the second containerized application includes at least one of: checking whether the application is up and running, checking whether the application is ready to accept traffic, checking node scheduling of the application, checking how many copies of the application should be scheduled, checking a container image size of the application, or checking node failover information associated with the application.
The foregoing outlines features of several embodiments so that those skilled in the art may better understand the aspects of the present disclosure. Those skilled in the art should appreciate that they may readily use the present disclosure as a basis for designing or modifying other processes and structures for carrying out the same purposes and/or achieving the same advantages of the embodiments introduced herein. Those skilled in the art should also realize that such equivalent constructions do not depart from the spirit and scope of the present disclosure, and that they may make various changes, substitutions, and alterations herein without departing from the spirit and scope of the present disclosure.
The present application is a National Phase of International Application No. PCT/JP2022/040552, filed Oct. 28, 2022.
Filing Document | Filing Date | Country | Kind |
---|---|---|---|
PCT/JP2022/040552 | 10/28/2022 | WO |