섹션 11: Implement CI CD with Github Actions - GKE

쌀과자AI·2025년 8월 26일

📌 강의 핵심 요약

1. CI/CD 파이프라인 개요

  • 목표: ChatGPT 애플리케이션을 Google Kubernetes Engine(GKE)에 자동 배포.
  • 도구: GitHub Actions 기반 CI/CD.
  • 3단계 접근법
    1. GitHub Action Secrets 설정
    2. 워크플로우 파일(actions.yaml) 검증
    3. CI/CD 파이프라인 테스트

2. GitHub Secrets 설정

  • Secrets 종류
    • GKE_PROJECT: Google Cloud Project ID
    • GKE_SA_KEY: GCP Service Account Key(JSON)
    • OPENAI_API: OpenAI API Key
  • 저장 위치: Settings → Secrets and variables → Actions → Repository secrets
  • 역할: 민감한 인증정보(프로젝트 ID, 서비스 계정 키, API 키)를 안전하게 참조.

3. GitHub Actions Workflow (actions.yaml)

  • 트리거: main 브랜치 push 시 동작
  • 환경 변수:
    • PROJECT_ID, GKE_CLUSTER, GKE_ZONE, DEPLOYMENT_NAME, IMAGE
  • 핵심 Job (setup-build-publish-deploy) 단계 :
    1. 코드 체크아웃
    2. GCP 인증 (google-github-actions/auth)
    3. GKE 클러스터 credentials 가져오기
    4. Docker Build & Push → gcr.io/PROJECTID/PROJECT_ID/IMAGE:$GITHUB_SHA
    5. Kustomize 설정 & OpenAI Secret 생성
    6. Kubernetes 배포 및 롤아웃 확인

4. Kubernetes 배포 (deploy.yaml, kustomization.yaml)

  • Deployment :
    • 이름: chatgpt-deploy
    • 파드 레플리카: 3개
    • 컨테이너: mychatgptcontainer
    • 환경 변수: OPENAI_API (Secret에서 참조)
  • Service :
    • 타입: LoadBalancer
    • 외부 접근용 IP 제공
  • Kustomize (kustomization.yaml) :
    • deploy.yaml 기반으로 이미지 태그 자동 업데이트

5. 배포 & 테스트 과정

  1. 코드 수정 후 git commit & push → GitHub Actions 자동 실행
  2. 새 Docker 이미지 빌드 → Google Artifact Registry에 push
  3. kubectl과 kustomize로 GKE에 자동 배포
  4. kubectl get svc 로 External IP 확인 → 브라우저에서 애플리케이션 접속
    • 예: Welcome to ChatGPT application v2, v3 등 변경 사항 반영됨

6. 프로젝트 정리 (Cleanup)

  • 리소스 정리 방법
    • GKE 클러스터 삭제:
      gcloud container clusters delete my-cluster --zone us-central1-a
    • Artifact Registry 이미지 삭제
    • Service Account 키 제거 또는 만료
    • 불필요한 LoadBalancer / VM 인스턴스 확인 및 삭제

✅ 핵심 정리

  • GitHub Actions + GKE 조합으로 완전 자동화된 CI/CD 파이프라인 구축.
  • Secrets 관리가 보안과 안정성의 핵심.
  • Docker → Artifact Registry → GKE 배포의 전체 플로우 자동화.
  • kustomize 사용으로 버전 태깅 자동화배포 유연성 확보.
  • 마지막에는 클린업 절차까지 포함하여 비용 낭비 방지.

📝 문제 세트 (섹션 11 기반)

🔹 난이도 하

문제 1.

GitHub Actions에서 민감한 인증 정보를 안전하게 관리하기 위해 사용하는 기능은 무엇인가?

① GitHub Variables

② GitHub Secrets

③ GitHub Tokens

④ GitHub Vault

정답:

해설: 민감한 프로젝트 ID, 서비스 계정 키, API Key는 GitHub Repository Secrets에 저장해야 한다 .


문제 2.

actions.yaml 워크플로우 파일이 실행되는 시점은 기본적으로 언제인가?

① main 브랜치에 Push 될 때

② develop 브랜치에 Pull Request 생성 시

③ GitHub Issue 생성 시

④ 일정 시간마다 자동 실행

정답:

해설: 설정된 트리거는 push → main 브랜치로 지정되어 있다 .


🔹 난이도 중

문제 3.

다음 중 GitHub Actions에서 Docker 이미지를 빌드하고 레지스트리에 Push하는 과정을 올바르게 나열한 것은?

① Checkout → Build → Auth → Push

② Auth → Checkout → Build → Push

③ Checkout → Auth → Build → Push

④ Checkout → Push → Build → Auth

정답:

해설: 먼저 코드 체크아웃, GCP 인증(auth), 이후 Docker Build, 그리고 Push 순서로 진행된다 .


문제 4.

CI/CD 과정에서 kustomize를 사용하는 주된 이유는 무엇인가?

① 보안 강화를 위해 API Key를 암호화하기 위함

② GKE 클러스터의 노드 수를 자동으로 조정하기 위함

③ 배포 YAML 파일에서 이미지 태그 등을 동적으로 수정하기 위함

④ Docker 빌드 속도를 최적화하기 위함

정답:

해설: kustomize edit set image 명령을 이용해 최신 커밋 ID 기반 태그로 deploy.yaml의 이미지 값을 자동 수정한다 .


🔹 난이도 상

문제 5.

다음은 deploy.yaml의 일부이다. 빈칸에 들어갈 값으로 올바른 것은?

env:
- name: OPENAI_API
  valueFrom:
    secretKeyRef:
      name: _________
      key: API_KEY

① gcp-secret

② github-secret

③ openai-secret

④ chatgpt-secret

정답:

해설: 실습에서는 kubectl create secret generic openai-secret --from-literal=API_KEY=... 로 생성했으므로 openai-secret이 맞다 .


문제 6. (서술형)

CI/CD 파이프라인에서 클린업(cleanup) 작업이 필요한 이유와 대표적인 정리 항목을 2가지 이상 서술하시오.

모범 답안:

  • 이유: 사용하지 않는 클러스터, Artifact Registry, LoadBalancer, Service Account 키 등을 방치하면 비용 증가 및 보안 리스크가 발생한다.
  • 대표 정리 항목:
    • GKE 클러스터 삭제 (gcloud container clusters delete ...)
    • Artifact Registry 이미지 삭제
    • 불필요한 Service Account 키 제거
    • LoadBalancer/VM 인스턴스 확인 후 삭제
profile
AI에 관심이 많은 23살 대학생입니다.

0개의 댓글