DevOps 마스터 kit -2

김재현·2022년 12월 7일
0

FastCampus

목록 보기
9/9

리눅스 배포판

  • 전 세계적으로 300여 가지의 선택지(리눅스 배포판)가 존재
  • public cloud 상에도 많은 배포판을 제공.

3개의 계열

Debian

  • Debian, Ubuntu, Mint Linux 등
  • 오픈소스이고 안정성에 초점
  • Ubuntu
    • 사용성과 긴 서비스 기간이 초점
    • 다수의 소프트웨어 레포지토리에서 패키지 사용 가능. DPKG 기반. apt-get/apt
    • 서버와 데스크톱에서 널리 사용됨.
  • Red Hat/Fedora
    • Fedora, Red Hat Enterprise Linux, CentOS, Oracle Linux, Amazon Linux 등
    • Fedora는 6개월마다 새 버전, CentOS는 좀 더 긴 사이클
    • RHEL(Red Hat Enterprise Linux)
      • RPM 기반, yum 또는 dnf
      • 엔터프라이즈 서버 환경 타겟
      • 엔터프라이즈의 경우는 보수적인 경향이 있음.
        긴 릴리즈 사이클(10년)
  • openSUSE 계열
    • openSUSE, SUSE Linux Enterprise Server
    • 오픈소스, 안전성에 초점.
    • SLES(SUSE Linux Enterprise Server)
      • rpm 기반, zypper
      • 관리 목적으로 YaST 사용 가능
      • 안전한 패키지 관리.
  • 어떤 배포판을 선택해야하나? > 워크로드에 따라 적합한 배포판을 선택해야함.
    • 예시) 웹서비스의 경우 Ubuntu, CentOS 등이 많이 사용됨
      SAP워크로드의 경우 SUSE.
    • 엔터프라이즈 환경의 경우 (오픈소스지만) 상용 배포판의 점유율이 높다.
      비용 문제가 있다면 Amazon Linux 사용도 대안이 될 수 있다.
  • 나는 리눅스 안 써봤는데?
    • 안드로이드 : Linux Kernel 기반의 플랫폼 위에서 작동함.
    • 스마트 TV, 키오스크, 라우터, 무선AP 등등 많은 시스템이 리눅스 기반으로 작동되는 경우가 많다.
    • 아이폰 :
      • 리눅스 커널과의 공통점 = Unix에서 기원
      • 리눅스와는 커널 구조의 형태가 다르다.

커널 종류

  • 모노리틱 커널
    • 안드로이드에서 이것을 사용
    • 장점 : 구현이 간단, 성능(커널 문맥에서 많은 부분이 처리. 시스템 자원 효율적 사용)
    • 단점 : 안정성. 커널 코드의 오류가 시스템 전체에 영향을 줌(예, NFS 동작 오류 > 커널 패닉)
  • 마이크로 커널
    • 장점 : 안정성(커널모드에서 동작하는 코드가 적음. IPC, 메모리 관리, 스케쥴링 정도. 나머지는 유저모드에서 프로세스로 동작)
    • 단점 : 성능
  • 하이브리드 커널
    • 둘의 장단점을 보완형 형태.
    • 필요한 것은 커널모드, 나머지는 유저 모드로 뺌. iOS는 이것을 사용.
  • 리눅스는 우주선에 사용할 만큼 충분히 가볍고 안전!

리눅스 커널

  • 오픈소스 모놀리틱 유닉스 계열 컴퓨터 운영 체제 커널
  • 크로스 플랫폼을 의도하지는 않았지만, 이후로 다른 운영 체제나 커널 대비 더 다양한 컴퓨터 아키텍처를 지원하도록 확장
  • C언어(개발), 어섬블러(아키텍처, 성능)로 작성
  • 가장 큰 오픈소스 프로젝트 중 하나.
  • 리눅스 커널은 약 7만개의 파일, 3천만 라인의 코드로 구성되어 있음.
    • 따라서 책/블로그 등으로 주요 개념 이해 후 필요시 관련 코드를 보는 식으로 접근하는 것이 권장하는 커널 접근 방식

커널

  • 컴퓨터 운영 체제의 핵심이 되는 컴퓨터 프로그램. 시스템의 모든 것을 완전히 통제한다.
  • 운영 체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러 가지 서비스를 제공한다.
  • 커널은 어플리케이션 소프트웨어와 하드웨어를 연결.

주요 기능

하드웨어 관리 및 추상화

  • 디바이스 드라이버만이 하드웨어가 제공하는 기능, 프로토콜에 관여
  • 사용자 프로그램(디바이스 드라이버 위에 올라가는 프로그램들)은 하드웨어에 종속적인 작업이 필요하지 않음.
  • 파일 저장 매체 종류를 고려하지 않고 사용 가능 > 블록 I/O 레이어
    • 파일 입출력 시 하드디스크/USB 등 저장 장치를 고려하지 않아도 됨.
    • 네트워크로 NAS에 저장되어 있더라도 User 레벨에서는 동일하게 사용됨.
  • 실제 파일이 저장된 위치 고려하지 않고 사용 가능 > 파일 시스템
    • 물리적인 관점에서는 저장장치에서 떨어져서 저장되어 있는 파일들도 OS의 하드웨어 관리 및 추상화를 통해 어플 관점에서는 연속된 위치에서 저장된 파일로 상정하고 사용 가능함.

프로세스와 쓰레드 관리

  • CPU 타임 공유와 메모리 보호
  • CPU 코어 갯수보다 더 많은 수의 프로그램이 동시 실행 가능 > 프로세스 스케쥴러
    • 동시에 프로그램을 실행할 수 있는 이유.
  • 메모리 주소 정보를 이용한 악의적 공격 > 메모리 보안 기능.
    • 논리적 메모리 주소를 프로그램을 실행할 때마다 다르게 할당함.
    • 메모리를 보호하기 위한 다양한 기능이 제공되고 있음.

메모리 관리

  • 개별 프로세스에 가상의 연속된 메모리 공간 제공
    32bit 머신 : 4GB. 64bit 머신 : 16엑사바이트
  • 실제 물리 메모리 내에서는 같이 섞여서 할당되고 해제됨.
  • 물리 메모리보다 큰 크기의 프로그램이 동시에 실행 가능 > 페이징

I/O 관리

  • 디바이스 드라이버 위에 다양한 I/O 지원
  • 모든 것은 파일이다.
  • 하부 시스템 구성에 상관없이 파일 입출력 형식으로 제어 가능 > VFS
    • Virtual File System
    • VFS 레이어 밑에 여러 디바이스가 파일 단위로 입력 및 출력을 오픈/리드/라이트/클로즈 할 수 있다.
    • 파일 디스크립터(File descriptor)로 관리.

      I/O?
      입력(Input)/출력(Output)의 약자로, 컴퓨터 및 주변장치에 대해 데이터를 전송하는 프로그램, 운영 혹은 장치를 일컫는 말. 대개의 경우 입력에 함께 출력이 발생하게 됨. 입력, 혹은 출력에만 사용되는 기기도 존재. 프로세서와 메모리, 확장 슬롯, 마더보드에서 일어나는 데이터 전송도 I/O라고 일컬어짐.

리눅스 시스템 구성

리눅스 설치 방법 - 로컬

  • 로컬 환경을 이용하는 방법
    → VirtualBox 이용.
    무료고 다양한 호스트를 지원하지만, 성능 제약이 존재한다.

  • Host 환경에 직접 설치
    • HostOS로 기존에 Windows, Mac을 사용하고 있다면 쓸 수 없는 방법.
  • Type1 Hypervisor
    • VMware vSphere, Linux KVM, Microsoft Hyper-V 등
    • 워크 스테이션이나 서버 환경에서 사용
  • Type2 Hypervisor
    • VirtualBox, Parallels Desktop, VMware Workstation 등
    • 데스크탑 환경에서 많이 사용.
  • 컨테이너 환경
    • Docker, Podman 등. 제약이 있음

VirtualBox

  • x86 가상화를 지원하는 Type-2 형태의 하이퍼바이저
  • 지원하는 호스트 : Windows, Linux, macOS, Oracle Solaris
  • 리눅스 배포판 이미지를 준비하자.
    우분투 서버
    버츄얼 박스

디스크타입

  • 스토리지 선택(정적/동적 할당)
  • 디스크 종류
    • 다른 버츄얼 머신 간에 마이그레이션 지원
    • 마이그레이션 목적이 아니라면 VDI, 기본으로 선택.
  • 동적 할당 / 고정 크기
    • 동적 할당 : 사용한 만큼 호스트 디스크 공간을 사용함.
      실제 파일이 쓰여지는 시점에 공간을 처리하기 때문에 파일 I/O와 관련된 성능이 조금 떨어짐.
    • 고정 크기 : 미리 물리 호스트 머신에 할당해둠.
      성능적으로 더 나음

네트워크 구성

  • 기본 구성
  • NAT를 통해서 외부 인터넷에 접속을 할 수 있게 된다.
  • 외부로의 인터넷 연결만이 가능하기 때문에 버츄얼 머신 간의 통신은 불가능함.

  • 버츄얼 머신끼리 통신 가능.
  • 가상의 스위치가 구성되게 되고, 그걸 통해서 버츄얼 머신이 서로 간에 통신을 할 수 있게 된다.
  • 이것도 마찬가지로 외부 인터넷에 접속 가능.

  • 호스트 머신과 동일한 수준의 네트워크 구성.
  • 호스트와 동일한 IP 대역의 IP를 할당받을 수 있음.
  • 장 : 스위치에 있는 다른 네트웤 장비가 있다면 IP를 통해 버츄얼 머신에 접속할 수 있음.

  • 호스트 간 통신을 할 수 있도록 스위치가 구성되지만, NAT가 없기 때문에 외부망으로 나갈 수 없다.
  • SSH(시큐어 셸, Secure Shell)
  • 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램 또는 그 프로토콜
  • 기존 rsh, rlogin, 텔넷 등을 대체하기 위해 설계되었으며, 강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능 제공.
  • 기본적으로 22번 포트 사용 > 운영환경에서는 다른 포트 사용 권장.

개발 환경 구성을 한번에!

  • Vagrant + VirtualBox 조합으로 Ubuntu 간편하게 설치하기.
  • 포터블한 가상 소프트웨어 개발 환경의 생성 및 유지보수를 위한 오픈소스 소프트웨어 제품.

$ brew install vagrant → vagrant 설치
$ mkdir -p ~~~ → 폴더 생성해서 작업 분리
$ vagrant init ~~~ 
 → vagrant 파일을 생성하게 됨. 가상머신을 가동하기 위한 각종 설정들이 포함됨. 
$ vagrant up --provider=virtualbox 
 → vagrant에 적용되어 있는 가상 머신 이미지를 vagrant 클라우드에서 다운받아 설치하게 된다. 
$ vagrnat ssh → 바로 접속 가능. 
  • 이미지를 다운받기 때문에 OS도 이미 설치되어 있다.
  • 기본 이미지를 다운 받아 손쉽게 버츄얼 박스를 세팅하고, 버츄얼 박스에 개발을 위한 프로그램/라이브러리 등을 설치한 후 이미지를 떠서 동료들에게 공유해주면 간단하게 세팅을 진행할 수 있음.

리눅스 설치 방법 - 클라우드

0개의 댓글