{"id":512702,"date":"2022-04-26T07:15:12","date_gmt":"2022-04-26T05:15:12","guid":{"rendered":"https:\/\/www.devoteam.com\/expert-view\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\/"},"modified":"2022-04-26T07:15:12","modified_gmt":"2022-04-26T05:15:12","slug":"a-real-story-about-transforming-an-app-with-kubernetes-cluster","status":"publish","type":"expert-view","link":"https:\/\/devoteam.info\/cz\/expert-view\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\/","title":{"rendered":"A real story about transforming an app with Kubernetes cluster"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Every project has two sides &#8211; positive, like benefits as outcomes, and negative, unforeseen challenges discovered while the project was being developed. Today, in this blog, I\u2019ll be talking about that not-so-bright side of the project, the one that brings up specific challenges and makes the team a little bit nervous.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Just like most of the software developers in Devoteam, my main obligations for working on several projects were to write good code that fulfilled user requirements, followed a set of engineering principles, and deploy it to a development and\/or user acceptance testing environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Though, on my last project, I was part of the team that deployed a project to a production environment where it will be used by actual clients and customers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This particular project was centered around the idea of transforming an existing monolith application to one with microservices architecture comprising of multiple smaller services running independently on the Kubernetes cluster.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The architects, business analysts, and team leads, who were quite experienced, took the necessary steps to ensure a successful transition to production. We had a well-thought-out plan and executed it superbly. The deployment was successful. However, upon deploying the project, there were several issues we did not predict. The two key takeaways for me from this experience are:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>importance of stress testing<\/li><li>data migration and date field discrepancies<\/li><\/ul>\n\n\n\n<h2 class=\"has-text-color wp-block-heading\" style=\"color:#f8485e\">Importance of stress testing<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">One of the biggest issues in the production environment was a major overall performance decrease in terms of speed. This decrease was impacted by several factors:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>excessive backend API calls and unnecessary imports on the frontend,<\/li><li>bottlenecks and suboptimal framework utilization on the backend,<\/li><li>slow fetching of information because of a significant increase in the data set.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">I will analyze each of these and our solutions in the following section.<\/p>\n\n\n\n<h3 class=\"has-background wp-block-heading\" style=\"background-color:#fddade\">Frontend optimization<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Frontend caused the least amount of performance decrease. One small issue was unused imports, and that was solved fairly quickly by simply deleting the said imports.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next, there were some services that were provided &#8216;inRoot&#8217; of the application. As a result, the application required all of the services to be instantiated before the app was running. This issue was resolved by deleting the provided &#8216;inRoot&#8217; configuration where we deemed it to be obsolete, and by properly importing them in modules which allowed for better &#8216;lazy loading&#8217;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, on our application, the user has an option to either view or edit the document. However not all functionality is enabled in &#8216;view&#8217; mode, and thus some API calls to the backend were redundant. By simply checking which mode was activated in a component instantiation, we were able to reduce backend API calls, and as a result, speed up the application.<\/p>\n\n\n\n\t<div class=\"align wp-block-acf-quote\">\n\n\t\n\t<figure class=\"text-center\"><blockquote class=\"blockquote\"><svg width=\"49\" height=\"38\" viewBox=\"0 0 49 38\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M42.875 0C44.4995 0 46.0574 0.652728 47.206 1.81459C48.3547 2.97645 49 4.55228 49 6.1954V15.4885C49 17.1316 48.3547 18.7075 47.206 19.8693C46.0574 21.0312 44.4995 21.6839 42.875 21.6839H33.6875C33.6875 24.1486 34.6555 26.5123 36.3785 28.2551C38.1014 29.9979 40.4383 30.977 42.875 30.977H45.9375C46.7497 30.977 47.5287 31.3034 48.103 31.8843C48.6773 32.4652 49 33.2532 49 34.0747C49 34.8963 48.6773 35.6842 48.103 36.2651C47.5287 36.8461 46.7497 37.1724 45.9375 37.1724H42.875C38.8139 37.1724 34.9191 35.5406 32.0474 32.6359C29.1758 29.7313 27.5625 25.7917 27.5625 21.6839V6.1954C27.5625 4.55228 28.2078 2.97645 29.3565 1.81459C30.5051 0.652728 32.063 0 33.6875 0H42.875ZM15.3125 0C16.937 0 18.4949 0.652728 19.6435 1.81459C20.7922 2.97645 21.4375 4.55228 21.4375 6.1954V15.4885C21.4375 17.1316 20.7922 18.7075 19.6435 19.8693C18.4949 21.0312 16.937 21.6839 15.3125 21.6839H6.125C6.125 24.1486 7.09296 26.5123 8.81596 28.2551C10.5389 29.9979 12.8758 30.977 15.3125 30.977H18.375C19.1872 30.977 19.9662 31.3034 20.5405 31.8843C21.1148 32.4652 21.4375 33.2532 21.4375 34.0747C21.4375 34.8963 21.1148 35.6842 20.5405 36.2651C19.9662 36.8461 19.1872 37.1724 18.375 37.1724H15.3125C11.2514 37.1724 7.35658 35.5406 4.48493 32.6359C1.61328 29.7313 0 25.7917 0 21.6839V6.1954C0 4.55228 0.645313 2.97645 1.79397 1.81459C2.94263 0.652728 4.50055 0 6.125 0H15.3125Z\" fill=\"#3C3C3A\"\/>\n<\/svg><p>This particular project was centered around the idea of transforming an existing monolith application to one with microservices architecture comprising of multiple smaller services running independently on the Kubernetes cluster.<\/p><\/blockquote><figcaption class=\"blockquote-footer\">\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-8d39b2df wp-block-group-is-layout-flex\"><figure class=\"wp-block-image size-full is-resized is-style-rounded\"><img decoding=\"async\" src=\"https:\/\/devo2024.local\/wp-content\/uploads\/2024\/08\/nico-sienaert.jpg\" alt=\"\" class=\"wp-image-36180\" style=\"aspect-ratio:1;object-fit:cover;width:80px\"\/><\/figure>\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-6fa7971b wp-block-group-is-layout-flex\">\n\t<p class=\"has-medium-font-size wp-block-paragraph\" style=\"font-style:normal;font-weight:500\">Filip Moldvai<\/p>\n\t\n\t<p class=\"wp-block-paragraph\">Integration Consultant<\/p>\n\t<\/div>\n<\/div>\n<\/figcaption><\/figure>\n\t\n\t<\/div>\n\n\n\n\n<h3 class=\"has-background wp-block-heading\" style=\"background-color:#fddade\">Backend optimization<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Optimizing backend services required more effort than the frontend simply because backend code spanned across multiple microservices. During this time, we have inspected every service in which we suspected a bottleneck occurs, and each of the services presented a unique problem. In this section, we&#8217;ll take a look at some of them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One of the things which were reported shortly after production deployment is that the application seems to perform better in certain parts of the day, while in others it slows down. We have expanded logging information which provided insights into what caused the decrease in performance and that led us to some interesting discoveries.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We are using Keycloak, an open-source user management tool, to manage users, roles, and permissions for the application. Inside of its own structure lies a MySQL database to store this sensitive information. What we found is our code queries the database to fetch data from it which doesn&#8217;t change once everything is set up. By implementing a simple caching solution in the service layer like a hashmap in which we store the roles, we are able to bypass the query if the desired role is inside of the map. And if the role is updated in the database, we update it in the cache as well.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One other interesting finding was we didn&#8217;t leverage the capabilities of MongoDB and its aggregation pipelines enough. This was evident once data migration was complete, and the size of data increased from a couple of thousand documents to tens of thousands. MongoDB was our choice for storing pretty much all of the application-generated data. By transforming code in the repository layer of a service from one that depends on typescript logic to one which uses MongoDB&#8217;s aggregation pipeline, we&#8217;ve lightened the load of the execution from the service to the database. As a result of doing that, the overall performance improved.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This was all well for operations regarding updating the data, but we also needed to speed up fetching information from the database, and there was no way for us to do that by improving the code. However, there was something we could do on the database itself, and that&#8217;s to add indexes. This allows MongoDB to limit the number of documents it needs to inspect, and thus perform queries faster. We&#8217;ve analyzed each collection in every database to identify the most optimal indexes for every one of them, and once that was implemented, the application was running fast once again.<\/p>\n\n\n\n<h2 class=\"has-text-color wp-block-heading\" style=\"color:#f8485e\">Data migration and date field discrepancies<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">One of the main requirements was the usability of the data from the previous version. This was made possible by our data analytics and migration team, who have mapped the existing fields to a new set of fields, and migrated the data in batches with intermittent testing to make sure that the application would run smoothly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Everything would have gone perfectly well, but for the fact that we haven&#8217;t thought of one possible issue that would eventually arise from this and that is the migration and storing of date fields.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Most of the data documents contain various date fields: start and end dates of certain periods, date of birth of both clients and employees, dates of certain activities, etc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The dates themselves were easy to migrate, date in one javascript application is interpreted the same way in another. But the issue was the dates inside of newly created documents on the new version of the application are stored in a format where the time of the date is stored as midnight. Not only that, because our database is located in a Central European Timezone, the date was stored as the day before the specified date with the time set as 23:00.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignright size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/Devoteam_icons_others_red-poppy-5_Sprint-1.png\" alt=\"\" class=\"wp-image-5543\" width=\"208\" height=\"208\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">For example, if we were to create a new client with a date of birth set as 01.03.2007, the stored date would look like this: &#8220;28-02-2007T23:00:00Z&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In some other cases, the application stores date-time objects, such as date and time of the scheduled appointments, dates of creation and modification of documents, etc. This time the stored date would include hours and minutes, but again it would store it in the Central European Standard time zone, meaning it would deduct one hour from the date-time object (e.g. an appointment scheduled for 20.01.2022 at 15:30 would be stored as &#8220;20-01-2022T14:30:00Z&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The discrepancy between the date formats in the old and new applications caused some functionalities to be broken. This was a very significant problem, and no solution would mitigate every aspect of it. Certain job schedulers performing various updates on the Kubernetes cluster require a strict date and time interpretation in the CEST time zone, while other parts of the application are agnostic to the time zone, and transform the displayed date to the time zone of the users&#8217; device.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One possible solution is to modify the date format so that it&#8217;s stored in UTC format so that it&#8217;s time zone agnostic. That would imply refactoring parts of code on the backend where the time zone is required, but this is achievable by utilizing a framework like Moment to transform the date in the correct format before proceeding with code execution.<\/p>\n\n\n\n<h2 class=\"has-text-color wp-block-heading\" style=\"color:#f8485e\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, I&#8217;d like to add one more thing which I think is a key factor in a project&#8217;s success and that is a collaborative team in which members have diversified skillsets. So no matter what the challenges of a project are, a harmonious team will certainly overcome them. Throughout this period we bounced off ideas, tried new things, and in the end, we succeeded.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This experience showed just how much goes into planning and executing not just the deployment to production, but the whole project as a whole. And this is also what I love about my job, there is always something more to learn.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Every project has two sides &#8211; positive, like benefits as outcomes, and negative, unforeseen challenges discovered while the project was being developed. Today, in this blog, I\u2019ll be talking about that not-so-bright side of the project, the one that brings up specific challenges and makes the team a little bit nervous.&nbsp; Just like most of [&hellip;]<\/p>\n","protected":false},"featured_media":416303,"template":"","categories":[],"tags":[],"industry":[],"class_list":["post-512702","expert-view","type-expert-view","status-publish","has-post-thumbnail","hentry"],"acf":[],"cards":"\n\t<div class=\"single-post-card\">\n\n\t\t<figure class=\"wp-block-post-featured-image\"><a href=\"https:\/\/devoteam.info\/cz\/expert-view\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\/\" target=\"_self\" ><img width=\"2560\" height=\"1650\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"A real story about transforming an app with Kubernetes cluster\" style=\"aspect-ratio:4\/3;width:100%;object-fit:cover;\" decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4.jpg 2560w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4-300x193.jpg 300w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4-1024x660.jpg 1024w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4-768x495.jpg 768w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4-1536x990.jpg 1536w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4-2048x1320.jpg 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/a><\/figure>\n\n\t\t\n\t\t<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-43282307 wp-block-group-is-layout-flex\">\n\t<p style=\"font-style:normal;font-weight:700\" class=\"has-link-color wp-elements-1 wp-block-lp-post-type has-text-color has-primary-color has-small-font-size\">Expert View<\/p>\n\n\t\t\n\t\t<h3 style=\"font-style:normal;font-weight:400\" class=\"wp-block-post-title has-base-font-size\"><a href=\"https:\/\/devoteam.info\/cz\/expert-view\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\/\" target=\"_self\" >A real story about transforming an app with Kubernetes cluster<\/a><\/h3><\/div>\n\t\t\n\t<\/div>\n\n","yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.4 (Yoast SEO v28.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>A real story about transforming an app with Kubernetes cluster | Devoteam<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/devoteam.info\/cz\/expert-view\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A real story about transforming an app with Kubernetes cluster\" \/>\n<meta property=\"og:description\" content=\"Every project has two sides &#8211; positive, like benefits as outcomes, and negative, unforeseen challenges discovered while the project was being developed. Today, in this blog, I\u2019ll be talking about that not-so-bright side of the project, the one that brings up specific challenges and makes the team a little bit nervous.&nbsp; Just like most of [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devoteam.info\/cz\/expert-view\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\/\" \/>\n<meta property=\"og:site_name\" content=\"Devoteam\" \/>\n<meta property=\"og:image\" content=\"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/Devoteam_icons_others_red-poppy-5_Sprint-1.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/cz\\\/expert-view\\\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\\\/\",\"url\":\"https:\\\/\\\/devoteam.info\\\/cz\\\/expert-view\\\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\\\/\",\"name\":\"A real story about transforming an app with Kubernetes cluster | Devoteam\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/cz\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/cz\\\/expert-view\\\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/cz\\\/expert-view\\\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/devoteam.info\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/shutterstock_1819430477-scaled-4.jpg\",\"datePublished\":\"2022-04-26T05:15:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/cz\\\/expert-view\\\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\\\/#breadcrumb\"},\"inLanguage\":\"en-CZ\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/devoteam.info\\\/cz\\\/expert-view\\\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-CZ\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/cz\\\/expert-view\\\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\\\/#primaryimage\",\"url\":\"https:\\\/\\\/devoteam.info\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/shutterstock_1819430477-scaled-4.jpg\",\"contentUrl\":\"https:\\\/\\\/devoteam.info\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/shutterstock_1819430477-scaled-4.jpg\",\"width\":2560,\"height\":1650},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/cz\\\/expert-view\\\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/devoteam.info\\\/cz\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Expert View\",\"item\":\"https:\\\/\\\/devoteam.info\\\/cz\\\/expert-view\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"A real story about transforming an app with Kubernetes cluster\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/cz\\\/#website\",\"url\":\"https:\\\/\\\/devoteam.info\\\/cz\\\/\",\"name\":\"Devoteam\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/devoteam.info\\\/cz\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-CZ\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"A real story about transforming an app with Kubernetes cluster | Devoteam","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/devoteam.info\/cz\/expert-view\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\/","og_locale":"en_US","og_type":"article","og_title":"A real story about transforming an app with Kubernetes cluster","og_description":"Every project has two sides &#8211; positive, like benefits as outcomes, and negative, unforeseen challenges discovered while the project was being developed. Today, in this blog, I\u2019ll be talking about that not-so-bright side of the project, the one that brings up specific challenges and makes the team a little bit nervous.&nbsp; Just like most of [&hellip;]","og_url":"https:\/\/devoteam.info\/cz\/expert-view\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\/","og_site_name":"Devoteam","og_image":[{"url":"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/Devoteam_icons_others_red-poppy-5_Sprint-1.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devoteam.info\/cz\/expert-view\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\/","url":"https:\/\/devoteam.info\/cz\/expert-view\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\/","name":"A real story about transforming an app with Kubernetes cluster | Devoteam","isPartOf":{"@id":"https:\/\/devoteam.info\/cz\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devoteam.info\/cz\/expert-view\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\/#primaryimage"},"image":{"@id":"https:\/\/devoteam.info\/cz\/expert-view\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\/#primaryimage"},"thumbnailUrl":"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4.jpg","datePublished":"2022-04-26T05:15:12+00:00","breadcrumb":{"@id":"https:\/\/devoteam.info\/cz\/expert-view\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\/#breadcrumb"},"inLanguage":"en-CZ","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devoteam.info\/cz\/expert-view\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\/"]}]},{"@type":"ImageObject","inLanguage":"en-CZ","@id":"https:\/\/devoteam.info\/cz\/expert-view\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\/#primaryimage","url":"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4.jpg","contentUrl":"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4.jpg","width":2560,"height":1650},{"@type":"BreadcrumbList","@id":"https:\/\/devoteam.info\/cz\/expert-view\/a-real-story-about-transforming-an-app-with-kubernetes-cluster\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devoteam.info\/cz\/"},{"@type":"ListItem","position":2,"name":"Expert View","item":"https:\/\/devoteam.info\/cz\/expert-view\/"},{"@type":"ListItem","position":3,"name":"A real story about transforming an app with Kubernetes cluster"}]},{"@type":"WebSite","@id":"https:\/\/devoteam.info\/cz\/#website","url":"https:\/\/devoteam.info\/cz\/","name":"Devoteam","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devoteam.info\/cz\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-CZ"}]}},"uagb_featured_image_src":{"full":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4.jpg",2560,1650,false],"thumbnail":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4-150x150.jpg",150,150,true],"medium":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4-300x193.jpg",300,193,true],"medium_large":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4-768x495.jpg",768,495,true],"large":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4-1024x660.jpg",1024,660,true],"1536x1536":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4-1536x990.jpg",1536,990,true],"2048x2048":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/shutterstock_1819430477-scaled-4-2048x1320.jpg",2048,1320,true]},"uagb_author_info":{"display_name":"tomvermeersch","author_link":"https:\/\/devoteam.info\/cz\/author\/"},"uagb_comment_info":0,"uagb_excerpt":"Every project has two sides &#8211; positive, like benefits as outcomes, and negative, unforeseen challenges discovered while the project was being developed. Today, in this blog, I\u2019ll be talking about that not-so-bright side of the project, the one that brings up specific challenges and makes the team a little bit nervous.&nbsp; Just like most of&hellip;","_links":{"self":[{"href":"https:\/\/devoteam.info\/cz\/wp-json\/wp\/v2\/expert-view\/512702","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devoteam.info\/cz\/wp-json\/wp\/v2\/expert-view"}],"about":[{"href":"https:\/\/devoteam.info\/cz\/wp-json\/wp\/v2\/types\/expert-view"}],"version-history":[{"count":0,"href":"https:\/\/devoteam.info\/cz\/wp-json\/wp\/v2\/expert-view\/512702\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devoteam.info\/cz\/wp-json\/wp\/v2\/media\/416303"}],"wp:attachment":[{"href":"https:\/\/devoteam.info\/cz\/wp-json\/wp\/v2\/media?parent=512702"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devoteam.info\/cz\/wp-json\/wp\/v2\/categories?post=512702"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devoteam.info\/cz\/wp-json\/wp\/v2\/tags?post=512702"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/devoteam.info\/cz\/wp-json\/wp\/v2\/industry?post=512702"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}