Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- Two Pointer
- Infra
- 프로그래머스
- monorepo
- React
- build
- DP
- jenkins
- BFS
- queue
- AI
- typescript
- CI/CD
- docker
- heapq
- ansible
- python
- LLM
- javascript
- javascirpt
- rag
- 파이썬
- dfs
- turbo
- frontend
- Algorithm
- 알고리즘
- VectoreStore
- OpenAI
- modbus
Archives
- Today
- Total
DM Log
[CI/CD #5] Docker Desktop Kubernetes 사용 본문
인프라 패러다임의 변화
전통적 배포 방식
과거에는 하나의 물리 서버 위에 하나의 애플리케이션만을 설치 운영 방식이 일반적
- 서버 자원이 비효율적으로 사용
- 애플리케이션 간 환경 충돌 발생
- 유지 보수 및 배포 작업 복잡
애플리케이션마다 별도의 서버를 운영해야 하므로 비용과 관리 부담이 커지는 문제
서버 가상화
Hypervisor를 이용해 하나의 물리 서버 위에 여러 개의 가상 머신을 구동
- 구성 요소:
- Hypervisor: 하드웨어 자원을 분리해 여러 가상 머신에 할당
- VM(가상 머신): 각자 독립적인 OS를 포함해 완전한 시스템처럼 동작
- 장점:
- 하나의 서버에서 여러 서비스 운영 가능
- 각 애플리케이션이 독립된 OS 위에서 동작하므로 보안 격리 우수
- 단점
- VM이 별도의 OS를 포함하므로 자원 사용량이 큼
- 부팅 속도 느림, 배포 단위가 큼
컨테이너 가상화
VM의 단점을 보완한 기술로 호스트 OS의 커널을 공유하며, 애플리케이션 실행에 필요한 최소한의 환경만을 패키징
- 특징:
- 애플리케이션 간에 운영체제를 공유
- 독립된 실행 환경(파일 시스템, 네트워크, 프로세스 공간)을 제공
- 가볍고 빠른 배포 가능
- 장점:
- VM보다 훨씬 가볍고 빠름
- 이식성이 높아 어디서나 동일 환경 보장
- 개발, 테스트, 운영 환경 일관성 확보
Kubernetes
Kubernetes(K8s) 는 구글에서 개발하고 현재 CNCF에서 관리하는 오픈 소스 컨테이너 오케스트레이션 플랫폼
컨테이너화된 애플리케이션을 자동으로 배포, 스케일링, 관리해주는 시스
주요기능
- 컨테이너의 자동 배포 및 롤백
- 트래픅에 따른 자동 스케일링
- 서비스 디스커버리
- 셀프 힐링 기능 (장애 컨테이너 자동 재시작)
Kubernetes Cluster 구조
Kubernetes는 여러 구성 요소로 이루어진 클러스터(Cluster) 형태로 동작
구성 요소
- Pod : 컨테이너의 실행 단위, 하나 이상의 컨테이너 포함
- Node : Pod가 실제로 동작하는 서버 (물리/가상 머신)
- Service : Pod 집합에 대한 네트워크 접근을 추상화한 객체
Kubernetes 설치
Docker Desktop setting 메뉴 에서 Kubernetes 에서 Enable Kubernetes 체크 한후 Apply& restart
K8s 기본 명령어
- 노드 확인: kubectl get nodes
- 피드 확인: kubectl get pos / kubectl get pods -o wide
- 디플로이먼트 확인: kubectl get deployments
- 서비스 확인: kubectl get services
- Nginx 서버 실행: kubectl run sample-nginx --image=nginx --port=80
- 컨테이너 정보 확인: kubectl describe pod/sample-nginx
- 파드 삭제: kubectl delete pod/sample-nginx-XXXXX-XXXXX
- Scale 변경 (2개로 변경): kubectl scale deployment sample-nginx --replicas=2
- Script 실행: kubectl apply -f sample1.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
- 파드에 터널링으로 접속: kubectl exec -it nginx-deployment-XXXX-XXXX -- /bin/bash
- 파드 포트 노출: kubectl expose deployment nginx-deployment --port=80 --type=NodePort
'개발공부 > Infra' 카테고리의 다른 글
| [CI/CD #7] Jenkins Pipeline (0) | 2025.11.02 |
|---|---|
| [CI/CD #6] Jenkins + Ansible + Kubernetes 연동 (0) | 2025.11.01 |
| [CI/CD #4] Jenkins + Ansible 연동 (0) | 2025.10.29 |
| [CI/CD #3] Infrastructure as Code 개요와 Ansible의 이해 (0) | 2025.10.28 |
| [CI/CD #2] Jenkins를 이용한 CI/CD 사용 (0) | 2025.10.26 |
