-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
📄 문서문서화하기 위해 작성한 글문서화하기 위해 작성한 글
Description
Kubernetes 개념 및 AKS 설정 방법
Kubernetes는 애플리케이션을 효율적으로 배포하고 관리하기 위한 시스템으로, 주로 컨테이너화된 애플리케이션을 배포하고, 확장하고, 운영 상태를 유지하는 데 사용됩니다.
주요 구성 요소
- 클러스터(Cluster): 여러 대의 컴퓨터를 모아 하나의 큰 시스템처럼 사용. 마스터 노드와 워커 노드로 구성.
- 노드(Node): 클러스터를 구성하는 하나의 컴퓨터이며, 마스터 노드와 워커 노드로 나뉨.
- 마스터 노드: 클러스터의 상태를 모니터링하고, 작업을 분배하며, 문제가 생기면 해결함.
- 워커 노드: 실제로 애플리케이션을 실행하는 컴퓨터.
- 파드(Pod): 쿠버네티스에서 애플리케이션을 실행하는 최소 단위. 하나 이상의 컨테이너로 구성되며, 같은 네트워크와 저장 공간을 공유.
- 디플로이먼트(Deployment): 애플리케이션의 파드를 어떻게 배포할지 정의하는 계획서. 원하는 수의 파드를 유지하고, 새로운 버전으로 업데이트하거나, 문제가 발생하면 자동으로 복구.
- 서비스(Service): 파드에 네트워크 접근을 제공하는 안정적인 방법. 클러스터 내부 또는 외부에서 파드에 접근할 수 있는 고정된 IP 주소와 포트를 제공.
- 컨피그맵(ConfigMap) 및 시크릿(Secret):
- 컨피그맵: 애플리케이션의 설정 데이터를 저장.
- 시크릿: 비밀번호, API 키와 같은 민감한 데이터를 저장.
- 네임스페이스(Namespace): 클러스터를 여러 개의 논리적 구역으로 나누는 방법으로, 서로 다른 팀이나 프로젝트가 동일한 클러스터를 공유 가능.
학교 예시로 이해하기
- 클러스터 = 학교
- 노드 = 각 학급이 클러스터를 구성하는 하나의 단위
- 마스터 노드 = 교장 선생님처럼 전체 학교를 관리하고 지휘
- 워커 노드 = 각 학급의 선생님처럼 학생들에게 일을 시키고 수업을 진행
- 파드 = 각 학생이 하는 하나의 프로젝트
- 디플로이먼트 = 학생들이 어떤 프로젝트를 할지, 몇 명이 할지, 문제가 생겼을 때 어떻게 할지에 대한 계획서
- 서비스 = 학생들이 프로젝트를 발표할 때 사용하는 발표 무대
- 컨피그맵 = 프로젝트를 위해 필요한 자료나 설정을 저장하는 파일
- 시크릿 = 프로젝트의 중요한 정보, 예를 들어 시험 문제 같은 비밀 자료를 안전하게 보관하는 곳
- 네임스페이스 = 학급별로 프로젝트를 구분하는 방법
Azure에서 AKS(Azure Kubernetes Service) 설정하기
1. Azure CLI 설치 및 로그인
# Azure CLI 설치 (macOS 및 Linux)
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
# Azure 로그인
az login2. AKS 클러스터 생성
# 리소스 그룹 생성
az group create --name myResourceGroup --location eastus
# AKS 클러스터 생성
az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 3 --enable-addons monitoring --generate-ssh-keys3. kubectl 구성
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster자동 스케일링 설정
클러스터 오토스케일러 설정
az aks update --resource-group myResourceGroup --name myAKSCluster --enable-cluster-autoscaler --min-count 1 --max-count 5Horizontal Pod Autoscaler (HPA) 설정
- HPA를 적용할 디플로이먼트 생성:
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-app
spec:
replicas: 2
selector:
matchLabels:
app: node-app
template:
metadata:
labels:
app: node-app
spec:
containers:
- name: node-app
image: <your-dockerhub-username>/node-app:latest
ports:
- containerPort: 3000
resources:
requests:
cpu: 200m
memory: 512Mi
limits:
cpu: 500m
memory: 1Gi이 파일을 deployment.yaml로 저장하고 생성:
kubectl apply -f deployment.yaml- HPA 생성:
kubectl autoscale deployment node-app --cpu-percent=50 --min=1 --max=104. 모니터링 및 확인
# 클러스터 노드 수 확인
kubectl get nodes
# HPA 상태 확인
kubectl get hpa쿠버네티스와 깃허브 액션의 차이점
쿠버네티스
- 목적: 애플리케이션의 배포 및 운영을 관리
- 사용 환경: 클러스터 환경(여러 대의 컴퓨터)에서 작동
- 주요 기능: 컨테이너 오케스트레이션, 자동 확장, 셀프-힐링
- 작동 방식: 클러스터 내에서 컨테이너를 관리
- 주요 구성 요소: 클러스터, 노드, 파드, 디플로이먼트, 서비스
깃허브 액션
- 목적: 코드의 빌드, 테스트 및 배포를 자동화
- 사용 환경: 깃허브 리포지토리 기반에서 작동
- 주요 기능: CI/CD 파이프라인, 워크플로 자동화
- 작동 방식: 코드 변경 시 워크플로를 실행
- 주요 구성 요소: 워크플로, 액션, 이벤트, 러너
결론
쿠버네티스는 애플리케이션의 실행과 운영을 관리하는 도구이며, Azure에서 AKS(Azure Kubernetes Service)를 통해 설정하고 어플리케이션을 배포 및 관리할 수 있습니다. 반면에 깃허브 액션은 코드 변경 시 자동으로 빌드, 테스트, 배포를 수행하는 CI/CD 도구로, 두 도구는 서로 보완적인 역할을 합니다. 깃허브 액션을 사용해 코드를 자동으로 배포하고, 배포된 애플리케이션을 쿠버네티스가 관리하는 시스템을 만드는 것이 가능합니다.
Metadata
Metadata
Assignees
Labels
📄 문서문서화하기 위해 작성한 글문서화하기 위해 작성한 글