[구름 k8s] TIL 1-3-2

Peppie·2022년 8월 17일
0

0. 디스크 관리

LVM

Logical Volume Manager
Linux 저장공간을 효율적이고 유연하게 관리하기 위한 kernel 기능

LVM vs. 기존 방식

  • 기존 방식 : 디스크 (저장장치 storage)를 파티셔닝한 후 OS 영역에 마운트하여 read/write 수행
    -> 단점; 저장공간의 크기가 고정되어 증설/축소 어려움 -> 기존 방식의 단점 보완 위해 LVM 구성

  • LVM은 파티션 대신에 volume이라는 단위로 디스크(저장장치) 다룸

    • 디스크 (저장장치)의 확장/변경에 유연, 크기 변경할 때 기존 데이터 이전 필요 X

LVM 장점

  • 유연한 용량 조절
  • 크기 조절을 위한 storage pool
  • 편의에 따른 장치 이름 지정
  • disk striping, mirror volume 등 제공

LVM 구성

PV (Physical Volume)

  • 물리적 볼륨, 실제 디스크 장치를 분할한 파티션된 상태
  • 일정한 크기의 PE (Physical extent) 들로 구성

PE (Physical extent)

  • PV를 구성하는 일정한 크기 블록
  • 보통 1 PE는 4 MB에 해당
  • PE와 LE는 1:1 대응

VG (Volume Group)

  • PV들이 모여서 생성되는 단위
  • 사용자는 VG를 원하는 크기로 쪼개서 LV로 만들어 사용

LV (Logical Volume)

  • 사용자가 최종적으로 사용하는 단위
  • VG에서 필요한 크기로 할당받아 LV 생성

최종적으로 mount하는 대상은 LV

LVM 생성과정

  1. 기존 파일 시스템 종류 변경 -> fdisk 명령
  2. PV 생성 -> pvcreate
  3. VG 생성 -> vgcreate
  4. VG 활성화 -> vgchange -a y 명령
  5. LV 생성 -> lvcreate
  6. LV에 파일 시스템 생성 -> mkfs 명령
  7. LV 마운트 -> mount 명령

LVM 적용을 위한 패키지 설치 필요

lvm2 : LVM 패키지
설치 명령어: sudo apt-get install lvm2

1. Linux 부팅 과정 이해

booting

  • 초기 컴퓨터 전원 on을 하는 시점에서 메모리 내용은 아무것도 X
  • 실제 컴퓨터를 사용하기 위해서는 OS가 동작해야 사용 가능
    -> OS booting : 초기 전원 on 시점에 OS가 동작할 수 있도록 하는 단계
  • 즉 booting == OS 실행

Linux booting 과정

  1. 전원 on
  2. BIOS (Basic Input/Output System) 실행
  • 컴퓨터 ROM 또는 flash memory에 저장된 프로그램
  • 컴퓨터 상태 점검 -> CPU/Memory/IO Device
  • 부트 로더 프로그램 로드
    • 시스템 디스크 ( / 파티션) 의 MBR (Master Boot Record) 영역에 저장된 프로그램
    • 부트 로더 프로그램 : OS를 memeory로 로드하는 프로그램
    • Linux Kernel 저장 위치 : /boot 디렉토리에 vmlinuz~로 시작하는 이미지 파일
  1. 부트 로더 실행
  • Linux Kernel 로드 : /boot/vmlinuz-<kernel 버전>
    • uname -a : 현재 사용중인 Linux Kernel 정보 확인
  • 부트 로더 실행시 원하는 Linux Kernel을 설정 가능
  • 부트 로더
    • GRUB : 현재 사용하는 부트 로더
    • LILO
  1. 커널 초기화
  • Linux Kernel 실행
  • 커널 초기화 과정
    • memory 구성 초기화
    • IO Device 초기화
    • 시스템 동작을 위한 프로세스 생성 및 초기화
  • dmesg : 초기화 메시지 확인 명령
  1. systemd 서비스 실행
  • systemd : 1번 프로세스, daemon 프로세스
    (그렇다고 모든 프로세스들이 systemd에게 직접적으로 영향받는건 X)
  • booting level
    • booting 방식 및 모드 의미
    • CLI 모드 booting
    • GUI 모드 booting : 현재 사용하는 배포판이 주로 쓰는 booting 모드
  1. 로그인 shell 실행 (CLI 모드 booting) 및 프롬프트 표시

systemd 프로세스

  • Linux 최상위 프로세스 -> 1번 프로세스
  • Ubuntu 14.04 버전까지는 initd 프로세스가 1번 프로세스로 사용되었으나 이후 systemd가 1번 프로세스로 변경
  • 배포판에 따라 systemd 프로세스가 1번 프로세스로 변경된 시점에 차이가 존재

initd에 대한 systemd 차이점

  • 소켓 기반 동작 -> inetd와 호환성 유지
    • inetd : 슈퍼 데몬 프로세스
  • shell과 독립적으로 부팅 가능
  • 마운트 제어 가능
  • fsck 제거 기능
  • 시스템 상태에 대한 스냅샷 유지
  • SELinux와 통합 가능
    • SELinux : SEcure Linux
  • 서비스에 시그널 전송 가능

systemd 유닛

  • 전체 시스템 시작과 관리유닛 (unit) 구성요소 사용
  • systemd는 '서비스명.유닛 종류' 형태로 관리
  • 각 유닛은 같은 이름과 종류로 구성된 설정파일과 동일 이름 사용

systemd 유닛 종류

  • service : daemon 프로세스 시작/종료/재시작/로딩
  • socket : 네트워크 통신, domian socket (kernel 내부에서 사용)
  • device : IO Device 관리
  • mount : mount point 관리
  • automount :자동 mount 관리
  • target : run-level 관리
  • swap : swap 장치 관리
  • path : 경로 관리
  • timer : 타이머 관리
  • slice : 프로세스 계층 관리
  • scope : 외부 생성 프로세스 관리

Systemd 관련 명령

systemctl

Daemon 프로세스 관리 명령
( initd 프로세스 사용시에는 service 명령 사용 )

[sudo] systemctl [옵션] [명령] [<유닛명>]
  • -a : 상태와 관계없이 전체 유닛 출력
  • -t : 유닛 종류 -> 지정한 유닛 종류 출력

명령

  • status : 유닛 상태 확인

관리자 권한으로 실행 ↓

  • start : 유닛 시작
  • stop : 유닛 종료
  • restart : 유닛 재시작
  • enable : booting 시 자동실행 설정
  • disable : booting 시 자동실행 해제
  • isolate : 지정한 유닛 및 이와 관련된 유닛만 시작하고 나머지는 정지
  • 그냥 systemctl : 전체 유닛 출력
  • systemctl -a : 전체 유닛 출력
  • systemctl -t service : service 유닛 전체 출력
  • systemctl status <유닛명> : 유닛 상태 확인
    ex) systemctl status cron.service
    • enable 상태 : booting 시 자동 실행 의미
    • disable 상태 : booting 시 자동 실행 X
  • service <서비스명> status
    • service cron status : cron service 상태 확인, initd 기반 service 확인 명령
  • sudo systemctl stop cron.service : cron.service 유닛 종료
  • sudo systemctl start cron.service : cron.service 유닛 시작
  • sudo systemctl restart cron.service : cron.service 유닛 재시작

런레벨 (run-level)

  • 시스템 실행 레벨 의미

  • 0~6까지 정수로 부여

  • target 유닛에 의해 적용

  • 자주 사용하는 런레벨

    • 3번 : multi-user.target -> CLI booting
    • 5번 : graphical.target -> GUI booting
  • run-level 명령 : 현재 런레벨 출력

  • booting 방법에 대한 설정

    • sudo systemctl set-default multi-user.target : 기본 booting 방식을 CLI로 설정
    • sudo systemctl set-default graphical.target : 기본 booting 방식을 GUI로 설정
  • target 변경

    • sudo systemctl isolate multi-user (runlevel3)
    • sudo systemctl isolate graphical (runlevel5)

데몬 프로세스 (daemon process)

Linux 환경의 background에서 동작하면서 특정 서비스 제공하는 프로세스 => 사용자와 상호작용 X

데몬 동작 방식

독자형 (standalone) 데몬

  • 시스템 backgound에서 서비스별로 (항상) 동작
  • 빠른 초기 동작 속도
  • 자주 사용하는 서비스가 아니라면 자원 낭비 요인

슈퍼 데몬

  • 평소에는 슈퍼 데몬만 동작하다가 서비스 요청이 들어오면 슈퍼 데몬이 해당 서비스 제공 데몬 실행
  • 처음 서비스 응대시 독자형 데몬에 비해 느린 응답속도 but 효율적인 자원 사용
  • 네트워크 사용하는 서비스가 슈퍼 데몬 형식
  • inetd : UNIX 슈퍼 데몬명
  • xinetd : ubuntu 슈퍼 데몬명 (보안기능 포함)

pstree 명령 : 프로세스 계층 구조 확인

Linux 주요 데몬

  • sshd : 원격 접속 서비스 제공
  • httpd : 웹서비스 제공
  • ftpd : FTP 서비스 제공
  • nfs : 네트워크 파일 시스템
  • crond : 주기적으로 예약된 명령 실행 서비스
  • lpd : 프린트 서비스
  • ntpd : 시간 동기화 서비스

2. 소프트웨어 관리

Linux 환경에서 Application (program) 설치 방법

  • Application source를 다운로드 또는 복사하여 직접 컴파일 과정을 통해 설치
    ex) Linux Kernel

    • 한번에 원하는 결과물 얻기 어려움
    • 컴파일 과정은 환경에 영향 多 -> 실제 최종 결과물 얻기까지 많은 시행착오 발생,
      해당 문제 보완 위해 바로 밑의 방법 (패키지) 사용
  • Application 패키지 파일을 다운로드 또는 복사하여 직접 패키지를 이용한 설치
    해당 Application 설치에 필요한 의존성 파일 포함 제공
    ex) Ubuntu에서 Chrome 브라우저 다운로드

    • Debian 계열 package 파일 -> .deb 파일
      패키지 관리 dpkg 명령으로 설치/제거/업그레이드 관리 수행

    • Redhat 계열 package 파일 -> .rpm 파일
      패키지 관리 rpm 명령으로 설치/제거/업그레이드 관리 수행

  • 각 배포판에서 운영하는 repository (원격 저장소)를 통해 원하는 Application 패키지 다운로드 설치
    -> 인터넷 연결 필요, 일반적으로 사용하는 방법

    • Debian 계열 -> apt 명령
    • Redhat 계열 -> yum 명령

dpkg 명령

Debian 계열 패키지 관리 명령 : .deb 패키지 파일 설치/삭제/업그레이드/정보제공
dpkg [옵션] < .deb 파일명 또는 패키지명 >

  • -l : 설치된 패키지 목록 확인
  • -L <패키지명> : 해당 패키지로부터 설치된 모든 파일 목록 확인
  • -s <패키지명> : 해당 패키지 정보 확인
  • -I (대문자 i) < .deb 파일명> : 해당 .deb 파일 정보 확인
  • -i < .deb 파일명> : 패키지 설치/업그레이드, 관리자 권한
  • -r <패키지명> : 패키지 삭제 (설정 파일 삭제 X), 관리자 권한
  • -P <패키지명> : 패키지/설정 파일 삭제, 관리자 권한

apt 명령

  • Debian 계열 온라인 repository를 통한 패키지 관리 명령
  • Ubuntu 패키지 및 해당 패키지 정보를 관리하는 서버 정보는 /etc/apt/sources.list 파일에 저장
  • 기본적으로 /etc/apt/sources.list에 등록된 서버로부터 원하는 패키지에 대한 검색/다운로드/설치 가능
  • 만약 별도의 repository로부터 패키지를 설치하려면 해당 repository 서버 주소 등록 후 사용

apt-cache 명령

APT 캐시 (패키지 DB)에서 정보 검색; apt-cache [옵션] <서브 명령>

  • -f : 검색결과 전체정보 출력
  • 서브 명령
    • serach 키워드 : 캐시에서 키워드 검색
    • show 패키지 : 패키지에 대한 정보 출력

apt-get 명령

패키지 관리 명령, 온라인 repository로부터 패키지 다운로드/설치/삭제/업그레이드 등의 관리 수행

[sudo] apt-get [옵션] <서브 명령>

  • -d : 패키지 다운로드

  • -y : 패키지 설치시 자동으로 yes 적용

  • 서브 명령

    • update : repository의 새로운 패키지 정보 다운로드
    • upgrade : 현재 설치된 패키지 업그레이드
    • install <패키지> : 패키지 설치
    • remove <패키지> : 패키지 삭제 (설정파일 삭제 X)
    • purge <패키지> : 패키지 및 설정파일 삭제
    • autoremove : 불필요한 의존성 패키지 삭제
  • Linux booting 후 또는 패키지 설치전에 항상 sudo apt-get update 명령을 통해 새로운 패키지 정보 확보 후 필요한 패키지 설치

ssh 데몬 설치

  • sudo apt-get update
  • sudo apt-get install [-y] openssh-server
  • systemctl status sshd.service -> 서비스 실행유무 확인

3. TIF

어제의 마운팅 등의 내용이 너무나도 불지옥이어서 그랬는지 오늘은 상대적으로 제법 할만한 편이었다. 그렇지만 내일의 난이도는 과연 어떨진 감히 예상 못하겠다. 아마 오늘보단 어제에 더 가깝겠지?

그리고 오늘부터는 그동안의 실제 공책에 필기한 후 이 블로그로 학습 내용 정리본을 옮기는게 아닌, 아예 처음부터 블로그 글로 작성하는 걸로 바꿔봤다. 이 방식이 아무래도 시간 절약 종이 절약 체력 절약에 있어서 훨씬 나은 것 같아서 앞으로 이렇게 할 듯.

0개의 댓글