k8s

Kubernetes + UIPath - 1

kubernetes에서 UIPath 연결하기

by HOON


1

Last updated on March 24, 2025, 4:06 p.m.


random_image

안녕하세요, 오늘은 제가 kubernetes를 배우게 된 이유인 UIPath 라는 자동화 시스템 툴과의 연결을 진행해보겠습니다.
저는 UIPath라는 툴을 사용해서 현업의 업무자동화를 진행했었는데요. 업무 중 하나는 백그라운드에서 가동이 되는 업무였는데도 시간이 2시간이 소요되었습니다.
클라우드를 배우다보니 AutoScailing이라는 개념을 알게되었고, 이를 적용해보면 좋지않을까? 싶어서 컨테이너 기술과 접목 시켜보려고 합니다.

최종적으로는 여타 다른 프로세스들처럼 hpa가 적용되고, cicd, monitoring까지 구현한 모습을 목표로 할거에요.
오늘은 첫 단계인 Linux 환경에서 로봇연결을 하도록 하겠습니다.
참고로 UIPath에서는 Linux 환경을 위한 로봇을 제공하고있습니다. document를 참고해주세요.
UIPath Linux Robot


우선 큰 그림을 보여드리자면, UIPath는 크게 두 가지로 나뉩니다. UI 작업이 필요한 프로세스와 UI작업이 필요없는 프로세스. 이 중에서 저희는 UI작업이 필요없는 프로세스 구동을 목표로 구현 할 예정입니다.

테스트이기때문에, UIPath에서 기본적으로 제공하는 Cloud Orchestrator를 사용하고, k8s 클러스터는 과금되지않는 VirtualBox를 통해 진행하도록 하겠습니다.
저는 기존에 구축해둔 클러스터가 존재하기때문에 이번 포스트에서는 생략하겠습니다.
혹시 필요하신분들은 아래 링크에서 이사가자 시리즈를 참고 부탁드립니다.
docker야 이사가자 k8s로-1
docker야 이사가자 k8s로-2
docker야 이사가자 k8s로-3


k8s 클러스터가 구축 됐다면, 정상적으로 worker-node 들이 연결됐는지 확인해볼까요??

k8s-master@k8s-master:~/uipath-robot$ k get node
NAME         STATUS   ROLES           AGE   VERSION
k8s-master   Ready    control-plane   43d   v1.29.11
k8s-node1    Ready    <none>          43d   v1.29.11
k8s-node2    Ready    <none>          74m   v1.29.11

이상없이 전부 Ready상태 입니다.
그럼 이제 로봇을 연결해볼게요. 우선 로봇을 연결할 머신을 설정해주겠습니다.

UIPath Cloud에서 머신을 먼저 생성하겠습니다.

프로세스 유형: 백그라운드만
프로세스 호환성: 교차 플랫폼만 → 이부분은 교차 플랫폼으로 생성해야 linux에서의 로봇을 인식 할 수 있습니다.

생성 되었으면 이제 k8s 리소스를 생성해야겠죠??
제가 생성할 리소스는 Configmap과 Deployment입니다.

우선 cm부터 보면 다음과 같습니다.

k8s-master@k8s-master:~/uipath-robot$ cat uipath-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: uipath-config
  namespace: uipath-ns
  labels:
    app: uipath-robots
data:
  LICENSE_AGREEMENT: "accept"
  ORCHESTRATOR_URL: "https://cloud.uipath.com/<organization name>/<tenant name>"
  MACHINE_KEY: "<machine key>"

LICENSE_AGREEMENT : 라이센스 사용여부 → accept
ORCHESTRATOR_URL : 클라우드 오케스트레이터의 주소입니다. URL을 보면 알 수 있고, 보통 orchestrator_ 까지 작성하면 됩니다.
MACHINE_KEY : 저희가 방금 생성한 머신의 키값을 입력하면 됩니다. 아마 머신 생성하자마자 바로 키 ID와 SECRET값을 보여줬을텐데 그 중 ID값만 기입하면 됩니다.

만약 해당 화면에서 키값을 따로 복사하지않았더라도 괜찮습니다. 아래 스크린샷을 참고해주세요.빨간색으로 동그라미 친 부분을 클릭하면 키값이 복사됩니다.

Configmap은 작성됐고, 그럼 이제 Deployment를 작성해볼게요.

k8s-master@k8s-master:~/uipath-robot$ cat uipath-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: uipath-robots
  labels:
    app: uipath-robots
  namespace: uipath-ns
spec:
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  replicas: 4
  selector:
    matchLabels:
      app: uipath-robots
  template:
    metadata:
      labels:
        app: uipath-robots
    spec:
      containers:
        - image: registry.uipath.com/robot/runtime:22.10.3
          name: uipath-robot-container
          securityContext:
            privileged: false
          env:
            - name: MACHINE_KEY
              valueFrom:
                configMapKeyRef:
                  name: uipath-config
                  key: MACHINE_KEY
            - name: ORCHESTRATOR_URL
              valueFrom:
                configMapKeyRef:
                  name: uipath-config
                  key: ORCHESTRATOR_URL
            - name: LICENSE_AGREEMENT
              valueFrom:
                configMapKeyRef:
                  name: uipath-config
                  key: LICENSE_AGREEMENT

여기서 주의깊게 볼 건 이미지 밖에 없는 것 같습니다. 25년03월24일 기준으로 해당 이미지는 유효하니 참고 부탁드려요.
이제 어느정도 준비가 된것같으니 생성한 리소스를 적용하고 조금만 기다리면…

k8s-master@k8s-master:~/uipath-robot$ k get cm
NAME               DATA   AGE
kube-root-ca.crt   1      97m
uipath-config      3      63m
k8s-master@k8s-master:~/uipath-robot$ k get pods -o wide
NAME                             READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
uipath-robots-596867cf9d-bkkh5   1/1     Running   0          62m   10.36.0.2    k8s-node2   <none>           <none>
uipath-robots-596867cf9d-fd8nc   1/1     Running   0          62m   10.32.0.13   k8s-node1   <none>           <none>
uipath-robots-596867cf9d-gltdg   1/1     Running   0          62m   10.32.0.14   k8s-node1   <none>           <none>
uipath-robots-596867cf9d-m65wx   1/1     Running   0          62m   10.36.0.1    k8s-node2   <none>           <none>

configmap도 정상적으로 생성이 되었고, pod가 4개 정상적으로 올라왔고, 노드2개에 고르게 분배되어있습니다.
혹시 모르니 로그도 한번 볼까요??

k8s-master@k8s-master:~/uipath-robot$ k logs -f uipath-robots-596867cf9d-gltdg
UiPath.Service.NetCoreHost Information: 0 : Started /root/application/UiPath.Service.NetCoreHost.dll, ID=1
UiPath.Service.NetCoreHost Information: 0 : D:\a\1\s\src\client\UiPath.UpdateService.Client\Impl\InstallationIdService.ReadOrCreateInstallationId line 49: Setting installation id to 02ac65fb-8054-494d-8cdd-f0541dcad07c
UiPath.Service.NetCoreHost Information: 0 : Trying to connect to Orchestrator using machine key
UiPath.Service.NetCoreHost Information: 0 : GetRunningJobs for ROOT
UiPath.Service.NetCoreHost Information: 0 : Request URI:https://cloud.uipath.com/nonpevotdl/nonDefault/orchestrator_/odata/$metadata Response:OK Start:2025-03-24T05:40:41.9260496+00:00 Id:00-e48707667326cc44780d012ac1e5796d-a43885e42d43d51e-00
UiPath.Service.NetCoreHost Information: 0 : Request URI:https://cloud.uipath.com/nonpevotdl/nonDefault/orchestrator_/odata/Settings/UiPath.Server.Configuration.OData.GetServicesSettings Response:OK Start:2025-03-24T05:40:44.1028279+00:00 Id:00-c98c862fd697f7989b33f1d8862c7232-93389ef7670d10cc-00
UiPath.Service.NetCoreHost Warning: 0 : OrchestratorSettings: ClusterId empty
UiPath.Service.NetCoreHost Information: 0 : Request URI:https://cloud.uipath.com/nonpevotdl/nonDefault/orchestrator_/api/robotsservice/StartService Response:OK Start:2025-03-24T05:40:44.9241283+00:00 Id:00-0bc8feef38cbf186c03398f6e7358366-7eeba37e06940624-00
UiPath.Service.NetCoreHost Information: 0 : Starting SignalR, hub: https://cloud.uipath.com/nonpevotdl/nonDefault/orchestrator_/signalr/robots, transports: WebSocket, ServerSentEvents, LongPolling
UiPath.Service.NetCoreHost Information: 0 : Successfully connected to Orchestrator

정상적으로 연결이 됐다고 합니다!
그럼 Orchestrator에서 보면?

저희가 kubernetes 클러스터에 배포한 pod들의 이름대로 로봇이 생성된 걸 확인 할 수 있습니다!!

이렇게 오늘은 로봇 연결까지 진행하고, 다음 포스트는 실제 간단한 백그라운드 프로세스를 수행하는 내용을 작성해보도록 하겠습니다.
감사합니다!

×
linux k8s UIPath


Leave a Comment: