Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원/11월

22. 11. 09 - [ 플러스 알파 ] Docker, k8s(쿠버네티스)

giggs 2022. 11. 16. 15:27

 

-- INDEX --

 

 

1. Docker를 사용하는 이유 2. 쿠버네티스 등장 배경 3. k8s 장점
컨테이너를 활용한
환경설정의 편리함
VM -> Docker : k8s 환경설정 // 클러스터
상태관리 // 스케줄링
버전관리

 

 

 


 

 

1. Docker

  • 도커를 사용하는 이유?
  • 우리 회사 프로그램 설치 편하게 문서화

 

 

 

1-1 : 도커 파일로 이미지 만들고, 이를 기반으로 생성된 컨테이너 관리

  • 도커를 사용하면 환경설정이 아주 편리하다.
  • 명령어들을 좀 공부해놓으면 설치작업 편하게 할 수 있다.
  • 도커는 컨테이너를 가지고 관리를 하는 애인데  컨테이너는 이미지 파일을 기반으로 생성되는 애이다.
  • 이미지 파일만 잘 관리해놓으면 아주 편리해진다.

 

 

 

 

도커 파일을 이용해

이미지에 JDK11, ORACLE21C , TOMCAT9.0 설치하는 명령어 세팅해놓으면

 

이미지 실행해서 나오는 컨테이너에

모든 환경설정 완료되어서 태어난다!

 

 

 

 


 

 

 

 

2. 쿠버네티스의 등장 배경

 

 

2-1 : VM 등장

  • 컴퓨터 1대 ( 서버1개에서 ) 여러개의 서버로 분리해서 사용 가능해졌다.
  • 여러개의 가상 머신 – 각각의 VM마다 환경변수 설정 할 수 있고 좋았다.
  • 단점 : 1개의 서버로 관리하다보니 성능이 떨어진다.
  • 작업하는 순서를 문서화시켜서 설치
  • 설치하는 작업을 명령어로 만들어주는 툴 사용하니 좋긴 하다.
  • 툴을 사용하니 버전 변경이나 다른 요인에 의해 변수가 많다.

 

 


 

 

2-2 : 이런 것들을 해결하기 위해 등장한 것이 Docker

  • 컨테이너는 우리가 만든 하나하나의 WEB이라고 보면 된다.
  • 컨테이너는 똑같은 WEB 여러 개 실행되는 경우가 많다.
  • 도커는 vm과 다르게 작동된다 ( 비슷하긴 하지만 다르게 작동됨 -- 공부해보기 )
  • 이렇기 때문에 도커는 성능이 더 좋다.

 

# BUT

  • 어느 시점 까지는(컨테이너 어느 개수까지는) 괜찮은데
  • 요새 서비스처럼 규모가 엄청 큰 것들은 내가 띄워놓은 컨테이너 개수가 많아지고
  • 이 컨테이너들을 하나하나 관리하기가 어려워졌다.
  • 특정 컨테이너에서 에러 나면 이것도 관리하기가 힘들다.
  • 배포한 컨테이너들에게 변경사항 생기면(버전이나, 공통으로 추가해주어야 할 것들 ) 하나하나 찾아가서 변경해주어야 한다.
  • 트래픽 몰릴 거라 예상하고 띄워놨던 컨테이너가 아닌 다른 컨테이너에 몰리면 지금 띄워놓은 컨테이너 내리고 몰린 거 띄워주어야 하는 이런 작업이 필요한데 도커만 가지고는 힘들다.
  • 그래서 등장한 것이 쿠버네티스

 

 


 

 

2-3 : 쿠버네티스 ( k8s )

  • 지금은 여러 개의 컨테이너를 하나하나 관리하는 방식이라 너무 힘들다.
  • 한 번에 여러 컨테이너를 관리할 순 없을까? 해서 등장한 것이
  • 쿠버 네티스 : 오케스트레이션 도구

 

 

 

 

 

# 흐름 Check

  • 내 손으로 일일이 직접 설치 
  • --> 문서화시켜서 여러 명이서 작업 
  • --> vm 이용하여 서버 분리해서 작업 
  • --> 도커 컨테이너 이용해서 작업
  • --> 여러 개의 웹을 한 번에 관리하기 위해 도커 사용 
  • --> 도커만 이용해서 컨테이너를 관리하기 여러 면에서 힘들다. 해서 쿠버 네티스 사용
  • 도커와 쿠버 네티스는 대표적인 애들일 뿐 다른 애들도 있다.

 

 

 


 

 

3. 쿠버 네티스의 장점

  • k8s
  • kubernetes
  • 쿠버네티스 : 오케스트레이션
  • - 환경설정 귀찮았는데, 이제 얘가 다 해줌
  • - 클러스터 // 마스터로 여러 개 관리 가능
  • - 상태 관리 // app01 이 컨테이너 개수는 10개 고정
  • - 스케쥴링 // 효율적인 메모리 관리
  • - 버전 관리 // 버전 업/다운 rollOut , rollback