- Overview
- Requirements
- Pre-installation
- Installation
- Post-installation
- Migration and upgrade
- Upgrading Automation Suite
- Migrating standalone products to Automation Suite
- Step 1: Restoring the standalone product database
- Step 2: Updating the schema of the restored product database
- Step 3: Moving the Identity organization data from standalone to Automation Suite
- Step 4: Backing up the platform database in Automation Suite
- Step 5: Merging organizations in Automation Suite
- Step 6: Updating the migrated product connection strings
- Step 7: Migrating standalone Orchestrator
- Step 8: Migrating standalone Insights
- Step 9: Migrating standalone Test Manager
- Step 10: Deleting the default tenant
- Performing a single tenant migration
- Migrating between Automation Suite clusters
- Migrating from Automation Suite on EKS/AKS to Automation Suite on OpenShift
- Monitoring and alerting
- Cluster administration
- Product-specific configuration
- Orchestrator advanced configuration
- Configuring Orchestrator parameters
- Configuring appSettings
- Configuring the maximum request size
- Overriding cluster-level storage configuration
- Configuring NLog
- Saving robot logs to Elasticsearch
- Configuring credential stores
- Configuring encryption key per tenant
- Cleaning up the Orchestrator database
- Skipping host library creation
- Troubleshooting
- The backup setup does not work due to a failure to connect to Azure Government
- Pods in the uipath namespace stuck when enabling custom node taints
- Unable to launch Automation Hub and Apps with proxy setup
- Robot cannot connect to an Automation Suite Orchestrator instance
- Log streaming does not work in proxy setups
- Velero backup fails with FailedValidation error
- Accessing FQDN returns RBAC: access denied error

Automation Suite on EKS/AKS installation guide
Migrating from Automation Suite on EKS/AKS to Automation Suite on OpenShift
You can migrate from Automation Suite deployed on EKS/AKS to Automation Suite on OpenShift. To do that, you must move your Kubernetes resources and, if applicable, migrate your data and Insights.
Step 1: Migrating Kubernetes resources
To migrate your Kubernetes resources from EKS/AKS to OpenShift, take the following steps:
-
Export your Kubernetes resources from the EKS/AKS cluster:
uipathctl cluster migration export ~/Downloads/aksinput.json --output-dir ~/Migrate --kubeconfig ~/Downloads/akskubeconfig --log-level debuguipathctl cluster migration export ~/Downloads/aksinput.json --output-dir ~/Migrate --kubeconfig ~/Downloads/akskubeconfig --log-level debug -
Update the values for
namespace,resourceVersion, anduidin the file generated in the output directory. Make sure to replace <uipath> with the namespace you plan to use.sed -i '' 's/namespace: uipath/namespace: <uipath>/g' source-cluster-223902721 sed -i '' 's/namespace: airflow/namespace: <uipath>/g' source-cluster-223902721 sed -i '' '/ resourceVersion:/d' source-cluster-223902721 sed -i '' '/ uid:/d' source-cluster-223902721sed -i '' 's/namespace: uipath/namespace: <uipath>/g' source-cluster-223902721 sed -i '' 's/namespace: airflow/namespace: <uipath>/g' source-cluster-223902721 sed -i '' '/ resourceVersion:/d' source-cluster-223902721 sed -i '' '/ uid:/d' source-cluster-223902721 -
Create the manifests in the target cluster using its kubeconfigr:
kubectl apply -f source-cluster-223902721 --namespace=<namespace>kubectl apply -f source-cluster-223902721 --namespace=<namespace> -
After completing the data and Insights migration (Step 2 and Step 3), complete the Automation Suite installation on the target cluster, by running the following command:
uipathctl manifest apply input-target.json --kubeconfig kubeconfig.target --versions versions-target.jsonuipathctl manifest apply input-target.json --kubeconfig kubeconfig.target --versions versions-target.json
Step 2: Migrating data
To migrate your data from Automation Suite on EKS/AKS to Automation Suite on OpenShift, take the following steps:
- Copy all the data from the source objectstore to the destination objectstore. Skip this step if you plan to use the same objectstore in the target cluster.
- Copy the SQL data from the source SQL server to the target SQL server. Skip this step if you plan to use the same SQL server in the target cluster.
Step 3: Migrating Insights
About the Insights migration
To migrate Insights, you must migrate the following PVCs:
insights-looker-lookerdir-pvc(PVC size: 500Mi)insights-looker-datadir-pvc(PVC size: 10Gi)
How to migrate Insights
To migrate the Insights PVCs, take the following steps:
-
Create the external storage secret by running one of the following commands.
-
If you use S3-compatible storage, run the following command:
kubectl create secret -n <namespace> generic export-externalobjects-secret \ --from-literal=ACCESSKEY=<accesskey> \ --from-literal=SECRETKEY=<secretkey> \ --from-literal=REGION=<region> \ --from-literal=FQDN=<fqdn> \ --from-literal=BUCKET=<bucket> \ --from-literal=USE_INSTANCE_PROFILE=<use_instance_profile> \ --from-literal=CREATE_BUCKET=<create_bucket> \ --from-literal=STORAGE_TYPE=s3 \ --from-literal=PORT=<port>kubectl create secret -n <namespace> generic export-externalobjects-secret \ --from-literal=ACCESSKEY=<accesskey> \ --from-literal=SECRETKEY=<secretkey> \ --from-literal=REGION=<region> \ --from-literal=FQDN=<fqdn> \ --from-literal=BUCKET=<bucket> \ --from-literal=USE_INSTANCE_PROFILE=<use_instance_profile> \ --from-literal=CREATE_BUCKET=<create_bucket> \ --from-literal=STORAGE_TYPE=s3 \ --from-literal=PORT=<port> -
If you use AWS S3 storage, run the following command:
kubectl create secret -n <namespace> generic export-externalobjects-secret \ --from-literal=ACCOUNTKEY=<accountkey> \ --from-literal=ACCOUNTNAME=<accountname> \ --from-literal=CLIENT_ID=<client_id> \ --from-literal=AZURE_FQDN_SUFFIX=<fqdn> \ --from-literal=BUCKET=<bucket> \ --from-literal=USE_MANAGED_IDENTITY=<use_managed_profile> \ --from-literal=CREATE_CONTAINER=<create_container> \ --from-literal=STORAGE_TYPE=azure \ --from-literal=USE_WORKLOAD_IDENTITY=<use_workload_identity>kubectl create secret -n <namespace> generic export-externalobjects-secret \ --from-literal=ACCOUNTKEY=<accountkey> \ --from-literal=ACCOUNTNAME=<accountname> \ --from-literal=CLIENT_ID=<client_id> \ --from-literal=AZURE_FQDN_SUFFIX=<fqdn> \ --from-literal=BUCKET=<bucket> \ --from-literal=USE_MANAGED_IDENTITY=<use_managed_profile> \ --from-literal=CREATE_CONTAINER=<create_container> \ --from-literal=STORAGE_TYPE=azure \ --from-literal=USE_WORKLOAD_IDENTITY=<use_workload_identity>
-
-
Create the
insights-looker-lookerdir-pvcPVC:apiVersion: v1 kind: PersistentVolumeClaim metadata: labels: app.kubernetes.io/component: insightslooker app.kubernetes.io/instance: insights app.kubernetes.io/part-by: cloud-rpa argocd.argoproj.io/instance: insights name: insights-looker-lookerdir-pvc namespace: <namespace> spec: accessModes: - ReadWriteOnce resources: requests: storage: 500Mi storageClassName: <storage-class-name>apiVersion: v1 kind: PersistentVolumeClaim metadata: labels: app.kubernetes.io/component: insightslooker app.kubernetes.io/instance: insights app.kubernetes.io/part-by: cloud-rpa argocd.argoproj.io/instance: insights name: insights-looker-lookerdir-pvc namespace: <namespace> spec: accessModes: - ReadWriteOnce resources: requests: storage: 500Mi storageClassName: <storage-class-name> -
Create the RBAC:
--- apiVersion: v1 kind: ServiceAccount metadata: name: migration-sa namespace: <uipath> --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: migration-role namespace: <namespace> rules: - apiGroups: [""] resources: ["configmaps", "secrets"] verbs: ["get", "list", "watch", "create", "patch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: migration-rolebinding namespace: <namespace> roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: migration-role subjects: - kind: ServiceAccount name: migration-sa namespace: <namespace>--- apiVersion: v1 kind: ServiceAccount metadata: name: migration-sa namespace: <uipath> --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: migration-role namespace: <namespace> rules: - apiGroups: [""] resources: ["configmaps", "secrets"] verbs: ["get", "list", "watch", "create", "patch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: migration-rolebinding namespace: <namespace> roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: migration-role subjects: - kind: ServiceAccount name: migration-sa namespace: <namespace> -
Create the pod for migrating
insights-looker-lookerdir-pvc:apiVersion: v1 kind: Pod metadata: name: inbound-migrator namespace: <namespace> spec: containers: - command: - /uipathcore - data - migrate - --source-secret - export-externalobjects-secret - --source-path - insights/mnt/lookerfiles - --destination-path - /mnt/lookerfiles - --namespace - <namespace> - --log-level - debug image: sfbrdevhelmweacr.azurecr.io/uipath/uipathcore:0.0.0-dev6628693 imagePullPolicy: IfNotPresent name: pvc-migrator securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL - MKNOD runAsNonRoot: true volumeMounts: - mountPath: /mnt/lookerfiles name: insights-looker-lookerdir serviceAccountName: migration-sa imagePullSecrets: - name: uipathpullsecret securityContext: runAsNonRoot: true volumes: - name: insights-looker-lookerdir persistentVolumeClaim: claimName: insights-looker-lookerdir-pvcapiVersion: v1 kind: Pod metadata: name: inbound-migrator namespace: <namespace> spec: containers: - command: - /uipathcore - data - migrate - --source-secret - export-externalobjects-secret - --source-path - insights/mnt/lookerfiles - --destination-path - /mnt/lookerfiles - --namespace - <namespace> - --log-level - debug image: sfbrdevhelmweacr.azurecr.io/uipath/uipathcore:0.0.0-dev6628693 imagePullPolicy: IfNotPresent name: pvc-migrator securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL - MKNOD runAsNonRoot: true volumeMounts: - mountPath: /mnt/lookerfiles name: insights-looker-lookerdir serviceAccountName: migration-sa imagePullSecrets: - name: uipathpullsecret securityContext: runAsNonRoot: true volumes: - name: insights-looker-lookerdir persistentVolumeClaim: claimName: insights-looker-lookerdir-pvc -
Create the
insights-looker-datadir-pvcPVC:apiVersion: v1 kind: PersistentVolumeClaim metadata: labels: app.kubernetes.io/component: insightslooker app.kubernetes.io/instance: insights app.kubernetes.io/part-by: cloud-rpa argocd.argoproj.io/instance: insights name: insights-looker-datadir-pvc namespace: <namespace> spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: <storage-class-name>apiVersion: v1 kind: PersistentVolumeClaim metadata: labels: app.kubernetes.io/component: insightslooker app.kubernetes.io/instance: insights app.kubernetes.io/part-by: cloud-rpa argocd.argoproj.io/instance: insights name: insights-looker-datadir-pvc namespace: <namespace> spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: <storage-class-name> -
Create the pod for migrating
insights-looker-datadir-pvc:apiVersion: v1 kind: Pod metadata: name: inbound-migrator-data namespace: <namespace> spec: containers: - command: - /uipathcore - data - migrate - --source-secret - export-externalobjects-secret - --source-path - insights/app/workdir - --destination-path - /mnt/lookerfiles - --namespace - <namespace> - --log-level - debug image: sfbrdevhelmweacr.azurecr.io/uipath/uipathcore:0.0.0-dev6628693 imagePullPolicy: IfNotPresent name: pvc-migrator securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL - MKNOD runAsNonRoot: true volumeMounts: - mountPath: /mnt/lookerfiles name: insights-looker-datadir serviceAccountName: migration-sa imagePullSecrets: - name: uipathpullsecret securityContext: runAsUser: 1000700000 runAsNonRoot: true volumes: - name: insights-looker-datadir persistentVolumeClaim: claimName: insights-looker-datadir-pvcapiVersion: v1 kind: Pod metadata: name: inbound-migrator-data namespace: <namespace> spec: containers: - command: - /uipathcore - data - migrate - --source-secret - export-externalobjects-secret - --source-path - insights/app/workdir - --destination-path - /mnt/lookerfiles - --namespace - <namespace> - --log-level - debug image: sfbrdevhelmweacr.azurecr.io/uipath/uipathcore:0.0.0-dev6628693 imagePullPolicy: IfNotPresent name: pvc-migrator securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL - MKNOD runAsNonRoot: true volumeMounts: - mountPath: /mnt/lookerfiles name: insights-looker-datadir serviceAccountName: migration-sa imagePullSecrets: - name: uipathpullsecret securityContext: runAsUser: 1000700000 runAsNonRoot: true volumes: - name: insights-looker-datadir persistentVolumeClaim: claimName: insights-looker-datadir-pvc -
Delete the service account, role, and rolebinding previously created in step 3:
kubectl -n <namespace> delete sa migration-sa kubectl -n <namespace> delete role migration-role kubectl -n <namespace> delete rolebinding migration-rolebindingkubectl -n <namespace> delete sa migration-sa kubectl -n <namespace> delete role migration-role kubectl -n <namespace> delete rolebinding migration-rolebinding