#!/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 [ $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끝
작업에서 실행할 스크립트 파일이나 실행 가능한 프로그램을 지정합니다.
HTC에서 작업을 실행할 환경을 지정합니다
vanilla : 기본 환경으로, 일반적인 실행 파일이나 스크립트를 실행할 때 사용됩니다.
전달할 인자 값
출력기록, 에러기록, 로그기록
이 명령어는 작업을 큐에 추가하라는 의미입니다.
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).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%가 휴먼에러임
*프로비저닝이란 IT시스템이나 리소스를 필요에 따라 준비하고 제공하는 과정을 의미합니다.
인프라를 코드로 관리하고 프로비저닝 하는 개념입니다.
인프라 사양을 담은 구성 파일 생성
코드로 인프라의 사양을 정의하는 파일을 생성합니다.
코드로 작성된 인프라는 수정과 배포가 간편합니다.
코드를 실행할 때마다 동일한 설정의 인프라가 자동으로 생성됩니다.
인프라 코드도 소프트웨어 소스 코드처럼 버전 관리할 수 있습니다.
1.자동화 : 수동 작업 없이 인프라를 자동으로 설정합니다.
2.일관성 : 코드 실행 시 동일한 환경을 보장합니다.
3.편리한 관리 : 수정과 배포가 쉽고 버전 관리가 가능합니다.
4.유연성 : 모듈화된 요소를 결합하여 다양한 구성을 지원합니다.
프로비저닝이란 IT시스템이나 리소스를 필요에 따라 준비하고 제공하는 과정을 의미합니다.
configuration 이란 생성된 시스템에 필요한 설정을 적용하는 과정입니다.
클러스터를 자동으로 구성하는 과정입니다.
사용되는 도구
vagrant : 가상머신 생성
ansible : 생성된 vm에 필요한 설정을 자동화
가. 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 완료
모든 가상 머신이 설정을 완료하고 준비됩니다.
*curl : url을 사용해 데이터를 다운로드하거나 업로드하는 데 사용됩니다.
베이그란트 리포지터리를 로컬에 받아온다음
sudo apt install vagrant
mkdir vrepo
cd vrepo/
vagrant init
ls
Vagrantfile
가상머신설정을 정의할 작업 디렉토리를 만듬
베이그란트 환경을 초기화함
디랙토리에 베이그란트 파일이 생성됨
베이그란트파일은 가상머신의 설정을 정의할 수 있습니다.
cat Vagrantfile
mode : ruby
루비로 작성되어 있어 설정파일 또한 루비 파일임
vi: set ft=ruby
vi 에디터의 현재 파일타입을 ruby로 설정
Vagrant.configure("2") do |config|
Vagrant의 설정의 시작
"2" : Vagrant의 설정 버전
config.vm.box = "base"
가상 머신에 설치할 운영체제를 지정
vagrant up
멱등성 : 연산을 여러번 적용하더라도 결과가 달라지지 않은 성질
sudo apt install ansible
인벤토리 파일 : Ansible이 관리할 호스트의 목록을 정의하는 파일입니다.
기본위치 : /etc/ansible/hosts
포맷 : INI 포맷 , YAML 포맷
[master] : 마스터 노드 그룹
[worker] : 작업 노드 그룹
모든그룹에 ansible_user : ssh로 접속할 사용자 계정 입력
3. 호스트를 확인함
호스트 통신 확인
ansible cluster -m ping
ansible 플레이북 작성
플레이북 : 각 서버에 설정할 작업 리스트
YAML로 기술
HTCondor 환경 설정
플레이북 실행
ansible-playbook htcondor.yaml
vagrant ssh master
condor_status
master에 접속해서 상태를 확인하니 작업이 실행중임
필요성: 일관된 환경 제공, 시간 절약, 인간 오류 최소화
vagrant : 가상 머신을 생성하고 관리하는 도구
ansible : 이미 준비된 시스템에 설정 및 소프트웨어를 자동화하여 배포/구성하는 도구
vagant: 개발테스트 환경에 vm제공
ansible: 서버설정, 소프트웨어 설치, 패치 배포 등에 사용
ssh 설정 변경은 기본 키파일 또는 사용자 권한 문제를 해결하기 위해 필요함,
다른 머신에서도 키 파일과 사용자가 일치하도록 설정
호환성 문제 방지 : 최신 버전이 호스트와 플레이북의 기능을 지원
기능 보장 : 특정 모듈이나 명령은 버전에 따라 다름
/etc/ansible/hosts 파일을 yaml 형식으로 작성한후
ansible cluster -m ping 명령으로 모든 호스트에 접속 테스트
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는 EC2 인스턴스를 실행하기 위한 필수 구성 요소입니다.
운영체제,애플리케이션 소프트웨어패키지,보안 설정 등이 포함된 시스템 이미지입니다.
cd Downloads/
ls
cloud-test.pem
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 //운영체제
주요 라이브러리
1.aws-java-sdk : aws sdk를 통해 ec2와 같은 aws 리소스를 프로그래밍 방식으로 제어합니다.
2.httpclient : http 요청을 처리하는 라이브러리
3.jackson : json 데이터를 직렬화 및 역직렬화하는 라이브러리
java -cp ./lib/awssdk/:./libs/http/:./lib/etclib/*:. aws.awsTest //aws.awsTest: AWS 관리 기능을 제ㅐ공하는 자바 클래스 파일입니다.
자바프로그램을통해 AWS EC2 인스턴스를 생성,시작,중지 등 관리할 수 있습니다.
HTConodr 클러스터 구성
master 노드 : htcondor 중앙 관리자 역할을 하며 작업을 스케줄링합니다.
slave 노드 : 실제 작업을 수행하는 워커 노드들입니다.
가상화는 컴퓨터에서 컴퓨터 리소스의 추상화를 일컫는 광범위한 용어입니다.
실제 존재하지 않는 하드웨어 플랫폼, 운영체제,스토리지나 네트워크들을 가상적으로 제공
가상시스템이 호스트 시스템에서 우리가 기대하는 방식으로 동작
가상화는 시스템 자원을 추상화해 여러 환경에서 사용할 수 있게 만드는 기술입니다.
매핑함수V의 구현방식에 따라 ABI와 ISA로 구분됩니다.
ABI는 응용프로그램과 운영체제 사이의 인터페이스입니다.
프로그램이 시스템 호출을 통해 운영체제의 기능에 접근하는 방식을 정의합니다.
여기서 시스템 콜은 소프트웨어가 운영체제의 기능을 사용하기 위해 호출하는 명령입니다.
ABI레벨에서는 에플리케이션이 특정 운영체제 위에서 실행되며, 시스템 ISA는 숨겨져 있습니다.
간단히말하면 : 애플리케이션이 특정 운영체제에서 실행되는 인터페이스를 정의하는 레벨입니다.
ISA는 하드웨어와 소프트웨어 간의 명령어 세트를 정의합니다.
운영체제와 애플리케이션이 시스템 하드웨어와 상호작용하는 방식입니다.
ISA 레벨 가상화는 시스템의 명령어 세트를 가상화하는 방식입니다.
간단히 말하면 : 소프트웨어가 하드웨어에 명령을 내리는 명령어 레벨의 가상화 입니다.
ABI레벨은 애플리케이션과 운영체제사이
ISA레벨은 소프트웨어와 하드웨어간 명령어 세트
가상화 수준 ABI는 시스템 호출 , ISA는 명령어 세트 가상화
소프트웨어 애플리케이션 관점에서 시스템 가상화
프로세스 가상머신
대표적 예시로 JVM 이있다.
이러한 형태의 가상머신을 런타임 이라고한다.
명령어 집합에 대한 가상화
시스템 가상머신
가상모니터, 1960년 후반부터 용어 사용
하드웨어 시스템과 일반적인 소프트웨어 사이에 위치
단일 프로세스가 마치 전체 시스템을 독점
User ISA만 에뮬리에션
인터프리터 방식 - 느림
바이너리 트랜슬레이터 방식 - 소스 인스트럭션을 블럭단위로 변환하여 수행 , 오버헤드가 존재하나 빠름 ,다이나믹 바이너리 트랜슬레이터
동일한 ISA를 갖는 경우 최적화 하여 사용
바이너리 트랜슬레이터는 다른 IS에 해당하는 명령어도 처리할 수 있습니다.
하드웨어와 운영체제에 대한 의존성을 최소화하고, 고수준 언어로 작성된 애플리케이션을 실행할 수 있는 환경을 제공 EX_ JVM
물리시스템 하드웨어에 직접 설치되는 가상머신을 관리
베어메탈
kvm,xen
물리시스템의 운영체제 역할을 수행
대규모 클라우드 컴퓨팅 서비스를 위해 도입
클라우드 서비스의 신속한 확장과 축소가 가능하도록 확장성을 보장
가상머신과 호스트머신간 빠른 통신이 가능
kvm 모듈이 설치된 리눅스 운영체제는 자체가 type1 하이퍼바이저
물리시스템의 하드웨어적 가상화 지원
VT-x (Intel)
AMD-V (AMD)
호스트머신의 운영체제 위에서 마치 애플리케이션처럼 설치
가상머신을 단일 물리시스템에 설치하고 운영하는 편리
호스트머신의 하드웨어에 직접접근이 어려움
타입 1 하이퍼바이저 대비 오버헤드 발생
QEMU, Oracle VirtualBox
공개 소프트웨어 기반 하이퍼바이저
KVM
XEN
QEMU - I/O 에뮬레이션을 위해 사용
kvm-ok
반가상화 하이퍼바이저로 시작
전가상화와 파드웨어 지원을 받는 타입 1
도메인 개념을 도입하여 특권레벨을 구분
- 특권 도메인 : 물리시스템의 장치에 접근이 가능한 가상머신
- 게스트 도메인 : 일반 가상머신
특권 도메인은 Xen에 하이퍼콜을 통해 장치에 접근
VT-x : 인텔의 하드웨어 기반 가상화 기술입니다.
VMX : VT-x를 활성화시키는 플래그로, 하드웨어 가상화의 핵심 역할을 합니다.
/proc/cpuinfo vmx플래그확인
VMM은 루트모드에서 실행됩니다.
루트 모드 : VMM이 실행되는 모드로, 하드웨어 자원에 대한 완전한 접근권한을 가집니다.
가상머신은 비루트모드에서 실행됩니다.
비루트모드 : 가상머신이 실행되며, 제한된 권한만을 가집니다.
루트모드와 비루트모드간의 전환은 가상머신 실행 중 반복적으로 발생합니다.
VMM 트랜지션
VM Entries: 루트 모드에서 비루트 모드로 진행됩니다.
명령어:VMRESUME,VMLAUNCH
VM Exit: 비루트모드에서 루트모드로 전환됩니다.
VMXON : VMX 명령을 실행할 수 있는 단계로 진입
VM Entries : VMM은 한번에 하나씩 가상머신을 실행
VM Exit : VMX의 비특권 모드에서 특권모드로 전환
VMXOFF : VMM 종료
게스트 OS로부터 요청이 오면 하이퍼바이저가 소프트웨어적으로 처리
바이너리 트랜슬레이션 이라고함
동작방식
1. 게스트 OS가 RING1으로 이동
2. RING0에 하이퍼바이저 위치
3. 게스트 OS가 가상화가 불가능한 명령 -> 새로운 명령 셋으로 바이너리 트렌슬레이션
4. 게스트 OS에서 특권 명령을 수행할 때 트랩 발생 -> 하이퍼바이저로 제어가 넘어감
5. 하이퍼바이저가 CPU가 인식할 수 있는 명령으로 변경하여 하드웨어에 전달
중간에 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 메모리 집약형 작업에는 반가상화 디바이스 드라이버를 이용합니다.
컨테이너 기술
하이퍼바이저가 가상머신의 운영체제를 공유하지 않음
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 list --all //만들어진 kvm 가상머신의 전체 리스트를 출력
virsh start //vmname 가상머신을 시작
virsh shutdown vmname // 가상머신 정료
virsh reboot vmname // 가상머신을 재부팅
virsh destroy vmname // 가상머신을 강제 종료한다.
virsh undefine vmname // 가상머신을 제거한다
virsh console vmname // 가상머신의 콘솔에 접속한다.
virt-clone --original centos 7-1 --name centos7-2 --file ./vm/centos7-2.img
가상화 기술이란 하나의 물리적 하드웨어를 여러 개의 논리적 노드로 분리하여 각각 독립적으로 운영할 수 있도록 만드는 기술입니다. 이를통해 하드웨어 자원을 효율적으로 활용할 수 있습니다. 하이퍼바이저를 이용해 하드웨어를 분리 및 관리하며, 클라우드 컴퓨팅과 데이터센터 운영에서 필수적인 역할을 합니다.
kvm은 Intel VT-x나 AMD-V와 같은 하드웨어 가속 기술을 활용하여 가상 머신을 실행하며,각 가상 머신을 호스트 운영체제에서 독립적인 프로세스로 관리합니다. kvm 자체는 하드웨어 자원을 제어하는 역할을 하며, qemu와 결합하여 가상 머신의 cpu,메모리,I/O처리를 효율적으로 수행합니다.
전가상화는 하드웨어 접근 시 하이퍼바이저가 인터럽트를 통해 명령을 가로채며 게스트 운영체제 수정이 필요 없습니다.
반가상화는 게스트 운영체제가 하이퍼바이저와 직접 협력하여 인터럽트를 최소화하며, 수정된 운영체제만 사용할 수 있습니다.
리소스 풀은 하이퍼바이저 또는 가상화 관리 도구가 제공하는 기능으로, 하드웨어 자원을 논리적으로 그룹화해 가상머신들이 사용할 수 있도록 관리하는 구조 입니다.
virsh pool-define-as --name default --type dir --target /.../
virsh pool-autostart default
virsh pool-build default
virsh pool-start default
virsh migrate --vervose --copy-storage-all --persistent --live cirros qemu+ssh
virsh undefine cirros
nonlive migration 실행 중인 가상머신을 잠시 중지 시킨 상태에서 현재 호스트에서 다른 호스트로 이동시키는 방법이다.
livemigration 수행 중인 상태를 계속 유지하면서 가상머신을 다른 호스트로 이동시키는 방식이다.
preparetime : 사전 준비에 필요한 시간
down time : 서비스 중지된 시간
resume time : 마이그레이션 종료후 목적지 가상머신이 통제권을 가지고 시작되는 시간
total migration time : 소요된 총시간
transterred ram : 이전호스트에서 목적지 호스트까지 전송된 메모리
duplicate page : 이전 호스트 시스템에서 목적지 호스트 시스템에 중복으로 전송된 메모리 페이지의 수
Performance Degradation : 성능 저하 정도
컨테이너 기술의 표준을 정의하는 단체입니다.
도커와같은 특정 기술에 종속되지 않도록 표준화된 컨테이너 런타임을 보장
런타임은 컨테이너를 실행하는 프로그램입니다.
컨테이너를 오케스트레이션(조직화 및 관리) 하는 도구입니다.
클라우드 네이티브 기술 개발과 유지를 담당하는 재단입니다.
oci->컨테이너 표준스펙정의
런타임->초기에는 도커만 존재했지만 rio rkt container 등 다양한 대안이 개발
쿠버네티스->여러 컨테이너를 관리하고 제어하는 오케스트레이션 툴
cncf->쿠버네티스와 같은 클라우드 네이티브 기술을 개발하고 유지 관리함
공통점 : 독립된 환경 및 다른 컨테이너에 영향을 주지않음 -> 가상머신과 동일
차이점 : 독립된 운영체제를 갖지 않음 -> 가상머신과 차이
가.애플리케이션이 멀티서비스 아키텍처인 경우
나.애플리케이션이 동작하는 서버의 수를 최소화 하고자 하는경우
다.클라우드 네이티브 애플리케이션 개발(작고 독립적이고 상호결합도가 낮은 서비스들의 모음)
라.애플리케이션 개발환경이 배포환경과 유사한 경우
가.애플리케이션 모노리식 아키텍처인 경우
나.서로 다른 운영체제가 필요한 경우
다.플랫폼에 고정된 스토리지 시스템이 필요한경우
라.운영체제의 많은 기능이 필요한 경우