{"id":35153,"date":"2024-10-14T10:25:54","date_gmt":"2024-10-14T08:25:54","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=35153"},"modified":"2024-10-14T10:25:57","modified_gmt":"2024-10-14T08:25:57","slug":"migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/","title":{"rendered":"Migrating AWX from one Kubernetes cluster to another: A custom approach"},"content":{"rendered":"\n<p>In this guide, we\u2019ll walk through migrating an AWX instance from one Kubernetes infrastructure to another, with two important considerations. First, both AWX instances are on completely different networks, meaning there\u2019s no direct connectivity between them. Second, we aim to replicate the credentials (including passwords) stored in AWX, which requires careful handling. This approach differs from the <a href=\"https:\/\/ansible.readthedocs.io\/projects\/awx-operator\/en\/latest\/migration\/migration.html\" target=\"_blank\" rel=\"noreferrer noopener\">official documentation<\/a> due to these two specific constraints.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"600\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/10\/migrating-awx.png\" alt=\"\" class=\"wp-image-35156\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/10\/migrating-awx.png 900w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/10\/migrating-awx-300x200.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/10\/migrating-awx-768x512.png 768w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-step-1-backup-awx-on-the-old-infrastructure\">Step 1: Backup AWX on the old infrastructure<\/h2>\n\n\n\n<p>To back up AWX on the old infrastructure, we\u2019ll use the <code>AWXBackup<\/code> resource provided by the AWX Operator. This will capture all necessary configurations, including credentials, job templates, and database data.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Create the AWXBackup resource<\/strong><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\napiVersion: awx.ansible.com\/v1beta1\nkind: AWXBackup\nmetadata:\n  name: awx-backup\n  namespace: &lt;namespace-awx&gt;\nspec:\n  deployment_name: &lt;awx-instance-name&gt;\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Apply the backup configuration<\/strong><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl apply -f awxbackup.yaml\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Verify the backup<\/strong><br>Check the status of the AWXBackup resource to ensure the backup is complete<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl get awxbackup -n &lt;namespace-awx&gt;\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Access the backup data<\/strong><br>AWXBackup creates a PVC to store the backup data. We need to retrieve it.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl get pvc -n &lt;namespace-awx&gt;\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Mount the backup PVC<\/strong><br>Create a temporary pod to access the backup files<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\napiVersion: v1\nkind: Pod\nmetadata:\n  name: awx-backup-access\n  namespace: &lt;namespace-awx&gt;\nspec:\n  containers:\n  - name: backup-container\n    image: busybox:latest\n    command: &#x5B;&quot;\/bin\/sh&quot;, &quot;-c&quot;, &quot;sleep 3600&quot;]\n    volumeMounts:\n    - mountPath: \/backup-data\n      name: awx-backup-pvc\n  volumes:\n  - name: awx-backup-pvc\n    persistentVolumeClaim:\n      claimName: &lt;awx-backup-pvc&gt;\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Compress the backup<\/strong><br>Once inside the pod, go to the backup directory and archive the latest directory<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl exec -it awx-backup-access -n &lt;namespace-awx&gt; -- \/bin\/sh\ncd \/backup-data\nls -l\n## Find the latest directory\ntar -czvf \/awx_backup.tar.gz &lt;latest-directory&gt;\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Copy the archive locally<\/strong><br>Use <code>kubectl cp<\/code> to copy the archive from the pod to your local machine<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl cp &lt;namespace-awx&gt;\/awx-backup-access:\/backup-data\/awx_backup.tar.gz .\/awx_backup.tar.gz\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Clean up the temporary pod<\/strong><br>Once the backup is copied, delete the temporary pod<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl delete pod awx-backup-access -n &lt;namespace-awx&gt;\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Recover the decryption key for secret keys<\/strong><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl get secrets -n &lt;namespace-awx&gt; &lt;awx-instance-name&gt;-secret-key -o jsonpath=&#039;{.data.secret_key}&#039; &amp;&amp; echo;\n<\/pre><\/div>\n\n\n<p>Save the base 64 encrypted key, we will need it for during the restoring step.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-step-2-setup-the-new-awx-instance\">Step 2: Setup the new AWX instance<\/h2>\n\n\n\n<p>On the new infrastructure, we first need to install AWX via the AWX Operator.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Install the AWX Operator<\/strong><br>For this step follow the official <a href=\"https:\/\/ansible.readthedocs.io\/projects\/awx-operator\/en\/latest\/\" target=\"_blank\" rel=\"noreferrer noopener\">documentation of AWX Operator<\/a><br>Maybe you will need to deploy AWX using a local repository, you can read my other article: <a href=\"https:\/\/www.dbi-services.com\/blog\/deploy-awx-operator-with-helm-using-images-from-a-local-registry\/\" target=\"_blank\" rel=\"noreferrer noopener\">Deploy awx-operator with Helm using images from a local registry<\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Verify the AWX deployment<\/strong><br>Check that the new AWX instance is up and running<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl get awx -n &lt;new-namespace-awx&gt;\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-step-3-backup-awx-on-the-new-infrastructure\">Step 3: Backup AWX on the new infrastructure<\/h2>\n\n\n\n<p>Next, we need to create an AWXBackup on the new infrastructure.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Create an AWXBackup for the backup data<\/strong><br>Create the <code>awxbackup.yaml<\/code> file:<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\napiVersion: awx.ansible.com\/v1beta1\nkind: AWXBackup\nmetadata:\n  name: awx-backup-migration\n  namespace: &lt;namespace-awx&gt;\nspec:\n  deployment_name: &lt;awx-instance-name&gt;\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Apply the backup configuration<\/strong><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl apply -f awxbackup.yaml\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Verify the backup<\/strong><br>Check the status of the AWXBackup resource to ensure the backup is complete<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl get awxbackup -n &lt;namespace-awx&gt;\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Identify the backup PVC<\/strong><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl get pvc -n &lt;namespace-awx&gt;\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-step-4-transfer-and-restore-the-backup-on-the-new-infrastructure\">Step 4: Transfer and restore the backup on the new infrastructure<\/h2>\n\n\n\n<p>Now that the new AWX is set up, we\u2019ll transfer the backup data and restore it.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Transfer the backup archive<\/strong><br>Copy the <code>awx_backup.tar.gz<\/code> file to the new infrastructure by uploading it to the new backup PVC using a temporary pod<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Create a temporary pod to restore data<\/strong><br>Create the awx-restore-access.yaml file<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\napiVersion: v1\nkind: Pod\nmetadata:\n  name: awx-backup-restore\n  namespace: &lt;new-namespace-awx&gt;\nspec:\n  containers:\n  - name: restore-container\n    image: busybox:latest\n    command: &#x5B;&quot;\/bin\/sh&quot;, &quot;-c&quot;, &quot;sleep 3600&quot;]\n    volumeMounts:\n    - mountPath: \/backup-data\n      name: awx-backup-pvc\n  volumes:\n  - name: awx-backup-pvc\n    persistentVolumeClaim:\n      claimName: &lt;pvc-for-awx-backup&gt;\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl apply -f awx-restore-access.yaml\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Use <code>kubectl cp<\/code> to upload the archive to the pod<\/strong><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl cp .\/awx-backup-migration.tar.gz &lt;namespace-awx&gt;\/awx-restore-access:\/awx_backup.tar.gz\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Replace the data from archive<\/strong><br>Inside the pod, extract the archive<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl exec -it awx-backup-restore -n &lt;new-namespace-awx&gt; -- \/bin\/sh\ncd \/backup-data\nls -l\n## Find the latest directory\n\nrm -rf \/backup-data\/&lt;latest-backup-directory&gt;\/{tower.db,awx-objects}\ncd\ntar -xzvf \/awx_backup.tar.gz\n\ncp backup-data\/&lt;backup-directory-from-tar.gz&gt;\/tower.db \/backup-data\/&lt;latest-backup-directory&gt;\/.\ncp backup-data\/&lt;backup-directory-from-tar.gz&gt;\/awx-objects \/backup-data\/&lt;latest-backup-directory&gt;\/.\n\nvi \/backup-data\/&lt;latest-backup-directory&gt;\/secret.yml\n## Replace the value of the variable\n## secrets:\n##   secretKeySecret:\n##     data: {secret_key: ###insert here the base64 of the decryption key recover at the end of the Step 1### }\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Create the AWXRestore resource<\/strong><br>Create an <code>AWXRestore<\/code> resource to apply the backup<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\napiVersion: awx.ansible.com\/v1beta1\nkind: AWXRestore\nmetadata:\n  name: awx-backup-restore\n  namespace: &lt;new-namespace-awx&gt;\nspec:\n  deployment_name: &lt;awx-instance-name&gt;\n  backup_name: awx-backup-migration\n  no_log: false\n  force_drop_db: true\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Apply the AWXRestore<\/strong><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl apply -f awxrestore.yaml\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Monitor the restoration<\/strong><br>Ensure the restoration completes successfully<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl get awxrestore -n &lt;new-namespace-awx&gt;\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-step-5-log-in-to-the-new-infrastructure-awx\">Step 5: Log in to the new infrastructure AWX<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You can log in as admin (the password will be that of the old infrastructure)<\/li>\n\n\n\n<li>Explore the various AWX resources and check that everything has been migrated correctly<\/li>\n\n\n\n<li>Run a template job to validate correct operation<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h2>\n\n\n\n<p>By following this procedure, we\u2019ve successfully migrated an AWX instance across two isolated Kubernetes clusters while maintaining full fidelity of the AWX credentials and configurations.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this guide, we\u2019ll walk through migrating an AWX instance from one Kubernetes infrastructure to another, with two important considerations. First, both AWX instances are on completely different networks, meaning there\u2019s no direct connectivity between them. Second, we aim to replicate the credentials (including passwords) stored in AWX, which requires careful handling. This approach differs [&hellip;]<\/p>\n","protected":false},"author":107,"featured_media":35157,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1321,1320,1522],"tags":[2600,2432,3430,2667,2634],"type_dbi":[3077,3431,3017,2943],"class_list":["post-35153","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ansible","category-devops","category-kubernetes","tag-ansible-2","tag-awx","tag-awxoperator","tag-devops-2","tag-kubernetes-2","type-ansible","type-awx","type-devops","type-kubernetes"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Migrating AWX from one Kubernetes cluster to another: A custom approach - dbi Blog<\/title>\n<meta name=\"description\" content=\"Learn how to migrate AWX between two isolated Kubernetes clusters, preserving all configurations and credentials, with a custom approach using AWXBackup and AWXRestore.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Migrating AWX from one Kubernetes cluster to another: A custom approach\" \/>\n<meta property=\"og:description\" content=\"Learn how to migrate AWX between two isolated Kubernetes clusters, preserving all configurations and credentials, with a custom approach using AWXBackup and AWXRestore.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-14T08:25:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-14T08:25:57+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/10\/migrating-awx-square.png\" \/>\n\t<meta property=\"og:image:width\" content=\"900\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Donovan Winter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Donovan Winter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\\\/\"},\"author\":{\"name\":\"Donovan Winter\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/e0f67a930d31485dd7adef9081496560\"},\"headline\":\"Migrating AWX from one Kubernetes cluster to another: A custom approach\",\"datePublished\":\"2024-10-14T08:25:54+00:00\",\"dateModified\":\"2024-10-14T08:25:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\\\/\"},\"wordCount\":540,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2024\\\/10\\\/migrating-awx-square.png\",\"keywords\":[\"Ansible\",\"awx\",\"awxoperator\",\"devops\",\"kubernetes\"],\"articleSection\":[\"Ansible\",\"DevOps\",\"Kubernetes\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\\\/\",\"name\":\"Migrating AWX from one Kubernetes cluster to another: A custom approach - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2024\\\/10\\\/migrating-awx-square.png\",\"datePublished\":\"2024-10-14T08:25:54+00:00\",\"dateModified\":\"2024-10-14T08:25:57+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/e0f67a930d31485dd7adef9081496560\"},\"description\":\"Learn how to migrate AWX between two isolated Kubernetes clusters, preserving all configurations and credentials, with a custom approach using AWXBackup and AWXRestore.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2024\\\/10\\\/migrating-awx-square.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2024\\\/10\\\/migrating-awx-square.png\",\"width\":900,\"height\":900},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Migrating AWX from one Kubernetes cluster to another: A custom approach\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/e0f67a930d31485dd7adef9081496560\",\"name\":\"Donovan Winter\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/84afe8f5c9c68d608f6a5308ec644228931454d5360cfc771256d3cb602b6614?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/84afe8f5c9c68d608f6a5308ec644228931454d5360cfc771256d3cb602b6614?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/84afe8f5c9c68d608f6a5308ec644228931454d5360cfc771256d3cb602b6614?s=96&d=mm&r=g\",\"caption\":\"Donovan Winter\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/donovanwinter\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Migrating AWX from one Kubernetes cluster to another: A custom approach - dbi Blog","description":"Learn how to migrate AWX between two isolated Kubernetes clusters, preserving all configurations and credentials, with a custom approach using AWXBackup and AWXRestore.","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:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/","og_locale":"en_US","og_type":"article","og_title":"Migrating AWX from one Kubernetes cluster to another: A custom approach","og_description":"Learn how to migrate AWX between two isolated Kubernetes clusters, preserving all configurations and credentials, with a custom approach using AWXBackup and AWXRestore.","og_url":"https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/","og_site_name":"dbi Blog","article_published_time":"2024-10-14T08:25:54+00:00","article_modified_time":"2024-10-14T08:25:57+00:00","og_image":[{"width":900,"height":900,"url":"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/10\/migrating-awx-square.png","type":"image\/png"}],"author":"Donovan Winter","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Donovan Winter","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/"},"author":{"name":"Donovan Winter","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/e0f67a930d31485dd7adef9081496560"},"headline":"Migrating AWX from one Kubernetes cluster to another: A custom approach","datePublished":"2024-10-14T08:25:54+00:00","dateModified":"2024-10-14T08:25:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/"},"wordCount":540,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/10\/migrating-awx-square.png","keywords":["Ansible","awx","awxoperator","devops","kubernetes"],"articleSection":["Ansible","DevOps","Kubernetes"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/","url":"https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/","name":"Migrating AWX from one Kubernetes cluster to another: A custom approach - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/10\/migrating-awx-square.png","datePublished":"2024-10-14T08:25:54+00:00","dateModified":"2024-10-14T08:25:57+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/e0f67a930d31485dd7adef9081496560"},"description":"Learn how to migrate AWX between two isolated Kubernetes clusters, preserving all configurations and credentials, with a custom approach using AWXBackup and AWXRestore.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/10\/migrating-awx-square.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/10\/migrating-awx-square.png","width":900,"height":900},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/migrating-awx-from-one-kubernetes-cluster-to-another-a-custom-approach\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Migrating AWX from one Kubernetes cluster to another: A custom approach"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/e0f67a930d31485dd7adef9081496560","name":"Donovan Winter","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/84afe8f5c9c68d608f6a5308ec644228931454d5360cfc771256d3cb602b6614?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/84afe8f5c9c68d608f6a5308ec644228931454d5360cfc771256d3cb602b6614?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/84afe8f5c9c68d608f6a5308ec644228931454d5360cfc771256d3cb602b6614?s=96&d=mm&r=g","caption":"Donovan Winter"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/donovanwinter\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/35153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/107"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=35153"}],"version-history":[{"count":5,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/35153\/revisions"}],"predecessor-version":[{"id":35213,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/35153\/revisions\/35213"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/35157"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=35153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=35153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=35153"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=35153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}