5. 쿠버네티스 입문
쿠버네티스란?
쿠버네티스란?
- 구글의 주도로 개발된 컨테이너 운영 자동화를 위한 컨테이너 오케스트레이션 시스템
- 컨테이너 오케스트레이션에 필요한 API, CLI 도구를 함께 제공
- 컨테이너 호스트 관리, 서버 리소스를 고려한 컨테이너 배치, 스케일링, 로드 밸런서, 상태 모니터링 등의 기능을 제공
도커의 번성과 쿠버네티스의 탄생
- 도커는 컨테이너 배치 전략, 스케일 인/아웃, 서비스 디스커버리, 운용의 용이성이 어렵다는 단점이 존재함
- 2014년 OSS로 공개된 쿠버네티스는 구글이 컨테이너를 운영하며 얻은 지식을 바탕으로 탄생
- 많은 기업과 커뮤니티의 컨트리뷰터를 보유한 프로덕트라는 점에서 쿠버네티스는 많은 지지를 받고 있음
- 다양한 클라우드 플랫폼에서 쿠버네티스를 지원하기 시작
쿠버네티스 개요
쿠버네티스 개요
-
쿠버네티스 리소스는 애플리케이션 배포 구성을 위한 요소를 의미
-
쿠버네티스에서 다루는 리소스 목록
리소스 용도 노드 (Node) 쿠버네티스 클러스터에서 실행되는 컨테이너 배포 서버 네임스페이스 (Namespace) 쿠버네티스 클러스터 내부에서 생성하는 가상 클러스터 파드 (Pod) 컨테이너 집합체 단위로 컨테이너 실행 방법을 정의 레플리카셋 (ReplicaSet) 동일한 스펙의 여러 파드를 생성, 관리 디플로이먼트 (Deployment) 레플리카셋의 세대 관리 서비스 (Service) 파드 집합에 액세스하기 위한 경로 정의 인그레스 (Ingress) 서비스를 쿠버네티스 클러스터 외부로 공개 컨피그 맵 (ConfigMap) 설정 정보 정의, 파드에 공급 퍼시스턴트 볼륨 (PersistentVolume) 파드가 사용하는 스토리지의 크기와 유형을 정의 퍼시스턴트 볼륨 클레임 (PersistentVolumeClaim) 퍼시스턴트 볼륨을 동적으로 확보 스토리지 클래스 (StorageClass) 퍼시스턴트 볼륨이 확보한 스토리지 유형 정의 스테이트풀셋 (StatefulSet) 같은 스펙으로 고유성이 있는 여러 파드를 생성, 관리 데몬셋 (DaemonSet) 모든 Worker Node에서 단일 파드를 생성, 관리 잡 (Job) 상주 목적이 아닌 여러 파드를 생성하고 정상 종료 보장 크론 잡 (CronJob) cron 기법으로 스케줄링하여 실행되는 잡 시크릿 (Secret) 인증 정보 등 보안 데이터 정의 롤 (Role) 네임스페이스 내부에서 조작할 수 있는 쿠버네티스 리소스 규칙 정의 롤 바인딩 (RoleBinding) Role과 쿠버네티스 리소스 사용 유저 연결 클러스터 롤 (ClusterRole) Cluster 전체에서 조작할 수 있는 쿠버네티스 리소스 규칙 정의 클러스터 롤 바인딩 (ClusterRoleBinding) ClusterRole과 쿠버네티스 리소스 사용 유저 연결 서비스 어카운트 (ServiceAccount) 파드가 쿠버네티스 리소스를 조작할 때의 계정
쿠버네티스 클러스터와 노드
쿠버네티스 클러스터와 노드
-
쿠버네티스 클러스터(cluster) 란 쿠버네티스의 다양한 리소스를 관리하는 집합 그룹을 의미
-
클러스터에서 가장 큰 단위는 노드(Node) 이며 노드는 클러스터에서 등록된 컨테이너의 호스트로 컨테이너 배포에 사용됨
-
클러스터에는 전체를 관리하는 서버인 컨트롤 플레인이 적어도 하나 이상 배치됨
-
클러스터 구성은 다음과 같이 두 그룹으로 구성됨
- 컨트롤 플레인 노드
- 워커 노드
-
쿠버네티스는 노드의 리소스 상태와 배치 전략에 따라 컨테이너를 적절하게 배치하는 기능이 존재
-
kubectl get nodes명령어를 통해 클러스터에서 사용하는 노드의 리스트를 확인 가능 -
컨트롤 플레인을 구성하는 관리 컴포넌트
컴포넌트명 역할 kube-apiserver 쿠버네티스의 API를 공개하는 컴포넌트로 kubectl명령어로 리소스를 조작함etcd 높은 가용성의 분산 key-value 스토어로 클러스터의 백업 스토어로 사용 kube-scheduler 노드를 모니터링하고 컨테이너를 배치할 최적의 노드를 선택 kube-controller-manager 리소스를 제어하는컨트롤러 실행 -
클라우드 기반 쿠버네티스에서 노드는 GCP의 GCE, AWS의 EC2 인스턴스 등으로 구성
-
온프레미스 환경에서는 컨트롤 플레인이 단일 장애 지점이 되지 않도록 다중 컨트롤 플레인으로 3대 이상 배치하는 것을 권장
참고 자료
네임스페이스
네임스페이스
- 클러스터 안에 삽입할 수 있는 가상의 클러스터
- 클러스터 생성 시 다음의 기본 네임스페이스가 생성됨
defualt: 기본적으로 생성되는 네임스페이스로 별도의 네임스페이스를 생성하지 않고 새 클러스터를 사용할 수 있음kube-node-lease: 각 노드의 연관된 리스 오브젝트를 갖고 있으며kubelet이 헬스 체크를 통해
컨트롤 플레인이 노드의 장애를 탐지하는데 사용kube-public: 모든 클라이언트(인증되지 않은 클라이언트 포함) 가 읽기 권한으로 접근 가능kube-system: 쿠버네티스 시스템에서 생성한 오브젝트를 위한 네임스페이스
- 네임스페이스별로 조작 권한을 설정할 수 있음
kubectl get namespace명령어를 통해 네임스페이스 조회
여러 개의 네임스페이스를 사용하는 경우
- 네임스페이스는 여러 개의 팀이나 프로젝트에 걸친 사용자가 많은 환경에 사용하도록 개발됨
- 사용자가 거의 없거나 수 십명 정도의 유저가 사용하는 환경에서는 네임스페이스가 필요하지 않음
- 각 쿠버네티스 리소스는 하나의 네임스페이스만 존재
- 동일한 네임스페이스 내에서 리소스를 구별하려면 레이블을 사용
- 프로덕션 레벨의 클러스터에서는
default네임스페이스 사용을 지양할 것