클라우드 컴퓨팅 공부

이주원·2024년 12월 16일

인자값을 갖는 잡 디스크립션 파일

스크립트 헤더

	#!/bin.bash

설명 : 이 스크립트가 bash 셸에서 실행됨을 지정합니다.
역할 : 스크립트 파일 실행 시 어떤 셸 해석기를 사용할지 알려줍니다.

사용자 입력값 정의

NUM_START = $1
NUM_END = $2

$1 : 첫 번째 인자로 전달된 값
$2 : 두 번째 인자로 전달된 값

변수 초기화

LOOP_COUNT=$NUM_START
SUM=0

LOOP_COUNT : 시작 숫자로 초기화
SUM : 합계를 저장할 변수를 0으로 초기화합니다.

시작 메시지 출력

	echo "Sum from $NUM_START to $NUM_END"

설명 : 입력받은 시작 숫자와 끝 숫자를 출력합니다.

while 반복문 실행

  while [ $LOOP_COUNT -le $NUM_END ]
  do
      SUM=`expr $SUM + $LOOP_COUNT`
      LOOP_COUNT=`expr $LOOP_COUNT + 1`
  done

1.조건검사 LOOP_COUNT가 NUM_END 이하일 때 반복합니다.
2.반복작업 expr : 두 수를 계산하는 명령어 입니다. SUM에 LOOP_COUNT값을 더합니다.
3.LOOP_COUNT=expr $LOOP_COUNT + 1 : LOOP_COUNT값을 1 증가시킵니다.

최종 합계 출력

	echo "Total Sum = $ SUM"

실행 예시

	bash count.sh 1 5

입력값 : 1시작 5끝

잡 디스크립션 파일

executable = count.sh

작업에서 실행할 스크립트 파일이나 실행 가능한 프로그램을 지정합니다.

universe = vanilla

HTC에서 작업을 실행할 환경을 지정합니다
vanilla : 기본 환경으로, 일반적인 실행 파일이나 스크립트를 실행할 때 사용됩니다.

arguments = 1 10

전달할 인자 값

out.txt error.txt log.txt

출력기록, 에러기록, 로그기록

queue

이 명령어는 작업을 큐에 추가하라는 의미입니다.

디렉터리 분리로 여러 작업 동시실행

작업을 실행할 스크립트 파일

cat read.sh

#!/bin/bash
while read line
do
echo "$line"
done < file.txt

디스크립션 파일

cat read.jds

  executable = read.sh
  universe = vanilla
  input = file.txt
  output =
  error =
  log =
  initialdir = run_1
  queue
  initialdir = run_2
  queue

initialdir의 의미
HTCondor 작업이 실행될 작업 디렉터리를 명시하는 옵션 입니다.
첫번째 작업은 run_1 디렉터리에서 실행됩니다.
두번째 작업은 run_2 디렉터리에서 실행됩니다.

디렉터리 준비

mkdir run_1
mkdir run_2
cp file.txt run_1
cp file.txt run_2

처리될 파일인 file.txt를
작업을처리할 디렉토리인 run_1과 run_2에 넣는다.

결과 파일

  cat run_1/out.txt
  cat run_2/out.txt
  cat run_1/log.txt
  cat run_2/log.txt

각각의 디렉토리에 산출물이나옴

파일 이름 분리로 여러작업 동시 실행

잡 디스크립션 파일

cat multiple.jds

executable = count.sh
universe = vanilla
arguments = 1 10

output = out.(Process).txterror=error.(Process).txt error = error.(Process).txt
log = log.$(Process).txt

queue 10

잡 서브미션

condor_submit multiple.jds

결과파일

error.0.txt ~ error.9.txt
log.0.txt ~ log.9.txt
....

요구사항을 갖는 작업

잡 디스크립션 파일

cat req-error.jds

executable = count.sh
universe = vanilla

requirements = (OpSys == "LINUX" && Arch == "INTEL")
request_memory = 32M
rank = Memory >= 64M
image_size = 28

arguments = 1 10
output 
error
log

queue

운영체제 리눅스 이면서 아키텍쳐가 인텔이여야하며
요구되는 메모리는 32
작업이 선호하는 노드의 우선순위 조건은 메모리가 64MB이상인 노드이며
메모리 이미지 크기가 28MB인 노드를 찾음

시스템 스펙 확인

condor_status -l | grep OpSys 운영체제 확인
condor_status -l | grep Arch 아키텍쳐 확인

작업 삭제

condor_rm 32.0

자동화 도구가 필요한 이유

자동화의필요성

매뉴얼방식 -> 인적 오류

데이터 센터의 주요 다운타임 원인

88%가 휴먼에러임

IaC

*프로비저닝이란 IT시스템이나 리소스를 필요에 따라 준비하고 제공하는 과정을 의미합니다.

IaC란 무엇인가?

인프라를 코드로 관리하고 프로비저닝 하는 개념입니다.

IaC의 특징

인프라 사양을 담은 구성 파일 생성
코드로 인프라의 사양을 정의하는 파일을 생성합니다.

구성을 편집하고 배포하기 쉬워짐

코드로 작성된 인프라는 수정과 배포가 간편합니다.

매번 동일한 환경을 프로비저닝 하는것을 보장

코드를 실행할 때마다 동일한 설정의 인프라가 자동으로 생성됩니다.

소프트웨어 소스 코드와 동일하게 버전 관리 가능

인프라 코드도 소프트웨어 소스 코드처럼 버전 관리할 수 있습니다.

인프라를 모듈식 구성 요소로 분할해 결합 가능

수동 관리 불필요

IaC의 장점 요약

1.자동화 : 수동 작업 없이 인프라를 자동으로 설정합니다.
2.일관성 : 코드 실행 시 동일한 환경을 보장합니다.
3.편리한 관리 : 수정과 배포가 쉽고 버전 관리가 가능합니다.
4.유연성 : 모듈화된 요소를 결합하여 다양한 구성을 지원합니다.

vagrant 로 노드 구성하기

자동화 도구기반 클러스터 구성도

프로비저닝이란 IT시스템이나 리소스를 필요에 따라 준비하고 제공하는 과정을 의미합니다.
configuration 이란 생성된 시스템에 필요한 설정을 적용하는 과정입니다.

1. 기본개념

클러스터를 자동으로 구성하는 과정입니다.

사용되는 도구
vagrant : 가상머신 생성
ansible : 생성된 vm에 필요한 설정을 자동화

2. 순차적 실행 과정

가. vagrantfile 작성
vagrantfile을 통해 가상머신의 사양과 개수를 정의합니다.
ex_) master 노드 1개와 slave 노드 2개를 설정합니다.

나. vagrant 실행
vagrant up명령어를 실행하면 virtualbox를 사용해 가상머신을 생성합니다.

다. vm provisioning
virtualbox가 vagrant에 의해 가상 머신을 생성합니다.
각 가상머신은 어떤 운영체제를 사용하도록 설정됩니다.

라. vm Configuration
1. ansible play book 작성 : condor_config.yml 파일과 같은 설정 파일을 사용합니다.
2. ansible 실행 : ansible이 각 가상머신에 접속해 설정을 적용합니다.

마. vm configuration 완료
모든 가상 머신이 설정을 완료하고 준비됩니다.

vagrant 설치

*curl : url을 사용해 데이터를 다운로드하거나 업로드하는 데 사용됩니다.
베이그란트 리포지터리를 로컬에 받아온다음
sudo apt install vagrant

vagrant 설치를 위한 기본 설정

mkdir vrepo
cd vrepo/
vagrant init
ls
Vagrantfile

가상머신설정을 정의할 작업 디렉토리를 만듬
베이그란트 환경을 초기화함
디랙토리에 베이그란트 파일이 생성됨
베이그란트파일은 가상머신의 설정을 정의할 수 있습니다.

vagrantfile 초기상태

cat Vagrantfile

mode : ruby
루비로 작성되어 있어 설정파일 또한 루비 파일임

vi: set ft=ruby
vi 에디터의 현재 파일타입을 ruby로 설정

Vagrant.configure("2") do |config|
Vagrant의 설정의 시작
"2" : Vagrant의 설정 버전

config.vm.box = "base"
가상 머신에 설치할 운영체제를 지정

설정을완료한후 vagrant 생성

vagrant up

Ansible로 HTCondor 구성하기

설치 및 기본설정

멱등성 : 연산을 여러번 적용하더라도 결과가 달라지지 않은 성질
sudo apt install ansible

ansible 인벤토리란? + ansible 플레이북 작성및실행

인벤토리 파일 : Ansible이 관리할 호스트의 목록을 정의하는 파일입니다.

기본위치 : /etc/ansible/hosts
포맷 : INI 포맷 , YAML 포맷

  1. ansible 디렉터리를 생성합니다.
  2. 인벤토리 파일을 편집합니다.
    INI 포맷의 구조
    [cluster] : 모든 호스트를 클러스터 그룹으로 묶습니다.
    ssh접속에 사용할 프라이빗 키 경로 입력

[master] : 마스터 노드 그룹
[worker] : 작업 노드 그룹
모든그룹에 ansible_user : ssh로 접속할 사용자 계정 입력
3. 호스트를 확인함

  1. 호스트 통신 확인
    ansible cluster -m ping

  2. ansible 플레이북 작성
    플레이북 : 각 서버에 설정할 작업 리스트
    YAML로 기술
    HTCondor 환경 설정

  3. 플레이북 실행
    ansible-playbook htcondor.yaml

HTCondor 클러스터 확인

vagrant ssh master
condor_status

master에 접속해서 상태를 확인하니 작업이 실행중임

연습문제

대규모 인프라 구축 시 자동화 도구의 필요성

필요성: 일관된 환경 제공, 시간 절약, 인간 오류 최소화

vagrant와 ansible의 차이점

vagrant : 가상 머신을 생성하고 관리하는 도구
ansible : 이미 준비된 시스템에 설정 및 소프트웨어를 자동화하여 배포/구성하는 도구

자동화 도구 적용사례

vagant: 개발테스트 환경에 vm제공
ansible: 서버설정, 소프트웨어 설치, 패치 배포 등에 사용

Vagrantfile에서 ssh 설정 변경 이유

ssh 설정 변경은 기본 키파일 또는 사용자 권한 문제를 해결하기 위해 필요함,
다른 머신에서도 키 파일과 사용자가 일치하도록 설정

ansible에서 버전이중요한이유

호환성 문제 방지 : 최신 버전이 호스트와 플레이북의 기능을 지원
기능 보장 : 특정 모듈이나 명령은 버전에 따라 다름

인벤토리 파일의 YAML 포맷 설정

/etc/ansible/hosts 파일을 yaml 형식으로 작성한후
ansible cluster -m ping 명령으로 모든 호스트에 접속 테스트

아마존 AWS를 활용한 가상머신 생성과 접속

AWS Console에서 EC2로 이동

Security Groups 선택 및 Create Security group 선택

1단계 security group 메뉴로 이동
보안그룹은 아마존웹서비스에서 방화벽 같은 역할을 합니다.

2단계 security group 생성
Create Security Group 버튼을 클릭합니다.
Security Group은 인스턴스에 대한 접근 제어 규칙을 정의합니다.

3단계 Security Group 기본 설정
Security Group name : HTCondor 사용자 정의 이름
Description: Allow SSH and HTCondor.
vpc:해당 vpc를 선택합니다 vpc는 aws 내의 네트워크 영역입니다.

4단계 인바운드 룰 설정
가.ssh 접속 허용 type:ssh
나.custom tcp허용(HTCondor 에 필요) type:Custom TCP
다.Add Rule을 클릭

5단계 보안그룹 적용

AMI(아마존 머신이미지) 선택

AMI는 EC2 인스턴스를 실행하기 위한 필수 구성 요소입니다.
운영체제,애플리케이션 소프트웨어패키지,보안 설정 등이 포함된 시스템 이미지입니다.

Key Pair 생성

cd Downloads/
ls
cloud-test.pem

private 접근권한 변경

ls -l cloud test.pem
-rw-rw-r--

이상태에서는 다른 사용자도 파일을 읽을 수 있으므로 보안에 취약함

chmod 400 cloud-test.pem
ls -l cloud-test.pem
-r--------

소유자만 읽을 수 있도록 변환

가상머신 접속

ssh -i "cloud-test.pem" ec2-user@35.173.216.28

가상머신 정보 확인

hostnamectl
chassis : vm //하드웨어 시스템의 유형
virtualization : xen //가상화를 위해 사용된 기술 ,하이퍼바이저기술
operating system : amazon linux 2 //운영체제

ec2 인스턴스 관리를 위한 java sdk 기반 소포트웨어 도구와 htcondor 클러스터 관리 구조

java 라이브러리 설정

주요 라이브러리

1.aws-java-sdk : aws sdk를 통해 ec2와 같은 aws 리소스를 프로그래밍 방식으로 제어합니다.
2.httpclient : http 요청을 처리하는 라이브러리
3.jackson : json 데이터를 직렬화 및 역직렬화하는 라이브러리

AWS 자원 동적 관리 프로그램 실행 화면

java -cp ./lib/awssdk/:./libs/http/:./lib/etclib/*:. aws.awsTest //aws.awsTest: AWS 관리 기능을 제ㅐ공하는 자바 클래스 파일입니다.

AWS EC2관리와 HTCondor 클러스터 통합 구성

자바프로그램을통해 AWS EC2 인스턴스를 생성,시작,중지 등 관리할 수 있습니다.

HTConodr 클러스터 구성
master 노드 : htcondor 중앙 관리자 역할을 하며 작업을 스케줄링합니다.
slave 노드 : 실제 작업을 수행하는 워커 노드들입니다.

가상화 기술 개념

가상화란?

가상화는 컴퓨터에서 컴퓨터 리소스의 추상화를 일컫는 광범위한 용어입니다.

가상화의 핵심

실제 존재하지 않는 하드웨어 플랫폼, 운영체제,스토리지나 네트워크들을 가상적으로 제공

가상화 정의

가상시스템이 호스트 시스템에서 우리가 기대하는 방식으로 동작

가상화 대상 시스템: ABI와 ISA 구분

가상화 형태의 분류

가상화는 시스템 자원을 추상화해 여러 환경에서 사용할 수 있게 만드는 기술입니다.
매핑함수V의 구현방식에 따라 ABI와 ISA로 구분됩니다.

ABI레벨

ABI는 응용프로그램과 운영체제 사이의 인터페이스입니다.
프로그램이 시스템 호출을 통해 운영체제의 기능에 접근하는 방식을 정의합니다.
여기서 시스템 콜은 소프트웨어가 운영체제의 기능을 사용하기 위해 호출하는 명령입니다.
ABI레벨에서는 에플리케이션이 특정 운영체제 위에서 실행되며, 시스템 ISA는 숨겨져 있습니다.

간단히말하면 : 애플리케이션이 특정 운영체제에서 실행되는 인터페이스를 정의하는 레벨입니다.

ISA 레벨

ISA는 하드웨어와 소프트웨어 간의 명령어 세트를 정의합니다.
운영체제와 애플리케이션이 시스템 하드웨어와 상호작용하는 방식입니다.
ISA 레벨 가상화는 시스템의 명령어 세트를 가상화하는 방식입니다.

간단히 말하면 : 소프트웨어가 하드웨어에 명령을 내리는 명령어 레벨의 가상화 입니다.

ABI VS ISA

ABI레벨은 애플리케이션과 운영체제사이
ISA레벨은 소프트웨어와 하드웨어간 명령어 세트

가상화 수준 ABI는 시스템 호출 , ISA는 명령어 세트 가상화

ABI 레벨 가상화

소프트웨어 애플리케이션 관점에서 시스템 가상화
프로세스 가상머신
대표적 예시로 JVM 이있다.
이러한 형태의 가상머신을 런타임 이라고한다.

ISA 레벨 가상화

명령어 집합에 대한 가상화
시스템 가상머신
가상모니터, 1960년 후반부터 용어 사용
하드웨어 시스템과 일반적인 소프트웨어 사이에 위치

ABI 가상화

Multiprogramed system

단일 프로세스가 마치 전체 시스템을 독점

Emulator

User ISA만 에뮬리에션
인터프리터 방식 - 느림
바이너리 트랜슬레이터 방식 - 소스 인스트럭션을 블럭단위로 변환하여 수행 , 오버헤드가 존재하나 빠름 ,다이나믹 바이너리 트랜슬레이터

Same ISA Binary Optimizer

동일한 ISA를 갖는 경우 최적화 하여 사용
바이너리 트랜슬레이터는 다른 IS에 해당하는 명령어도 처리할 수 있습니다.

High Level Language Virtual Machine

하드웨어와 운영체제에 대한 의존성을 최소화하고, 고수준 언어로 작성된 애플리케이션을 실행할 수 있는 환경을 제공 EX_ JVM

프로세스 가상머신 그룹핑

  • 동일한 ISA
    multiprogramed system , Same ISA Optimizer
  • 다른 ISA
    Dynamic Translator
    HIgh Level Language Virtual Machine

하이퍼바이저

하이퍼바이저 용어

  1. 하이퍼바이저
    가상화 소프트웨어 = 가상머신 모니터
  2. 호스트 머신
    하이퍼바이저가 설치되는 물리시스템
  3. 게스트 머신
    하이퍼바이저가 관리하는 가상머신
  4. 하이퍼바이저 타입
    물리시스템에 직접설치 여부로 결정
    타입1, 타입2

타입 1 하이퍼바이저

물리시스템 하드웨어에 직접 설치되는 가상머신을 관리
베어메탈
kvm,xen
물리시스템의 운영체제 역할을 수행
대규모 클라우드 컴퓨팅 서비스를 위해 도입
클라우드 서비스의 신속한 확장과 축소가 가능하도록 확장성을 보장
가상머신과 호스트머신간 빠른 통신이 가능

kvm 모듈이 설치된 리눅스 운영체제는 자체가 type1 하이퍼바이저

물리시스템의 하드웨어적 가상화 지원
VT-x (Intel)
AMD-V (AMD)

타입 2 하이퍼바이저

호스트머신의 운영체제 위에서 마치 애플리케이션처럼 설치
가상머신을 단일 물리시스템에 설치하고 운영하는 편리
호스트머신의 하드웨어에 직접접근이 어려움
타입 1 하이퍼바이저 대비 오버헤드 발생
QEMU, Oracle VirtualBox

대표적인 하이퍼바이저 - KVM

공개 소프트웨어 기반 하이퍼바이저
KVM
XEN
QEMU - I/O 에뮬레이션을 위해 사용

kvm-ok

대표적인 하이퍼바이저 - Xen

반가상화 하이퍼바이저로 시작
전가상화와 파드웨어 지원을 받는 타입 1
도메인 개념을 도입하여 특권레벨을 구분
- 특권 도메인 : 물리시스템의 장치에 접근이 가능한 가상머신
- 게스트 도메인 : 일반 가상머신
특권 도메인은 Xen에 하이퍼콜을 통해 장치에 접근

하이퍼바이저의 라이프 사이클

인텔 VT-x 기반 VMM 라이프 사이클

VT-x : 인텔의 하드웨어 기반 가상화 기술입니다.
VMX : VT-x를 활성화시키는 플래그로, 하드웨어 가상화의 핵심 역할을 합니다.

/proc/cpuinfo vmx플래그확인

vmm의 역할

  1. 프로세서 자원 관리
  2. 물리 메모리 할당 및 제어
  3. 인터럽트 관리
  4. I/O 제어

루트 모드와 비루트 모드

VMM은 루트모드에서 실행됩니다.
루트 모드 : VMM이 실행되는 모드로, 하드웨어 자원에 대한 완전한 접근권한을 가집니다.

가상머신은 비루트모드에서 실행됩니다.
비루트모드 : 가상머신이 실행되며, 제한된 권한만을 가집니다.

모드 전환

루트모드와 비루트모드간의 전환은 가상머신 실행 중 반복적으로 발생합니다.
VMM 트랜지션

VM Entries: 루트 모드에서 비루트 모드로 진행됩니다.

명령어:VMRESUME,VMLAUNCH

VM Exit: 비루트모드에서 루트모드로 전환됩니다. 

vmcs

  1. 여러 가상머신에 대한 상태를 저장
  2. 메모리상에 존재, 가상머신별로 존재
  3. 컨텍스트 스위칭될때 VMCS에 정보 저장
  4. 6개의 논리적 그룹으로 구성

vmm life cycle 요약

VMXON : VMX 명령을 실행할 수 있는 단계로 진입
VM Entries : VMM은 한번에 하나씩 가상머신을 실행
VM Exit : VMX의 비특권 모드에서 특권모드로 전환
VMXOFF : VMM 종료

가상화

소프트웨어 기반 전가상화

게스트 OS로부터 요청이 오면 하이퍼바이저가 소프트웨어적으로 처리
바이너리 트랜슬레이션 이라고함

동작방식
1. 게스트 OS가 RING1으로 이동
2. RING0에 하이퍼바이저 위치
3. 게스트 OS가 가상화가 불가능한 명령 -> 새로운 명령 셋으로 바이너리 트렌슬레이션
4. 게스트 OS에서 특권 명령을 수행할 때 트랩 발생 -> 하이퍼바이저로 제어가 넘어감
5. 하이퍼바이저가 CPU가 인식할 수 있는 명령으로 변경하여 하드웨어에 전달

트랩

  1. 트랩 - printf() 호출시 트립 핸들러
  2. 인터럽트 - usb를 시스템에 연결할때 nic를 통해 패킷을 받아들일 때
    인터럽트는 비동기적으로 발생 + 키보드입력 등 , 인터럽트핸들러
  3. 익셉션 - cpu에서 발생 , 5/0과같은 익셉션은 폴트(복구가능한에러)와 어보트(복구불가능한에러)로 나누어짐

단점

중간에 cpu가 인식할 수 있는 명령으로 변경해야 해서 오버헤드가 발생, 구현이 까다로운 단점
해결방안으로 os를 수정한 하이퍼콜방식을 제안

하드웨어기반 전가상화

바이너리 트랜슬레이션을 제거하고 가상화 기술이 구현된 하드웨어가 직접 수행

동작방식

게스트 os가 트랩을 발생시킬 때 바이너리 트랜슬레이션 없이 가상화 기술을 통해 하드웨어를 직접 제어

1.비루트 모드 : 게스트 운영체제가 Ring 0에서 동작
2.루트 모드 : 하이퍼바이저가 Ring 0 보다 높은 권한으로 실행
3.민감한요청이 게스트 os로부터 발생하면 하이퍼바이저로 트랩 발생

반가상화

게스트 os는 자신이 가상화 환경에서 실행되고 있는 것을 인지
게스트 os를 수정하여 하이퍼바이저와 통신할 수 있는 api 추가

장점

반가상화가 하드웨어 기반 전가상화보다 성능이 좋은 예(타이머)
운영체제가 idle 상태에서도 타이머 인터럽트를 처리
만약 가상머신에서 타이머 인터럽트를 받지 못할 경우 시간관리에 장애

전가상화의경우
하이퍼바이저가 타이머 인터럽트를 주기적으로 가상머신에 발생시켜줌

반가상의 경우
게스트 os를 수정하면그만임

단점

cpu 핸들링이 어려움
가상 cpu는 물리 cpu와 동작방식이 다를 수 있음

하이브리드 가상화

하드웨어 기반 가상화

하드웨어 지원을 기반으로 가상화 환경을제공 VT-x나 AMD-V와 같은 하드웨어 가상화 기술을 사용

반가상화와 하드웨어 기반 가상화를 조합한 방식

하드웨어기반 가상화는 운영체제 변경이 필요가 없습니다.
운영체제의 수정이 필요치 않는 전가상화 환경에서 성능이 향상됩니다.
그렇지만 종종
하드웨어 기반 가상화는 대부분에상황에서 소프트웨어기반 반가상화보다 성능이 좋지만 I/O가 많이발생하거나 메모리접근을 많이하는경우에 리소스를관리하는 오버헤드가 늘어나거나 병목현상이 일어나 성능이 저하될수 있습니다.

이를해결하기위해 반가상화와 하드웨어 기반 가상화를 조합한 방식이 있습니다.
하드웨어 지원 가상화를 기본으로 사용하면서
I/O 메모리 집약형 작업에는 반가상화 디바이스 드라이버를 이용합니다.

os레벨 가상화

컨테이너 기술
하이퍼바이저가 가상머신의 운영체제를 공유하지 않음

KVM

kvm 설치

sudo apt install qemu qemu-kvm libvirt-bin bridge-utilsvirt-manager

libvirt는 가상화를 관리하기 위한 api입니다.

sudo systemctl start libvirtd
sudo systemctl ebable libvirtd
//kvm 서비스 시작

nmcli c //kvm의 네트크 인터페이스 확인

virt-install // vm과 이미지파일을 같은 폴더에 넣고 실행

많이 사용하는 virsh 명령어

virsh list --all //만들어진 kvm 가상머신의 전체 리스트를 출력
virsh start //vmname 가상머신을 시작
virsh shutdown vmname // 가상머신 정료
virsh reboot vmname // 가상머신을 재부팅
virsh destroy vmname // 가상머신을 강제 종료한다.
virsh undefine vmname // 가상머신을 제거한다
virsh console vmname // 가상머신의 콘솔에 접속한다.

kvm 복제

virt-clone --original centos 7-1 --name centos7-2 --file ./vm/centos7-2.img

연습문제

가상화 기술에 대해 자신의 언어로 정의해보라

가상화 기술이란 하나의 물리적 하드웨어를 여러 개의 논리적 노드로 분리하여 각각 독립적으로 운영할 수 있도록 만드는 기술입니다. 이를통해 하드웨어 자원을 효율적으로 활용할 수 있습니다. 하이퍼바이저를 이용해 하드웨어를 분리 및 관리하며, 클라우드 컴퓨팅과 데이터센터 운영에서 필수적인 역할을 합니다.

kvm이 모듈방식으로 하이퍼바이저가 되는 동작 방식을 조사하고 설명하라

kvm은 Intel VT-x나 AMD-V와 같은 하드웨어 가속 기술을 활용하여 가상 머신을 실행하며,각 가상 머신을 호스트 운영체제에서 독립적인 프로세스로 관리합니다. kvm 자체는 하드웨어 자원을 제어하는 역할을 하며, qemu와 결합하여 가상 머신의 cpu,메모리,I/O처리를 효율적으로 수행합니다.

전가상화화 반가상화의 트랩이 발생하는 차이를 설명하라

전가상화는 하드웨어 접근 시 하이퍼바이저가 인터럽트를 통해 명령을 가로채며 게스트 운영체제 수정이 필요 없습니다.
반가상화는 게스트 운영체제가 하이퍼바이저와 직접 협력하여 인터럽트를 최소화하며, 수정된 운영체제만 사용할 수 있습니다.

Pool

가상화 리소스풀

리소스 풀은 하이퍼바이저 또는 가상화 관리 도구가 제공하는 기능으로, 하드웨어 자원을 논리적으로 그룹화해 가상머신들이 사용할 수 있도록 관리하는 구조 입니다.

풀 만들기

virsh pool-define-as --name default --type dir --target /.../
virsh pool-autostart default
virsh pool-build default
virsh pool-start default

풀 위에 가상머신생성

kvm 라이브 마이그레이션 사용

virsh migrate --vervose --copy-storage-all --persistent --live cirros qemu+ssh
virsh undefine cirros

연습문제

라이브 마이그레이션 기술의 종류와 기술적 특징에 대해 설명하라

  1. nonlive migration 실행 중인 가상머신을 잠시 중지 시킨 상태에서 현재 호스트에서 다른 호스트로 이동시키는 방법이다.

  2. livemigration 수행 중인 상태를 계속 유지하면서 가상머신을 다른 호스트로 이동시키는 방식이다.

라이브 마이그레이션 기술에 서 고려해야할 사항

preparetime : 사전 준비에 필요한 시간
down time : 서비스 중지된 시간
resume time : 마이그레이션 종료후 목적지 가상머신이 통제권을 가지고 시작되는 시간
total migration time : 소요된 총시간
transterred ram : 이전호스트에서 목적지 호스트까지 전송된 메모리
duplicate page : 이전 호스트 시스템에서 목적지 호스트 시스템에 중복으로 전송된 메모리 페이지의 수
Performance Degradation : 성능 저하 정도

컨테이너 기술의 역사

OCI

컨테이너 기술의 표준을 정의하는 단체입니다.
도커와같은 특정 기술에 종속되지 않도록 표준화된 컨테이너 런타임을 보장

컨테이너 런타임

런타임은 컨테이너를 실행하는 프로그램입니다.

쿠버네티스

컨테이너를 오케스트레이션(조직화 및 관리) 하는 도구입니다.

CNCF

클라우드 네이티브 기술 개발과 유지를 담당하는 재단입니다.

요약

oci->컨테이너 표준스펙정의
런타임->초기에는 도커만 존재했지만 rio rkt container 등 다양한 대안이 개발
쿠버네티스->여러 컨테이너를 관리하고 제어하는 오케스트레이션 툴
cncf->쿠버네티스와 같은 클라우드 네이티브 기술을 개발하고 유지 관리함

컨테이너는 가상화는아니다

공통점 : 독립된 환경 및 다른 컨테이너에 영향을 주지않음 -> 가상머신과 동일
차이점 : 독립된 운영체제를 갖지 않음 -> 가상머신과 차이

컨테이너 vs 가상머신

컨테이너가 유리한 경우

가.애플리케이션이 멀티서비스 아키텍처인 경우
나.애플리케이션이 동작하는 서버의 수를 최소화 하고자 하는경우
다.클라우드 네이티브 애플리케이션 개발(작고 독립적이고 상호결합도가 낮은 서비스들의 모음)
라.애플리케이션 개발환경이 배포환경과 유사한 경우

가상머신이 유리한 경우

가.애플리케이션 모노리식 아키텍처인 경우
나.서로 다른 운영체제가 필요한 경우
다.플랫폼에 고정된 스토리지 시스템이 필요한경우
라.운영체제의 많은 기능이 필요한 경우

profile
뭐가될지 모름

0개의 댓글