점검사항
1. 마운트[KVM1, KVM2]
mount | grep /cloud
2. 어제 생성했던 가상머신 삭제하기. 처음 생성시 default 네트워크에 연결
-> 수정하는 방식으로 default 네트워크에서 vswitch01(ovs)로 이동
-> 인스턴스 생성시 처음부터 ovs에 연결되면서 생성되도록하기
한번에 다 삭제하는 방법은 없지만 위와같이 for 반복문으로 대상들을 없앨 수는 있다.
3. 네트워크 정보
```
virsh net-list --all # 네트워크 이름을 확인
brctl show # 네트워크에 포함된 가상스위치를 확인(linux bridge)
ovs-vsctl show # OpenvSwitch 기반의 가상 스위치 정보를 확인할 수 있다
```
???
ovs-vsctl show 하면 위와같이 나오는데 이때 Bridge랑 같은 이름을 가진것은 네트워크 관리용 포트이다.
그외의 것들은 network port이다. 그래서 이 포트로 데이터가 들어와서 나가는 것을 조절할 수 있다. 이것은 실재 인터페이스로 인터넷과 연결되어 있다.
예를들어 gre12같은 경우 211.183.3.102와 원격으로 연결되어 있다고 적혀 있다. 이건 원격에 있는 인터페이스를 의미한다. 이걸 만들면 외부에 있는 녀석과 터널이 만들어진것처럼 행동한다. 그래서 결국 큰 스위치에 가상머신들이 연결된것처럼 행동한다.
이때 가상머신이 여러개가 연결된다면 vlan으로 각각의 디바이스들을 구분해주면 된다. vlan 정보는 네트워크를 넘어갈 수 없다. 하지만 gre tunnel을 사용하면 vlan에 상관없이 넘어갈 수 있으니 vlan을 사용해도 된다.
이게 클라우드로 올라가면 1vlan = 1 테넌트 = 4096개 라고 부른다.
이걸 확장해서 VxLAN으로 해야 더 많은 사람들을 유치할 수 있게 된다.
돌아와서 브릿지부터 조정해보자
외부 연결을 위한 ovs는 txt 파일을 이용하여 eth0을 vswitch01에 포함시키는 방법 내부 연결용 ovs는 명령을 통해 생성
```
ovs-vsctl add-br vswitch02
ovs-vsctl del-br vswitch02
```
????
OVS 스위치 기반 환경에서 인스턴스 생성과 overlay 네트워크 구성하기
위와같이 스위치별로 VM을 만들고 overlay 네트워크를 구성하면 한쪽에서 문제가 생기어도 VM을 다른쪽으로 옮기기만 하면 된다.
step 1. 내부 연결용/overlay 네트워크를 위한 vswitch 생성하기 -> 터널의 필요성
```kvm1, kvm2
ovs-vsctl add-br vswitch03
```
step 2.
각각의 스위치에서 포트를 만들고 터널을 만들어주자.
step1에서 생성한 vswitch03에 터널 연결용 포트를 생성하고 두 서버 사이에 터널을 구성한다.
```
ovs-vsctl add-port vswitch03 gre172 -- set interface gre172 type=gre options:remote_ip=211.183.3.102
# ovs-vsctl del-port vswitch03 gre172 # 삭제시 명령어
```
vswitch03에 포트 추가 gre172
step 3. 인스턴스 생성하기
- 생성하면서 vswitch01, vswitch03에 연결되어야 한다.
# kvm1
virt-install --name CentOS7-1 --vcpus 1 --ram 1024 \
--disk /cloud/CentOS7-1.qcow2 --import \
--network bridge:vswitch01,model=virtio,virtualport_type=openvswitch,target=CentOS7-1_01 \
--network bridge:vswitch03,model=virtio,virtualport_type=openvswitch,target=CentOS7-1_03 \
--os-type=linux --os-variant=rhel7 --noautoconsole
# kvm2
virt-install --name CentOS7-2 --vcpus 1 --ram 1024 \
--disk /cloud/CentOS7-2.qcow2 --import \
--network bridge:vswitch01,model=virtio,virtualport_type=openvswitch,target=CentOS7-2_01 \
--network bridge:vswitch03,model=virtio,virtualport_type=openvswitch,target=CentOS7-2_03 \
--os-type=linux --os-variant=rhel7 --noautoconsole
위의 방식으로 kvm1, kvm2 모두에 만들어주자.
???
터널을 이용해서만든 overlay network가 있고 여기에는 DHCP서버가 없기 때문에 ip를 우리가 직접 부여해야 한다.
CentOS7-1_03, CentOS7-1_03을 같은 vlan에 놓는 작업을 해보자
step 4. 오버레이 네트워크에 연결된 가상머신들의 포트에 vlan 설정하기
```
ovs-vsctl set port CentOS7-1_03 tag=172
ovs-vsctl show
```
해주면 tag라면서 vlan이 설정된다.
step 5. 인스턴스에 진입하여 인터페이스 설정후 오버레이를 통한 통신상태 확인하기
```
virsh console CentOS7-1
```
들어가서 네트워크 부분에 정보 입력하기
```
systemctl restart network
```
하면 에러뜬다! 망할!
NAME과 DEVICE를 넣어주었다.
그리고 가상머신을 잠시 껏다가 켰다. 그랬더니 된다.
kvm2도 동일하게 만들어주자
???
웹서비스 이미지를 수정해보자
virt-customize : base 이미지에 필요한 설정 정보를 미리입력하고 변경된 내용에 기반하여 인스턴스를 배포하는 방법을 사용하자
virt-customize (libguestfs.org)
virt-customize
Uninstall the named packages (a comma-separated list). These are removed during the image build using the guest’s package manager (eg. apt, yum, etc.). Dependent packages may also need to be uninstalled to satisfy the request. See also --install, --updat
libguestfs.org
virt-customize [-V | --version]
-a 변경할 볼륨(디스크)을 지정
virt-customize -a centos7.qcow2
--root-password password:test123 # 많이 씀
--root-password password:file명변경
--upload FILE:DEST #로컬에 있는 파일을 이미지의 특정 디렉토리에 upload하는 방법
--upload a.txt:/etc
#KVM의 현재 작업 디렉토리에 있는 a.txt파일을 이미지의 /etc디렉토리에 동일한 이름으로 업로드한다.
--upload a.txt:/etc/b.txt
--copy SOURCE:DEST
### 자주사용 ###
#--firstboot 관련 옵션은 이미지에서의 실행이 설치가아니라 인스턴스로 동작할 때 실행할 명령어들에 대한 정의
[--firstboot SCRIPT]
# --firstboot a.sh -> a.sh을 첫 부팅시 실행(생성된 인스턴스가 처음 부팅이 되면서 a.sh파일을 실행)
[--firstboot-command 'CMD+ARGS']
# 생성된 인스턴스가 처음 부팅되면서 실행할 명령어들을 입력 --firstboot-command 'git clone ...'
[--firstboot-install PKG,PKG..]
# Base 이미지 자체에는 설치되어 있지 않지만 인스턴스로 처음 부팅된 뒤 리눅스가 실행되면
# 패키지 들을 설치한다
# ex. --firstboot-install httpd,git,curl,vim
# (회사에 있는 모든 서버들이 동일 애플리케이션을 실행하는 경우에는 적절하지 않음)
[--install PKG,PKG..]
# 베이스 이미지 - 이미지에 직접 설치
[--run SCRIPT]
# 베이스 이미지에서 특정 쉘 파일을 실행
[--run-command 'CMD+ARGS']
# 베이스이미지에서 특정 명령을 실행
### 사용할 수 있음 ###
[--mkdir DIR]
[--move SOURCE:DEST]
[--uninstall PKG,PKG..]
[--update]
# 베이스이미지를 update
[--hostname HOSTNAME]
# 이미지의 기본 hostname인 localhost.localdomain을 원하는 이름으로 변경시켜줌
[--selinux-relabel]
#selinux가 종료되어 있다면 이를 실행
--- 실습 ---
1. openstack cloud image에서 base이미지 다운로드하기
2. 아래의 조건에 맞는 이미지 커스터마이징하기
호스트이름 : gildong
이미지에 설치 : httpd
로컬에 있는 index.html파일을 base이미지의 /var/www/html에 upload
인스턴스로 부팅될 때 httpd 실행. 방화벽은 미리 중지시켜둔다
루트패스워드 : test1234
암튼 파일을 받아와서 압출풀고 이름 바꾸자
이제 CentOS7Base.qcow2의 내용을 수정해서 이미지를 띄워보자
virt-customize -a CentOS7Test.qcow2 --root-password password:test1234 \
--install httpd,git --upload index.html:/var/www/html/index.html \
--firstboot-command 'systemctl start httpd' \
--firstboot-command 'firewall-cmd --permanent --add-port=80/tcp' \
--hostname gildong --selinux-relabel
# kvm1
virt-install --name gildong --vcpus 1 --ram 1024 \
--disk /cloud/CentOS7Test.qcow2 --import \
--network bridge:vswitch01,model=virtio,virtualport_type=openvswitch,target=CentOS7-1_01 \
--os-type=linux --os-variant=rhel7 --noautoconsole
들어가서 보니 httpd도 정상 동작중이기 떄문에 한번 웹 페이지 접속을 해보자
접속된다
Quiz. 아래의 조건에 맞는 인스턴스를 설치, 배포하라.
'Development(Web, Server, Cloud) > 22) LINUX - Cloud' 카테고리의 다른 글
CloudStack 설치 및 구성 (인스턴스 배포해 보기) : 1서버 (0) | 2022.02.25 |
---|---|
클라우드 39일차 (0) | 2022.02.25 |
클라우드 37일차 (0) | 2022.02.23 |
클라우드 36일차 (0) | 2022.02.22 |
클라우드 35일차 : virt, virsh, network, wok (0) | 2022.02.22 |