Actions로 Kubernetes에 배포
GitHub Actions에서 직접 배포와 서비스를 관리하며 Kubernetes 클러스터에 지속적 배포를 설정합니다.
Actions로 Kubernetes에 배포은(는) CoddyKit의 무료 DevOps Bootcamp 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 DevOps Bootcamp 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. DevOps Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.
Actions를 활용한 K8s CD 소개
환영합니다! 이 레슨에서는 GitHub Actions를 사용하여 Kubernetes 클러스터에 지속적 배포(CD)를 설정하는 방법을 학습하겠습니다.
배포를 자동화하면 수동 작업 없이도 애플리케이션 변경 사항을 빠르고 안정적으로 운영 환경에 반영할 수 있습니다.
인증, Kubernetes 매니페스트 적용, 업데이트 관리 방법을 다루겠습니다.
K8s 배포 핵심 사항
배포하기 전에 Kubernetes의 두 가지 핵심 리소스를 간단히 되짚어 보겠습니다.
- 배포: 애플리케이션의 파드를 관리하고, 항상 원하는 수의 복제본이 실행되도록 합니다. 업데이트와 롤백도 처리합니다.
- 서비스: 애플리케이션에 액세스하는 방법을 정의합니다(예: 클러스터 내부에서 액세스하거나 LoadBalancer를 통해 외부에서 액세스하는 방법).
GitHub Actions에서 이러한 리소스를 정의하는 YAML 파일을 클러스터에 적용하는 것이 목표입니다.
Actions를 K8s에 인증하기
배포하려면 GitHub Actions 워크플로가 Kubernetes 클러스터의 API 서버와 통신해야 합니다.
이를 위해서는 인증이 필요합니다. Kubernetes에서 인증하는 표준 방법은 kubeconfig 파일을 사용하는 것입니다.
이 파일의 내용을 워크플로 실행기에 안전하게 제공해야 합니다.
Kubeconfig 보안 유지
kubeconfig 파일에는 클러스터 엔드포인트와 사용자 자격 증명 같은 민감한 정보가 포함되어 있습니다. 반드시 비밀로 유지해야 합니다!
GitHub Actions는 이를 위해 비밀을 제공합니다. kubeconfig 파일의 내용을 저장소 비밀로 저장하게 됩니다.
kubeconfig를 가져오는 방법은 무엇일까요? 사용 중인 K8s 공급자에 따라 다릅니다(예: aws eks update-kubeconfig, gcloud container clusters get-credentials).
K8s 컨텍스트 설정
kubeconfig를 비밀로 저장했다면(이 비밀을 KUBE_CONFIG_DATA라고 하겠습니다) 워크플로에서 이를 사용할 수 있습니다.
일반적으로 실행기에서 비밀의 내용을 임시 파일에 기록한 다음 KUBECONFIG 환경 변수가 해당 파일을 가리키도록 설정합니다.
이렇게 하면 kubectl이 클러스터 연결 정보를 찾을 위치를 알 수 있습니다.
워크플로에서 `kubectl` 사용하기
kubectl은 Kubernetes 클러스터와 상호작용하기 위한 공식 명령줄 도구입니다. GitHub Actions 실행기에는 kubectl이 미리 설치되어 있습니다.
kubeconfig를 설정한 후에는 워크플로 단계에서 원하는 kubectl 명령을 실행할 수 있습니다.
기본적인 예제를 살펴보겠습니다.
name: K8s Setup Test
on: [workflow_dispatch]
jobs:
test-kubeconfig:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Kubeconfig
env:
KUBE_CONFIG_DATA: ${{ secrets.KUBE_CONFIG_DATA }}
run: |
mkdir -p ~/.kube
echo "$KUBE_CONFIG_DATA" > ~/.kube/config
chmod 600 ~/.kube/config
echo "KUBECONFIG=$HOME/.kube/config" >> $GITHUB_ENV
- name: Verify kubectl access
run: kubectl version --client간단한 K8s 배포 매니페스트
다음은 "hello-world" 애플리케이션을 위한 기본 Kubernetes Deployment 및 Service 매니페스트입니다. Kubernetes에 실행하도록 요청할 대상입니다.
이 예제에서는 간단한 Nginx 이미지를 사용하고, 80번 포트로 노출합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-app-deployment
spec:
replicas: 1
selector:
matchLabels:
app: hello-app
template:
metadata:
labels:
app: hello-app
spec:
containers:
- name: hello-app
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: hello-app-service
spec:
selector:
app: hello-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer전체 배포 워크플로
이제 배포 단계를 워크플로에 통합해 보겠습니다. 이전 레슨에서처럼 컨테이너 이미지를 빌드하고 푸시한 후 배포할 수 있습니다.
이 워크플로에서는 kubeconfig 비밀이 설정되어 있고 매니페스트 파일(예: 저장소의 k8s/deployment.yaml)이 존재한다고 가정합니다.
name: Deploy to Kubernetes
on:
push:
branches:
- main
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Kubeconfig
env:
KUBE_CONFIG_DATA: ${{ secrets.KUBE_CONFIG_DATA }}
run: |
mkdir -p ~/.kube
echo "$KUBE_CONFIG_DATA" > ~/.kube/config
chmod 600 ~/.kube/config
echo "KUBECONFIG=$HOME/.kube/config" >> $GITHUB_ENV
- name: Deploy application to K8s
run: kubectl apply -f k8s/deployment.yaml애플리케이션 업데이트
kubectl apply의 뛰어난 기능 중 하나는 멱등성입니다. YAML에 정의된 리소스가 이미 존재하면 kubectl apply는 새 리소스를 만드는 대신 기존 리소스를 업데이트합니다.
애플리케이션의 새 버전을 배포하려면 deployment.yaml의 이미지 태그만 업데이트하고 변경 사항을 푸시하면 됩니다. 그러면 GitHub Actions가 실행되고 Kubernetes는 순차 업데이트를 수행하여 기존 파드를 새 파드로 점진적으로 교체하므로 서비스 중단을 최소화할 수 있습니다.
빠른 확인
GitHub Actions를 사용하여 애플리케이션을 Kubernetes에 배포하는 데 필요한 핵심 단계를 학습하셨습니다.
다음 중 GitHub Actions 워크플로에서 Kubernetes 매니페스트를 배포할 때 올바른 단계 순서는 무엇일까요?
복습 및 다음 단계
잘하셨습니다! GitHub Actions를 사용하여 Kubernetes에 지속적 배포를 설정하는 방법을 학습하셨습니다.
- 민감한
kubeconfig데이터를 GitHub 비밀에 저장합니다. - 워크플로는 이 비밀을 사용하여
kubectl을 구성합니다. kubectl apply -f를 사용하여 K8s 매니페스트를 배포하거나 업데이트합니다.- 변경 사항이 적용되면 Kubernetes가 순차 업데이트를 처리합니다.
이 강력한 조합은 배포를 자동화하여 개발 프로세스를 더 원활하고 빠르게 만들어 줍니다. 더 고급 K8s 기능도 계속 탐색해 보십시오!
자주 묻는 질문
“Actions로 Kubernetes에 배포” 강의는 무료인가요?
네 — “Actions로 Kubernetes에 배포” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 DevOps Bootcamp 강의 전체를 잠금 해제할 수 있습니다. DevOps Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.
“Actions로 Kubernetes에 배포”에서 뭘 배우나요?
GitHub Actions에서 직접 배포와 서비스를 관리하며 Kubernetes 클러스터에 지속적 배포를 설정합니다. 브라우저에서 직접 실행하는 실습 코드로 DevOps Bootcamp을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
DevOps Bootcamp을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 DevOps Bootcamp은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“Actions로 Kubernetes에 배포” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 DevOps Bootcamp 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 DevOps Bootcamp 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Actions로 Docker 이미지 빌드
- 레지스트리에 이미지 푸시
- Actions로 Kubernetes에 배포
- CI/CD의 Helm 차트 및 Kubernetes 매니페스트