어제는 AWS에 관해 배웠고 오늘은 클라우드를 관리하기 위한 쿠버네티스에 대해 배웠습니다.
컨테이너는 OS 가상화 기술로 프로세스를 격리하고 리눅스 커널을 공유하는 기술을 말합니다. 즉, 나눠서 사용할 수 있게 해줘서 컨테이너라는 이름이 붙었습니다.
AWS에서는 EC2를 통해 OS를 선택해서 가상 클라우드를 만들었습니다. 해당 OS에서 이제 애플리케이션을 설치해서 프로그램을 사용했습니다. 반면 컨테이너는 Guset OS와 하이퍼바이저가 없습니다. 하이퍼바이저 대신에 컨테이너 엔진을 사용하고 물리적 하드웨어 장치에 OS를 설치하고 그 후에 컨테이너 엔진을 설치하면 컨테이너 엔진이 각 각의 애플리케이션을 설치할 수 있게 해줍니다.
Monolithic Architecture 방식은 고용량 고성능의 단일 서버로 구성하는 방식입니다.
Micro Service Architecture는 Monolithic과 비교했을 때 더 작은 서버들의 집합체로 구성된 방식을 말합니다.
도커는 컨테이너 엔진중 하나로 컨테이너를 실행하고 관리하는 도구입니다. 도커는 도커허브라는 공개된 저장소서버를 통해 컨터니너 자료들을 관리합니다.
Dockerfile은 컨테이너 이미지를 생성하기 위한 레시피 파일입니다. 이 파릴에 이미지 생성 과정의 문법에 따라 작성하여 저장을합니다.
도커이미지는 url 방식으로 관리하고 태그를 붙일 수 있습니다.
<Namespace>/<ImageName>:<Tag> 의 형태를 가집니다.
docker.io/library/nginx:latest
nginx:latest
nginx
이처럼 사용할 수 있습니다.
Namespace는 이미지가 저장되어 있는 저장소를 의미합니다.
슬레시뒤에 나온 ImageName은 이미지 이름이 옵니다.(w10, mysql 등)
: 뒤에는 태그명이 오는데 태그에 latest라고 되어있는데 이것은 최신버전을 뜻합니다. 태그명에는 버전을 표기하거나 그냥 아무거나 표기할 수 있습니다.
두번째 줄의 사용법은 앞에 Namespace가 생략이 되었는데 생략되었다면 default로 도커허브에 저장되어 있는 nginx를 뜻하게 됩니다.
도커 이미지에는 private 경로도 있습니다. 이는 Namespace부분에 해당 서버주소 및 포트번호 등을 사용해서 표기합니다.
private:10000/myniginx:latest처럼 사용할 수 있습니다.
도커의파일을 빌드하고 이미지를 push하면 도커허브에 올라가고 pull명령어를통해 이미지파일가져올 수 있습니다 그리고 이미지파일을 run하면 컨테이너에서 실행이 됩니다.
다수의 컨테이너를 다수의 시스템에서 각각의 목적에 따라 총괄적으로 자동화해서 관리하는 것을 의미합니다. 컨테이너 오케스트레이션의 도구들을 보면 스케줄링, 장애복구, 검색 및 통신등이 있습니다.
컨테이너 오케스트레이터는 컨테이너 오케스트레이션을 해주는 도구입니다.
컨테이너 오케스트레이터의 배포 위치는 베어메탈, 가상머신, 온프레미스, 클라우드에 배포할 수 있습니다.
컨테이너형 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈 소스 시스템입니다. 쿠버네티스를 사용하는 이유는 높은 확장성과 오픈소스 도구의 장점이 있기 때문에 쿠버네티스를 많이 사용합니다.
쿠버네티스 클러스터는 Master Node 와 Worker Node을 묶어쥬는 역할을 합니다.
Master Node는 다른말로 Control Plane이라고도 합니다. Worker Node는 다른말로 Data Plane이라고 도합니다.
Master Node의 구성요소는 api server, etcd, c-m, sched이 있습니다.
API-Server는 API(명령어)를 사용할 수 있게 해주는 프로세스입니다.
Scheduler는 Pod의 생성 명령이 있을 경우 어떤 Node에 배포할지 결정합니다.
etcd는 모든 클러스터의 구성 데이터를 저장하는 저장소입니다.
컨테이너 런타임은 컨테이너를 실행하고 노드에서 컨테이너 이미지를 관리합니다.
각 노드의 에이전트입니다.
Addons 는 쿠버네티스에서 추가적으로 설치하여 쿠버네티스의 기능을 확장시킬 수 있는 도구입니다. 설치위치는 워크 노드의 하드에 저장됩니다.
Container Runtime을 설치합니다
쿠버네티스를 설치합니다
Master와 Worker을 연동합니다
쿠버네티스의 가장 기본적인 구성단위는 Object입니다. 가장 기본적인 오브젝트는 Pad, Service, Volume, Namespace가 있습니다. 오브젝트에는 Spec, Status 필드가 있습니다. Spec은 정의된 상태이고 Status는 현재 상태를 의미합니다.
YAML의 구조 혹은 JSON의 형태로 object를 관리할 수 있습니다. YAML의 구조를 보면 apiVersion은 연결할 API server의 버전을 명시해주고 kind는 리소스의 유형을 명시해주면 됩니다. metadata는 리소스가 기본 정보를 갖고 있는 필드(name, label, namespace등)을 명시해주고 spec은 배포되는 리소스의 원하는 상태를 명시해주면 됩니다.
kubectl은 쿠버네티스에 명령을 내리는 CLI입니다. kubectl의 명령구조는 kubectl [COMMAND] [TYPE] [NAME] [FLAGS]
형태를 가집니다. 오브젝트와 컨트롤러를 생성, 수정, 삭제할 수 있습니다.
클라우드는 정말 알아야되는 개념이 많다고 생각했습니다. 어제 오늘 배운 내용이 정말 기초중에 기초라 많은 충격을 받았습니다.
※공부하고 있어 다소 틀린점이 있을 수 있습니다. 언제든지 말해주시면 수정하도록 하겠습니다.
※용어에 대해 조금 공부 더 해서 수정하겠습니다.