쿠버네티스가 뭘까?

귤쳥·2022년 7월 12일
0
post-thumbnail

쿠버네티스,, 아시나요?

쿠버네티스 많이 들어봤지만 대충 찾아볼떄 너무 어려워 보여서 넘겨왔다. 하지만 이제 대부분의 기업에서 사용한다. 이제 정말 뭔지 알아볼 떄가 됐다!

컨테이너(Container)

어떤 환경에서도 어플리케이션을 실행할 수 있도록 필요한 모든 요소를 포함하는 소프트웨어 패키지 (실행하는 컴퓨터의 옵션을 신경쓸 필요가 없어짐)

컨테이너 런타임 (Container Runtime)

컨테이너를 쉽게 다운로드 받거나 공유하고 구동할 수 있는 도구

ex) 도커(컨테이너 규격의 표준화로 다른 컨테이너 런타임들도 도커 컨테이너 사용가능)

컨테이너 이미지

컨테이너 환경을 묶어서 배포하는 것

서버 프로그램, 소스코드, 라이브러리, 컴차일된 실행파일을 묶은 형태

→ 의존성파일 컴파일하거나 여러가지를 설치할 필요가 없는 상태의 파일

오케스트레이션(Orchestration)

데이터베이스, 웹 프론트 등 여러 컨테이너를 다수의 호스트에 배치할 때 다수의 컨테이너 및 사용하는 환경설정을 관리하는 것

쿠버네티스

컨테이너 런타임을 통해 컨테이너를 오케스트레이션 하는 도구

(여러 서버에 컨테이너를 분산해서 배치, 문제가 생긴 컨테이너 교체, 비밀번호, 환경설정 관리)

모놀리식X (주로 MSA)

What kubernetes can do

  • 서비스 디스커버리와 로드 밸런싱 쿠버네티스는 DNS name을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 expose할 수 있다. 컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 배포가 안정적으로 이루어질 수 있다.
  • 스토리지 오케스트레이션 쿠버네티스를 사용하면 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재 할 수 있다.
  • 자동화된 롤아웃과 롤백 쿠버네티스를 사용하여 배포된 컨테이너의 원하는 상태를 서술할 수 있으며 현재 상태를 원하는 상태로 설정한 속도에 따라 변경할 수 있다. 예를 들어 쿠버네티스를 자동화해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있다.
  • 자동화된 빈 패킹(bin packing) 컨테이너화된 작업을 실행하는데 사용할 수 있는 쿠버네티스 클러스터 노드를 제공한다. 각 컨테이너가 필요로 하는 CPU와 메모리(RAM)를 쿠버네티스에게 지시한다. 쿠버네티스는 컨테이너를 노드에 맞추어서 리소스를 가장 잘 사용할 수 있도록 해준다.
  • 자동화된 복구(self-healing) 쿠버네티스는 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체하며, '사용자 정의 상태 검사'에 응답하지 않는 컨테이너를 죽이고, 서비스 준비가 끝날 때까지 그러한 과정을 클라이언트에 보여주지 않는다.
  • 시크릿과 구성 관리 쿠버네티스를 사용하면 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리 할 수 있다. 컨테이너 이미지를 재구성하지 않고 스택 구성에 시크릿을 노출하지 않고도 시크릿 및 애플리케이션 구성을 배포 및 업데이트 할 수 있다.

발생배경

예전방식 → pc에 os를 깔고 그 위에 프로그램 설치

가상화 배포 → 가상머신은 완전한 컴퓨터 이므로 무거움 (하이퍼바이저 : 하나의 시스템 상에서 가상 컴퓨터 어러개 구동하게하는 중간계층)

컨테이너 중심 배포 → 하나의 OS사용, OS하단이 어떻게 동작하는지 관심X

쿠버네티스 제공 기능

  • Agile 애플리케이션 생성과 배포: VM 이미지를 사용하는 것에 비해 컨테이너 이미지 생성이 보다 쉽고 효율적임.
  • 지속적인 개발, 통합 및 배포: 안정적이고 주기적으로 컨테이너 이미지를 빌드해서 배포할 수 있고 (이미지의 불변성 덕에) 빠르고 효율적으로 롤백할 수 있다.
  • 가시성(observability): OS 수준의 정보와 메트릭에 머무르지 않고, 애플리케이션의 헬스와 그 밖의 시그널을 볼 수 있다.
  • 개발, 테스팅 및 운영 환경에 걸친 일관성: 랩탑에서도 클라우드에서와 동일하게 구동된다.
  • 애플리케이션 중심 관리: 가상 하드웨어 상에서 OS를 실행하는 수준에서 논리적인 리소스를 사용하는 OS 상에서 애플리케이션을 실행하는 수준으로 추상화 수준이 높아진다.
  • 느슨하게 커플되고, 분산되고, 유연하며, 자유로운 마이크로서비스: 애플리케이션은 단일 목적의 머신에서 모놀리식 스택으로 구동되지 않고 보다 작고 독립적인 단위로 쪼개져서 동적으로 배포되고 관리될 수 있다.
  • 리소스 격리: 애플리케이션 성능을 예측할 수 있다.
  • 자원 사용량: 리소스 사용량: 고효율 고집적.

💡 쿠버네티스 v1.20부터 도커 지원 중단

그동안 쿠버네티스에서 도커를 컨테이너 런타임으로 사용
2020년 12월 쿠버네티스는 도커를 먼테이너 런타임으로 사용하는 것 중지
(쿠버네티스가 컨테이너 런타임과 통신하는 CRI표준을 도커에서 사용안해서)
→해결을 위해 도커심을 사용(DockerShim) 애초에 임시방편
→배포 속도가 느려지고 유지관리에 부담이 되어서 지원중단
CRI 호환되는 컨테이너 런타임을 이용(도커에서 분리된 containerd)

도커는 쓸모 없을까?
→ 도커로 만든 컨테이너 이미지는 사용가능, 실행하는 컨테이너 런타임만 바꾸면 됨

출처

https://fastcampus.co.kr/story_article_kubernetes

https://www.samsungsds.com/kr/insights/220222_kubernetes1.html?moreCnt=6&backTypeId=insight&category=cat_1222814

https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/

profile
혼긱 CE의 이제 막 시작하는 코딩

0개의 댓글