[KUBERNETES] 02. 쿠버네티스란?
카테고리: KUBERNETES
태그: kubernetes
[KUBERNETES] 02. 쿠버네티스란?
🔔 쿠버네티스란?
컨테이너 오케스트레이션 오픈소스 플랫폼으로, 1주일에 수십억 개의 컨테이너를 생성하는 구글의 내부 시스템으로 사용하던 보그(borg)를 기반으로 2014년에 프로젝트를 시작했고 여러 주요 클라우드 벤더와 온프레미스 솔루션 업체에서 쿠버네티스를 지원하여 빠르게 발전하였습니다.
이후 구글이 CNCF(Cloud Native Computing Fo undation)에 기부함으로써 오픈소스 프로젝트가 되어 컨테이너 오케스트레이션 툴의 왕좌에 오르게 되었다.
쿠버네티스는 단순히 컨테이너 플랫폼이 아닌 마이크로서비스, 클라우드 플랫폼을 지향하고 컨테이너로 이루어진 것들을 손쉽게 담고 관리할 수 있는 그릇 역할과 서버리스, CI/CD, 머신러닝 등 다양한 기능이 쿠버네티스 플랫폼 위에서 동작한다.
🔔 쿠버네티스 특징
(a) 다양한 배포 방식

| 배포 방식 | 설명 |
|---|---|
| Deployment | 새로운 버전의 애플리케이션을 다양한 전략으로 무중단 배포 |
| StatefulSet | 실행 순서를 보장하여, 순서나 데이터가 중요한 경우 사용 |
| DaemonSet | 로그나 모니터링 등 모든 노드에 설치가 필요한 경우 사용 |
| Job/CronJob | 배치성 작업에 사용 |
(b) 다양한 클라우드 업체 및 미들웨어의 지원
-
외부 스토리지를 컨테이너 내부 디렉토리에 마운트하여 사용하기 위해 클라우드 별로 적절한 API를 사용하는 모듈이 필요하다 이때 쿠버네티스는 Cloud Controller를 이용하여 클라우드와 손쉽게 확장할 수 있으며 AWS, 구글 클라우드, 마이크로소프트(MS) 애저(Azure) 등 수십 개의 클라우드 업체에서 모듈을 제공하기 때문에 관리자는 동일한 설정 파일을 서로 다른 클라우드에서 동일하게 사용할 수 있다.
-
쿠버네티스는 독립적으로 하나의 플랫폼으로 사용할 수 있지만 외부 에코시스템과의 연계도 활발히 이루어지고 있으며, 많은 미들웨어가 쿠버네티스를 지원하는 추세이다 다음은 쿠버네티스에서 지원하는 미들웨어와 서비스의 예를 나열한 것이다.
종류 설명 Ansible 쿠버네티스에 컨테이너 배포 Apache Ignite 쿠버네티스 서비스 디스커버리를 사용한 클러스터 생성과 스케일링 Fluentd 쿠버네티스에 컨테이너 로그 전송 GitLab CI/CD를 구현하기 위한 일련의 다양한 도구와 쿠버네티스의 통합 Jenkins 잡(Job) 실행 시 잡 실행자용 컨테이너를 쿠버네티스에 배포 OpenStack 클라우드 사업자와 연계한 쿠버네티스 구축 Prometheus 쿠버네티스 모니터링 Spark 잡을 쿠버네티스에서 네이티브로 실행(YARN 대체) Spinnaker 쿠버네티스에 컨테이너 배포 Kubeflow 쿠버네티스에 ML 플랫폼 배포 Rook 쿠버네티스에 분산 파일시스템 배포 Vitess 쿠버네티스에 MySQL 클러스터 배포
(c) Namespace & Label

쿠버네티스에서는 클러스터 내의 리소스들을 논리적으로 구분할 수 있는 【네임스페이스】라는 기능을 제공하며 k8s 오브젝트, 사용자 권한, 컴퓨팅 리소스를 개별적으로 할당하여 하나의 가상 공간처럼 관리할 수 있다.
-
예를 들어 하나의 클러스터에 개발/운영/테스트 환경 모두 운영하게 되면 혼란이 생길 수 있어 네임스페이스를 통해서 각각의 환경을 논리적인 분리하여 운영할 수 있다.
-
주의할 점은 네임스페이스는 논리적으로 분리된 것이지 물리적으로 분리된 것이 아니기 때문에 다른 네임스페이스 간의 파드라도 접근하여 통신이 가능하다는 점이다.
-
네트워크 정책을 통해서 네임스페이스 간의 통신을 막을 수 있지만, 이럴 경우 높은 수준의 분리 정책을 적용하기보다는 클러스터 자체를 분리해 운영하는 것을 권장한다.
라벨(Label)은 오브젝트를 식별하기 위한 Key-Value 형식으로 된 임의의 문자열로, 각 오브젝트는 라벨을 가질 수 있고 라벨 검색 조건에 따라서 특정 라벨을 가지고 있는 오브젝트만 필터링하여 선택할 수 있다.
(d) RBAC (Role-Based Access Control)

-
쿠버네티스는 역할(Role) 기반으로 시스템의 권한을 관리하며, 특정 사용자(User)와 역할(Role) 두 가지를 조합하여 사용자에게 특정 권한을 부여할 수 있다.
-
역할(Role)은 특정 API, 리소스(Pod, Deploy 등), 사용자 권한을 매니페스트 파일에 명시해둔 규칙의 집합이 되며 특정 네임스페이스에 대한 권한을 관리한다.
【롤바인딩(Rolebinding)】
-
롤바인딩은 역할(Role)과 특정 사용자(User)를 묶어주는 역할을 수행하고, 지정한 사 용자들에 한해서 역할(Role)에 명시한 규칙들을 기준으로 권한을 사용할 수 있도록 권 한을 관리한다.
- 예를 들어 개발팀에게는 개발 전용 네임스페이스를 따로 만들어주고, 개발 전용 네임스 페이스만 컨트롤할 수 있는 계정을 부여하는 등의 일이 가능해진다.
【클러스터 롤바인딩(Cluster Rolebinding)】
-
클러스터 역할(Clouster Role)은 특정 API, 리소스, 사용 권한을 매니페스트 파일에 명시해둔 규칙 집합으로 클러스터의 전체 사용 권한을 관리한다.
- 클러스터 롤바인딩은 사용자와 클러스터 롤을 묶어주는 역할을 수행하고, 지정한 사용 자들에 한해서 롤에 명시한 규칙들을 기준으로 권한을 사용할 수 있도록 관리한다.
댓글 남기기