[Infra] 쿠버네티스(kubernetes)(1) 쿠버네티스 구조(Kubernetes architecture)

업데이트:

쿠버네티스(kubernetes)(1) 쿠버네티스 구조(Kubernetes architecture)

참고링크

운영체제 프론트엔드 백엔드 데이터베이스 인프라
리눅스구조 js필터 아파치에러로그 행삭제 아파치스쿱
프로세스 헬로월드 웹서버개념 ES기초 로그분석
네임스페이스 프로젝트생성 아파치설치 MySQL기초 beeline
디렉토리 헤더생성 flask연동 큐브리드 하둡기초
리다이렉션 async-get 장고MsSQL연결 null공백 나이파이
쓰레드 async-post 장고MySQL연결 MySQL설치(win) 백본
라즈베리파이설치 로그인페이지 장고inpectdb MySQL테이블생성 제플린
OSI7계층소개   장고read   SSL인증
OSI1계층   장고insert   커버로스
OSI2계층   장고put   도커개념
OSI3계층   장고del   도커설치
OSI4계층   flask한글요청   도커기초
OSI5,6,7계층       도커이미지
DNS서버       컨테이너네트워크
DHCP       도커API
bashrc       도커컴포즈
bash       도커볼륨
ifconfig       장고이미지
소켓프로그래밍       도커postgre
리눅스유저생성       도커이미지삭제
netstat포트열기       도커Redis
컴파일러       k8s구조
운영체제vs커널       k8s설치
작업스케쥴링       k8s서비스배포
디스크추가       POD네트워크
aws유저추가       퍼시스턴트볼륨
기초명령어       k8s에러
포트번호        

참고 링크

1. 쿠버네티스 전체 구조

일단 처음으로 쿠버네티스의 전체 구조를 보겠습니다. 쿠버네티스는 k8s라고 줄여서도 부릅니다. 쿠버네티스는 기본적으로 마스터 노드(Master node)와 워커 노드(worker node)로 구성되어 있습니다. 마스터노드는 워커노드를 관리하는 역할을 합니다. 개발자는 마스터노드에 접속해서 주로 작업하고 사용자는 워커노드의 kubeproxy로 접속하게 됩니다.

위와 같은 전체 구조에서 쓰인 용어들을 하나씩 알아봅니다.

  • kubectl: 쿠버네티스 클러스터를 조작하기 위한 커맨드 라인 인터페이스(CLI) 입니다.

  • kube-api server: kubectl과 같은 클라이언트로부터 오는 요청을 받고 API 오브젝트를 구성합니다.

  • kube scheduler: 쿠버네티스의 스케쥴러이며 새로 생성된 파드가 실행될 노드를 선택합니다. 스케쥴링이란 파드를 실행할 노드를 정하는 것을 의미합니다.

  • kube controller manager: 컨트롤러를 구동하는 마스터노드의 컴포넌트

  • etcd: 쿠버네티스 클러스트를 관리하기 위해 필요한 모든 데이터가 저장되는 곳.

  • kubelet: 파드와 컨테이너의 실행, 파드와 노드의 상태를 kube API서버에 보고 등을 수행합니다. 쿠버네티스에서는 컨테이너만을 독자적으로 실행하는 것은 불가능하고 반드시 파드(pod)내에서 실행해야 합니다. 파드는 한 개 혹은 여러 개의 컨테이너를 담을 수 있습니다.

  • kube proxy: 로드밸런싱 기능 제공, iptables 규칙 관리, 서비스명, clusterIP를 내부 DNS에 등록

2. 마스터 노드

마스터노드를 자세히 보면 다음 그림과 같습니다.

마스터 노드는 다음과 같은 역할을 합니다.

  • 클라이언트의 요청을 받고 실행

  • 컨테이너를 파드 단위로 스케줄링 및 삭제

  • 파드의 컨트롤러 기능과 외부 리소스 관리



3. 파드(pod)

파드(pod)는 쿠버네티스에서 컨테이너를 실행하는 최소 단위 입니다. 파드는 하나 혹은 여러개의 컨테이너를 포함합니다. 그리고 특정 파드에 속하는 컨테이너들은 같은 노드에서 작동합니다. 즉, 파드는 서로 다른 노드에 걸쳐서 존재하지는 않고 하나의 노드에 존재한다는 것을 의미합니다.

특정 파드에 존재하는 컨테이너들 사이에서는 다음과 같은 것이 가능합니다.

  • 파드 내부의 컨테이너들은 자신이 속한 파드의 IP와 포트번호를 공유합니다.

  • 파드의 내부 컨테이너들은 localhost와 통신할 수 있습니다.

  • 파드의 내부 컨테이너들은 서로 통신할 수 있습니다.

  • 파드의 내부 컨테이너들은 서로 파일 시스템을 공유할 수 있습니다.

위와 같은 기능은 서로 다른 파드에 있는 컨테이너끼리는 불가능합니다.

파드는 일시적인 존재입니다. 즉, 같은 이름으로 몇번이고 파드를 실행해도 이전 컨테이너에서 수행한 변경 이력은 남지 않습니다. 파드는 실행할 때마다 초기 이미지 상태에서 시작합니다.

파드의 IP는 실행시 부여되고 종료시 회수됩니다. 따라서 고정적이지 않습니다. 따라서 파드에 요청을 보내고 싶을 때는 IP로 요청하면 안되고 서비스를 이용해야 합니다.