본문 바로가기
GOORM

GOORM: Kubernetes-31

by hxunz 2021. 12. 25.
  1. Facts 
    : 시스템 인프라 기초 지식, 컨테이너 기술, Docker 개요, Docker 이미지 조작까지 진도 나감

  2. Findings
    :
    <시스템과 인프라 기초 지식>

    시스템 기반
     - 애플리케이션을 가동시키기 위해 필요한 하드웨어나 OS/미들웨어 등과 같은 인프라

    시스템 기반의 구성 요소
     - 인프라 기술 : 시스템 기반을 다루는 기술
     - 시스템에 요구되는 사항 : 기능요구 사항 : 시스템의 기능으로서 요구되는 사항
                                              비기능 요구 사항 : 시스템의 성능이나 신뢰성, 확장성, 운용성, 보안 등과 같은 요구사항
    시스템 기반의 구성 요소
    하드웨어 시스템 기반을 구성하는 물리적인 요소
    스토리지, 전원 장치 등
    네트워크 시스템 이용자가 원격지에서 액세스할 수 있도록 서버들을 연결하기 위한 요구사항
    라우터, 스위치, 방화벽 등
    OS(운영체제) 하드웨어나 네트워크 장비를 제어하기 위한 기본 소프트웨어
    클라이언트OS : Windows/macOS
    서버 OS: Windows Server, Unix, Linux
    미들웨어 서버 OS 상에서 서버가 특정 역할을 다하기 위한 기능을 갖고 있는 소프트웨어

    클라우드와 온프레미스
     - 온프레미스 : 자사에서 데이터센터를 보유하고 시스템 구축부터 운용까지를 모두 수행하는 형태 
                           초기 시스템 투자에 드는 비용 부담이 크며 시스템 가동 후의 운용에 드는 비용도 시스템 이용량과 상관없이 일정
                           금액을 부담
     - 퍼블릭 클라우드 : 인터넥을 경유하여 불특정 다수에게 제공되는 클라우드 서비스
                                   IaaS : 시스템 기반 부분을 이용하는 서비스 / 이용한 시간이나 데이터 양에 따라 요금 지불
     - 프라이빗 클라우드 : 특정 기업 그룹에게만 제공되는 클라우드 서비스 / 서비스를 이용한 만큼만 요금 부과

    클라우드가 적합한 케이스
     - 트래픽의 변동이 많은 시스템
     - 재해 대책으로 해외에 백업을 구축하고 싶은 시스템
     - 서비스를 빨리 제공하고 싶은 시스템
     
    온프레미스가 적합한 케이스
     - 높은 가용성이 요구되는 시스템
     - 기밀성이 높은 데이터를 다루는 시스템
     - 특수한 요구사항이 있는 시스템

    서버 장비
     - CPU : 프로그램의 설계나 처리 등을 수행하는 전자회로 부품 / 코어 수가 많을수록 연산을 동시에 처리할 수 있는 수 증가
     - 메모리 : CPU가 직접 액세스할 수 있는 기억장치를 메모리(주기억장치)라고 한다.
     - 스토리지 : 데이터베이스에 기록하는 데이터 등과 가은 영구적인 데이터를 저장하는 디바이스 (보조기억장치)

    네트워크 주소
     - MAC 주소 (물리 주소/이더넷 주소) : 네트워크 인터페이스 카드나 무선 LAN 칩과 같은 네트워크 부품에 물리적으로 할당되는 48비트 주소
     - IP 주소 : 인터넷이나 인트라넷과 같은 네트워크에 연결된 컴퓨터나 네트워크 장비에 할당되는 식별 번호

    OSI 참조 모델과 통신 프로토콜
     - OSI 참조 모델 : 국제표준화기구(ISO)가 책정한 컴퓨터의 통신 기능을 계층 구조로 나눈 개념 모델
    OSI 참조 모델 대표 프로토콜 대표 통신 기기  
    7 계층(L7) 응용 계층 HTTP, DNS,SMTP, SSH 방화벽 로드밸런서 애플리케이션에 특화된 프로토콜을 규정
    6 계층(L6) 표현 계층     데이터의 저장 형식이나 압축, 문자 인코딩과 같은 데이터의 표현 형식을 규정
    5 계층(L5) 세션 계층     커넥션 확립 타이밍이나 데이터 전송 타이밍을 규정
    4 계층(L4) 전송 계층 TCP, UDP   데이터 전송을 제어하는 계층
    3 계층(L3) 네트워크 계층 IP, ICMP 라우터, L3 스위치 서로 다른 네트워크 간에 통신을 하기 위한 규정
    라우팅 : 서로 다른 네트워크에 데이터 패킷을 전송
    2 계층(L2) 데이터 링크 계층 Ethernet L2 스위치, 브리지 동일한 네트워크 안(동일 세그먼트)에 있는 도드 간의 통신을 규정
    MAC 주소로 데이터를 전송
    1 계층(L1) 물리 계층   리피터 허브 통신 장비의 물리적 및 전기적 특성을 규정

    방화벽
     - 내부 네트워크와 외부와의 통신을 제어하고 내부 네트워크의 안전을 유지하기 위한 기술
     - 패킷 필터형 : 통과하는 패킷을 포트 번호나 IP 주소를 바탕으로 필터링하는 방법
     - 애플리케이션 게이트웨이형 : 패킷이 아니라 애플리케이션 프로토콜 레벨에서 외부와의 통신을 대체 제어 ( 프록시 서버)

    라우터/레이어 3 스위치
     - 라우터 : 2개 이상의 서로 다른 네트워크 간을 중계하기 위한 통신 장비 / 경로 선택 기능 / 정적 경로, 동적 경로
     - 레이어 3 스위치 : 라우팅을 하드웨어로 처리하고 있어서 고속으로 작동 / 연결 가능한 이더넷 포트의 수가 많음

    Linux
     - Unix 호환 서버 OS로 보안이 뛰어나며 안정적으로 작동
     - Linux 커널 : OS의 코어로 OS로서 하드웨어나 애플리케이션 소프트웨어를 제어하기 위한 기본적 기능을 갖고 있는 소프트웨어
     - Linux 배포판 : 리눅스 커널과 함께 각종 커맨드, 라이브러리, 애플리케이션이 포함

    Linux 커널
     - 하드웨어 제어에 관한 OS의 핵심이 되는 기능
     - 디바이스 관리 : 하드웨어를 디바이스 드라이버라는 소프트웨어를 이용하여 제어
     - 프로세스 관리 : 프로세스에 PID(프로세스ID)라는 식별자를 붙여 관리 / 필요한 CPU를 효율적으로 할당
                             프로세스 : 명령을 실행할 때는 해당 프로그램 파일에 쓰여있는 내용을 읽어 들여 메모리상에 전개한 후 메모리상의
                                              프로그램을 실행
     - 메모리 관리 : 프로그램/데이터를 물리 메모리에 효율적으로 할당하는 역할 / 실행이 끝난 프로세스가 사용하던 메모리 영역 해제
                             스왑(swap) : 가상 메모리 영역
                             쉘(shell) : 사용자가 내린 명령을 커맨드로 받아 리눅스 커널에 전달
                             쉘 스크립트 : 쉘에서 실행하고자 하는 명령을 모아서 텍스트 파일에 기술한 것

    Linux 파일 시스템
     - 파일 시스템 : Linux에서 하드디스크나 USB 메모리, CD, DVD 등과 같은 데이터에 액세스하기 위한 장치
     - Linux 커널은 VFS(Virtual File System: 가상 파일 시스템)라는 장치를 사용하여 데이터에 대한 투과 액세스를 가능하게 함

    미들웨어
     - OS와 업무 처리를 수행하는 애플리케이션 사이에 들어가는 소프트웨어

    웹 서버 
     - 클라이언트의 브라우저가 보내온 HTTP 요펑을 받아, 웹 콘텐츠(HTML, CSS 등)를 응답으로 반환하거나 다른 서버사이드 프로그램을 호출하는 기능을 갖고 있는 서버
     - Apache HTTP Server / Internet Information Services, Nginx

    데이터베이스 서버
     - 시스템이 생성하는 다양한 데이터를 관리하기 위한 미들웨어
     - 관계형 데이터베이스 : 데이터를 2차원 표 형식으로 관리하는 데이터베이스로 여러 개의 표를 결합하여 이용
     - DBMS(Database Management System) : MySQL / PostreSQL / Oracel Database
     - NoSQL : 대량의 데이터 축적이나 병령 처리에 뛰어나 다수의 사용자 액세스를 처리할 필요가 있는 온라인 시스템에서 이용
                       Redis / MongoDB / Apache Cassandra

    시스템 감시 툴
     - 시스템의 감시 대상인 서버나 장비의 상태를 감시하여 미리 설정한 경계 값을 초과한 경우에 정해진 액션을 실행
     - Zabbix / Datadog / Mackerel

    인프라 구성 관리
     - 인프라를 구성하는 하드웨어, 네트워크, OS, 미들웨어, 애플리케이션의 구성 정보를 관리하고 적절한 상태로 유지하는 작업
     - Immutable Infrastructure : 한번 구축한 인프라는 변경을 하지 않고 파기 후 새로운 것 구축 / 현재 작동하고 있는 인프라의 상태를 관리
     - 툴 : OS의 시작을 자동화 하는 툴 : Vagrant
              OS나 미들웨어의 설정을 자동화하는 툴 : Ansible
              여러 서버의 관리를 자동화하는 툴 : Kubernetes

    지속적 인티그레이션 
     - Continuous Integration : 애플리케이션의 코드를 추가 및 수정할 때마다 테스트를 실행하고 확실하게 작동하는 코드를 유지하는 방법


    <컨테이너 기술과 Docker의 개요>

    Docker
     - 컨테이너 기술을 사용하여 애플리케이션의 실행 환경을 구축 및 운용하기 위한 플랫폼
     - 애플리케이션의 실행에 필요한 환경을 하나의 이밈지로 모아두고 그 이미지를 사용하여 다양한 환경에서 애플리케이션 실행 환경을 구축 및 운용하기 위한 오픈소스 플랫폼
     - Docker 이미지 : Docker를 사용하여 개발한 애플리케이션의 실행에 필요한 모든 것이 포함

    컨테이너
     - 호스트OS상에 논리적인 구획(컨테이너)을 만들고, 애플리케이션을 작동시키기 위해 필요한 라이브러리나 애플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것
     - 애플리케이션의 실행에 필요한 모든 파일 및 디렉토리들을 모은것
     - 컨테이너 기술 : 애플리케이션의 실행 환경을 모음으로써 이식성을 높이고 확장성이 좋은 환경에서 작동하는 것을 지향

    Docker의 기능
     - Build : 이미지를 만드는 기능 (이미지 : 애플리케이션의 실행에 필요한 파일들이 저장된 디렉토리)
     - Ship : 이미지를 공유하는 기능
     - Run : 컨테이너를 작동시키는 기능

    Docker 컴포넌트
     - Docker Engine : 이미지를 생성하고 컨테이너를 기동시키기 위한 핵심 기능
     - Docker Registry : 이미지를 공개 및 공유하기 위한 레지스트리 기능
     - Docker Compose : 여러개의 컨테이너 구성 정보를 코드로 정의하고 명령을 실행함으로써 애플리케이션의 실행환경을 구성하는 컨테이너들을 일원 관리하기 위한 툴
     - Docker Machine : 실행환경을 명령으로 자동 생성하기 위한 툴
     - Docker Swarm : 호스트들을 클러스터화하기 위한 툴

    namespace
     - 컨테이너를 구획하는 장치
     - PID namesapce : PID란 Linux에서 각 프로세스에 할당한 고유한 ID로 PID namespace는 PID와 프로세스를 격리 시킴
     - Network namespace : 네트워크 디바이스, IP 주소, 포트 번호, 라우팅 테이블, 필터링 테이블 등과 같은 네트워크 리소스를 격리된 namespace마다 독립적으로 가질 수 있음
     - UID namespace : namespace 안과 호스트 OS 상의 UID/GID가 서로 연결되어 이름공간 안과 갑ㄲ에서 서로 다른 UID/GID를 가질 수 있다
     - MOUNT namespace : 마운트란 컴퓨터에 연결된 기기나 기억장치를 OS에 인식 시켜 이용 가능한 상태로 만드는 것
     - UTS namespace : 호스트명이나 도메인명을 독자적으로 가질 수 있다
     - IPC namespace : 프로세스간의 통신(IPC) 오브젝트를 namespace 별로 독립적으로 가질 수 있다.

    cgroups (control groups)
     - 자원의 할당 관리
     - 프로세스와 스레드를 그룹화하여 그 그룹안에 존재하는 프로세스와 스레드에 대한 관리를 수행하기 위한 기능

    가상 NIC
     - OSI 참조 모델의 레이어 2인 가상 네트워크 인터페이스로, 페어인 NIC와 터널링 통신을 한다

    NAPT(Network Address Port Translation)
     - 하나의 IP 주소를 여러 컴퓨터가 공유하는 기술로 IP 주소와 포트 번호를 변환하는

    Docker 이미지의 데이터 관리 장치
     - AUFS : 다른 파일 시스템의 파일이나 디렉토리를 투과적으로 겹쳐서 하나의 파일 트리를 구성할 수 있는 파일 시스템
     - Btrfs : 과거의 상태로 돌아갈 수 있는 롤백 기능이나 어떤 시점에서의 상태를 저장할 수 있는 스냅샷 기능을 갖고있다
     - Device Mapper : 파일 시스템의 블록 I/O와 디바이스의 매핑 관계를 관리
     - OverlayFS : 파일 시스템에 다른 파일 시스템을 투과적으로 머징
     - ZFS : 볼륜 관리 스냅샷, 체크섬 처리, 리플리케이션 등을 지원

    Docker 명령어
     - docker container run : 컨테이너 작성 및 실행
     - docker version : 버전 확인
     - docker system info : 실행 환경 확인
     - docker system df : 디스크 이용 상황 확인
     - docker container ps : docker로 가동시킨 Nginx 서버의 상태 확인
     - docker container stats : 컨테이너 가동 확인
     - docker image pull : 이미지 다운로드 / docker image ls : 취득한 이미지 목록 표시 / docker image inspect : 이미지 상세 정보 확인 / docker image tag : 이미지에 표식이 되는 태그 붙임 / docker image rm : 이미지 삭제 / docker image prune : 사용하지 않은 Docker 이미지 삭제 / docker image push : 이미지 업로드 
     - docker login : Docker 리포지토리에 업로드하기 위해서 로그인 할때 / docker logout
     - docker search : Docker Hub에 공개되어있는 이미지 검색
     - -a 옵션 : 모든 태그 취득

    Nginx
     - 오픈 소스 웹 서버로 대량의 요청을 처리하는 대규모 사이트에서 주로 이용. 리버스 프록시나 로드밸런서와 같은 기능도 갖고 있다.


    <수업 필기>

    클라우드 : 가상화 기술을 이용해서 네트워크로 접근 가능한 서비스를 제공

    온프레미스 : 직접 구성

    비용 : 온프레미스 환경을 구성하려면 초기 구성 비용 증대 
              클라우드 환경은 사용 기간에 따른 비용 발생

    시간 : 클라우드 사용 시 초기 구성 시간 절약

    보안 : 클라우드는 제공업체에서 직접 구성 / 관리
              신뢰도 측면에서 선택
              온프레미스는 개인정보 등의 민감한 데이터 저장에 유리

    도커 : 컨테이너 런타임(엔진) -> 컨테이너 가상화 환경에서 컨테이너를 만들고 관리해주는 소프트웨어 (하드웨어 접근에 대해서는 x)
               컨테이너 가상화 기술을 이용해서 어플리케이션을 독립적으로 실행하는 기술(소프트웨어)

    도커가 사용하는 기본 기술 : 네임스페이스 / Cgroup / 소프트웨어 브릿지 /. 계층적파일시스템. 

    네임스페이스 : 컨테이너에서 하용할 개체의 구분
    Cgroup : 컨테이너 별 리소스 할당 / 제어
    소프트웨어 브릿지 : 컨테이너에 대한 외부 접근 (NAPT)
    계층적 파일 시스템 :  COW / overlay -> 컨테이너에서의 쓰기 작업 지원

'GOORM' 카테고리의 다른 글

GOORM: Kubernetes-33  (0) 2021.12.25
GOORM: Kubernetes-32  (0) 2021.12.25
GOORM: Kubernetes-30  (0) 2021.12.06
GOORM: Kubernetes-29  (0) 2021.12.02
GOORM: Kubernetes-28  (0) 2021.12.01

댓글