클라우드 컴퓨팅의 시작
최초의 컴퓨터(PC) -> inter communication -> 네트워크 -> 서버/클라이언트
-> 인터넷(공중망)의 도래 -> 서버를 인터넷에 공개하기 위해서는? (안정적인 전원 공급, 공간, 관리 인원, 공인 주소) -> 회사 내에서 서버를 안정적으로 운영하는 것이 어려워지면서 서버를 데이터 센터에 보관(관리를 위임)
-> 데이터 센터 서버 입장 -> unix 계열에서만 제공되던 가상화 기술이 범용 CPU에서도 가상화(x86)가 지원되기 시작했다 -> 공간 활용, 전원 -> 미리 자원을 준비해 둔다.
재판매 하는 자원(NIST에서 정의)
클라우드는 가상화와 함께 구성해야 효과적이다.
애플리케이션의 24시간 온라인 유지 가능
동작 중인 상태에서 서버의 지역 간 이동이 가능하다.
on-demand 서비스 즉, 사용자가 요청하는 즉시(최단 시간 내에) 서비스 제공
가상화를 하는 도구? -> 하이퍼바이저
하이퍼바이저는 물리 자원에 접근하여 CPU, RAM, NIC 등을 추상화하고 이를 결합하여 온전한 형태의 서버가 되도록 가상화를 제공한다.
type 1: 하이퍼바이저가 물리 자원 바로 위에 배치된다. (BareMetal Hypervisor)
KVM, VMware ESXi, XenServer, Hyper-V
type 2: 하이퍼바이저가 호스트OS 위에 배치된다. (Host based Hypervisor)
VMware workstation, virtualbox, virtualpc
--disk /remote/centos1.qcow2 \
--location /remote/centos1.iso
부팅 시 설치 마법사가 시작된다.
이 방법은 동시에 다수의 가상 머신을 생성해야 하고 즉시 제공해야 하는 클라우드 환경에는 적합하지 않다. -> 시간이 너무 오래 걸린다.
virt-customize \
-a centos1.qcow2 \
--root-password password:test123
하지만 볼륨 사이즈는 조정할 수 없다.
클라우드 이미지의 볼륨 크기를 조정하는 것은 virt-resize 를 통해 가능하다.
virt-builder를 이용하면 기본 이미지에 대한 편집과 볼륨 조정이 가능하다.
step 1. 클라우드 상에 있는 기본 템플릿 이미지를 다운로드 (centos-7.0.xz -> 300MB)
step 2. 압축된 파일을 압축 해제한다. (300MB -> 800MB)
step 3. virt-resize를 이용하여 볼륨의 크기를 확장한다. -> 20GB
step 4. disk open! 볼륨 수정 가능
패키지 설치, 특정 파일 업로드, 인스턴스로 부팅 시 실행할 명령 등
step 5. 최종적으로 수정된 볼륨이 생성된다.
virt-install을 이용하여 xml을 만든다.
이 때 위에서 만든 볼륨의 위치를 지정해주어야 한다.
생성된 인스턴스는 211.183.3.222를 사용해야 한다. 생성된 인스턴스에는 퍼블릭키를 미리 저장해두고 외부에서 사설키를 이용하여 접속할 수 있어야 한다.
예) 현재 kvm1에 보관되어 있는 공개키를 인스턴스에 추가하고 윈도우에 있는 개인키로 접속할 예정이다.
계획
virt-install 시 ovs에 배치되고 model은 virtio로 하면 인스턴스의 인터페이스 이름이 eth0가 된다. ifcfg-eth0 파일을 미리 만들어두고 이 안에 211.183.3.222를 기록해둔 뒤 이를 인스턴스에 upload한다.
또한 로컬에 있는 퍼블릭키를 인스턴스의 /root/.ssh/authorized_keys에 붙여 넣는다.
[root@kvm1]# vi ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
DEVICE=eth0
NAME=eth0
ONBOOT=yes
IPADDR=211.183.3.222
PREFIX=24
GATEWAY=211.183.3.2
DNS1=8.8.8.8
[root@kvm1 ~]# virt-builder centos-7.0 \
> --format qcow2 \
> --size 20G \
> -o /remote/centos001.qcow2 \
> --upload ifcfg-eth0:/etc/sysconfig/network-scripts/ifcfg-eth0 \
> --run-command 'ssh-keygen -q -f /root/.ssh/id_rsa -N ""' \
> --upload /root/.ssh/authorized_keys:/root/.ssh/authorized_keys \
> --firstboot-command 'ifdown eth0 ; ifup eth0' \
> --selinux-relabel
[ 15.8] Downloading: http://builder.libguestfs.org/centos-7.0.xz
[ 16.6] Planning how to build this image
[ 16.6] Uncompressing
[ 30.6] Resizing (using virt-resize) to expand the disk to 20.0G
[ 79.0] Opening the new disk
[ 87.8] Setting a random seed
[ 87.9] Setting the machine ID in /etc/machine-id
[ 87.9] Uploading: ifcfg-eth0 to /etc/sysconfig/network-scripts/ifcfg-eth0
[ 87.9] Running: ssh-keygen -q -f /root/.ssh/id_rsa -N ""
[ 88.2] Uploading: /root/.ssh/authorized_keys to /root/.ssh/authorized_keys
[ 88.2] Installing firstboot command: ifdown eth0 ; ifup eth0
[ 88.2] Setting passwords
virt-builder: Setting random password of root to bfRGboXKNtFD4Idp
[ 90.2] SELinux relabelling
[ 100.5] Finishing off
Output file: /remote/centos001.qcow2
Output size: 20.0G
Output format: qcow2
Total usable space: 18.5G
Free space: 17.8G (95%)
로컬에 있는 public-key(/root/.ssh/authorized_keys)를 인스턴스에(/root/.ssh/authorized_keys) 넣는다.
[root@kvm1 ~]# virt-install \
> --name centos001 \
> --vcpus 1 \
> --ram 1024 \
> --network bridge:vswitch01,model=virtio,virtualport_type=openvswitch \
> --disk /remote/centos001.qcow2 \
> --import \
> --graphics vnc \
> --noautoconsole
WARNING No operating system detected, VM performance may suffer. Specify an OS with --os-variant for
optimal results.
Starting install...
Domain creation completed.
ssh_config 수정
[root@kvm1 ~]# vi /etc/ssh/ssh_config
Host 211.183.3.222
User root
PreferredAuthentications publickey
IdentityFile /root/.ssh/id_rsa
연결할 서버의 정보를 known_host에 먼저 저장해놓는다
[root@kvm1]# ssh-keyscan 211.183.3.222 >> /root/.ssh/known_hosts
# 211.183.3.222:22 SSH-2.0-OpenSSH_6.4
# 211.183.3.222:22 SSH-2.0-OpenSSH_6.4
# 211.183.3.222:22 SSH-2.0-OpenSSH_6.4
[root@kvm1 ~]# ssh 211.183.3.222
The authenticity of host '211.183.3.222 (211.183.3.222)' can't be established.
ECDSA key fingerprint is SHA256:2Xifb6QxNGAI3ON61CRLS0zXCqU+o6Tg8RtX39r2aNo.
ECDSA key fingerprint is MD5:01:59:67:61:8b:ec:6f:c7:92:fb:0a:94:bc:2f:71:0c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '211.183.3.222' (ECDSA) to the list of known hosts.
Last login: Wed Aug 10 22:16:43 2022
[root@localhost ~]#
[root@localhost ~]# ip a | grep 222
inet 211.183.3.222/24 brd 211.183.3.255 scope global eth0
ip가 .222로 할당되었음
[KVM1]
[root@kvm1 ~]# ping 211.183.3.222
PING 211.183.3.222 (211.183.3.222) 56(84) bytes of data.
64 bytes from 211.183.3.222: icmp_seq=1 ttl=64 time=0.728 ms
64 bytes from 211.183.3.222: icmp_seq=2 ttl=64 time=0.661 ms
64 bytes from 211.183.3.222: icmp_seq=3 ttl=64 time=0.558 ms
ip가 .222로 할당되어서 정상적으로 통신 가능