Skip to main content

Actions Runner Controller์— ๋Œ€ํ•œ ๋น ๋ฅธ ์‹œ์ž‘

์ด ์ž์Šต์„œ์—์„œ๋Š” Actions Runner Controller์˜ ๊ธฐ๋ณธ ์‚ฌํ•ญ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ์กฐ๊ฑด

ARC๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • Kubernetes ํด๋Ÿฌ์Šคํ„ฐ

    • ๊ด€๋ฆฌ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ AKS๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Azure AI ์„œ๋น„์Šค ์„ค๋ช…์„œ์˜ Azure Kubernetes ์„œ๋น„์Šค๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    • ๋กœ์ปฌ ์„ค์ •์˜ ๊ฒฝ์šฐ minikube ๋˜๋Š” kind๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ minikube ์„ค๋ช…์„œ์˜ minkube ์‹œ์ž‘ ๋ฐ kind ์„ค๋ช…์„œ์˜ kind๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

      ์ฐธ๊ณ  ํ•ญ๋ชฉ

      OpenShift ํด๋Ÿฌ์Šคํ„ฐ๋Š” ํ˜„์žฌ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • Helm 3

    • ์ž์„ธํ•œ ๋‚ด์šฉ์€ Helm ์„ค๋ช…์„œ์—์„œ "Helm ์„ค์น˜"๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  • ARC๋ฅผ ๋ฐฐํฌํ•  ํ•„์š”๋Š” ์—†์ง€๋งŒ ํ”„๋กœ๋•์…˜ ์›Œํฌํ”Œ๋กœ์—์„œ ARC๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์ „์— ์ปจํŠธ๋กค๋Ÿฌ, ์ˆ˜์‹ ๊ธฐ ๋ฐ ์ž„์‹œ ์‹คํ–‰๊ธฐ์—์„œ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Actions Runner Controller ์„ค์น˜

  1. ํด๋Ÿฌ์Šคํ„ฐ์— ์šด์˜์ž ๋ฐ CRD(์‚ฌ์šฉ์ž ์ง€์ • ๋ฆฌ์†Œ์Šค ์ •์˜)๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    1. Helm ์ฐจํŠธ์—์„œ ์—ฐ์‚ฐ์ž Pod๋ฅผ ๋งŒ๋“ค ์œ„์น˜๋กœ NAMESPACE ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” Kubernetes API ์„œ๋ฒ„์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    2. Helm ์ฐจํŠธ ์„ค์น˜

    ๋‹ค์Œ ์˜ˆ์—์„œ๋Š” ์ฐจํŠธ์˜ ์ตœ์‹  ๋ฒ„์ „์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๋ ค๋ฉด ์„ค์น˜ํ•˜๋ ค๋Š” ์ฐจํŠธ ๋ฒ„์ „๊ณผ ํ•จ๊ป˜ --version ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ๋ฆด๋ฆฌ์Šค ๋ชฉ๋ก์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    Bash
    NAMESPACE="arc-systems"
    helm install arc \
        --namespace "${NAMESPACE}" \
        --create-namespace \
        oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set-controller
    

    ์ถ”๊ฐ€ Helm ๊ตฌ์„ฑ ์˜ต์…˜์€ ARC ์„ค๋ช…์„œ์˜ values.yaml์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  2. ARC์—์„œ GitHub์— ์ธ์ฆํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด personal access token (classic)์„(๋ฅผ) ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ "GitHub API์— ARC ์ธ์ฆ"์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์‹คํ–‰๊ธฐ ํ™•์žฅ ์ง‘ํ•ฉ ๊ตฌ์„ฑ

  1. ์‹คํ–‰๊ธฐ ํ™•์žฅ ์ง‘ํ•ฉ์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ARC ๊ตฌ์„ฑ์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ ๋‹ค์Œ ์‚ฌํ•ญ์— ์œ ์˜ํ•˜์„ธ์š”.

    • INSTALLATION_NAME ๊ฐ’์„ ์‹ ์ค‘ํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ์ด๋ฆ„์„ ์›Œํฌํ”Œ๋กœ์˜ runs-on ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub Actions์— ๋Œ€ํ•œ ์›Œํฌํ”Œ๋กœ ๊ตฌ๋ฌธ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

    • ์‹คํ–‰๊ธฐ Pod๋ฅผ ๋งŒ๋“ค๋ ค๋Š” ์œ„์น˜๋กœ NAMESPACE ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

    • GITHUB_CONFIG_URL์„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ, ์กฐ์ง ๋˜๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ์˜ URL๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰๊ธฐ์—์„œ ์†ํ•˜๊ฒŒ ๋  ์—”ํ„ฐํ‹ฐ์ž…๋‹ˆ๋‹ค.

    • ์ด ์˜ˆ์ œ ๋ช…๋ น์€ Helm ์ฐจํŠธ์˜ ์ตœ์‹  ๋ฒ„์ „์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๋ ค๋ฉด ์„ค์น˜ํ•˜๋ ค๋Š” ์ฐจํŠธ ๋ฒ„์ „๊ณผ ํ•จ๊ป˜ --version ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ๋ฆด๋ฆฌ์Šค ๋ชฉ๋ก์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      ์ฐธ๊ณ  ํ•ญ๋ชฉ

      • ๋ณด์•ˆ์„ ์œ„ํ•ด ์‹คํ–‰๊ธฐ ํฌ๋“œ๋Š” ์šด์˜์ž ํฌ๋“œ๊ฐ€ ์žˆ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋งŒ๋“ญ๋‹ˆ๋‹ค.
      • ๋ณด์•ˆ์„ ์œ„ํ•ด Kubernetes ๋น„๋ฐ€์„ ๋งŒ๋“ค๊ณ  ๋น„๋ฐ€ ์ฐธ์กฐ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋น„๋ฐ€์„ CLI์—์„œ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋ณด์•ˆ ์œ„ํ—˜์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Actions Runner Controller๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰๊ธฐ ํ™•์žฅ ์ง‘ํ•ฉ ๋ฐฐํฌ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.
      Bash
      INSTALLATION_NAME="arc-runner-set"
      NAMESPACE="arc-runners"
      GITHUB_CONFIG_URL="https://github.com/<your_enterprise/org/repo>"
      GITHUB_PAT="<PAT>"
      helm install "${INSTALLATION_NAME}" \
          --namespace "${NAMESPACE}" \
          --create-namespace \
          --set githubConfigUrl="${GITHUB_CONFIG_URL}" \
          --set githubConfigSecret.github_token="${GITHUB_PAT}" \
          oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set
      

      ์ถ”๊ฐ€ Helm ๊ตฌ์„ฑ ์˜ต์…˜์€ ARC ์„ค๋ช…์„œ์˜ values.yaml์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  2. ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์„ค์น˜๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    Bash
    helm list -A
    

    ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•œ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                                       APP VERSION
    arc             arc-systems     1               2023-04-12 11:45:59.152090536 +0000 UTC deployed        gha-runner-scale-set-controller-0.4.0       0.4.0
    arc-runner-set  arc-runners     1               2023-04-12 11:46:13.451041354 +0000 UTC deployed        gha-runner-scale-set-0.4.0                  0.4.0
    
  3. ๊ด€๋ฆฌ์ž Pod๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    Bash
    kubectl get pods -n arc-systems
    

    ๋ชจ๋“  ํ•ญ๋ชฉ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์น˜๋˜๋ฉด Pod์˜ ์ƒํƒœ๊ฐ€ ์‹คํ–‰ ์ค‘์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    NAME                                                   READY   STATUS    RESTARTS   AGE
    arc-gha-runner-scale-set-controller-594cdc976f-m7cjs   1/1     Running   0          64s
    arc-runner-set-754b578d-listener                       1/1     Running   0          12s
    

์„ค์น˜์— ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ๋ฌธ์ œ ํ•ด๊ฒฐ ์ •๋ณด๋Š” Actions Runner Controller ์˜ค๋ฅ˜ ๋ฌธ์ œ ํ•ด๊ฒฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์‹คํ–‰๊ธฐ ํ™•์žฅ ์ง‘ํ•ฉ ์‚ฌ์šฉ

์ด์ œ ์‹คํ–‰๊ธฐ ํ™•์žฅ ์ง‘ํ•ฉ ์‹คํ–‰๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹คํ–‰ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋‹ค์Œ ์˜ˆ์ œ์™€ ์œ ์‚ฌํ•œ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ฐ’์€ runs-on ์ž๋™ ์Šค์ผ€์ผ๋ง ์‹คํ–‰๊ธฐ ์ง‘ํ•ฉ์„ ์„ค์น˜ํ•  ๋•Œ ์‚ฌ์šฉํ•œ Helm ์„ค์น˜ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ํŒŒ์ผ ์ถ”๊ฐ€์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub Actions์šฉ ๋น ๋ฅธ ์‹œ์ž‘์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

    YAML
    name: Actions Runner Controller Demo
    on:
      workflow_dispatch:
    
    jobs:
      Explore-GitHub-Actions:
        # You need to use the INSTALLATION_NAME from the previous step
        runs-on: arc-runner-set
        steps:
        - run: echo "๐ŸŽ‰ This job uses runner scale set runners!"
    
  2. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์›Œํฌํ”Œ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ˆ˜๋™์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์›Œํฌํ”Œ๋กœ ์ˆ˜๋™ ์‹คํ–‰์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

  3. ์›Œํฌํ”Œ๋กœ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์ƒ์„ฑ๋˜๋Š” ์‹คํ–‰๊ธฐ Pod๋ฅผ ๋ณด๋ ค๋ฉด ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    Bash
    kubectl get pods -n arc-runners
    

    ์„ฑ๊ณตํ•˜๋ฉด ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    NAMESPACE     NAME                                                  READY   STATUS    RESTARTS      AGE
    arc-runners   arc-runner-set-rmrgw-runner-p9p5n                     1/1     Running   0             21s
    

๋‹ค์Œ ๋‹จ๊ณ„

Actions Runner Controller์€(๋Š”) GitHub Actions ์‹คํ–‰๊ธฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์ž‘ํ•  ์ค€๋น„๊ฐ€ ๋˜์…จ๋‚˜์š”? ARC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ฆฌ์†Œ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ Apache-2.0 ๋ผ์ด์„ ์Šค์—์„œ https://github.com/actions/actions-runner-controller/๋กœ๋ถ€ํ„ฐ ์ผ๋ถ€ ์กฐ์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Copyright 2019 Moto Ishizawa

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.