{"id":474,"date":"2021-03-16T06:42:15","date_gmt":"2021-03-16T06:42:15","guid":{"rendered":"https:\/\/rejupillai.com\/?p=474"},"modified":"2026-04-13T00:08:46","modified_gmt":"2026-04-13T00:08:46","slug":"migrate-vm-to-container-on-kubernetes","status":"publish","type":"post","link":"https:\/\/rejupillai.com\/index.php\/2021\/03\/16\/migrate-vm-to-container-on-kubernetes\/","title":{"rendered":"Auto-magically in minutes, migrate VM apps to Container on Kubernetes"},"content":{"rendered":"\n<p>One of the most commonly adopted cloud-migration strategy is to lift and shift applications from on-premise to the cloud.  Perhaps a state missing in the below CMM is called &#8220;Cloud Washed&#8221;, a prevalent industry practice in which legacy apps are re-branded as cloud apps, by just moving them out to the cloud. I would place it at the bottom. In my opinion apps should move to cloud,  not just for a better cost optimization but also to exploit the elasticity and get the speed, agility and nimbleness required to release new features to market faster, cheaper and smarter. And that&#8217;s what Cloud Native Apps do.<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/fkQkFTa9_zTnmZsYXFA9EfGaGChtty5O7sE69U9HZaLWY7ZNmqDvRGcz6PCYSDny1MHjFcil6Fp6_8YGylOGyK7yFB_mjvx7plJ_J_xBYjPULC8PxFpJkIpHjTToIkDEoCzK8pFn_y0G\" alt=\"\" width=\"580\" height=\"299\"\/><figcaption>Cloud maturity model (CMM)<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Brownfield challenge<\/h3>\n\n\n\n<p>In a brownfield environment, the biggest challenge in adopting modern applications principles is refactoring apps, that is going back to design board, breaking open the app, applying 12 (15) factors, correctly finding bounded contexts and more. Wait,  wasn&#8217;t the app already in its midlife, and would possibly be sunsetted in couple of years ? So what is the immediate value realised after all this pain ?<\/p>\n\n\n\n<p>What if you could,<\/p>\n\n\n\n<p>find a middle ground ?<\/p>\n\n\n\n<p>benefit from the goodness of a &#8220;platform&#8221; ?<\/p>\n\n\n\n<p>migrate your legacy app into containers, with no\/minimal to moderate dev effort, and better yet, automatically run it on a modern system like Kubernetes ?<\/p>\n\n\n\n<p>forward engineer, from source to production and gradually adopt continuous delivery practices for the app ?<\/p>\n\n\n\n<p>repeat it for more apps with confidence, like in a &#8220;migration-factory&#8221; ?<br><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Goal<\/h3>\n\n\n\n<p>This blog shows how Google Cloud&#8217;s  <a href=\"https:\/\/cloud.google.com\/migrate\/anthos\/\">Migrate for Anthos<\/a> (M4A) help solve the problem without breaking a sweat. I will demonstrate with absolutely <strong>zero changes to the app<\/strong>, and with few clicks how I moved a WordPress app backed by MySQL from a VM running on compute engine to a StatefulSet Pod running on Kubernetes. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Let&#8217;s begin<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Step 1 : Deploy the VM App (Source)<\/h4>\n\n\n\n<p><a href=\"https:\/\/cloud.google.com\/marketplace\">Google Cloud Marketplace<\/a> is home to numerous open source, paid products and solutions that you could deploy to Google Cloud. Under the hood, the solutions are packaged as  <a href=\"https:\/\/cloud.google.com\/deployment-manager\">Deployment Manager<\/a>  Jinja\/Python scripts, GCP&#8217;s IaC solution. The MarketPlace also provides easy customization, so you can choose the T-shirt size for the VMs and disks, that best suite your need. But for now let&#8217;s just &#8220;Click to Deploy&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1872\" height=\"910\" src=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-13.png\" alt=\"\" class=\"wp-image-502\" srcset=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-13.png 1872w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-13-300x146.png 300w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-13-768x373.png 768w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-13-1024x498.png 1024w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-13-1170x569.png 1170w\" sizes=\"auto, (max-width: 1872px) 100vw, 1872px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Step 2 : Review that app<\/h4>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"2140\" height=\"156\" src=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-14.png\" alt=\"\" class=\"wp-image-504\" srcset=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-14.png 2140w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-14-300x22.png 300w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-14-768x56.png 768w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-14-1024x75.png 1024w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-14-1170x85.png 1170w\" sizes=\"auto, (max-width: 2140px) 100vw, 2140px\" \/><figcaption>GCE VM<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-15-1024x700.png\" alt=\"\" class=\"wp-image-505\" width=\"768\" height=\"525\" srcset=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-15-1024x700.png 1024w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-15-300x205.png 300w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-15-768x525.png 768w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-15-1170x800.png 1170w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-15.png 1814w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Step 3 : Configure M4A and Migrate<\/h4>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"2750\" height=\"912\" src=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-16.png\" alt=\"\" class=\"wp-image-506\" srcset=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-16.png 2750w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-16-300x99.png 300w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-16-768x255.png 768w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-16-1024x340.png 1024w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-16-1170x388.png 1170w\" sizes=\"auto, (max-width: 2750px) 100vw, 2750px\" \/><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\">Step 3.1 : Processing Clusters<\/h5>\n\n\n\n<p>Processing cluster is the Target <a href=\"https:\/\/cloud.google.com\/kubernetes-engine\">GKE<\/a> Kubernetes cluster. Create a new one or deploy to an existing cluster.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1458\" height=\"1196\" src=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-21.png\" alt=\"\" class=\"wp-image-513\" srcset=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-21.png 1458w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-21-300x246.png 300w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-21-768x630.png 768w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-21-1024x840.png 1024w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-21-1170x960.png 1170w\" sizes=\"auto, (max-width: 1458px) 100vw, 1458px\" \/><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\">Step 3.2 : Sources<\/h5>\n\n\n\n<p>The source is where the VM App resides.In our case the WordPress VM on GCE. As you will see from the dropdown, M4A supports <code>VMware, AWS and Azure <\/code>along with Google Cloud. For other clouds, M4A requires additionally the setup of <a href=\"https:\/\/cloud.google.com\/migrate\/compute-engine\/?utm_source=google&amp;utm_medium=cpc&amp;utm_campaign=japac-IN-all-en-dr-skws-all-pkws-trial-e-dr-1009882&amp;utm_content=text-ad-none-none-DEV_c-CRE_453207074796-ADGP_Hybrid%20%7C%20SKWS%20-%20EXA%20%7C%20Txt%20~%20Compute%20~%20Migrate%20for%20Compute%20Engine_migrate%20for%20compute%20engine-comparison%20-%20Products-KWID_43700049567054208-kwd-837671325534&amp;userloc_9061994-network_g&amp;utm_term=KW_migrate%20for%20compute%20engine%20vs&amp;gclid=Cj0KCQjwi7yCBhDJARIsAMWFScNrynR4MvIQwD9ytDxkgqQ_PeCMz_m7mP751c28QrFoCkUxxv6FQEsaAtmpEALw_wcB&amp;gclsrc=aw.ds\">Migrate for Compute <\/a>(M4C). I would plan to demonstrate that later, as an addendum or Part-B to this post.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1962\" height=\"1462\" src=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-18.png\" alt=\"\" class=\"wp-image-508\" srcset=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-18.png 1962w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-18-300x224.png 300w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-18-768x572.png 768w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-18-1024x763.png 1024w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-18-1170x872.png 1170w\" sizes=\"auto, (max-width: 1962px) 100vw, 1962px\" \/><figcaption>define source<\/figcaption><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\">Step 3.3 : Migration<\/h5>\n\n\n\n<p>Provide the required details, along with the intent to migrate only the <code>image, data or both<\/code>. After creating migration, run the migration.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1296\" height=\"1582\" src=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-19.png\" alt=\"\" class=\"wp-image-509\" srcset=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-19.png 1296w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-19-246x300.png 246w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-19-768x937.png 768w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-19-839x1024.png 839w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-19-1170x1428.png 1170w\" sizes=\"auto, (max-width: 1296px) 100vw, 1296px\" \/><figcaption>migration setup<\/figcaption><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\">Step 3.4 : Review generated artifact<\/h5>\n\n\n\n<p>This is where things get interesting. The tool automatically creates the necessary artifacts including a Dockerfile for the Container App, a Kubernetes Deployment spec YAML. It also automatically pushes a Base Image, and a container Image (for the app) to <a href=\"https:\/\/cloud.google.com\/container-registry\">Google Container Registry<\/a> (GCR) within the projects&#8217; repository.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1260\" height=\"632\" src=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-20.png\" alt=\"\" class=\"wp-image-511\" srcset=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-20.png 1260w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-20-300x150.png 300w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-20-768x385.png 768w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-20-1024x514.png 1024w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-20-1170x587.png 1170w\" sizes=\"auto, (max-width: 1260px) 100vw, 1260px\" \/><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\">Step 3.5 : Voila ! The app is migrated&#8230;<\/h5>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1836\" height=\"632\" src=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-22.png\" alt=\"\" class=\"wp-image-515\" srcset=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-22.png 1836w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-22-300x103.png 300w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-22-768x264.png 768w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-22-1024x352.png 1024w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-22-1170x403.png 1170w\" sizes=\"auto, (max-width: 1836px) 100vw, 1836px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"2168\" height=\"1540\" src=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-28.png\" alt=\"\" class=\"wp-image-528\" srcset=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-28.png 2168w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-28-300x213.png 300w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-28-768x546.png 768w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-28-1024x727.png 1024w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-28-1170x831.png 1170w\" sizes=\"auto, (max-width: 2168px) 100vw, 2168px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">What lies beneath ? <\/h3>\n\n\n\n<p>Let&#8217;s do an analysis of what just happened, and what did the tool do under the hood ?<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">4.1 : Review M4A CRDs &amp; Pods<\/h5>\n\n\n\n<p>M4A CRDs is deployed to the Target &#8220;Processing Cluster&#8221;, chosen in the above Step 3.1. The M4A CRDs and Pods can be viewed here.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1526\" height=\"802\" src=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-26.png\" alt=\"\" class=\"wp-image-526\" srcset=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-26.png 1526w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-26-300x158.png 300w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-26-768x404.png 768w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-26-1024x538.png 1024w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-26-1170x615.png 1170w\" sizes=\"auto, (max-width: 1526px) 100vw, 1526px\" \/><\/figure>\n\n\n\n<p>This is the core M4A infrastructure that helps migrate the app, create disks and generate artefacts such as Dockerfile and K8s Deployment manifest. Let&#8217;s review them.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">4.2 : Review Pods, Services  and StatefulSet<\/h5>\n\n\n\n<p>Because there is a MySQL Database backing the WordPress app, the Container app is implemented as a StatefulSet. This is indicated when user  chooses <code>\"data\" or \"image &amp; data\" <\/code>while configuring the migration in Step 3.3.  When any of the latter 2 is chosen, the migration tool will create a <code>PersistentVolume<\/code> (PV) in Kubernetes and map the <a href=\"https:\/\/cloud.google.com\/persistent-disk\">GCE Persistent Disk <\/a> attached to the WordPress VM.<\/p>\n\n\n\n<p>By default there is no Ingress \/ Service type LoadBalancer deployed as part of the generated manifest, so you will have to expose the Pod WebService using one of the methods.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1134\" height=\"234\" src=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-34.png\" alt=\"\" class=\"wp-image-552\" srcset=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-34.png 1134w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-34-300x62.png 300w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-34-768x158.png 768w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-34-1024x211.png 1024w\" sizes=\"auto, (max-width: 1134px) 100vw, 1134px\" \/><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\">4.3 : Review PV, PVCs and StorageClass<\/h5>\n\n\n\n<p>M4A extracts the <code>Persistent Disk <\/code>(Google) associated with the VM or incase of a VMware environment, the <code>.vmdk <\/code>disk and stream-migrate it to GCP project hosting the cluster. <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"2494\" height=\"672\" src=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-32.png\" alt=\"\" class=\"wp-image-532\" srcset=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-32.png 2494w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-32-300x81.png 300w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-32-768x207.png 768w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-32-1024x276.png 1024w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-32-1170x315.png 1170w\" sizes=\"auto, (max-width: 2494px) 100vw, 2494px\" \/><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\">4.4 :  Dockerfile <\/h5>\n\n\n\n<p>Dockerfile<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code># Please refer to the documentation:\n# https:\/\/cloud.google.com\/migrate\/anthos\/docs\/dockerfile-reference\n\nFROM anthos-migrate.gcr.io\/v2k-run-embedded:v1.6.2 as migrate-for-anthos-runtime\n\n# Image containing data captured from the source VM\nFROM gcr.io\/reju-anthos-bank\/wordpress-multisite-1-vm-non-runnable-base:3-14-2021--12-2-31 as source-content\n\n<strong># If you want to update parts of the image, add your commands here.\n# For example:\n# RUN apt-get update\n# RUN apt-get install -y \\\n# package1=version \\\n# package2=version \\\n# package3=version\n# RUN yum update\n# RUN wget http:\/\/github.com<\/strong>\n\nCOPY --from=migrate-for-anthos-runtime \/ \/\n\n# Migrate for Anthos image includes entrypoint\nENTRYPOINT [ \"\/.v2k.go\" ]<\/code><\/pre>\n\n\n\n<p>Notice that M4A creates a multi-stage build with a base-image that represent the M4A-runtime. The relevant filesystem source is extracted from the VM and it becomes part of the new container image represented by <code>source-content<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Forward engineering with CI\/CD <\/h3>\n\n\n\n<p>In Step 4.4, you can add \/ replace content of the File system via RUN\/ADD\/COPY. This provides an extension to not just migrate a running VM environment to a running container, but also help us to make new modifications or patches to the application, which opens up all new possibilities to further enhance the build &amp; deploy pipelines via CI\/CD.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Assess, what are good candidate apps for M4A<\/h2>\n\n\n\n<p>There are 2 tools for <a href=\"https:\/\/cloud.google.com\/migrate\/anthos\/docs\/linux-assessment-tool\">Linux<\/a> and <a href=\"https:\/\/cloud.google.com\/migrate\/anthos\/docs\/windows-assessment-tool\">Windows<\/a> environment that comes handy to determine if your application is a good candidate for M4A to seamlessly migrate the app. The fit score tells what level of manual effort may be expected pre\/post migration. A score of &gt; 7 is a good fit for M4A with moderate to no dev efforts. Like in this example we didn&#8217;t require to do any changes at all.<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/OyhkJEArZzwgbmGvcEtOjmbquksqQz7CkdQZT-yzsnThBgpX4vj8CHyJLExiud7E2PkpCQgmolD_zE4-8QGDapiDomP1JiIV3Fym9wbUSBLMXmo3MNsZ_kJuoVLIrFH1oKHh-VGsKQie\" alt=\"\" width=\"550\" height=\"300\"\/><\/figure>\n\n\n\n<p>m4a-fit-collect.sh runs the commands like <code>netstat, hostname, systemctl, service, ps, lsof<\/code> etc&#8230; to determine the state of the VM and the processes that are running and ports to which they write. In addition the relevant files are copied into the tarball for analysis from \/etc\/* and \/proc\/* directories. A full list can be found <a href=\"https:\/\/cloud.google.com\/migrate\/anthos\/docs\/linux-assessment-tool\">here<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Application Portfolio Analysis &amp; Migration Path<\/h2>\n\n\n\n<p>Tool supported assessments, both at an app (VM) level like <code>m4a-fit-collect.sh<\/code> and at a portfolio level, like <a href=\"https:\/\/cloud.google.com\/blog\/products\/cloud-migration\/google-cloud-has-acquired-stratozone\">Stratozone<\/a> helps you develop an app migration strategy for the cloud.  But broadly put together, an enterprise may have a combinations of some of the below applications, and bucketing them can help identify what applications can be a better fit for M4A.  COTS\/ISV, J2EE, IIS .NET (migrated to Windows Containers), WebSphere, JBoss, Tomcat, J2EE Apps, Web Apps, Portals &amp; CMS like WordPress, Drupal etc.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"2026\" height=\"1002\" src=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-25.png\" alt=\"\" class=\"wp-image-522\" srcset=\"https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-25.png 2026w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-25-300x148.png 300w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-25-768x380.png 768w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-25-1024x506.png 1024w, https:\/\/rejupillai.com\/wp-content\/uploads\/2021\/03\/image-25-1170x579.png 1170w\" sizes=\"auto, (max-width: 2026px) 100vw, 2026px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusions<\/h2>\n\n\n\n<p>We saw how <a href=\"https:\/\/cloud.google.com\/migrate\/anthos\">Migrate for Anthos <\/a>can help significantly speed up the journey of a legacy application to Container on Kubernetes, without even changing a line of code. While this may not necessarily be true for complex application and hence doing a pre-assessment with a fit-score analysis is useful. <\/p>\n\n\n\n<p>It is also not required that all applications must move to cloud. You could modernize on-premise and get the same result using Anthos On Prem.<\/p>\n\n\n\n<p>Thanks for reading ! <\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of the most commonly adopted cloud-migration strategy is to lift and shift applications from on-premise to the cloud. Perhaps a state missing in the below CMM is called &#8220;Cloud Washed&#8221;, a prevalent industry practice in which legacy apps are re-branded as cloud apps, by just moving them out to<\/p>\n","protected":false},"author":1,"featured_media":482,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-474","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-google-cloud","ct-col-2"],"_links":{"self":[{"href":"https:\/\/rejupillai.com\/index.php\/wp-json\/wp\/v2\/posts\/474","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rejupillai.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rejupillai.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rejupillai.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rejupillai.com\/index.php\/wp-json\/wp\/v2\/comments?post=474"}],"version-history":[{"count":49,"href":"https:\/\/rejupillai.com\/index.php\/wp-json\/wp\/v2\/posts\/474\/revisions"}],"predecessor-version":[{"id":553,"href":"https:\/\/rejupillai.com\/index.php\/wp-json\/wp\/v2\/posts\/474\/revisions\/553"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rejupillai.com\/index.php\/wp-json\/wp\/v2\/media\/482"}],"wp:attachment":[{"href":"https:\/\/rejupillai.com\/index.php\/wp-json\/wp\/v2\/media?parent=474"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rejupillai.com\/index.php\/wp-json\/wp\/v2\/categories?post=474"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rejupillai.com\/index.php\/wp-json\/wp\/v2\/tags?post=474"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}