일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- kt 에이블스쿨 6기
- 머신러닝
- 백준 사탕 게임
- KT AIVLE
- 케이티 에이블스쿨 6기
- 알고리즘
- 케이티 에이블스쿨 6기 후기
- 케이티 에이블스쿨 기자단
- kt aivle school
- 데이터 프레임
- kt 에이블스쿨 6기 ai
- 앙상블
- 케이티 에이블스쿨 6기 13주차
- 파이썬
- 케이티 에이블스쿨 6기 ai
- kt 에이블스쿨 기자단
- 케이티 에이블스쿨 6기 spring
- 티스토리챌린지
- kt 에이블스쿨 6기 빅프로젝트
- 에이블 기자단
- 판다스
- 구현
- kt 에이블스쿨 6기 미니 프로젝트
- 케이티 에이블스쿨
- SQLD
- 케이티 에이블스쿨 6기 java
- 오블완
- 백준
- kt 에이블스쿨 6기 aivle day
- KT 에이블스쿨
- Today
- Total
미식가의 개발 일기
[KT 에이블스쿨(6기, AI)] 14주차, 가상화 클라우드 본문

<14주차 후기>
- 총 3일에 거쳐 가상화 클라우드에 대해 배웠어요!
- 격리가 중요할 때 사용하는 가상화 기법(Virtualized)과 경량화와 빠른 배포가 필요할 때 사용하는 컨테이너 기법(Containerized)에 대해 배웠는데 Microsoft Azure와 Docker, Kubernetes 사용해 실습 진행했습니다!
- 가상화 기법이다 보니 이론으로 들었을 땐 와닿지 않았는데 실습을 하면서 아 이렇게 하는구나~~ 하면서 이해가 쏙쏙 되더라고요.. 역시 백문이 불여일견..!😶
- 또 개념과 구조 모두 생소한 개념이라 헷갈리기도 했는데 '컨테이너가 요리라면 도커 이미지는 요리 레시피이고, 도커 허브는 도커 이미지들을 저장해놓은 저장소이다.' 이렇게 나만의 언어로 바꿔 생각하니까 확실히 이해가 쉬웠습니다! 강사님의 꿀팁 앞으로도 잘 써먹을 것 같습니다. ㅎㅎ 중간중간 배웠던 용어를 화면에 띄워주시면서 초등학생에게 설명하는 것처럼 설명해 보고 나만의 언어로 바꿔보는 시간을 가졌는데 수업 따라가는데 많은 도움이 됐던 것 같아요. 😊
- 무엇보다 클라우드 플랫폼에서 개인적으로 실습을 하기가 쉽지 않은데 비용 걱정, 환경 세팅 걱정 없이 실습에만 집중할 수 있었던 게 너무 좋았습니다!
1️⃣ Azure
Microsoft가 제공하는 퍼블릭 클라우드 플랫폼
- Microsoft Azure 프로그램을 활용하여 여러 실습을 진행했습니다!
📣 기본 서비스
💡 가상 네트워크(Virtual Network, VNet)
Azure 리소스가 인터넷 및 특정 온-프레미스 네트워크와 통신
- 가상 네트워크 생성 후 서브넷 추가
💡 가상 머신(Virtual Machine, VM)
컴퓨터 시스템을 소프트웨어로 가상화한 환경, 가상 운영체제 컴퓨터
- Azure에서 가상 머신 생성 후 .pem 파일을 저장하고, apache2 를 실행 하여 웹 서버 구동
- 가상 머신의 공용 IP로 접속 테스트
💡 스토리지(Storage)
Azure Bolb: Azure에서 제공하는 Binary Large Object Storage, 대규모 비정형 데이터 저장 및 관리
- 스토리지 계정 생성 후 index.html 파일 업로드
- 제공받은 primary endpoint로 접속
📣 고가용성 서비스
💡 부하 분산(Load balancers)
여러 서버나 리소스 간에 네트워크 트래픽(부하)을 고르게 분산하여 시스템의 성능과 가용성을 향상시키는 장치
- 가상 머신 2개 생성
- 프론트엔드 IP에 새로운 public IP 추가 후 백엔드 풀에 생성해 놓은 가상 네트워크와 가상 머신 등록
- 부하분산 규칙 추가 후 load balancer 생성
- 트래픽이 고르게 분산되는 것을 확인(처음 접속 server1, 1~2분 후 server2)
💡 자동 스케일링(VMSS:Virtual Machine Scale Set)
가상 머신을 관리하고 일정에 따라 자동 확장 및 축소 → 트래픽 증가 시 서버 증가 트래픽 감소 시 서버 감소
* 자동 스케일링 생성 후 부하 테스트
1. 자동 크기 조정 기준 설정 후 VMSS 생성
2. PowerShell 실행 후 가상 머신 접속
3. 부하 생성을 위한 stress 패키지 설치
4. CPU 부하 생성
5. CPU 사용률 증가 확인
2️⃣ Docker
애플리케이션을 컨테이너로 묶어 어디서나 실행할 수 있게 해주는 경량 오픈소스 플랫폼
💡서버 환경의 진화
📣 Bare Metal
성능이 중요할 때
- 정의: 물리 하드웨어에 운영 체제 직접 설치
- 구조: 하드웨어 → 운영 체제 → 애플리케이션
- 특징: 고성능, 직접 접근, 관리 복잡
📣 Virtualized(가상화 환경)
격리가 중요할 때
- 정의: 물리 하드웨어 위에 하이퍼바이저를 사용해 여러 가상 머신(VMs)을 운영하며 가상 머신은 각각 독립된 운영 체제 가짐
- 구조: 하드웨어 → 운영 체제 → 하이퍼바이저 → 가상 머신 → 독립된 운영 체제 → 애플리케이션
- 특징: 리소스 효율성, 유연성, 오버헤드 존재(하이퍼바이저 계층으로 손실 발생), 격리성
📣 Containerized(컨테이너 환경)
경량화와 빠른 배포가 필요할 때
- 정의: 운영 체제의 커널을 공유하면서 애플리케이션과 그 종속성을 격리하는 가벼운 환경
- 구조: 하드웨어 → 운영 체제 → 컨테이너 엔진(예: Docker, Kubernetes) → 컨테이너 → 애플리케이션
- 특징: 경량화, 효율성, 이식성
💡 Docker Hub
도커 이미지를 공유하는 중앙 저장소
(도커 이미지: 컨테이너를 실행하기 위한 읽기 전용 템플릿, 컨테이너가 요리라면 도커 이미지는 요리 레시피!)
(도커 파일: 도커 이미지를 자동으로 생성하기 위한 설정 파일)
<실행 과정>
0. index.html 파일 생성 후 도커 파일에 복사
FROM nginx:latest
COPY index.html /usr/share/nginx/html/index.html
1. 이미지 생성: 도커 파일 작성 후 build
docker build -t <도커허브 계정명>/<이미지명>:<태그명>
2. 이미지 업로드(Push)
docker push <도커허브 계정명>/<이미지명>:<태그명>
3. 도커 컨테이너 실행: 로컬 포트를 컨테이너 포트에 매핑하고 백그라운드에서 실행
docker run -d -p <로컬 포트>:<컨테이너 포트> --name <컨테이너명>
4. Azure 가상 머신의 인바운드 포트 설정: 대상 포트 범위에 설정한 로컬 포트 추가
5. 도커 허브에서 레포지토리 생성 후 이미지 태그 지정
docker tag my-webserver <계정명>/my-webserver:v1
6. 도커 허브로 업로드
docker push <계정명>/my-webserver:v1
7. Azure Container Registry 생성, ACR 레지스트리에 이미지 태그 지정 및 Push
도커 이미지를 Azure 클라우드에서 직접 관리하고 배포할 수 있음
- 로그인
az login // Azure CLI 로그인
az acr login --name <ACR 이름> // Azure Container Registry 로그인
- 태그 지정 및 Push
docker tag <이미지명>:<태그> <ACR 이름>.azurecr.io/<이미지명>:<태그명> // 태그 지정
docker push <ACR 이름>.azurecr.io/<이미지명>:<태그명> // Push
3️⃣ Kubernetes
컨테이너화된 애플리케이션을 자동으로 배포, 확장, 관리할 수 있게 해주는 오픈 소스 플랫폼
- AKS (Azure Kubernetes Service): Microsoft Azure에서 제공하는 관리형 Kubernetes 서비스
💡주요 개념
- Pod: 하나 이상의 컨테이너를 포함하는 가장 작은 배포 단위
- Node: 애플리케이션을 실행하는 서버(하나 이상의 Pod를 실행)
- Cluster: 애플리케이션을 실행하는 환경으로 전체 시스템을 관리하는 마스터 노드와 애플리케이션을 실행하는 워커 노드로 구성
- Namespace: Cluster 를 논리적으로 분리하여 리소스를 격리
- Object: Cluster의 상태를 나타냄
- Kubectl: Cluster와 상호작용 하기 위한 CLI(Command Line Interface)
- yaml: Object의 구성과 목표 상태를 정의(json도 가능하지만 yaml이 더 일반적)
apiVersion: <API 버전> # API 그룹과 버전 (예: apps/v1, v1)
kind: <리소스 유형> # 오브젝트 유형 (예: Pod, Deployment)
metadata: # 메타데이터 (이름, 네임스페이스, 레이블 등)
name: <오브젝트 이름>
namespace: <네임스페이스 이름> # 생략 시 default 네임스페이스
spec: # 오브젝트의 원하는 상태
containers: # Pod에 포함된 컨테이너 리스트
- name: nginx-container
image: nginx:1.21
ports:
- containerPort: 80
💡 Controller
클러스터의 상태를 관찰하고 오브젝트의 생성, 변경을 요청하는 오브젝트
- AKS Cluster 배포 후 Node 확인
ReplicaSet
- 특정 수의 Pod가 항상 실행되도록 보장 (yaml 파일에 지정)
Deployment
- ReplicaSet을 생성하고 관리하며, 애플리케이션 배포 및 업데이트를 처리
💡 Service
ClusterIP
- 클러스터 내부에서만 접근 가능한 네트워크 서비스를 제공
NodePort
- 클러스터 외부에서 노드의 특정 포트를 통해 접근 가능
LoadBalancer
- 클라우드 공급자의 로드 밸런서를 사용해 외부에 서비스 노출, 외부 트래픽을 클러스터 내의 Pod들로 분산
ExternalName
- 클러스터 외부의 서비스를 DNS 이름으로 참조
* DNS(Domain Name System): 도메인 이름(www.example.com) → IP 주소 변환
💡 Volume
Pod 컨테이너에서 접근할 수 있는 데이터 저장소
emptyDir
- Pod가 생성되면 빈 디렉토리를 생성하고, Pod가 종료되면 사라지는 임시 저장소
hostPath
- Cluster의 특정 노드에서 데이터를 저장, 노드가 바뀌면 데이터 사용 X
PV(persistent Volume)
- Cluster 내에서 Pod와는 별도로 관리되는 영구적인 저장소
PVC(Persistent Volume Claim)
- Pod에 필요한 저장소를 명시하는 요청서
💡 Autoscaling
HPA(Horizontal Pod Autoscale)
- 부하 증감에 따라 Pod의 개수를 조절
VPA(Vertical Pod Autoscaler)
- 부하 증감에 따라 Pod의 사양을 조절
'KT 에이블스쿨(6기, AI)' 카테고리의 다른 글
[KT 에이블스쿨(6기, AI)] 16주차~17주차, 7차 미니 프로젝트 (2) | 2024.12.20 |
---|---|
[KT 에이블스쿨(6기, AI)] 13주차, JAVA (1) | 2024.12.10 |
[KT 에이블스쿨(6기, AI)] 14주차, SQL (0) | 2024.12.04 |
[KT 에이블스쿨(6기, AI)] 13주차, IT 인프라 (0) | 2024.11.26 |
[KT 에이블스쿨(6기, AI)] 12주차, AIVLE Day 1차 (1) | 2024.11.22 |