본문 바로가기
IT & Tech 정보

GitHub Actions를 Kubernetes 내부 서비스로 완전히 이식하기: Self-Hosted Action Runner Mesh 구축기

by 지식과 지혜의 나무 2025. 5. 30.
반응형


퍼블릭 CI에 의존하지 않고, 사내 망 내부에서 완전한 GitHub Actions 생태계를 운영하는 방법.
GitHub Actions의 워크플로를 완전 사내망 Kubernetes 클러스터 내부에서 실행되도록 구성하며,
GitHub Webhook → K8s 서비스 Mesh → Runner Pod 자동 생성 → Argo CD 자동 배포까지 연결하는
GitHub Actions Runner Mesh 구조를 구축합니다.



🎯 목적
• GitHub Actions 워크플로를 사내망 Kubernetes 클러스터 내부에서 실행
• 워크플로별로 개별 Runner Pod를 생성하고 Job 단위로 Auto Terminate
• Runner Autoscaler + GitHub Webhook + Service Mesh + Namespace Policy 통합 운영
• Argo CD와 연계하여 PR 기반 Preview 환경 자동 배포



⚙️ 핵심 구성

구성 요소 도구/패턴 역할
GitHub Actions Runner actions-runner-controller GitHub Workflow를 K8s Runner Pod로 처리
GitHub Webhook Ingress → EventRouter PR/Push 이벤트 트리거 수신
Runner 스케일링 HorizontalRunnerAutoscaler Job Queue 상황에 따라 Runner 수 동적 확장
CI 실행 환경 분리 Namespace per Team 팀별 격리된 Runner와 빌드 환경
CI 파이프라인 배포 Argo CD + ApplicationSet CI Job 결과에 따라 Preview 환경 생성




🔩 핵심 구성도

graph TD
  A[GitHub PR 생성] --> B[Webhook Ingress Trigger]
  B --> C[RunnerController: RunnerDeployment 생성]
  C --> D[Runner Pod 생성 (Job 단위)]
  D --> E[CI Workflow 실행]
  E --> F{배포 필요?}
  F -- Yes --> G[Argo CD Sync Preview Namespace]
  F -- No --> H[Runner Pod Auto Terminate]




📄 주요 리소스 예시

1) RunnerDeployment

apiVersion: actions.summerwind.dev/v1alpha1
kind: RunnerDeployment
metadata:
  name: team-a-runner
spec:
  replicas: 0
  template:
    spec:
      repository: your-org/your-repo
      image: your-private-ci-runner:latest
      resources:
        limits:
          cpu: "2"
          memory: "4Gi"

2) HorizontalRunnerAutoscaler

apiVersion: actions.summerwind.dev/v1alpha1
kind: HorizontalRunnerAutoscaler
metadata:
  name: runner-autoscaler
spec:
  scaleTargetRef:
    name: team-a-runner
  minReplicas: 0
  maxReplicas: 10
  scaleUpTriggers:
    - githubEvent:
        event: pull_request
        repository: your-org/your-repo




🧪 GitHub Workflow 예시

name: internal-ci

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  build:
    runs-on: self-hosted
    container:
      image: your-registry/internal-builder:latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Test
        run: ./run-tests.sh




🚀 실전 적용 Tips
• Runner Pod에 팀별 Label 부여 → 네트워크/리소스 격리 가능
• Private Package Cache용 Sidecar 컨테이너 사용 → 빌드 속도 향상
• Job 실행 후 Pod Auto Terminate 설정 → 자원 낭비 최소화
• CI 결과를 Argo CD App으로 전파 → 배포 파이프라인 자동 연계
• Keycloak OIDC 연계로 팀별 인증 연동 → 사내 보안 정책 충족



✅ 도입 효과
• GitHub Actions의 강력한 에코시스템은 그대로, 사내 보안 요건을 충족
• 외부 인터넷 연결 없이도 PR 기반 테스트/배포 자동화 가능
• 팀별 권한 관리·자원 할당·비용 최적화 용이
• GitOps 기반 인프라/CI/CD 완전 일체화 가능



반응형