본문 바로가기

DevOps & Cloud

클라우드 컴퓨팅 정리

728x90
반응형

1장)

클라우드 컴퓨팅: 네트워크 상에서 서버 리소스를 사용자가 필요한 만큼 사용할 수 있도록 한다.

클라우트 컴퓨팅의 인기: 접근성, 확장성, 유연성, 비용 절감 특히 온프레미스보다 도입 비용, 운용 비용이 낮다.

데이터 센터(데이터 호텔): 기업 내 서버, 네트워크, 스토리지 및 비즈니스 운영을 지원하는 IT장비가 위치하는 물리시설

수평적 확장: IT 자원의 할당이나 배포

수직적 확장: IT 자원이 더 높거나 낮은 사양의 자원으로 교체(일반적 X)

클라우드 컴퓨팅의 유리한 점: 경제성, 유연성, 가용성, 구축속도

IaaS: Infra as a Service(가상화된 컴퓨팅 리소스, 네트워크 등등 제공) - AWS, Azure, Google Cloud

PaaS: Platform as a Service(애플리케이션 개발 및 배포를 위한 플랫폼 런타임, 미들웨어, OS 제공) - google app engine, open shift

SaaS: SW as a Service(클라우드 애플리케이션을 서비스로 제공) - office 365, 구글 드라이브, 네이버 마이박스

퍼블릭 클라우드: 외부 사용자가 단기간에 저비용으로 이용, 외부 접속

프라이빗 클라우드: 자사 전용 환경으로 내부망으로 구성

멀티 클라우드: 사업자 두 개 이상으로 구성 - 높은 가용성, 비용 절감, 벤더 의존 회피, 보안 강화, 지역별 규제 준수

하이브리드 클라우드: 퍼블릭 클라우드와 프라비잇 클라우드와 온프레미스 연동

클라우드 보안 위협: 서비스 중단, 데이터 유출, 계정 탈취 및 손상, 다양한 네트워크 공격 및 서버 다운

클라우드 보안 거버넌스: 클라우드 환경에서 적절한 운영과 관리를 위한 정책, 프로세스, 절차 및 책임 정의, 리스크 관리, 보안 강화, 서비스 품질 관리, 법규 준수

클라우드 서비스 책임 분계선: 클라우드가 제공하는 만큼 사업자가 책임진다. IaaS가 책임이 가장 적고, SaaS가 책임이 가장 많다.

 

2장)

클라우드 서비스: 클라우드 사업자가 고객(기업)에게 제공하는 서비스

가상서버: 클라우드 서비스를 구성하는 기본요소

서버 가상화: 물리 서버가 가진 HW를 논리적으로 분리

하이퍼 바이저: 한대의 물리 서버에 여러 개의 가상 서버를 생성(성능 안 좋음)

베어 메탈: 한대의 물리 서버에 하나의 OS설치 OS가 HW를 직접 핸들링

로드 밸런서: 가상서버로 향하는 워크로드 분산, 재해대책과 비즈니스 연속성 계획, 시스템 분산 처리 및 네트워크 부하 감소

오토 스케일: 자동으로 가상 서버 대수를 증감, 임계값, 생성 서버 개수의 하한선과 상한선.

클라우드 스토리지: 데이터 아카이브, 빅데이터 분석, 매우 높은 내구성과 가용성

VPC(Virtual Private Cloud): 가상의 네트워크를 만들어 고객마다 독립된 클라우드를 제공.(DNS, 서브넷, VPN Gateway, 방화벽, 보안그룹)

클라우드 DB 서비스: Amazon RDS(관계형 DB), Amazon Aurrora(MySQL), Amazon DynamoDB(NoSQL)

기타 서비스: 리프트 앤 시프트, BigQuery, Cloud Dataflow, Cloud Dataproc, AzureML, Google Cloud ML

 

3장)

IaaS 환경을 위한 주요 클라우드 기반 기술: 가상화 기술, 컨테이너 기술

가상화 기술: HW에 종속된 리소스를 추상화, 서버, 스토리지, 네트워크 시스템에 대한 가상 환경 생성(서버, 네트워크 가상화)

컨테이너 기술: 리눅스 기능 활용, 격리된 프로세스, 필요한 모든 파일을 담은 고유한 이미지 실행하는 OS 레벨 기술

스토리지 기술: 블록 스토리지, 파일 스토리지, 오브젝트 스토리지

가상화 기반 기술: OpenStack, VMware vSphere

PaaS 환경을 위한 주요 클라우드 기반 기술: 분산 처리 기술, 데이터베이스 기술

분산 처리 기술: 대량의 데이터를 여러 서버에 분산하여 효율적으로 처리 Apache Hadoop, Apache Spark

DB 기술: RDB, NoSQL

 

4장 - OS)

OS의 역할: 여러 개의 사용자 애플리케이션에게 HW 가상화를 제공(추상화, API, HW 공유, 사용자 앱 간 격리)

프로세스: 실행 중인 프로그램, 메모리에 주소 공간(Memory Segment)을 갖는 능동적 개체, Own Address Space, Virtual CPU, 프로세스 프로그램 파일을 갖는다, CPU에서 Context Switch 발생 시 PCB 정보를 활용한다.

메모리 주소 공간: 프로세스 별로 할당된 가상 주소 공간, MMU에 맵핑돼서 변환, TLB, Paging을 통해서 효율적으로 관리된다.

파일 시스템: OS의 파일 시스템이 파일을 Physical HW와 맵핑 즉 디스크를 추상화하여 관리, 파일을 Block이라는 단위로 구분 및 맵핑 관리, Raw Data와 Meta Data를 함께 저장한다. 리눅스의 i-node로 순차 파일 구조로 저장, 인덱스 테이블을 보고 원하는 파일에 접근

공유 자원: Time Sharing(CPU 점유 시간), Space Sharing(제한된 메모리 영역 공유)

프로세스 스케쥴링: 운영체제 내에서 어떠한 프로세스가 CPU를 점유할 것인지 결정, State Transition을 통해 프로세스 관리

Page Replacement: 제한된 메모리 영역을 효율적으로 활용(실제 메모리 크기 + 스왑 영역 크기), LRU, LFU

Privilege(권한): 권한을 고려하지 않고 SW Stack과 HW Stack으로만 나누면 APP이 다른 APP의 실행을 방해 종료 가능 -> Isolation 으로 해결, 같은 권한 계층에서 OS와 APP이 실행 -> 권한구분

Privilege Separation: 운영체제만이 권한 구분을 실행할 수 있다.

Protection & Isolation: Virtual Address가 각 Process별로 Private 하게 만들고, Context Switch시 가상 주소 역시 Switch, Permission System으로 파일들에 대한 접근 보호

 

4장 - 서버 가상화)

 

Type 1 하이퍼 바이저: HW 바로 위에서 작동, Native or Bare-metal HP, 호스트 운영체제 X -> 관리 유연, 물리 머신 관리 기능이 제한

Type 2 하이퍼 바이저: 호스트 운영체제 위에 Hypervisor가 동작, HW 에뮬레이팅 과정으로 오버헤드 많이 발생, 관리 용이(개인이 사용하는 VM Ware)

하이퍼 바이저의 역할: 여러 개의 운영체제에 가상하된 HW를 제공

운영체제의 가상화: CPU -> Process, Memory -> VMA, Disk -> Files, NIC -> TCP/UDP Sockets

하이퍼바이저(VMM)에서의 가상화: PM -> VM, CPU -> vCPU, Disk -> Virtual Disk, NIC -> vNIC

Virtual Machine 등장 배경: 애플리케이션 호환성 문제 해결을 위해 개발, 클라우드 컴퓨팅 등장과 함께 재조명

서버 가상화의 장점: 물리적 서버의 자원을 분할해서 효율적으로 사용, Encapsulation(하나의 파일로 저장) 따라서 높은 이식성과 백업의 장점, 오류 대처(대체 가능한 VM을 생성 가능 및 보조 가상머신들의 모니터링 제공), 완전한 고립(머신끼리 영향 X), 다양한 OS 구동 가능

가상화의 목표: PM과의 동일한 동작(Equivalnce), 큰 성능 차이 없이 실행(Efficiency), 안정성(통제 관리 및 guest os는 서로에 영향 X)

서버 가상화 내부 구현(Trap and Emulate): divided by zero와 같은 에러가 guest os에서 발생하면 trap state로 바뀜. Handler가 VM Exit을 통해서 VMM으로 제어권을 넘기고 HyperVisor가 해당 명령을 처리하고 VM Enter를 통해서 실행결과와 함께 제어권을 guest os로 넘긴다. -> Privilege Instruction(권한 명령)의 실행을 방해하지 않고 guest OS와 인터페이스를 최소화하면서 처리가능

메모리 가상화: Guest VA -> Guest PA -> Host PA

Shadow Page: Guest PA와 Host PA 사이의 Mapping 관리, MMU를 가상화하는 기법, 하이퍼 바이저는 해당 테이블을 일관성 있게 유지하고 손쉽게 수정 가능하게 해야 한다, Read Only로 마킹, Guest OS에서의 페이지 테이블 업데이트는 Trap을 유발하고, 이를 통해 Hypervisor는 Shadow Page Table을 업데이트 -> 오버헤드 발생

 

VMM: 가상머신 모니터(Virtual Machine Monitor)의 약어로, 가상화 기술에서 가상머신과 호스트 운영체제 사이에서 중개자 역할을 수행하는 소프트웨어 == 하이퍼 바이저

 

4장 - 서버 가상화 기술)

과도한 오버헤드: CPU 가상화를 위한 Trap and Emulate, MMU 가상화를 위한 Shadow Page Table

Trap and Emulate의 한계: CPU 아키텍처마다 요구 조건이 다름, Trap Cost가 매우 크다.

Binary Translation: Guest에서 실행되는 Machine 코드의 ISA(명령어 집합 구조)를 실행시간에 타깃 시스템의 ISA로 변환, 오버헤드가 적다. 단점은 성능 자체는 DE보다 느림, 추가적인 Memory 필요, 변환 과정에서 Code Expand 가능성

Dynamic Binary Translation: VMM이 Binary Translation 모드와 Direct Execution 모드를 switch 하면서 실행 가능, 명령에 대한 translate를 한번 수행하면 그다음부터는 변한 된 거 가져다 쓰기만 함(캐싱), LRU 교체 알고리즘

Basic Block: DBT의 단위, Control Flow가 바뀌지 않고 실행되는 최소 단위 코드, DBT 수행 시 해당 단위로 변환 수행 후 캐싱

Type 1: 하이퍼바이저가 서버의 HW와 Direct 하게 통신, 성능 좋음 , VMWare ESX, Xen, Hyper-V(Native, Bare Metal)

Type2: 기존 Host OS 위에 Hypervisor 설치, 설치 쉬움, Host의 Device Driver 사용, VMWare Workstation, KVM(Host)

Para-virtualization: 하이퍼바이저를 이용한 가상화 기술 중 하나로, 가상 머신과 호스트 시스템 사이에 인터페이스를 제공하여 가상 머신이 하이퍼바이저와 통신하면서 필요한 자원을 요청하도록 하는 기술

Para-virtualization(CPU) 가정: Guest OS 코드 수정 가정, Guest OS가 VMM-aware 하게 작동

 

Para-virtualization(CPU): Para-virtualization은 게스트 운영 체제의 소스 코드를 수정하여, VMM과 게스트 운영 체제 간에 명시적 호출(Hypercall)로 특권 명령어를 처리하는 기술

Full-virtualization(MMU) : Guest Physical Address라는 Contiguous Memory 영역 존재, Shadow Page Table 활용  Mapping 된 하드웨어 페이지를 Read Only로 마킹, HW에 접근하는 것처럼 작동

Para-virtualization(MMU): Guest Physical Address존재 X, Hyper Call을 통해서 PageTable 업데이트 

Para-virtualization 한계: 필요에 맞게 Modified 된 GuestOS 필요함. Deployment Cost 증가

Full-virtualization의 성능 높이기: ISA Extension, Virtualization을 위한 Priviliged Instruction을 HW로 제공

HyperCall: Para-Virtualizaion에서 가상 머신에서 하이퍼바이저에게 서비스를 요청하기 위한 명령어

 

Full-Virtualization은 하드웨어 자원을 직접 가상화하고, Para-Virtualization은 하이퍼바이저와의 인터페이스를 통해 하드웨어 자원을 제공받는다.

 

 

5장 - 네트워크 기초)

네트워크 구성: 스위치(한 네트워크 안에서 데이터 담당), 라우터(네트워크를 구분 짓고 서로 연결)

네트워크 접속장치: 통신망 구성 기본 LAN -> WAN, 허브, 중계기, 스위치, 라우터 등등 존재

스위치: 데이터 링크, MAC주소, Point to Point

게이트웨이: 다른 두개 이상의 네트워크를 상호 접속하여 정보를 주고받도록 하는 개념

라우터: 서로 다른 네트워크 간에 통신하는 데 사용되는 장치, IP주소 사용, 오류 패킷 폐기, 혼잡 제어 기능

네트워크 토폴로지: 노드와 링크가 물리적/논리적으로 배치(성형, 링형, 버스형, 트리형, 그물형), 성형이 가장 많이 사용됨

꼬임선: 이중 나선 케이블(전기 간섭 최소화, 차폐 보호망 사용) 전화선, cat1, cat2... cat6 - 전송매체

광섬유 케이블: 빛을 이용해서 데이터 전송 - 전송 매체

네트워크 통신 방식: 유니캐스트(1:1 통신), 브로드캐스트(로컬 LAN에 있는 모든 네트워크 단말에 데이터 보내는 방식)

OSI 참조 모델의 데이터 전송: 패킷(데이터 단위), 데이터 링크 계층 PDU(프레임), 네트워크 계층 PDU(패킷), 전송 계층 PDU(세그먼트), PDU는 데이터 단위를 의미한다.

TCP/IP 모델: 응용(응용+표현+세션), 전송, 네트워크, 네트워크 접속(데이터 링크 + 물리) 계층

Ethernet: 물리 계층과 데이터 링크 계층의 통신 회선의 접근 제어

MAC 주소 학습: 수신지 MAC주소가 스위치의 MAC주소 테이블에 등록되어 있지 않으면 주소와 포트를 함께 등록

IP주소: 8비트 크기의 필드 4개로 구성, 네트워크 ID와 호스트 ID로 구성, (A, B, C) 클래스로 나뉜다.

서브넷: 기존 클래스의 네트워크를 좀 더 작은 네트워크로 분할해서 IP주소를 보다 효율적으로 사용.

세그먼트: TCP 헤더(송신자 포트, 수신자 포트, 시퀀스 번호, 확인 응답 번호, 윈도 크기, 플래그 정보, 체크섬 등) + 데이터(패킷)

ICMP: 네트워크의 호스트나 라우터에서 발생한 오류를 송신 측에 전송

NAT: 공인/사설 IP 분리를 위해 NAT 사용. 여러 개의 내부 네트워크에서 한 개 혹은 여러 개의 공인 IP를 사용. 보안면에서 유리, 그러나 공인 IP를 여러 개의 내부 호스트가 공유시 오류 발생 가능.

NAPT: NAP의 변형으로 포트 변환까지 가능해서 하나의 공인 IP에 여러 개의 사설 IP의 포트 변환도 수행해 준다. 내부 네트워크를 노출시키지 않아서 보안면에서 좋다.

SNAT: 출발지 주소를 변환하여 목적지에서 돌아오는 패킷이 원래 출발지가 아닌 NAT 라우터의 주소를 가지도록 한다.

DNAT: 목적지 주소를 변환하여, 내부 네트워크에서 서비스 중인 호스트로 패킷을 전달한다.

 

5장 - 전통적인 네트워크 가상화)

네트워크 가상화: 가상화 기술을 통해 물리적 네트워크를 논리적으로 구성, 유연하고 효율적인 네트워크 운용

등장 배경: HW 자원 한계, 유동성과 이식성 요구

전통적 기술: VLAN(여러 개의 물리적 네트워크를 논리적으로 구분), Broadcast Domain(Broadcast 메시지를 도메인에 속한 장치가 모두 확인)

VLAN: 하나의 물리적인 스위치 안에서 논리적으로 분리된 여러 개의 가상 스위치를 구성. 종류는 Port based, Tag based, Protocol based

VLAN의 한계: MAC Address Table의 한계(MAC주소가 기하급수적으로 증가), 제한적 유연한 구성 정적으로 구성되어서 빠른 변경이 제한됨.

VXLAN: 24비트 VNI헤더 추가, L2 이더넷 프레임을 L3 UDP 패킷으로 캡슐화

VPN: 인터넷망을 사이에 둔 사설망과 사설망 연결, 두 장치/네트워크 사이에 연결된 암호화된 터널, 빠르고 설치 쉬움.

PPTP (Point-to-Point Tunneling Protocol): VPN 연결을 위한 가장 오래된 프로토콜 중 하나로, 보안성이 약한 것이 단점.

L2TP (Layer 2 Tunneling Protocol): L2F + PPTP, 보안성을 개선한 프로토콜.

IPSec (Internet Protocol Security): IP 패킷을 암호화하고 인증하기 위한 프로토콜. 많은 VPN 서비스에서 사용.

SSL/TLS (Secure Socket Layer/Transport Layer Security): HTTPS와 같이 웹 브라우저와 웹 서버 사이의 통신을 암호화하는 데 사용되는 프로토콜을 기반으로 VPN 연결을 제공.

OpenVPN: SSL/TLS를 기반으로 하는 오픈소스 기술로, 많은 VPN 서비스에서 사용. 보통 IPSec보다 빠르다.

WireGuard: 빠르고 안전한 VPN 연결을 제공하는 오픈소스 기술, UDP 전용이라 방화벽 차단이나 겸 열에 취약, 공인 SW를 사용해야 함.

Linux Bridge: 리눅스의 네트워크 가상화, 일반적인 네트워크 스위치와 유사하게 동작, 라우터, 게이트웨이, VM등에서 패킷을 목적지로 전달하는 역할 수행

Bonded Interface: 서로 다른 네트워크 인터페이스를 하나의 논리적 인터페이스로 묶음

VETH: 가성 이더넷 쌍으로 구성

iptables: 리눅스 운영 체제에서 사용되는 방화벽 프로그램으로, 네트워크 보안을 유지하고 관리, 입력, 출력, 전달 규칙을 정의하고, 특정 포트를 열거나 닫고, IP 패킷을 차단하거나 허용가능, 또한 NAT(Network Address Translation)을 지원한다.

 

5장 - 현대 네트워크 가상화)

OVS(Open vSwitch): 리눅스 기반의 가상 소프트웨어 스위치, 네트워크 추상화, 동적 자원, 터널링 프로토콜, 모니터링, 분산 가상 스위치 가능, 서로 다른 물리서버에 존재하는 VM을 서로 연결

네트워크의 현실: 시스템의 통합관리와 운영 자동화 발전 -> 네트워크는 기존과 같은 방식으로 하드웨어별로 운영/관리

SDN: 위 문제의 해결책으로 네트워크를 가상화하고 구성과 기능을 SW로 프로그래밍할 수 있도록 한다. 제어평면과 데이터평면 분리, 중앙 집중 제어형, 하나의 물리적 네트워크 위에 컨트롤러 별로 여러 개의 가상 네트워크

SDN의 핵심: 오케스트레이션, 프로그래밍 가능, Dynaminc Scaling, Automation, Visibility, Performance

전통적인 네트워크 장비 구성: 관리 평면(설정 정책), 제어 평면(라우팅 결정), 데이터 평면(실제 패킷 포워딩)

SDN 구조: 운영체제와 전체적인 구조가 비슷하다. 네트워크 어플리케이션, 애플리케이션 인터페이스(northbound:REST), SDN 컨트롤러(제어 평면), Southbound(OpenFlow), 포워딩 장치(데이터 평면)

SDN 포워딩: SDN 스위치 안에 존재하는 플로우 테이블을 통해서 전송

NFV: 네트워크 장비의 HW, SW 분리, 표준 가상화 기술, 장비 의존성 x

 

SDN VS NFV:

SDN과 NFV는 모두 네트워크 관리를 위한 기술이다.

 

SDN은 소프트웨어 정의 네트워킹(Software-Defined Networking)의 약자로, 네트워크의 제어와 데이터 전달을 분리하는 아키텍처를 지향. SDN은 중앙 집중식 컨트롤러를 통해 네트워크를 제어하며, 네트워크 기능들이 가상화되어 소프트웨어적으로 관리.

 

NFV는 네트워크 기능 가상화(Network Functions Virtualization)의 약자로, 네트워크 기능들을 가상화하여 하드웨어와 관련된 제약을 줄이고, 자원을 효율적으로 사용할 수 있는 기술. 예를 들어, 방화벽, 로드 밸런서 등의 기능을 가상화하여 가상 머신 위에서 실행할 수 있다.

 

두 기술은 모두 네트워크 기능 가상화를 지향하지만, SDN은 네트워크 전체의 관리와 제어를 위한 아키텍처를 제공하는 반면, NFV는 개별 네트워크 기능들의 가상화를 위한 기술. 따라서, SDN과 NFV는 목적과 적용 범위가 서로 다르며, 종종 함께 사용되기도 한다.

 

6장 - 스토리지 가상화)

스토리지: 데이터와 프로그램을 저장하는 기록장치, HDD, SSD, 파일 시스템, 데이터 암호화 등 SW 기술 포함

스토리지 고려 사항: 데이터 안정성, 신뢰성, 가용성, 성능, 확장성 및 비용, 복제, 백업, 복구, 암호화, 분산 등 기술 제공

로컬 스토리지 가상화: RAID, LVM

RAID: 여러 개의 하드 디스크를 일부 중복 데이터를 나눠 저장하는 기술, 데이터를 안전하게 보호, 여러 디스크 모듈을 하나의 대용량 디스크처럼 사용, 한꺼번에 쓰고 한꺼번에 읽어 입출력 속도 향상, 디스크 장애 시 데이터 소실 방지

RAID 0: 빠른 입출력을 위해 여러 디스크에 데이터 분산, 장애 발생 시 모두 소실, 단일로는 잘 안 쓰임

RAID 1: Mirror or Shadowing, 빠른 기록속도, 장애 복구, 2개 이상의 디스크, 하나의 디스크는 나머지를 클론, 쓰기 속도는 느림, 저장 단가 비쌈

RAID 5: 패리티 정보를 모든 디스크에 나눠서 기록, 하나의 디스크는 패리티 영역으로 쓴다, 패리티를 이용해서 장애가 발생한 디스크 복구 가능, 읽기가 느린 편, 작고 랜덤한 입출력이 많을 때 유리, 최소 디스크 3개 일반적으로 5개 이상 필요.

RAID6: RAID 5와 비슷하지만 2차 패리티 구성, 매우 높은 장애 능력, 2개까지 죽어도 괜찮다, 최소 4개 디스크 필요

RAID 1+0: 여러 디스크에 분산해서 담지만, 클론이 존재한다.

LVM: Logical Volume Manager, 스토리지 유연하게 관리, 확장 용이, 디스크 관리, RAID 추가 기능 제공

LVM 구성요소: PV(LVM 구성하는 가장 낮은 구성단위 물리장치, 디스크 내 파티션), VG(PV 모음, 이름을 지정하여 생성, 이름으로 접근), LV(VG에서 생성, 최종적으로 내부에 파일 시스템을 생성하여 사용)

 

네트워크 가상화 기술: NAS, SAN

NAS: 파일 단위 데이터 저장, 네트워크를 통해서 동시에 여러 서버에서 접근 가능, 파일 서버로 구성 및 파일 시스템 지원, 저렴하고 구성 및 관리 용이, 가상 데스크톱 인프라, 데이터 백업 및 재해 복구, 주요 프로토콜은 NFS, SMB, AFP

NFS 프로토콜: Client가 Server의 파일과 파일 시스템에 Transpert 한 방식으로 접근, 내부적으로 RPC 사용, 클라이언트는 서버의 파일시스템 유지를 위해서 NFS Mount 프로토콜 사용. 리눅스에서 주로 지원.

SMB 프로토콜: Client와 서버 사이의 파일 및 프린트 공유를 위해서 사용, NetBios 프로토콜 위에 위치, SMB 개선 버전으로 CIFS가 있다. SAMBA는 해당 프로토콜을 구현해서 리눅스에서 윈도와 파일 및 프린터 공유를 해주는 SW다. 

AFP 프로토콜: 맥 계열에서 파일 및 프린터 공유를 위해 사용함

 

SAN: 서버와 스토리지를 고속의 전용 네트워크로 연결, 데이터 전송 속도 향상, 높은 가용성 제공, 블록 단위 데이터 저장, 여러 대 서버 동시 접근

SAN 스위치: 서버를 스토리지 디바이스의 공유풀과 연결, 스토리지 트래픽을 전송하는 경우 사용

SAN VS NAS: SAN은 여러 기기로 이루어진 로컬 네트워크, NAS는 LAN에 연결된 단일 스토리지 디바이스

FibreChannel 프로토콜: 높은 대역폭, 신뢰성, 대용량 스토리지 시스템 데이터 전송, 전용 물리적 케이블, 광케이블 사용, 빠른 데이터 높은 신뢰성, 비용이 높음, 복잡한 구성, 이더넷의 발전으로 경제적인 프로토콜과 비교됨.

HBA(Host Bus Adapter): 두 채널 사이에서 정보 전달 담당, SAN과 서버 연결하는 인터페이스

SAN Zoning: SAN 환경에서 SAN 스위치에 연결된 서버가 지정 스토리지만 접근하도록 권한 부여, 고유 ID 기반 그룹(WWN 조닝, 소프트), 스위치 포트 기반(Port 조닝, 하드)

iCSCI: IP 네트워크를 통해 SCSI 프로토콜 전송하기 위한 스토리지 프로토콜 기존 스토리지를 IP 네트워크 즉 이더넷을 통해서 접근 가능, SAN에 비해 비용이 적고 간단하다, 스토리지 처리 성능과 안정성 면에서 뒤처짐, TCP/IP 기반으로 동작해서 빠른 속도와 낮은 지연 시간 보장 할 수 없다.

블록 스토리지: 일정한 고정 크기의 블록으로 나누고 주소를 할당. 논리 볼륨을 블록 단위로 접근 가능한 스토리지, FC 혹은 iSCSI 같은 전용 프로토콜 사용, 오버헤드 적고 빠른 데이터 전송 가능, 낮은 지연이 필요한 DB에서 주로 사용.

파일 스토리지: 파일 단위로 읽고 쓰고 공유한하는 스토리지, 파일 서버에 주로 이용한다.

오브젝트 스토리지: 데이터를 객체 단위로 처리, 데이터 및 관련 메타 데이터로 구성된 오브젝트에 고유 ID(URI) 부여, OS나 파일 시스템에 의존하지 않고 데이터 저장 및 오브젝트 접근, HTTP 기반의 REST API, 쉽게 용량 증가 가능하고 데이터 크기와 수에 제한이 없다. 갱신빈도가 적은 데이터나 대용량, 장기 데이터 보존에 유리. NoSQL, RDBMS를 이용한 로그 데이터, 대용량 미디어 데이터등.

7장 - 컨테이너 기술(도커))

인프라 발전 구조: Bare Metal -> VM -> Containerized

가상머신의 문제점: 가상 서버마다 필요한 SW 설치, 설정 및 자동화 어렵고 안전성 문제

Immutable Infrastructure: 불변 인프라는 OS 커널과 서비스 환경을 분리, 커널 수정 없이 서비스 환경 교체 가능, 서비스가 수정되면 이전 서비스 환경을 새로운 서비스 환경으로 교체

Immutable Infrastructure의 장점: 편리한 관리, 확장, 테스트, 경량화, 도커는 해당 프로젝트 중 하나다.

컨테이너: OS를 가상화해 여러 개의 고립된 리눅스 시스템을 실행하는 방법. chroot가 기원, host os의 자원을 공유해서 오버헤드 적음, 부팅 개념이 존재하지 않아서 시작과 종료가 빠름, 플랫폼 간 이동 자유로움, 불필요한 것을 제거하고 목적에 맞는 환경 구성 가능

컨테이너 장점: 개발 운영 과정 단축, 빠른 시작과 종료, 오버헤드 낮음, 자원 효율성 증가

컨테이너 단점: Host OS에 종속적, 각 컨테이너에 독립된 커널 구성 불가능(커널 자원을 공유하기 때문)

도커: 컨테이너 관리, 생성, 실행, 배포를 위한 오픈소스 엔진, Go 언어로 작성, 개발을 위한 효율성 증가, Linux Container, Control Group, Namesapce, AUFS 등의 기술을 사용.

도커의 장점: 애플리케이션의 빠른 배포, 설치 및 확장이 쉽고 휴대성 좋음, 오버헤드 낮음, 관리가 쉬움

도커 VS 가상머신: 도커가 부팅속도가 더 빠르고, 메모리 사용량이 적고, 재부팅 시간이 짧고, cpu 연산 부하가 낮고, IO성능도 더 뛰어나다.

도커 구성요소: Server(Docker Daemon)- 컨테이너 관리 및 실행, Client(사용자 인터페이스, 사용자 명령을 도커데몬으로 소켓 통신으로 전달), Registry(이미지 저장소, private와 public 존재), Image(라이브러리, 실행파일, 소스코드 등이 패키지화, union 파일 시스템), Container(하나 이상의 이미지가 동작한 상태, 독립된 애플리케이션, 실행을 위한 모든 것을 포함) 

도커 허브: 깃허브와 같은 기능을 제공, 다른 사용자가 image 사용 가능.

UnionFileSystem: 여러 파일시스템을 통합해서 하나의 파일시스템으로 보이게 하는 기술, 수정된 layer만 새로 빌드 후 교체하는 경량화 방식

Layer: 파일 시스템을 나눈 단위, Read only Layer - 컨테이너를 제외한 나머지, Read Write Layer - 항상 최상위 layer

Copy-on-Write: Image 내용 수정 시 Conter로 수정할 파일을 복사한 후 내용 수정, 만들어진 Image는 레지스트리에 저장, 컨테이너가 이미지로 만들어지면 새로운 컨테이너 위에 생성, 이미지 수정시 기본 이미지에서 수정된 부분만 업데이트

도커 동작 방식: Image 생성(이미지 Build), 저장(레지스트리에 이미지 Push), 불러오기(레지스트리에서 이미지 Push), 검색(Docker Hub에서 이미지 Search), 실행(Image로 컨테이너 Run) 

도커 파일: 도커 이미지를 자동으로 만들기 위해 명령어를 모아둔 문서

도커 네트워킹: 도커 컨테이너가 외부로 통신하기 위한 구조, 각 컨테이너에 격리된 네트워크 공간을 만들고 컨테이너의 eth0에 static IP 할당, 컨테이너 내부의 eth0와 docker0로 연결된 veth인터페이스를 통해서 외부와 통신.

eht0: eLinux 시스템에서 네트워크 인터페이스(Network Interface) 중 하나를 나타내는 이름. eth0는 보통 이더넷 카드의 첫 번째 인터페이스를 가리키며, 랜선을 통해 인터넷에 연결하는 경우 많이 사용. 이더넷 카드가 추가로 설치되면, eth1, eth2 등의 이름으로 인터페이스가 추가된다. eth0과 같은 인터페이스를 통해 IP 주소, 서브넷 마스크, 게이트웨이 등의 네트워크 정보를 설정하고, 네트워크 통신을 수행할 수 있다.

LXC: 초기 도커에서 사용된 리눅스용 컨테이너 관리 기술, Namespaces, cgroups를 사용해 컨테이너 생성 및 관리 LibContatiner: LXC를 대체하기 위해서 Docker에서 만든 컨테이너 관련 기술, Host OS 의존성 제거, Go로 구현

cgroups: 컨테이너의 컴퓨팅 자원 제어 기술, 프로세스 집단 자원 관리 기능, 메모리 사용량 제한, cpu 사용량, i.o 사용량 분배, 자원 사용량 측정, 사용 중단 체크 포인트 설정, 재시작 등

Namespaces: 컨테이너를 만들기 위한 프로세스 가상화 기술, 하이퍼바이저를 사용하지 않고 격리된 공간 제공, clone() - 새로운 프로세스 및 네임스페이스 생성, unshare()-존재하는 프로세스에 새로운 네임스페이스 생성, stens() - 존재하는 네임스페이스에 합류 Namespaces의 종류: Mount 네임스페이스(파일 시스템 추상화), UTS 네임스페이스(초기화 및 설정 스크립트 작성 가능), PID 네임스페이스(PID 재사용 가능), 네트워크 네임스페이스(컨테이너를 호스트 같이 다룰 수 있음), IPC 네임스페이스(공유 메모리, 큐, 세마포어의 자원 분리), 유저 네임스페이스(유저와 그룹아이디 격리, 외부에서 네임스페이스 내부 못 건드림) 

 

8장 - 컨테이너 기술(쿠버네티스))

쿠버네티스: 컨테이너 통합 관리, 배포, 네트워크, 스토리지 관리 정책 세부적 명세 가능, 대규모 클러스터 운영, 서비스 이식이 용이함

쿠버네티스 주요 기능: Auto Scale Out/In, Load Balancing, Auto Rolling Update, Auto Healing, Persistence Volumne, Container Ochestration

추가 설명: 상태관리(선언 상태 유지, 장애 자동 복구), 스케줄링(조건에 맞는 노드에 컨테이너 배치), 클러스터(가상 네트워크를 통해서 하나의 서버에 있는 것처럼 통신), 스케일링(리소스에 따라서 서비스 조정), Roll Out/Roll Back(배포/롤백 및 버전 관리), 서비스 디스커버리(서로 다른 서비스를 찾고 쉽게 통신 가능)

설정 표류: 손으로 직접 수정한 임시 수정/업데이트와 전반적인 엔트로피 증가로 점점 다른 서버가 되어간다.

불변의 인프라: 서버가 배포된 후 절대 변경되지 않는 인프라(업데이트는 덮어쓰는 게 아니라 버리고 새로 만든다.)

쿠버네티스 Reconciliation(화해) 모델: 현재 상태 모니터링 -> 원하는 상태와 현재 상태 비교 -> 현재 상태를 원하는 상태로 조정

 

Master Node: 클러스터에 대한 전반적인 결정 수행, 클러스터 이벤트 감지 반응

-kube-api-server: control plane의 프런트 엔드, 쿠버네티스 API의 노출

-kube-scheduler: 노드가 배정되지 않은 새로 생성된 pod를 감지하고, 실행할 노드를 선택

-kube-controller-manager: 쿠버네티스 컨테이너들을 관리, 노드 다운 시 통지와 대응에 관해 책임, 시스템 내 컨테이너를 설정된 정책 숫자에 맞게 유지, 시스템 네임스페이스 관리

-etcd: 쿠버네티스에서 필요한 모든 데이터를 키-밸류 형태로 저장

 

Worker Node: 동작 중인 컨테이너를 유지, 쿠버네티스 런타임 환경 제공

-kubelet: 클러스터의 각 노드에서 실행되는 에이전트, 컨테이너가 스펙에 따라 동작하도록 모니터링

-kube-proxy: 클로스터의 각 노드에서 실행되는 네트워크 프락시, 노드의 네트워크 규칙을 유지, 네트워크 규칙이 내부 네트워크 세션이나 클러스터 바깥에서 Pod로 네트워크 통신을 하도록 해준다.

-Container Runtime: 컨테이너 실행을 담당하는 소프트웨어(docker, containerd, CRI-O)

 

오브젝트: 리소스의 가장 기본적인 구성단위, 시스템에서 영속성을 가지는 객체

기본 오브젝트: Pod, Service, Volume, Namespace

-Pod: 가장 기본적 배포 단위, 하나의 Pod는 하나의 노드에만 배치, Pod에 하나 이상의 컨테이너 포함 가능, IP, Port, 볼륨 공유

-Service: 외부 네트워크와 내부 네트워크의 Endpoint 관리, 잦은 Pod 교체에도 네트워크 상태 유지

-Volume: 논리 디스크, 잦은 Pod 교체에도 디스크의 영속성 보장

-Namespace: 클러스터 내 논리적인 공간 단위, 개별 접근 권한 및 리소스 할당량 제어

 

컨트롤러: 오브젝트의 상태가 의도된 상태로 구동되는지 추적, 의도한 상태로 만드는 역할

컨트롤러 종류: Replica Set, Deployment, DaemonSet, StatefulSet, Job

-Replica Set: Pod 집합의 실행을 안정적으로 유지, 명시된 pod 개수에 대한 가용성 보증

-Deployment: Pod과 ReplicaSet에 대한 선언적 업데이트, 레플리카셋이 의도한 팟의 개수 조정, 시스템 스케일 관리

-DaemonSet: ReplicaSet과 비슷하지만 Pod의 개수만큼 실행, 앱이 클러스터 전체 노드나 특정 집합에서 동작할 때 사용

-StatefulSet: Deployment와 유사하게 스케일링 관리, Pod 순서 및 고유성 보장, 애플리케이션 순차 배포에 적합

-Job: 하나 이상의 Pod를 생성하고 지정된 수의 Pod가 성공적으로 종료될 때까지 Pod의 실행을 재시도

 

CNI(Container Network Interface): 컨테이너 간 네트워킹을 제어할 수 있는 플러그인, Container Runtime과 쿠버네티스 사이의 네트워크 계층구현(Calicio, Cilium, Weavenet, Flannel)

Service 종류: Cluter IP(클러스터 내부에서 다른 Pod들이 접근하기 위한 IP), NodePort(Node의 고정 포트로 Pod의 서비스를 노출), LoadBalancer(별도의 로드밸런서를 통해서 외부로 노출)

Ingress: Layer 7에서의 요청 처리(로드 밸런싱, SSL/TLS 인증서, 특정 경로 라우팅)

ConfigMap: 문자열 또는 전체 설정 파일을 가지는 키-밸류 쌍으로 구성된 맵

Secret: ConfigMap과 매우 유사한 키-밸류 쌍으로 구성된 맵, Base64로 인코딩 되어 저장, 컨테이너로 전달 시 디코딩된다.

728x90
반응형