[kubernetes] #1 - 소개 및 개요
1. 쿠버네티스란?
쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다.
쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해준다.
쿠버네티스는 크고, 빠르게 성장하는 생태계를 가지고 있다.
쿠버네티스 서비스, 기술 지원 및 도구는 어디서나 쉽게 이용할 수 있다.
특히나 벤더나 플랫폼에 종속되어 있지 않고, 대부분의 클라우드에 사용가능하며,
여러 퍼블릭 클라우드나 온프레미스/퍼블릭 클라우드에도 유용하게 사용되어 많이 각광 받게 되었습니다.
컨테이너와 연관이되어 생각을 많이 하게되는데, 쿠버네티스는 명칭처럼 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했다.
말 그대로 컨테이너엔진들을 지원하며, 여러 컨테이너들을 집합시켜 관리합니다.
항구를 떠올리시면 좀 더 이해가 좋습니다.
또한 K8s라는 표기는 "K"와 "s"와 그 사이에 있는 8글자를 나타내는 약식 표기이다.
구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화했다.
위의 쿠버네티스의 정의만 보면 뭐 컨테이너를 관리하기위한 플랫폼이고, 뭐 이식성 있고 좋다고.. 합니다.
감이 잘 안올 수 있지만, 쿠버네티스가 나타난 배경을 보게되면 좀 더 이해하실수 있을겁니다.
2. 쿠버네티스 배경 (여정)
전통적인 배포 시대 (레거시 시스템):
초기 조직은 애플리케이션을 물리 서버에서 실행했었다. 한 물리 서버에서 여러 애플리케이션의 리소스 한계를 정의할 방법이 없었기에, 리소스 할당의 문제가 발생했다. 결국 레거시 시스템에서 모든 애플리케이션을 하기때문에 무리가 가면 장애와 비용문제가 다발적으로 발생합니다. (부가적으로 한개가 메모리를 다 잡고 있으면 다른것들도 문제가 된다.)
가상화된 배포 시대 (VM의 도입): 그 해결책으로 가상화가 도입되었다. 이는 단일 물리 서버의 CPU에서 여러 가상 시스템 (VM)을 실행할 수 있게 한다. 가상화를 사용하면 VM간에 애플리케이션을 격리하고 애플리케이션의 정보를 다른 애플리케이션에서 자유롭게 액세스 할 수 없으므로, 일정 수준의 보안성을 제공할 수 있다.
가상화를 사용하면 물리 서버에서 리소스를 보다 효율적으로 활용할 수 있으며, 쉽게 애플리케이션을 추가하거나 업데이트할 수 있고 하드웨어 비용을 절감할 수 있어 더 나은 확장성을 제공한다. 가상화를 통해 일련의 물리 리소스를 폐기 가능한(disposable) 가상 머신으로 구성된 클러스터로 만들 수 있다.
각 VM은 가상화된 하드웨어 상에서 자체 운영체제를 포함한 모든 구성 요소를 실행하는 하나의 완전한 머신이다.
컨테이너 개발 시대 (이것이 대해적시대를 열었지): 컨테이너는 VM과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유한다. 그러므로 컨테이너는 가볍다고 여겨진다. VM과 마찬가지로 컨테이너에는 자체 파일 시스템, CPU 점유율, 메모리, 프로세스 공간 등이 있다. 기본 인프라와의 종속성을 끊었기 때문에, 클라우드나 OS 배포본에 모두 이식할 수 있다.
컨테이너는 다음과 같은 추가적인 혜택을 제공하기 때문에 인기가 있다.
- 기민한 애플리케이션 생성과 배포: VM 이미지를 사용하는 것에 비해 컨테이너 이미지 생성이 보다 쉽고 효율적임.
- 지속적인 개발, 통합 및 배포: 안정적이고 주기적으로 컨테이너 이미지를 빌드해서 배포, 롤백 가능
- 개발과 운영의 관심사 분리
- 가시성(observability)
- 개발, 테스팅 및 운영 환경에 걸친 일관성: 랩탑에서도 클라우드에서와 동일하게 구동된다.
- 클라우드 및 OS 배포판 간 이식성: Ubuntu, RHEL, CoreOS, 온-프레미스, 주요 퍼블릭 클라우드 모두 구동 가능 (개인적으로 이게 가장 큰 이유같다)
- 애플리케이션 중심 관리: 가상 하드웨어 상에서 OS를 실행하는 수준에서 논리적인 리소스를 사용하는 OS 상에서 애플리케이션을 실행하는 수준으로 추상화 수준이 높아진다.
- 느슨하게 커플되고, 분산되고, 유연하며, 자유로운 마이크로서비스: 애플리케이션은 단일 목적의 머신에서 모놀리식 스택으로 구동되지 않고 보다 작고 독립적인 단위로 쪼개져서 동적으로 배포되고 관리될 수 있다.
- 리소스 격리: 애플리케이션 성능을 예측할 수 있다.
- 자원 사용량: 리소스 사용량: 고효율 고집적
3. 쿠버네티스 기능
컨테이너를 통해 애플리케이션을 독립적으로 포장하고 꾸릴수 있고 아래와 같이 많은 기능과 장점들이 있기 때문에, 쿠버네티스를 사용하게 됩니다.
- 배포 계획에 맞춰 신속하게 애플리케이션 배포
. 컨테이너 개수, CPU, 메모리, 저장공간, 네트워크 접근 제어, 로드밸런싱 설정 가능
- 가동 중인 애플리케이션 스케일 업/다운
- 새로운 버전의 애플리케이션 무정지로 업그레이드 가능 (클라우드의 속성)
- 하드웨어 가동률을 높여 자원 낭비를 줄임
- 시크릿, 구성관리: 암호 관리 및 설정 관리 용이
- 다양한 환경에서 쿠버네티스 이용가능
. 퍼블릭 클라우드
. 프라이빗 클라우드
. 멀티 클라우드
. 하이브리드 클라우드
. 온프레미스
- 지속적인 변화에 대한 빠른 대응과 유연성, 확장성
. MSA 애플리케이션 환경에 최적화
. 느슨한 결합에 의한 유연, 교체 용이
. 다양한 애플리케이션 혼합하여 클러스터 구성
. 저장소, 로드밸런서의 동적 프로비저닝
. 클라우드 API와 연동
- 고가용성과 성능 관리
. 서버 정지 시 애플리케이션 재배포 자동화
. 필요한 인스턴스 개수 조절 (레플리카)
. 높은 부하 자동 스케일
. 인스턴스 기동 관리
앞선 내용처럼 쿠버네티스는 컨테이너들의 작은 단위를 클러스터링하며,
하나의 전체 서비스 운영이 쉽게 가능해서 사용합니다.
결론적으로, 클러스터로 이만한게 없습니다..ㅋㅋ;;
다음글은 쿠버네티스의 기본 이해를 포스팅할 예정입니다. (많관부~)
- 참고 사이트
https://bcho.tistory.com/1255?category=731548
https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/