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
- lambda
- Kubernetes
- Java IO
- 컨테이너
- 실전 자바 고급 1편
- 멀티 쓰레드
- db
- mysql
- 김영한
- Thread
- 알고리즘
- container
- java
- 동시성
- 자료구조
- 시작하세요 도커 & 쿠버네티스
- SQL
- 자바
- RDB
- 자바 입출력 스트림
- 도커
- 스레드
- 쓰레드
- 람다
- 쿠버네티스
- 함수형 인터페이스
- 도커 엔진
- 인프런
- Docker
- 데이터베이스
Archives
- Today
- Total
쌩로그
[Kubernetes] 대세는 쿠버네티스 (초급~중급편) Ch02. [기초편] 다지기 본문
반응형
목록
- 포스팅 개요
- 본론
2-1. 쿠버네티스가 필요한 이유
2-2. VM vs Container
2-3. 쿠버네티스 시작
2-4. 쿠버네티스 기능 - 요약
1. 포스팅 개요
해당 포스팅은 인프런의 일프로님의 대세는 쿠버네티스(초급~중급편)을 학습하며 정리한 글이다.
2. 본론
2-1. 쿠버네티스가 필요한 이유
1. 한 서버에 한 시스템을 올려서 사용하던 방식의 문제
- A, B, C 세 개의 서비스를 올린다고 했을 때, A 서비스는 낮에 사람들이 몰리고, B 서비스는 점심시간에 사람들이 몰리고, C 서비스는 저녁에 사람들이 몰린다.
- 사람들이 몰릴 때는 3개의 서버를 띄워야 한다.
- 그렇기 때문에 총 9개의 서버가 필요하다.
- 서비스의 버전 업데이트가 필요한 경우 서버를 모두 내렸다가 다시 올려야한다.
- 무중단 배포일 경우 최소 하나의 서버는 살려놓은 상태에서 서비스를 내렸다가 올리고 내렸다가 올리고 해야한다.
2. 쿠버네티스로 서비스를 운영한다면?
- 사용량이 많은 시간대만 서버를 띄우도록 하면된다.
- 즉 사람들이 몰리는 시간대의 서비스를 집중적으로 띄우도록 하고 나머지 두 대를 한 서버 혹은 2 개의 서버에 각각 따로 서비스하면 된다.
- 즉 4대의 서버로도 충분히 3개의 서비스를 운영할 수 있다.
- 서비스 버전의 업데이트 경우 블루-그린 배포가 자동이다.
- 쿠버테니스를 이용하면 유지보수 비용이 줄어들고 이는 서비스가 더욱 커질수록 효과가 더욱 커진다.
2-2. VM vs Container
VM
애플리케이션을 띄우려면(아래서부터 위로)
- 애플리케이션
- 게스트 OS
- Hypervisor
- 호스트 OS
장점
- 하나의 VM에 독립적으로 원하는 OS를 띄울 수 있다.
- 하나의 VM의 보안이 뚫려도 다른 VM은 독립적이므로 보안적으로 컨테이너보다 우수하다.
단점
- 하나의 애플리케이션을 띄우기 위해서 자원이 컨테이너보다 많이 든다.
Container
애플리케이션을 띄우려면(아래서부터 위로)
- 애플리케이션
- 컨테이너(도커)
- 호스트 OS
장점
- 호스트의 자원을 사용하기 때문에 VM에 비해 자원 사용량이 적다.
단점
- 리눅스OS에서 윈도우용 컨테이너를 사용할 수 없다.
- 하나의 컨테이너가 보안적으로 위험해지면 OS까지 침투할 여지가 있다.
컨테이너 기술로 대표적인 것이 도커가 있다.
도커는 여러 컨테이너간의 자원을 분리해서 쓰도록 한다.
- namespace와 cgoup를 사용하여 격리를 한다.
- namespace는 커널에 대한 영역을 분리
- cgroup은 자원에 대한 영역 분리
- namespace와 cgoup를 사용하여 격리를 한다.
- 컨테이너보다 상위개념은 POD이다.
- POD 안에 여러 개의 컨테이너를 띄울 수 있다.
2-3. 쿠버네티스 시작
시나리오
- 리눅스에서 Node.js를 띄운다.
- Docker가 있는 서버로 위에서 띄운 Node.js 앱을 그대로 가져온다.
- 이때 Node.js가 없어서 애플리케이션이 실행되지 않는다.
- 이 때 Docker를 이용(DockerHub)해서 위에서 Node.js를 가져와서 애플리케이션을 실행한다.
- Docker가 있는 서버로 위에서 띄운 Node.js 앱을 그대로 가져온다.
- 쿠버네티스를 이용해서 Node.js를 실행할 것이다.
- Pod에는 Node.js가 있는 컨테이너를 띄울 것이다.
- 애플리케이션을 실행하기 위해서 Pod, Service를 띄운다.
- 쿠버네티스를 이용해서 Node.js를 실행할 것이다.
환경세팅 전이므로 영상만 봐야한다니...yaml 파일만 기록한다.
2번의 Node.js를 불러오는 Dockerfile
## Dockerfile
FROM node:slim
EXPOSE 8080
COPY hello.js
CMD node hello.js
## Docker build
$ docker build -t tmpkube/hello .
## 빌드한 이미지 확인
$ docker images
## 도커 푸시
$ docker push tmpkube/hello
## 이미지 실행
$ docker run -d -p 8080:8080 tmpkube/hello
## 이미지 안의 컨테이너로 접속
$ docker exec -it [컨테이너_ID] /bin/bash
3. 쿠버네티스로 노드로 hello.js를 띄우기
강의에서는 GUI를 보여주고 있다.
# Pod
apiVersion: v1
kind: Pod
metadata:
name: hello-pod
lables:
app: hello
spec:
contatiners:
- name: hello-container
image: tmpkube/hello
ports:
- containerPort: 8000
---
# Service
apiVersion: v1
kind: Service
metadata:
name: hello-svc
spec:
selector: # pod의 lables와 매핑됨.
app: hello
ports:
- port: 8200
targetPort: 8000
externalIPs:
- 192.168.x.x
실행
$ kubectl apply -f hello.yaml
- 이미지 참고 : 대세는 쿠버네티스 (초급~중급편) (https://inf.run/JgZzK)
2-4. 쿠버네티스 기능
Node
- 쿠버네티스는 서버 한 대는
마스터 노드그 외에는워커 노드로 한다. - 이렇게 해서 하나의 클러스터가 구성된다.
- 마스터는 쿠버네티스의 전반적인 기능을 컨트롤하고, 워커 노드는 자원을 제공한다.
- 자원을 늘리고 싶다면 노드를 늘리면 된다.
namespace
- 클러스터 안의 namespace라는 객체가 쿠버네티스 오브젝트들을 독립된 공간으로 분리해준다.
- namespace 안에는 파드들이 있고, 파드들에게 외부로부터 접근이 가능하도록 IP를 할당해주는 서비스 가 있다.
- 단, 서로 다른 네임스페이스에 있는 파드들은 연결할 수 없다.
- 리소스쿼터(ResourceQuota)와 리미트레인지(LimitRange)를 달아서 하나의 namespace에서 사용할 자원의 양을 한정시킬 수 있다.
- 파드의 개수, CPU, 메모리 등등
Pod
- 파드 안에는 여러 개의 컨테이너가 존재한다.
- 컨테이너에는 하나의 애플리케이션이 동작한다.
- 그렇기 때문에 하나의 파드에는 여러 개의 애플리케이션이 동작한다.
- 하나의 파드가 날라가면 데이터가 날라간다.
- 따라서 볼륨을 만들어서 파드에 연결을 하면 파드가 날라가더라도 데이터를 보존할 수 있다.(도커 볼륨과 같은 기능)
- 파드를 올릴 때 환경변수, 파일을 바운딩해줄 수 있는데, 이 때 ConfigMap, Secret 을 통해 매핑시켜줄 수 있다.
Controller
- 파드들을 관리해주는 역할을 한다.
- 각각의 사용 용도가 다르다.
Replication Controller, ReplicaSet
- 파드가 죽으면 감지해서 살려주거나 파드의 개수를 늘렸다가 줄일 수 있다(컨트롤한다).
- 스케일 인/아웃을 해준다.
Deployment
- 배포 후 파드들을 새 버전으로 업그레이드 해준다.
- 업그레이드 도중 문제가 생기면 롤백을 다시 쉽게 하도록 해준다.
DaemonSet
- 한 노드의 파드가 하나씩만 유지가 되도록 해준다.
- 이렇게 사용해야 하는 모듈이 있다(이후에 나올 듯 하다).
Job
- 특정 작업만 하고 종료를 시켜야 하는 일을 할 때 파드가 그렇게 동작하도록 한다.
- 이를 주기적으로 실행할 때는 CronJob을 이용한다.
3. 요약
- 쿠버네티스를 이용하면 한 서버에 하나의 시스템을 올릴 때보다 자원을 더욱 효율적으로 사용할 수 있고, 유지 보수 비용이 줄어들며, 서비스가 더욱 확장될 때 이 효과는 극대화된다.
- VM과 컨테이너의 장단점에 대해 알아보았다.
- 도커와 쿠버네티스 환경에서 Node를 띄우는 yaml을 작성해보았다.
- 쿠버네티스의 기능에 대해서 알아보았다.
- Pod
- namespace
- Controller
- Deployment
- Replication Controller/ReplicaSet
- Job/CronJob
- DaemonSet
강의 링크 : https://inf.run/JgZzK
728x90
'Deploy > Kubernetes' 카테고리의 다른 글
| [Kubernetes] 쿠버네티스 어나더 클래스-Sprint 1. 쿠버네티스 무게감 있게 설치하기 (0) | 2025.10.12 |
|---|---|
| [Kubernetes] 쿠버네티스 어나더 클래스-Sprint 1. 컨테이너 한방정리 (0) | 2025.09.26 |
| [Kubernetes] 쿠버네티스 서비스(Service) (0) | 2025.03.05 |
| [Kubernetes] 쿠버네티스 디플로이먼트(Deployment) (0) | 2025.03.04 |
| [Kubernetes] 쿠버네티스 레플리카셋(ReplicaSet) (14) | 2025.02.25 |
Comments