본문 바로가기

DevOps/[Kubernetes]

[Kubernetes] 쿠버네티스(Kubernetes) 란?

반응형

 

INTRO


 

쿠버네티스에 대해 설명한다.

 

 

 


🚦본 포스팅은 아래 Kubernetes Document를 기반으로 작성되며, 필자의 경험과 주관을 가미한 것입니다.

 

 

1. 쿠버네티스(Kubernetes) 란?

쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다.
쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해준다.

('K'와 's' 사이의 문자 수를 나타내는 8을 사용하여 K8s로 줄여 쓰기도 함)

 

- MSA 개념이 전반적으로 확대되고 있고, 

- 클라우드 환경의 발전으로 개발자와 인프라담당자의 기준이 점차 모호해지고 있다.

- 또한 배포 환경이 편리해짐에 따라 한 사람이 관리해야하는 포인트가 늘어나고 있다.

- 이러한 한계치를 계속 돌파하다보니 현재의 Kubernetes 가 탄생되었다고 생각한다.

 

전통적인 배포 방식

- 기존에는 하나의 서비스를 배포한다고 했을 때

- On-Premise 서버에 관련 프로그램 설치 -> 기동 -> 모니터링 과 같은 절차를 거쳤다.

- 서비스를 업데이트 할 경우에는 위와같은 절차를 다시 하나씩 수행하며 재배포를 거쳤으며,

- 재배포 시에는 서버 하드웨어 환경 체크, OS와 리소스 관리, WAS, Web serve 재기동 등

- 다방면으로 운영자를 힘들게 함.

- 리소스가 부족하여 서버를 분리해야 할 경우에도,

- 물리적인 장비가 추가되고 또 다시 위와 같은 배포 절차를 거쳐야함

 

가상화 배포 방식

- 기술이 점차 발전하면서 이를 하나로 묶어 가상화된 서버에 배포-운영하기 시작했다.

- 하나의 물리 서버에 여러 가상 서버를 구축할 수 있게 되었으며,- 이로 인해 서버의 리소스 관리는 한층 편리해졌고 보안성도 강화되었다.

- 서버 한대를 손쉽게 생성/수정/삭제할 수 있게 되었지만,

- 항상 사람들은 보다 쉽게, 보다 효율적인 환경을 원하는 법..

 

 

컨테이너 배포 방식

- 격리된 각각의 환경에서 어플리케이션이 실행 될 모든 것들이 준비되어있는 공간을 만들고

- 이를 '이미지' 라는 단위로 생성하여 배포하면

- '컨테이너' 환경에서 이 이미지가 기동되며 개발된 어플리케이션이 동작하게된다.

- 이는 가상화 배포 방식에 비해 매우 쉽고 편리하며,

- Micro Architecture환경을 구축하기 좋다.

- 안정적이고 빠르고 효율적이다...

 

그래서 쿠버네티스란?

- 이렇게 만들어진 컨테이너 환경은 분명 이전 배포환경보다 훨씬 편리하고 쉬워졌다.

- 이제 이 컨테이너에 배포한 어플리케이션을

- 무중단 배포, 리소스 확장, 자동 복구등의 기준들을 사용자가 어느 공간에 '선언' 해놓고,

- 이 기준에 맞게 알아서 관리해주는 프로그램이 있다면 얼마나 더 편리해질까?

- 를 해결한 것이 쿠버네티스이다.

 

 

 

2. 쿠버네티스의 장점

위 장점들에 대해 간략히 적어보면,

 

1. 서비스 디스커버리와 로드 밸런싱

- 기존 도커/컨테이너 환경을 생각해보면,

- 외부에서 컨테이너에 접속하기 위해선 별도의 port binding 이 필요했었다.

- 이 작업을 Service, Ingress 가 대체해주며, 로드 밸런싱도 지원.

 

2. 스토리지 오케스트레이션

- 스토리지의 종류는 매우 다양하다. ( AWS S3, EBS, EFS, 물리적인 NAS 등..)

- 이러한 종류의 스토리지를 StorageClass라는 오브젝트를 선언하여 연동하고,

- 이를 PV, Hostpath 등의 볼륨 방식으로 접근/사용 가능케 한다.

- 이러한 과정들의 자동화가 잘 되어있다.

 

3. 자동화된 롤아웃과 롤백

- 배포 시 롤링업데이트, 배포 도중 중지 후 재시작, 특정 버전으로 롤백 등의 기능을 제공한다.

 

4. 자동화된 빈 패킹

- 이부분은 실제 와닿게 경험해 본 적은 없지만,

- 리소스를 최적으로 관리하는 기능이 있어 낭비되는 비용을 최소화한다고 보면 될 듯

 

5. 자동화된 복구

- 컨테이너 배포에 실패하게되면, 이를 '선언' 해놓은대로 다시 재시작하여 실행한다.

- 일반적으로 아래와 같은 사유로 실패가 발생(클라우드 전문가이신 '아리수'님의 블로그에서 일부 발췌한 내용)

  • 쿼터 부족
  • Readiness probe 실패
  • 이미지 가져오기 에러
  • 권한 부족
  • 제한 범위 초과
  • 앱 실행 조건을 잘못 지정

https://arisu1000.tistory.com/27833

- 보통 이러한 실패가 발생하면 describe / logs 명령어 등을 통해 실패 사유를 파악하는 것 부터 시작..

 

6. 시크릿과 구성 관리

- Spring의 application.yaml,

- Nginx의 nginx.conf 등과 같이 배포 환경에 따른 환경변수를 고려해야하는 경우가 많다.

- 이 경우 configmap 오브젝트를 통해 관리가 가능하며

- 또한 저장소 인증 정보, 토큰, 암호 등을  저장하여 사용할 경우에는

- secret 오브젝트를 사용하여 관리가 가능하다.

 

 

 

마무리

쿠버네티스는 사실 직접 구축/운영 해보면서 알아가는것이 가장 좋은 학습방법이라고 생각한다.

 

하지만 이 환경을 이제 막 입문한 사람이 제로 베이스에서 혼자서 구축하는것은 사실상 불가능에 가깝다

(서버 마련, etcd 구축 등.. 많은 것들을 해야한다)

 

아래 플랫폼들에서는 운영 환경을 편리하게 구축하도록 도와준다.

(그러나 비용이 발생한다..)

  Amazon EKS: Amazon Elastic Kubernetes Service
  AKS: Azure Kubernetes Service
  GKE: Google Kubernetes Engine
  Red Hat: 쿠버네티스를 wrapping하여 Openshift라는 쿠버네티스 기반의 플랫폼을 제공.

 

그래서 공부나 토이프로젝트 같이 개인적으로 구축하는 경우에는 minikube나 docker for desktop, k3s와 같은 배포판을 개인 PC에 설치하여 경험해보는것이 좋다.

 

 

 

 

 

-퍼가실 때는 출처를 꼭 같이 적어서 올려주세요!

 

반응형