'OpenStack Class'에 해당되는 글 52건

  1. 2015.04.01 [OpenStack Class] 제51강 Glance에 Ubuntu 이미지 올리기 (18)
  2. 2015.03.10 [OpenStack Class] 제50강 CentOS에서 설치해 보는 오픈스택 10편 - Multi node 설치 (2)
  3. 2015.03.10 [OpenStack Class] 제49강 CentOS에서 설치해 보는 오픈스택 9편 - Multi node 설치 (4)
  4. 2015.03.10 [OpenStack Class] 제48강 CentOS에서 설치해 보는 오픈스택 8편 - Multi node 설치 (7)
  5. 2015.02.27 [OpenStack Class] 제47강 CentOS에서 설치해 보는 오픈스택 7편 - Multi node 설치 (12)
  6. 2015.02.27 [OpenStack Class] 제46강 CentOS에서 설치해 보는 오픈스택 6편 - Multi node 설치 (2)
  7. 2015.02.16 [OpenStack Class] 제45강 CentOS에서 설치해 보는 오픈스택 5편 - Multi node 설치 (9)
  8. 2015.02.12 [OpenStack Class] 제44강 CentOS에서 설치해 보는 오픈스택 4편 - Multi node 설치 (4)
  9. 2015.02.10 [OpenStack Class] 제43강 CentOS에서 설치해 보는 오픈스택 3편 - All-in-One 설치 (12)
  10. 2015.01.05 [OpenStack Class] 제42강 CentOS에서 설치해 보는 오픈스택 2편 - All-in-One 설치 (33)
  11. 2014.12.29 [OpenStack Class] 제41강 CentOS에서 설치해 보는 오픈스택 1편 - CentOS 설치하기 (8)
  12. 2014.12.22 [OpenStack Class] 제40강 서비스가 가능한 오픈스택 설치12편 - 컴퓨트 노드 설치3 (1)
  13. 2014.12.19 [OpenStack Class] 제39강 서비스가 가능한 오픈스택 설치11편 - 컴퓨트 노드 설치2 (2)
  14. 2014.12.17 [OpenStack Class] 제38강 서비스가 가능한 오픈스택 설치10편 - 컴퓨트 노드 설치1 (2)
  15. 2014.12.15 [OpenStack Class] 제37강 서비스가 가능한 오픈스택 설치9편 - 네트워크노드 설치 (4)
  16. 2014.12.13 [OpenStack Class] 제36강 서비스가 가능한 오픈스택 설치8편 - 컨트롤러 노드 설치6 (4)
  17. 2014.12.10 [OpenStack Class] 제35강 서비스가 가능한 오픈스택 설치7편 - 컨트롤러 노드 설치5 (12)
  18. 2014.12.05 [OpenStack Class] 제34강 서비스가 가능한 오픈스택 설치6편 - 컨트롤러 노드 설치4 (19)
  19. 2014.12.03 [OpenStack Class] 제33강 서비스가 가능한 오픈스택 설치5편 - 컨트롤러 노드 설치3 (15)
  20. 2014.12.01 [OpenStack Class] 제32강 서비스가 가능한 오픈스택 설치4편 - 컨트롤러 노드 설치2 (5)
OpenStack Class2015.04.01 01:18

안녕하세요~!!

정말 거의 한달만에 글을 올리는 것 같습니다.

요즘 좀 많이 바뻐서 글을 올릴 시간이 없었습니다. 그래서, 오늘도 역시 새벽에 이렇게 글을 올려봅니다.

그동안 오픈스택이 무엇인지 그리고, 어떻게 설치하면 되는지에 대해 포스팅을 했었습니다. 오늘부터는 사용방법에 대해 포스팅을 할까합니다. 이미 다 아신다구요? 책에 있는 모든 내용은 다 공개해 드리기로 약속했으니, 아는 내용이라도 다 올려드릴려고 노력하고 있습니다. 자 그럼 지금부터 Glance에 우분투 이미지를 한번 올려봅시다. 

Glance에 우분투 이미지 올리기

클라우드 운영체제 이미지 중 가장 많이 사용하는 운영체제는 바로 우분투입니다. 이번에는 Glance를 이용해서 우분투 이미지를 등록해 보겠습니다.

우분투 클라우드 이미지 다운로드

오픈스택용 우분투 이미지는 일반 OS 이미지를 사용하는 것이 아니라 클라우드용으로 생성해 놓은 이미지를 사용해야 합니다. Ubuntu Cloud Image 사이트에 방문하면 버전 별로 생성되어 있는 우분투 이미지를 받을 수 있습니다.

 

1.     우선 Ubuntu Cloud Images 사이트(https://cloud-images.ubuntu.com)에 방문해서 [Trusty]를 클릭합니다.

 

2.     다음과 같은 화면이 나오면 [current]를 클릭합니다.

 

3.     상단에 Amazon EC2 Published AMIs 목록이 보입니다. 화면을 다음과 같은 목록이 나올 때까지 스크롤합니다. 목록이 나오면 [trusy-server-cloudimg-amd64-disk1.img]를 클릭해서 내려 받습니다.


Glance 명령어로 우분투 이미지 다운로드와 업로드

이미지를 등록하는 방법은 명령 창을 이용하는 방법과 데쉬보드에서 등록하는 방법 두 가지가 있습니다. 여기서는 명령어를 이용해서 우분투 이미지를 등록하는 방법을 먼저 알아보겠습니다.

 

1.     우선 이미지를 내려 받을 images 디렉터리를 하나 생성하고 생성한 디렉터리로 이동합니다.

$ mkdir images

$ cd imgaes

 

2.     앞서 방문한 Ubuntu Cloud Images 사이트의 trusty-server-cloudimg-amd64-disk.img 하이퍼링크를 마우스 오른쪽 버튼으로 클릭해 링크주소를 복사합니다.

 

3.     Wget 명령어 뒤에 복사한 링크 주소를 붙여 넣고 엔터를 누르면 다음과 같이 우분투 이미지를 내려 받습니다.

$ wget https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img

--2014-06-23 17:03:52--  https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img

Resolving cloud-images.ubuntu.com (cloud-images.ubuntu.com)... 91.189.88.141

Connecting to cloud-images.ubuntu.com (cloud-images.ubuntu.com)|91.189.88.141|:443... connected.

HTTP request sent, awaiting response... 200 OK

Length: 254149120 (242M) [application/octet-stream]

Saving to: ??trusty-server-cloudimg-amd64-disk1.img??

 

100%[==============================>] 254,149,120 4.88MB/s   in 47s   

 

2014-06-23 17:04:40 (5.13 MB/s) - ??trusty-server-cloudimg-amd64-disk1.img?? saved [254149120/254149120]

 

4.     이미지를 받았으면 이번에는 다음과 같이 admin-openrc.sh를 생성해서 로그인 정보를 입력하고 저장합니다.

$ vi admin-openrc.sh

export OS_USERNAME=admin

export OS_PASSWORD=adminpass

export OS_TENANT_NAME=admin

export OS_AUTH_URL=http://10.10.15.11:35357/v2.0

 

5.     생성한 로그인 정보를 다음과 같은 명령어로 화면에 export합니다.

$ source admin-openrc.sh

 

6.     이제 glance image-create 명령어를 이용해서 우분투 이미지를 다음과 같이 등록합니다.

$ glance image-create --name Ubuntu14.04_LTS --disk-format raw --container-format bare --is-public True --progress < trusty-server-cloudimg-amd64-disk1.img

[=============================>] 100%

+------------------+--------------------------------------+

| Property         | Value                                |

+------------------+--------------------------------------+

| checksum         | 61a5d5500c5e11257fa7ba1b5a35bc3d     |

| container_format | bare                                 |

| created_at       | 2014-06-23T08:16:14                  |

| deleted          | False                                |

| deleted_at       | None                                 |

| disk_format      | raw                                  |

| id               | 4cec58a3-348a-4e0e-af5d-e930db4686a5 |

| is_public        | True                                 |

| min_disk         | 0                                    |

| min_ram          | 0                                    |

| name             | Ubuntu14.04_LTS                      |

| owner            | 638f44ca11a942cb9945f88db8cea43e     |

| protected        | False                                |

| size             | 254149120                            |

| status           | active                               |

| updated_at       | 2014-06-23T08:16:15                  |

| virtual_size     | None                                 |

+------------------+--------------------------------------+


7.     Glance image-list 명령어로 등록된 이미지를 다시 한번 확인할 수 있습니다.

$ glance image-list

+--------------------------------------+---------------------------------+-------------+------------------+-----------+--------+

| ID                                   | Name                            | Disk Format | Container Format | Size      | Status |

+--------------------------------------+---------------------------------+-------------+------------------+-----------+--------+

| f806db2a-4266-4da5-bac6-82239442a36d | cirros-0.3.2-x86_64-uec         | ami         | ami              | 25165824  | active |

| 1ed2e78d-939c-44df-bb06-3685e2b2092f | cirros-0.3.2-x86_64-uec-kernel  | aki         | aki              | 4969360   | active |

| b0867e0a-3eaf-4159-942d-6c27b5add146 | cirros-0.3.2-x86_64-uec-ramdisk | ari         | ari              | 3723817   | active |

| 4cec58a3-348a-4e0e-af5d-e930db4686a5 | Ubuntu14.04_LTS                 | raw         | bare             | 254149120 | active |

+--------------------------------------+---------------------------------+-------------+------------------+-----------+--------+


데쉬보드로 우분투 이미지 다운로드와 업로드

앞에서 Glance 명령어로 이미지를 업로드 했다면 이번에는 데쉬보드로 이미지를 업로드 해 보겠습니다.

 

1.     Admin 계정으로 데쉬보드에 접속한 후 화면 왼쪽에서 [관리자] > [시스템 패널] > [이미지] 메뉴를 선택합니다. 그리고 [+이미지 생성]을 클릭합니다.


2.     Ubuntu Cloud Images 사이트의 trusty-server-cloudimg-amd64-disk.img 하이퍼링크를 마우스 오른쪽 버튼으로 클릭하고 [링크 주소 복사]를 선택합니다.

 

3.     이미지 생성 창에 이름을 입력하고 앞서 복사한 URL을 이미지 위치에 붙여 넣습니다. 그리고 포맷을 Raw로 선택합니다.

 

4.     화면 아래로 스크롤해서 공용에 체크하고 [이미지 생성]을 클릭합니다.

 

5.     이미지가 등록될 때까지 기다립니다.


데쉬보드로 우분투 이미지 업로드

앞서 우분투 이미지 URL을 이용해서 이미지를 업로드 했다면 이번에는 이미 받아놓은 이미지 파일을 이용해서 Glance에 업로드 해 보겠습니다.

 

1.     데쉬보드의 이미지 목록에서 [+이미지 생성]을 클릭해 이미지 생성 창을 엽니다. 이미지 소스에서 [이미지 파일]을 선택합니다. 이미지 파일 부분이 파일을 선택을 할 수 있게 변경되면 [파일 선택]을 클릭합니다.

 

2.     이미 받아놓은 우분투 이미지를 선택하고 [열기]를 클릭합니다.

 

3.     포맷을 Raw로 선택하고 화면 아래쪽에 있는 공용에 체크한 후 [이미지 생성]을 클릭합니다.


4.     파일이 업로드되고 우분투 이미지가 등록된 것을 확인할 수 있습니다.



이렇게 해서 이미지를 올리기 위한 다양한 방법을 알아보았습니다. 

다음시간에는 올린 파일을 이용하여 우분투 인스턴스를 만들어보도록 하겠습니다.

Posted by 나리 짱!!! naleejang
OpenStack Class2015.03.10 13:18

드디어 6장까지 모두 올렸습니다. 요즘은 JUNO가 릴리즈되어서 대부분 JUNO 설치 테스트를 주로 하지만, 아직도 현장에서는 CentOS6.5를 많이 사용하고 있기 때문에 IceHouse 버전이 아직까지는 많이 설치되고 있습니다. 

그럼, 다음 포스팅에서부터는 7장 오픈스택 운영하기 편을 올려드리도록 하겠습니다.


Nova Compute 설치

패키지 설치가 완료되고 시스템을 재부팅하면 Nova Compute를 설치해야 합니다.

 

1.     먼저 openstack-nova-compute를 설치합니다.

# yum install openstack-nova-compute

 

2.     Openstack-config를 이용해서 /etc./nova/nova.conf에 데이터베이스 정보와 Keystone 정보를 설정합니다.

# openstack-config --set /etc/nova/nova.conf database connection mysql://nova:novadbpass@10.10.15.11/nova
# openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http://10.10.15.11:5000
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_host 10.10.15.11
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_protocol http
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_port 35357
# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_user nova
# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_tenant_name service
# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_password novapass

 

3.     이번에는 메시지 서비스 정보를 설정합니다.

# openstack-config --set /etc/nova/nova.conf DEFAULT rpc_backend qpid
# openstack-config --set /etc/nova/nova.conf DEFAULT qpid_hostname 10.10.15.11

 

4.     가상 인스턴스의 콘솔 접속을 위한 VNCSERVER 정보를 설정합니다.

# openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 10.10.15.21
# openstack-config --set /etc/nova/nova.conf DEFAULT vnc_enabled True
# openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_listen 0.0.0.0
# openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_proxyclient_address 10.10.15.21
# openstack-config --set /etc/nova/nova.conf DEFAULT novncproxy_base_url http://10.10.15.11:6080/vnc_auto.html

 

5.     이미지를 가져오기 위한 Glance 정보를 설정합니다.

# openstack-config --set /etc/nova/nova.conf DEFAULT glance_host 10.10.15.11

 

6.     다음과 같은 명령어로 CPU가 가상화를 지원하는지 확인합니다.

# egrep -c '(vmx|svm)' /proc/cpuinfo

 

7.     Nova-compute 서비스를 재시작합니다.

# service libvirtd start
Starting libvirtd daemon:                                  [  OK  ]
# service openstack-nova-compute start
Starting openstack-nova-compute:                           [  OK  ]
# chkconfig libvirtd on
# chkconfig openstack-nova-compute on

 

Nova Network 설치

하이퍼바이저와 Nova-compute를 설치했으면 이번에는 네트워킹을 위한 Nova network를 설치해야 합니다. 그럼 지금부터 nova-network를 설치해 보겠습니다.

 

1.     Yum install을 이용해서 openstack-nova-networkopenstack-nova-api를 설치합니다.

# yum install openstack-nova-network openstack-nova-api

 

2.     Openstack-config를 이용해서 /etc/nova/nova.conf 파일에 nova-network를 설정합니다.

# openstack-config --set /etc/nova/nova.conf DEFAULT \
  network_api_class nova.network.api.API
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  security_group_api nova
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  network_manager nova.network.manager.FlatDHCPManager
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  firewall_driver nova.virt.libvirt.firewall.IptablesFirewallDriver
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  network_size 254
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  allow_same_net_traffic False
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  multi_host True
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  send_arp_for_ha True
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  share_dhcp_address True
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  force_dhcp_release True
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  flat_network_bridge br100
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  flat_interface eth1
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  public_interface eth1

 

3.     Nova-network 서비스를 시작합니다. 그리고 부팅 시 자동 시작될 수 있도록 설정합니다.

# service openstack-nova-network start
Starting openstack-nova-network:                           [  OK  ]
# service openstack-nova-metadata-api start
Starting openstack-nova-metadata-api:                      [  OK  ]
# chkconfig openstack-nova-network on
# chkconfig openstack-nova-metadata-api on

 


 

Nova-network 생성

Nova-network 설치 및 환경설정이 모두 완료되면 인스턴스 생성 시 사용할 네트워크를 생성해야 합니다.

 

1.     우선 Keystone 사용자 계정 생성 테스트 시 만들어 둔 사용자 정보를 export합니다.

# source admin-openrc.sh

 

2.     Nova network-create 명령을 이용해 다음과 같이 demo-net 을 하나 생성합니다.

# nova network-create demo-net --bridge br100 --multi-host T \
  --fixed-range-v4 192.168.0.24/29

 

인스턴스 생성

Nova-network가 생성되면 인스턴스를 생성할 수 있습니다. 데쉬보드를 이용한 인스턴스 생성은 앞에서 많이 다루었으므로 여기서는 Command 명령어로 인스턴스를 생성해 보겠습니다.

 

1.     인스턴스를 생성하기 전에 사용자 정보를 먼저 export해야 합니다. Export하기 전에 앞서 저장해 둔 Demo 계정 정보를 확인합니다.

# cat demo-openrc.sh
export OS_USERNAME=demo
export OS_PASSWORD=demopass
export OS_TENANT_NAME=demo
export OS_AUTH_URL=http://10.10.15.11:35357/v2.0

 

2.     다음과 같은 명령어로 Demo 계정 정보를 export합니다.

# source demo-openrc.sh

 

3.     다음으로 인스턴스 생성 시 사용할 Key-pair를 생성합니다.

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
79:b0:41:0f:27:30:c7:b2:28:a9:94:01:b0:38:9e:b7 root@controller.openstack
The key's randomart image is:
+--[ RSA 2048]----+
|=     oo= .      |
|.o    .+.=       |
|+ o. . oo .      |
|.++ . .  =       |
|.+ o    S .      |
|. . .    .       |
|   E             |
|                 |
|                 |
+-----------------+

 

4.     생성한 key는 다음과 같은 명령어를 이용해 nova에 등록합니다.

# nova keypair-add --pub-key ~/.ssh/id_rsa.pub demo-key

 

5.     Key가 등록되었는지 nova keypair-list로 확인할 수 있습니다.

# nova keypair-list
+----------+-------------------------------------------------+
| Name     | Fingerprint                                     |
+----------+-------------------------------------------------+
| demo-key | 79:b0:41:0f:27:30:c7:b2:28:a9:94:01:b0:38:9e:b7 |
+----------+-------------------------------------------------+

 

6.     이번에는 생성 가능한 인스턴스 사양을 확인합니다.

# nova flavor-list
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name      | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| 1  | m1.tiny   | 512       | 1    | 0         |      | 1     | 1.0         | True      |
| 2  | m1.small  | 2048      | 20   | 0         |      | 1     | 1.0         | True      |
| 3  | m1.medium | 4096      | 40   | 0         |      | 2     | 1.0         | True      |
| 4  | m1.large  | 8192      | 80   | 0         |      | 4     | 1.0         | True      |
| 5  | m1.xlarge | 16384     | 160  | 0         |      | 8     | 1.0         | True      |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+

 

7.     어떤 이미지가 있는지도 확인합니다.

# nova image-list
+--------------------------------------+---------------------+--------+--------+
| ID                                   | Name                | Status | Server |
+--------------------------------------+---------------------+--------+--------+
| acafc7c0-40aa-4026-9673-b879898e1fc2 | cirros-0.3.2-x86_64 | ACTIVE |        |
+--------------------------------------+---------------------+--------+--------+

 

8.     이번에는 admin 계정 정보를 export하고 네트워크 목록을 확인합니다.

# source admin-openrc.sh
# nova net-list
+--------------------------------------+----------+------------------+
| ID                                   | Label    | CIDR             |
+--------------------------------------+----------+------------------+
| 7f849be3-4494-495a-95a1-0f99ccb884c4 | demo-net | 192.168.0.24/29  |
+--------------------------------------+----------+------------------+

 

9.     다시 demo 계정 정보로 export하고 보안 그룹을 확인합니다.

# source demo-openrc.sh
# nova secgroup-list
+--------------------------------------+---------+-------------+
| Id                                   | Name    | Description |
+--------------------------------------+---------+-------------+
| ad8d4ea5-3cad-4f7d-b164-ada67ec59473 | default | default     |
+--------------------------------------+---------+-------------+

 

10.  확인한 정보를 가지고 인스턴스를 생성합니다. 이때 위에서 확인한 네트워크 IDDEMO_NET_ID에 적용합니다.

# nova boot --flavor m1.tiny --image cirros-0.3.2-x86_64 --nic net-id=DEMO_NET_ID \
  --security-group default --key-name demo-key demo-instance1

** DEMO_NET_ID를 변경해서 명령어를 실행하면 다음과 같은 결과가 나옵니다.

# nova boot --flavor m1.tiny --image cirros-0.3.2-x86_64 --nic net-id=7f849be3-4494-495a-95a1-0f99ccb884c4 \n
--security-group default --key-name demo-key demo-instance1
+--------------------------------------+-------------------------------------------+
| Property                             | Value                                     |
+--------------------------------------+-------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                    |
| OS-EXT-AZ:availability_zone          | nova                                      |
| OS-EXT-STS:power_state               | 0                                         |
| OS-EXT-STS:task_state                | scheduling                                |
| OS-EXT-STS:vm_state                  | building                                  |
| OS-SRV-USG:launched_at               | -                                         |
| OS-SRV-USG:terminated_at             | -                                         |
| accessIPv4                           |                                           |
| accessIPv6                           |                                           |
| adminPass                            | ThZqrg7ach78                              |
| config_drive                         |                                           |
| created                              | 2014-06-17T00:09:16Z                      |
| flavor                               | m1.tiny (1)                               |
| hostId                               |                                           |
| id                                   | 45ea195c-c469-43eb-83db-1a663bbad2fc      |
| image                                | cirros-0.3.2-x86_64                       |
| key_name                             | demo-key                                  |
| metadata                             | {}                                        |
| name                                 | demo-instance1                            |
| os-extended-volumes:volumes_attached | []                                        |
| progress                             | 0                                         |
| security_groups                      | default                                   |
| status                               | BUILD                                     |
| tenant_id                            | 93849608fe3d462ca9fa0e5dbfd4d040          |
| updated                              | 2014-04-10T00:09:16Z                      |
| user_id                              | 8397567baf4746cca7a1e608677c3b23          |
+--------------------------------------+-------------------------------------------+

 

11.  인스턴스가 생성되었는지 nova list 명령어로 확인합니다.

# nova list
+--------------------------------------+----------------+--------+------------+-------------+------------------------+
| ID                                   | Name           | Status | Task State | Power State | Networks               |
+--------------------------------------+----------------+--------+------------+-------------+------------------------+
| 45ea195c-c469-43eb-83db-1a663bbad2fc | demo-instance1 | ACTIVE | -          | Running     | demo-net=192.168.0.26  |
+--------------------------------------+----------------+--------+------------+-------------+------------------------+

 

12.  인스턴스에 접속할 때는 novnc 콘솔을 이용하는 방법과 ssh를 이용하는 방법이 있습니다. Novnc로 접속을 할 때는 다음과 같은 명령어로 접속 URL를 조회할 수 있습니다.

# nova get-vnc-console demo-instance1 novnc
+-------+------------------------------------------------------------------------------------+
| Type  | Url                                                                                |
+-------+------------------------------------------------------------------------------------+
| novnc | http://10.10.15.11:6080/vnc_auto.html?token=2f6dd985-f906-4bfc-b566-e87ce656375b   |
+-------+------------------------------------------------------------------------------------+

 

13.  보안 그룹에 ping이 가능하도록 ICMP 권한을 추가합니다.

# nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range  | Source Group |
+-------------+-----------+---------+-----------+--------------+
| icmp        | -1        | -1      | 0.0.0.0/0 |              |
+-------------+-----------+---------+-----------+--------------+

 

14.  이번에는 ssh 접속이 가능하도록 22번 포트를 추가합니다.

# nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range  | Source Group |
+-------------+-----------+---------+-----------+--------------+
| tcp         | 22        | 22      | 0.0.0.0/0 |              |
+-------------+-----------+---------+-----------+--------------+

 

15.  Ping이 되는지 확인해 봅니다.

# ping -c 4 192.168.0.26
PING 192.168.0.26 (192.168.0.26) 56(84) bytes of data.
64 bytes from 192.168.0.26: icmp_req=1 ttl=63 time=3.18 ms
64 bytes from 192.168.0.26: icmp_req=2 ttl=63 time=0.981 ms
64 bytes from 192.168.0.26: icmp_req=3 ttl=63 time=1.06 ms
64 bytes from 192.168.0.26: icmp_req=4 ttl=63 time=0.929 ms
 
--- 192.168.0.26 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 0.929/1.539/3.183/0.951 ms

 

16.  이번에는 ssh로 인스턴스에 접속해 봅니다.

# ssh cirros@192.168.0.26
The authenticity of host '192.168.0.26 (192.168.0.26)' can't be established.
RSA key fingerprint is ed:05:e9:e7:52:a0:ff:83:68:94:c7:d1:f2:f8:e2:e9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.26' (RSA) to the list of known hosts.
$

 

Posted by 나리 짱!!! naleejang
OpenStack Class2015.03.10 12:51

바로 이어서 컴퓨트 노드편 올려드립니다. 오늘 6장까지 모두 올려야 겠어요~!! ^^


컴퓨트 노드를 설치해 보자

Nova-networkNeutron 네트워킹과 다르게 네트워크 노드가 필요하지 않습니다. 그래서 컨트롤러 노드와 컴퓨트 노드 여러 대로 구성합니다. 컴퓨트 노드는 기본 하이퍼바이저 KVM(또는 Qemu)Nova 컴퓨트를 설치합니다.

 

네트워크 인터페이스 설정

컨트롤러 노드와 마찬가지로 CentOS를 설치한 후에 네트워킹 IP를 설정해야 합니다. /etc/sys config/network-scripts 디렉터리에 들어가 각각의 이더넷 카드에 해당하는 환경설정 파일로 IP를 설정해 보겠습니다.

 

1.     컨트롤러 노드와 마찬가지로 /etc/sysconfig/network-scripts/ifcfg-eth0 파일을 vi 편집기로 열어 no로 되어 있는 ONBOOT 값을 yes로 변경하고, dhcp로 되어 있는 BOOTPROTOnone으로 변경합니다. 그리고 IPADDR, NETMASK, GATEWAY, DNS1을 설정합니다.

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

HWADDR=08:00:27:EC:43:E0

TYPE=Ethernet

UUID=84a27f42-ea7d-4f11-a965-2d735f9560e3

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=none

IPADDR=10.10.15.21

NETMASK=255.255.255.0

GATEWAY=10.10.15.1

DNS1=8.8.8.8

 

2.     외부 인터넷을 위한 eth1/etc/sysconfig/network-scripts/ifcfg-eth1을 열어 다음과 같이 편집합니다.

# vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

TYPE=Ethernet

ONBOOT=yes

BOOTPROTO=none

 

3.     이번에는 /etc/hosts 파일을 열어 다음과 같이 컴퓨트 노드, 컨트롤러 노드의 IP 정보를 등록합니다.

# vi /etc/hosts

# compute

10.10.15.21       compute

# controller

10.10.15.11       controller

 

4.     네트워크 인터페이스 설정이 완료되면 시스템에 적용될 수 있도록 네트워크 서비스를 재시작합니다.

# service network restart

Shutting down interface eth0:                              [  OK  ]

Shutting down loopback interface:                          [  OK  ]

Bringing up loopback interface:                            [  OK  ]

Bringing up interface eth0:  Determining if ip address 10.10.15.21 is already in use for device eth0...

                                                           [  OK  ]

Bringing up interface eth1:                                [  OK  ]

 

NTP 설치

컨트롤러 노드에 NTP(Network Time Protocol) 서버를 설치하고 컴퓨트 노드에는 클라이언트를 설치합니다.

 

1.     Yum install을 이용해서 ntp를 설치합니다.

# yum install ntp

 

2.     ntp 설치가 완료되면 ntp.conf에 동기화할 컨트롤러 노드 IP를 추가합니다. 이때 기존에 설정되어 있는 server들은 모두 주석 처리합니다.

# vi /etc/ntp.conf
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 10.10.15.11

 

3.     환경설정이 끝나면 ntp 서비스를 시작하고 부팅 시 자동 시작될 수 있도록 설정합니다.

# service ntpd start
# chkconfig ntpd on

 

4.     동기화가 제대로 되었는지 다음과 같은 명령어로 확인합니다.

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
===========================================================
10.10.15.11      .INIT.          16 u    -   64    0    0.000    0.000   0.000

 

Database 설치

컨트롤러 노드에서 이미 Mysql 서버를 설치했으므로 컴퓨트 노드에서는 Python Mysql API만 설치하면 됩니다. Yum install을 이용해서 Python Mysql API를 설치합니다.

# yum install MySQL-python

 

Packages 설치

패키지는 컨트롤러 노드뿐 아니라 컴퓨트 노드에도 반드시 설치해야 합니다. 만일 패키지를 설치하지 않고 그냥 지나간다면 노드 간 버전이 맞지 않아 실행되지 않습니다. 패키지 설치 방법은 컨트롤러 노드와 동일합니다.

 

1.     RDO 레파지토리를 사용하기 위해서 Yum install을 이용해 yum-plugin-priorities를 설치합니다.

# yum install yum-plugin-priorities

 

2.     이번에는 다음과 같은 명령어로 rdo-release-icehouse 내려 받고 설치합니다.

# yum install http://repos.fedorapeople.org/repos/openstack/openstack-icehouse/rdo-release-icehouse-4.noarch.rpm

 

3.     EPEL 패키지는 패키지 서명 및 저장소 정보에 대한 GPG(GNU Privacy Guard)키가 포함되어 있습니다. EPEL 패키지는 레드햇, CentOS에 설치해야 하며, 설치 방법은 다음과 같습니다.

# yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

 

4.     이번에는 Openstack-utils를 설치합니다. Openstack-utlis는 설치 및 시스템 구성을 쉽게 할 수 있는 유틸리티 프로그램이 포함되어 있습니다.

# yum install openstack-utils

 

5.     OpenStack-selinux 패키지는 RHELCentOS를 이용해 OpenStack 설치할 때 SELinux를 구성하는 데 필요한 정책 파일이 포함되어 있습니다.

# yum install openstack-selinux


6.     패키지 설치가 모두 완료되면 시스템을 업그레이드합니다.

# yum upgrade

 

7.     업그레이드가 완료되면 시스템을 재부팅합니다.

# reboot

 


Posted by 나리 짱!!! naleejang
OpenStack Class2015.03.10 12:40

안녕하세요~!! 

이것저것 벌려놓은게 많아서 이일저일 하느라 정작 블로그에 글을 올릴 시간은 별로 없네요~!! 오늘 시간을 내서 글 한번 올려봅니다. 오늘 공개하는건 Horizon 설치와 Cinder 설치 부분입니다. 다음 포스팅에서는 컴퓨트 노드 설치편을 올리도록 하겠습니다. 

Horizon 설치

이번에는 오픈스택을 쉽게 사용할 수 있게 제공되는 데쉬보드 서비스인 Horizon을 설치해 보겠습니다.

 

1.     먼저 mamcached, python-memcached, mod_wsgi, openstack-dashboard를 설치합니다.

# yum install memcached python-memcached mod_wsgi openstack-dashboard

 

2.     /etc/openstack-dashboard/local-settings를 열어 데쉬보드에 접속할 수 있는 IP를 등록합니다. 접속할 IP 주소는 컨트롤러 노드 IP로 입력합니다.

# vi /etc/openstack-dashboard/local_settings
…
CACHES = {
'default': {
'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION' : 127.0.0.1:11211'
}
}
…
ALLOWED_HOSTS = ['localhost', '10.10.15.11']
…
OPENSTACK_HOST = "10.10.15.11"

 

3.     시스템의 SELinux 정책이 HTTP 서버에 대한 네트워크 연결을 허용하도록 구성되어 있는지 확인합니다.

# setsebool -P httpd_can_network_connect on

 

4.     /etc/httpd/conf/httpd.conf 파일을 열어 ServerName을 다음과 같이 입력합니다.

# vi /etc/httpd/conf/httpd.conf
…
ServerName 10.10.15.11:80

 

5.     아파치 웹 서버와 memcache 서비스를 시작합니다.

# service httpd start
Starting httpd:                                            [  OK  ]
# service memcached start
Starting memcached:                                        [  OK  ]
# chkconfig httpd on
# chkconfig memcached on

 

6.     이제 컨트롤러 IP로 데쉬보드에 접속할 수 있습니다.

 

Cinder 설치

Cinder는 인스턴스에 디스크를 연결해서 인스턴스가 별도의 저장 공간을 가질 수 있도록 관리해 주는 서비스입니다. 그럼 지금부터 Cinder를 설치해 보겠습니다.

 

1.     Fdisk 명령을 이용해서 스토리지용 디스크가 있는지 확인합니다.

$ sudo fdisk -l
 
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0001c419
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        1306     9972736   8e  Linux LVM
 
Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

 

2.     확인된 디바이스로 물리 볼륨(Physical Volume)과 볼륨 그룹(Volume Group)을 생성합니다.

# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created
# vgcreate cinder-volumes /dev/sdb
Volume group "cinder-volumes" successfully created

 

3.     볼륨 그룹을 생성한 후 /etc/lvm/lvm.conf 파일을 열어 LVM이 기존 디바이스에 접근하지 못하도록 다음과 같이 Filter을 걸어줍니다.

# vi /etc/lvm/lvm.conf
devices {
...
filter = [ "a/sda1/", "a/sdb/", "r/.*/"]
...
}

 

4.     Yum install을 이용해서 openstack-cinderscsi-target-utils를 설치합니다.

# yum install openstack-cinder scsi-target-utils

 

5.     설치가 완료되면 openstack-config를 이용해서 데이터베이스 정보를 설정합니다.

# openstack-config --set /etc/cinder/cinder.conf \
  database connection mysql://cinder:cinderdbpass@10.10.15.11/cinder

 

6.     Mysql에 접속해서 cinder 데이터베이스와 계정을 생성하고 접속권한을 설정합니다.

# mysql -u root ?p
mysql> CREATE DATABASE cinder;
Query OK, 1 row affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \
IDENTIFIED BY 'cinderdbpass';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \
IDENTIFIED BY 'cinderdbpass';
Query OK, 0 rows affected (0.00 sec)

 

7.     다음과 같은 명령으로 cinder 테이블을 생성합니다.

# su -s /bin/sh -c "cinder-manage db sync" cinder

 

8.     Keystonecinder 사용자를 생성하고 서비스 테넌트에 admin 롤을 추가합니다.

# keystone user-create --name=cinder --pass=cinderpass --email=cinder@example.com
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |        cinder@example.com        |
| enabled  |               True               |
|    id    | c95341072f35490a83351f760c151e9b |
|   name   |              cinder              |
| username |              cinder              |
+----------+----------------------------------+
# keystone user-role-add --user=cinder --tenant=service --role=admin

 

9.     생성된 keystone 정보는 openstack-config을 이용해서 /etc/cinder/cinder.conf에 적용합니다.

# openstack-config --set /etc/cinder/cinder.conf DEFAULT \
  auth_strategy keystone
# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \
  auth_uri http://10.10.15.11:5000
# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \
  auth_host 10.10.15.11
# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \
  auth_protocol http
# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \
  auth_port 35357
# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \
  admin_user cinder
# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \
  admin_tenant_name service
# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \
  admin_password cinderpass

 

10.  이번에는 Qpid 정보를 openstack-config를 이용해서 다음과 같이 설정합니다.

# openstack-config --set /etc/cinder/cinder.conf \
  DEFAULT rpc_backend cinder.openstack.common.rpc.impl_qpid
# openstack-config --set /etc/cinder/cinder.conf \
  DEFAULT qpid_hostname 10.10.15.11

 

11.  마지막으로 glance_host 정보를 openstack-config를 이용해서 설정합니다.

# openstack-config --set /etc/cinder/cinder.conf \
  DEFAULT glance_host 10.10.15.11

 

12.  이번에는 keystonecinder 서비스를 생성하고 endpoint를 생성합니다.

# keystone service-create --name=cinder --type=volume --description="OpenStack Block Storage"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |     OpenStack Block Storage      |
|   enabled   |               True               |
|      id     | 3679708526d84d77b26e26baf0126817 |
|     name    |              cinder              |
|     type    |              volume              |
+-------------+----------------------------------+
# keystone endpoint-create \
  --service-id=3679708526d84d77b26e26baf0126817 \
  --publicurl=http://10.10.15.11:8776/v1/%\(tenant_id\)s \
  --internalurl=http://10.10.15.11:8776/v1/%\(tenant_id\)s \
  --adminurl=http://10.10.15.11:8776/v1/%\(tenant_id\)s
+-------------+------------------------------------------+
|   Property  |                  Value                   |
+-------------+------------------------------------------+
|   adminurl  | http://10.10.15.11:8776/v1/%(tenant_id)s |
|      id     |     797b6381de9f48da95c37c8c83d7c084     |
| internalurl | http://10.10.15.11:8776/v1/%(tenant_id)s |
|  publicurl  | http://10.10.15.11:8776/v1/%(tenant_id)s |
|    region   |                regionOne                 |
|  service_id |     3679708526d84d77b26e26baf0126817     |
+-------------+------------------------------------------+

 

13.  Version 2을 위한 서비스를 하나 더 생성하고 endpoint를 생성합니다.

# keystone service-create --name=cinderv2 --type=volume --description="OpenStack Block Storage V2"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |    OpenStack Block Storage V2    |
|   enabled   |               True               |
|      id     | 786ad0104e504fb7ac794ac161a7c613 |
|     name    |             cinderv2             |
|     type    |              volume              |
+-------------+----------------------------------+
# keystone endpoint-create \
  --service-id=786ad0104e504fb7ac794ac161a7c613 \
  --publicurl=http://10.10.15.11:8776/v2/%\(tenant_id\)s \
  --internalurl=http://10.10.15.11:8776/v2/%\(tenant_id\)s \
--adminurl=http://10.10.15.11:8776/v2/%\(tenant_id\)s
+-------------+------------------------------------------+
|   Property  |                  Value                   |
+-------------+------------------------------------------+
|   adminurl  | http://10.10.15.11:8776/v2/%(tenant_id)s |
|      id     |     e20949bd960f462a8c1d4498ef0f91c9     |
| internalurl | http://10.10.15.11:8776/v2/%(tenant_id)s |
|  publicurl  | http://10.10.15.11:8776/v2/%(tenant_id)s |
|    region   |                regionOne                 |
|  service_id |     786ad0104e504fb7ac794ac161a7c613     |
+-------------+------------------------------------------+

 

14.  CentOS에서는 블록 스토리지용 볼륨을 iSCSI(Internet Small Computer System Interface) 서비스로 구성합니다. 존재하지 않을 경우, / etc/tgt/targets.conf 파일의 시작 부분에 다음 줄을 추가합니다.

# vi /etc/tgt/targets.conf
include /etc/cinder/volumes/*

 

15.  Cinder 서비스를 시작합니다. 그리고 부팅 시 cinder 서비스가 자동 실행 될 수 있도록 설정합니다.

# service openstack-cinder-api start
Starting openstack-cinder-api:                             [  OK  ]
# service openstack-cinder-scheduler start
Starting openstack-cinder-scheduler:                       [  OK  ]
# service openstack-cinder-volume start
Starting openstack-cinder-volume:                          [  OK  ]
# service tgtd start
Starting SCSI target daemon:                               [  OK  ]
# chkconfig openstack-cinder-api on
# chkconfig openstack-cinder-scheduler on
# chkconfig openstack-cinder-volume on
# chkconfig tgtd on

 

16.  Cinder 볼륨을 생성하기 전에 사용자 정보를 먼저 export해야 합니다. 여기서는 앞에서 생성한 Demo 계정을 이용해서 테스트해 보겠습니다. 좀 더 쉽게 테스트를 하기 위해 vi 에디터를 열어 다음과 같은 정보를 입력하고 저장합니다.

# vi demo-openrc.sh
export OS_USERNAME=demo
export OS_PASSWORD=demopass
export OS_TENANT_NAME=demo
export OS_AUTH_URL=http://10.10.15.11:35357/v2.0

 

17.  편집된 계정 정보를 다음과 같은 명령어로 export합니다.

# source demo-openrc.sh

 

18.  Cinder 명령어를 이용해서 볼륨 하나를 생성합니다.

# cinder create --display-name myVolume 1
+---------------------+--------------------------------------+
|       Property      |                Value                 |
+---------------------+--------------------------------------+
|     attachments     |                  []                  |
|  availability_zone  |                 nova                 |
|       bootable      |                false                 |
|      created_at     |      2014-06-16T12:31:26.095755      |
| display_description |                 None                 |
|     display_name    |               myVolume               |
|      encrypted      |                False                 |
|          id         | 5e691b7b-12e3-40b6-b714-7f17550db5d1 |
|       metadata      |                  {}                  |
|         size        |                  1                   |
|     snapshot_id     |                 None                 |
|     source_volid    |                 None                 |
|        status       |               creating               |
|     volume_type     |                 None                 |
+---------------------+--------------------------------------+

 

19.  생성한 볼륨은 list로 확인할 수 있습니다. 이때 Statusavailable이여야만 인스턴스에 연결해서 사용할 수 있습니다.

# cinder list
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
|                  ID                  |   Status  | Display Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
| 5e691b7b-12e3-40b6-b714-7f17550db5d1 | available |   myVolume   |  1   |     None    |  false   |             |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+

 


Posted by 나리 짱!!! naleejang
OpenStack Class2015.02.27 23:39

바로 이어서 다음편 올려봅니다. 지금 안올리면 올릴 시간이 없어서예요~!! ㅠㅠ


이번 포스팅은 Glance와 Nova 설치편입니다.


Glance 설치

인스턴스를 생성하기 위해서는 운영체제가 설치되어 있는 이미지가 필요합니다. 이런 이미지 파일을 관리하는 서비스가 바로 Glance입니다. Glance는 오픈스택 컴퓨트 서비스를 사용하기 위한 주요 서비스에 해당합니다.

 

1.     우선 Openstack-glancepython-glanceclient를 설치합니다.

# yum install openstack-glance python-glanceclient

 

2.     설치가 완료되면 /etc/glance/glance-api.conf/etc/glance/glance-registry.conf 파일에 데이터베이스 정보를 다음과 같이 설정합니다.

# openstack-config --set /etc/glance/glance-api.conf database \
  connection mysql://glance:glancedbpass@10.10.15.11/glance
# openstack-config --set /etc/glance/glance-registry.conf database \
  connection mysql://glance:glancedbpass@10.10.15.11/glance

 

3.     이번에는 /etc/glance/glance-api.conf 파일에 Qpid 정보를 설정합니다.

# openstack-config --set /etc/glance/glance-api.conf DEFAULT \
  rpc_backend qpid
# openstack-config --set /etc/glance/glance-api.conf DEFAULT \
  qpid_hostname 10.10.15.11

 

4.     Mysql에 접속해서 glance 데이터베이스와 glance 계정을 생성하고 접속권한을 설정합니다.

# mysql -u root -p
mysql> CREATE DATABASE glance;
Query OK, 1 row affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
IDENTIFIED BY 'glancedbpass';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
IDENTIFIED BY 'glancedbpass';
Query OK, 0 rows affected (0.00 sec)


5.     이번에는 다음과 같은 명령어로 Glance 테이블을 생성합니다.

# su -s /bin/sh -c "glance-manage db_sync" glance

 

6.     Keystoneglance 계정을 생성하고 서비스 테넌트에 생성한 glance 계정을 추가합니다.

# keystone user-create --name=glance --pass=glancepass \
   --email=glance@example.com
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |        glance@example.com        |
| enabled  |               True               |
|    id    | f56fee77b3944019ab979649360e2464 |
|   name   |              glance              |
| username |              glance              |
+----------+----------------------------------+
# keystone user-role-add --user=glance --tenant=service --role=admin

 

7.     Keystone 서비스 생성이 완료되면 생성한 glance 정보를 openstack-config 명령어를 이용해서 환경설정 파일에 적용합니다.

# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \
  auth_uri http://10.10.15.11:5000
# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \
  auth_host 10.10.15.11
# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \
  auth_port 35357
# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \
  auth_protocol http
# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \
  admin_tenant_name service
# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \
  admin_user glance
# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \
  admin_password glancepass
# openstack-config --set /etc/glance/glance-api.conf paste_deploy \
  flavor keystone
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken \
  auth_uri http://10.10.15.11:5000
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken \
  auth_host 10.10.15.11
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken \
  auth_port 35357
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken \
  auth_protocol http
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken \
  admin_tenant_name service
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken \
  admin_user glance
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken \
  admin_password glancepass
# openstack-config --set /etc/glance/glance-registry.conf paste_deploy \
  flavor keystone

 

8.     사용자와 다른 서비스들이 접속할 수 있도록 Keystone 서비스와 endpoint를 생성합니다.

# keystone service-create --name=glance --type=image \
--description="OpenStack Image Service"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |     OpenStack Image Service      |
|   enabled   |               True               |
|      id     | b87d2c7a58474da1a5a0a6100d074893 |
|     name    |              glance              |
|     type    |              image               |
+-------------+----------------------------------+
# keystone endpoint-create \
  --service-id=b87d2c7a58474da1a5a0a6100d074893 \
  --publicurl=http://10.10.15.11:9292 \
  --internalurl=http://10.10.15.11:9292 \
  --adminurl=http://10.10.15.11:9292
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminurl  |     http://10.10.15.11:9292      |
|      id     | 8abd3e5eb80b4c0cadf7f8568236d991 |
| internalurl |     http://10.10.15.11:9292      |
|  publicurl  |     http://10.10.15.11:9292      |
|    region   |            regionOne             |
|  service_id | b87d2c7a58474da1a5a0a6100d074893 |
+-------------+----------------------------------+

 

9.     Keystone 서비스와 endpoint 생성을 완료했으면 glance-apiglance-registry 서비스를 재시작합니다. 그리고 부팅 시 자동으로 서비스가 시작될 수 있도록 설정합니다.

# service openstack-glance-api start
Starting openstack-glance-api:                             [  OK  ]
# service openstack-glance-registry start
Starting openstack-glance-registry:                        [  OK  ]
# chkconfig openstack-glance-api on
# chkconfig openstack-glance-registry on

 

10.  /tmp/images 디렉터리를 하나 생성하고 해당 디렉터리에 들어간 후 wget을 이용해서 가장 가벼운 cirros 이미지를 하나 내려 받습니다.

# mkdir /tmp/images
# cd /tmp/images/
# wget http://cdn.download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img

 

11.  내려 받은 이미지는 glance 명령어를 이용해서 다음과 같이 등록합니다.

# glance image-create --name "cirros-0.3.2-x86_64" --disk-format qcow2 \
--container-format bare --is-public True --progress < cirros-0.3.2-x86_64-disk.img
[=============================>] 100%
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | 64d7c1cd2b6f60c92c14662941cb7913     |
| container_format | bare                                 |
| created_at       | 2014-06-15T19:08:14                  |
| deleted          | False                                |
| deleted_at       | None                                 |
| disk_format      | qcow2                                |
| id               | 06be01da-151d-4681-bdc9-6127a3590972 |
| is_public        | True                                 |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | cirros-0.3.2-x86_64                  |
| owner            | dbd8df87e5c34536844d915b555061b6     |
| protected        | False                                |
| size             | 13167616                             |
| status           | active                               |
| updated_at       | 2014-06-15T19:08:15                  |
| virtual_size     | None                                 |
+------------------+--------------------------------------+

 

12.  이미지 목록도 확인해 봅니다.

# glance image-list
+--------------------------------------+---------------------+-------------+------------------+----------+--------+
| ID                                   | Name                | Disk Format | Container Format | Size     | Status |
+--------------------------------------+---------------------+-------------+------------------+----------+--------+
| 06be01da-151d-4681-bdc9-6127a3590972 | cirros-0.3.2-x86_64 | qcow2       | bare             | 13167616 | active |
+--------------------------------------+---------------------+-------------+------------------+----------+--------+

 

Nova Management 설치

가상 인스턴스를 생성하고 부팅시키며, 필요 없을 경우 삭제하는 일은 Nova에서 담당합니다. Nova는 사용자에게서 전달받은 인스턴스 관련 명령어들을 하이퍼바이저로 전달하고, 하이퍼바이저는 전달받은 명령어 대로 인스턴스를 생성 또는 삭제합니다. 그럼 지금부터 오픈스택의 핵심 기능인 Nova를 설치해 보겠습니다.

 

1.     우선 yum install을 이용해서 다음과 같이 Nova 관련 서비스들을 설치합니다.

# yum install openstack-nova-api openstack-nova-cert openstack-nova-conductor \
  openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler \
  python-novaclient

 

2.     설치가 완료되면 openstack-config를 이용해서 데이터베이스 정보를 설정합니다.

# openstack-config --set /etc/nova/nova.conf \
  database connection mysql://nova:novadbpass@10.10.15.11/nova

 

3.     이번에는 다음과 같이 Qpid 정보를 설정합니다.

# openstack-config --set /etc/nova/nova.conf \
  DEFAULT rpc_backend qpid
# openstack-config --set /etc/nova/nova.conf DEFAULT qpid_hostname 10.10.15.11

 

4.     VNC 콘솔 접속을 위한 VNC Server 정보를 다음과 같이 설정합니다.

# openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 10.10.15.11
# openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_listen 10.10.15.11
# openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_proxyclient_address 10.10.15.11

 

5.     Mysql을 접속해서 nova 데이터베이스와 계정을 생성하고 접속권한을 설정합니다.

# mysql -u root -p
mysql> CREATE DATABASE nova;
Query OK, 1 row affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
IDENTIFIED BY 'novadbpass';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
IDENTIFIED BY 'novadbpass';
Query OK, 0 rows affected (0.00 sec)

 

6.     Nova 테이블 생성을 위하여 nova-manage db sync 명령을 다음과 같이 실행합니다.

# su -s /bin/sh -c "nova-manage db sync" nova

 

7.     테이블 생성이 완료되면 인증을 위한 Keystonenova 계정을 생성해야 합니다. Nova 계정을 생성하고 서비스 테넌트에 생성한 nova를 추가합니다.

# keystone user-create --name=nova --pass=novapass --email=nova@example.com
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |         nova@example.com         |
| enabled  |               True               |
|    id    | fcad2a86ef664e4ca0bd4188f68c9cee |
|   name   |               nova               |
| username |               nova               |
+----------+----------------------------------+
# keystone user-role-add --user=nova --tenant=service --role=admin

 

 

8.     Openstack-config를 이용해서 nova.confkeystone 정보를 설정합니다.

# openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http://10.10.15.11:5000
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_host 10.10.15.11
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_protocol http
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_port 35357
# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_user nova
# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_tenant_name service
# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_password novapass

 

9.     이번에는 사용자와 다른 서비스들이 접속할 수 있도록 keystone 서비스와 endpoint를 생성합니다.

# keystone service-create --name=nova --type=compute \
--description="OpenStack Compute"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |        OpenStack Compute         |
|   enabled   |               True               |
|      id     | 867c0b68aac94cf8b6ef69f528abc651 |
|     name    |               nova               |
|     type    |             compute              |
+-------------+----------------------------------+
# keystone endpoint-create \
  --service-id=867c0b68aac94cf8b6ef69f528abc651 \
  --publicurl=http://10.10.15.11:8774/v2/%\(tenant_id\)s \
  --internalurl=http://10.10.15.11:8774/v2/%\(tenant_id\)s \
  --adminurl=http://10.10.15.11:8774/v2/%\(tenant_id\)s
+-------------+------------------------------------------+
|   Property  |                  Value                   |
+-------------+------------------------------------------+
|   adminurl  | http://10.10.15.11:8774/v2/%(tenant_id)s |
|      id     |     ec40706eb0ee49d688897a4c6978e37b     |
| internalurl | http://10.10.15.11:8774/v2/%(tenant_id)s |
|  publicurl  | http://10.10.15.11:8774/v2/%(tenant_id)s |
|    region   |                regionOne                 |
|  service_id |     867c0b68aac94cf8b6ef69f528abc651     |
+-------------+------------------------------------------+

 

10.  모든 설정이 완료되면 nova 관련 서비스들을 모두 재시작합니다. 그리고 부팅 시 자동으로 서비스가 실행될 수 있도록 설정합니다.

# service openstack-nova-api start
Starting openstack-nova-api:                               [  OK  ]
# service openstack-nova-cert start
Starting openstack-nova-cert:                              [  OK  ]
# service openstack-nova-consoleauth start
Starting openstack-nova-consoleauth:                       [  OK  ]
# service openstack-nova-scheduler start
Starting openstack-nova-scheduler:                         [  OK  ]
# service openstack-nova-conductor start
Starting openstack-nova-conductor:                         [  OK  ]
# service openstack-nova-novncproxy start
Starting openstack-nova-novncproxy:                        [  OK  ]
# chkconfig openstack-nova-api on
# chkconfig openstack-nova-cert on
# chkconfig openstack-nova-consoleauth on
# chkconfig openstack-nova-scheduler on
# chkconfig openstack-nova-conductor on
# chkconfig openstack-nova-novncproxy on

 

11.  Nova가 정상적으로 설치되었는지 nova 명령어로 이미지 목록을 확인해 봅니다.

# nova image-list
+--------------------------------------+---------------------+--------+--------+
| ID                                   | Name                | Status | Server |
+--------------------------------------+---------------------+--------+--------+
| 06be01da-151d-4681-bdc9-6127a3590972 | cirros-0.3.2-x86_64 | ACTIVE |        |
+--------------------------------------+---------------------+--------+--------+

 


 

Nova-network 설정

오픈스택에서 네트워킹은 기존 네트워킹 방식인 Nova-network를 사용하는 방법과 Neutron을 설치해서 SDN(Software Defined Network)을 사용하는 방법 두 가지가 있습니다. 여기서는 기존 네트워킹 방식인 Nova-network를 이용해서 네트워크를 설정해 보겠습니다.

 

1.     Openstack-config 명령어를 이용해서 /etc/nova/nova.conf에 기존 nova-network API를 사용하겠다고 다음과 같이 설정합니다.

# openstack-config --set /etc/nova/nova.conf DEFAULT \
  network_api_class nova.network.api.API
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  security_group_api nova

 

2.     설정이 끝나면 nova 서비스를 재시작합니다.

# service openstack-nova-api restart
Stopping openstack-nova-api:                               [  OK  ]
Starting openstack-nova-api:                               [  OK  ]
# service openstack-nova-scheduler restart
Stopping openstack-nova-scheduler:                         [  OK  ]
Starting openstack-nova-scheduler:                         [  OK  ]
# service openstack-nova-conductor restart
Stopping openstack-nova-conductor:                         [  OK  ]
Starting openstack-nova-conductor:                         [  OK  ]



이렇게 해서 Glance와 Nova 설치 포스팅을 모두 마쳤습니다. 다음 포스팅에서는 Horizon 설치와 Cinder 설치를 포스팅하도록 하겠습니다.  

Posted by 나리 짱!!! naleejang
OpenStack Class2015.02.27 23:21

안녕하세요~!! 

왜 이리도 바쁜지 블로그에 글을 올릴 시간이 없네요~!! 좋은 것이겠죠~!! ^^ 오늘은 안되겠다 생각이 들어서 이렇게 밤 늦게라도 시간을 내어서 글을 올려볼까 합니다. 

오늘은 지난시간에 이어 Keystone 설치에 관련된 글을 올려볼까 합니다. yum install로 설치를 하고 vi가 아님 openstack-config를 이용하여 환경설정을 한다는 부분이 ubuntu의 apt-get install과 다른 부분입니다. 그외에 환경설정 내용이나 사용법은 같다고 보시면 됩니다.

Keystone 설치

메시지 서비스를 설치했다면 이번에는 Keystone을 설치할 차례입니다. Keystone은 오픈스택 서비스의 인증을 담당하는 서비스로써 테넌트, 사용자, , 서비스와 endpoint를 관리합니다.

 

1.     yum install을 이용해서 openstack-keystone python-keystoneclient를 설치합니다.

# yum install openstack-keystone python-keystoneclient

 

2.     레드햇이나 CentOS는 우분투와 다르게 환경설정을 해주는 openstack-config라는 명령어를 지원합니다. Openstack-config 명령을 이용해서 다음과 같이 데이터베이스 정보를 변경합니다.

# openstack-config --set /etc/keystone/keystone.conf \
   database connection mysql://keystone:keystonedbpass@10.10.15.11/keystone


3.     이번에는 mysql에 접속해서 keystone 데이터베이스와 사용자 계정 및 패스워드 그리고 접속권한을 함께 생성합니다.

# mysql -u root -p
mysql> CREATE DATABASE keystone;
Query OK, 1 row affected (0.01 sec)
 
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY ‘keystonedbpass';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'keystonedbpass';
Query OK, 0 rows affected (0.00 sec)
 
mysql> exit
Bye

 

4.     Keystone 계정 생성이 완료되면 keystone에서 필요한 테이블을 만들어야 합니다. 테이블 생성은 keystone-manage db_sync 명령을 이용합니다.

# su -s /bin/sh -c "keystone-manage db_sync" keystone

 

5.     keystoneadmin token을 설정하기 위해 openssl rand 명령어를 이용해서 생성된 임의의 문자열을 ADMIN_TOKEN에 저장합니다. 그리고 ADMIN_TOKEN에 저장된 문자열은 openstack_config 명령어로 /etc/keystone/keystone.conf 파일의 admin_token에 설정합니다.

# ADMIN_TOKEN=$(openssl rand -hex 10) # echo $ADMIN_TOKEN dc387ae9520f5b69f643 # openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token $ADMIN_TOKEN

 

6.     Keystone은 기본적으로 PKI 토큰을 사용합니다. 그러므로 keystone-manage를 이용해서 PKI Key와 인증서를 생성하고, 생성된 /etc/keystone/ssl은 아무나 접근할 수 없도록 액세스를 제한합니다.

# keystone-manage pki_setup --keystone-user keystone --keystone-group keystone
Generating RSA private key, 2048 bit long modulus
......................................................................................................+++
.............................................................+++
e is 65537 (0x10001)
Generating RSA private key, 2048 bit long modulus
................+++
.............+++
e is 65537 (0x10001)
Using configuration from /etc/keystone/ssl/certs/openssl.conf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'US'
stateOrProvinceName   :ASN.1 12:'Unset'
localityName          :ASN.1 12:'Unset'
organizationName      :ASN.1 12:'Unset'
commonName            :ASN.1 12:'www.example.com'
Certificate is to be certified until Jun 12 17:10:09 2024 GMT (3650 days)
 
Write out database with 1 new entries
Data Base Updated
# chown -R keystone:keystone /etc/keystone/ssl
# chmod -R o-rwx /etc/keystone/ssl

 

7.     SSL PKI Key 설정이 완료되면 keystone 서비스를 재시작하고, 부팅 시 서비스가 자동 실행될 수 있도록 설정합니다.

# service openstack-keystone start
Starting keystone:                                         [  OK  ]
# chkconfig openstack-keystone on

 

 keystone 사용자, 테넌트, 롤 그리고 endpoint 생성

keystone 설치가 완료되면 keystone를 접근하기 위한 사용자, 테넌트, 롤과 서비스, endpoint를 생성해야 합니다.

 

1.     우선 OS_SERVICE_TOKENOS_SERVICE_ENDPOINTexport합니다.

# export OS_SERVICE_TOKEN=$ADMIN_TOKEN
# export OS_SERVICE_ENDPOINT=http://10.10.15.11:35357/v2.0

 

2.     keystone user-create 명령어를 이용해서 다음과 같이 admin 사용자 계정, 패스워드, 이메일을 입력하고 admin 계정을 생성합니다.

# keystone user-create --name=admin --pass=adminpass --email=admin@email.com
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |         admin@email.com          |
| enabled  |               True               |
|    id    | 7bc1bda9d2444b9c92554ff9e0b71e22 |
|   name   |              admin               |
| username |              admin               |
+----------+----------------------------------+

 

3.     admin 롤을 생성합니다.

# keystone role-create --name=admin
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|    id    | 02ff77d31ec841b3914db4c3daca4f1c |
|   name   |              admin               |
+----------+----------------------------------+

 

4.     이번에는 admin 테넌트를 생성합니다.

# keystone tenant-create --name=admin --description="Admin Tenant"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |           Admin Tenant           |
|   enabled   |               True               |
|      id     | dbd8df87e5c34536844d915b555061b6 |
|     name    |              admin               |
+-------------+----------------------------------+

 

5.     Admin 테넌트와 member 테넌트에 admin 사용자 계정과 롤을 추가합니다.

# keystone user-role-add --user=admin --tenant=admin --role=admin # keystone user-role-add --user=admin --tenant=admin --role=_member_

 

6.     이번에는 demo 계정을 다음과 같이 생성합니다.

# keystone user-create --name=demo --pass=demopass --email=demo@email.com
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |          demo@email.com          |
| enabled  |               True               |
|    id    | 129a943bc94b43379a794ae011a87fe9 |
|   name   |               demo               |
| username |               demo               |
+----------+----------------------------------+

 

7.     Demo 테넌트도 생성합니다.

# keystone tenant-create --name=demo --description="Demo Tenant"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |           Demo Tenant            |
|   enabled   |               True               |
|      id     | afa084dced1e4d70b479dac82ea659ac |
|     name    |               demo               |
+-------------+----------------------------------+

 

8.     생성한 Demo 계정을 Demo 테넌트에 추가하고 롤은 member를 설정합니다.

# keystone user-role-add --user=demo --role=_member_ --tenant=demo

 

9.     이번에는 오픈스택 서비스를 위한 서비스 테넌트를 다음과 같이 생성합니다.

# keystone tenant-create --name=service --description="Service Tenant"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |          Service Tenant          |
|   enabled   |               True               |
|      id     | 31303ac56ece4fbc85bb16074adfc9cb |
|     name    |             service              |
+-------------+----------------------------------+

 

10.  서비스 테넌트가 생성되면 이번에는 keystone 서비스를 다음과 같이 생성합니다.

# keystone service-create --name=keystone --type=identity \
  --description="OpenStack Identity"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |        OpenStack Identity        |
|   enabled   |               True               |
|      id     | 4fdf89fb665d44f7bf0dd053e8dfadef |
|     name    |             keystone             |
|     type    |             identity             |
+-------------+----------------------------------+

 

11.  생성된 Keystone 서비스는 사용자나 다른 서비스가 접속할 수 있도록 Rest API 주소를 생성합니다. 필요한 파라메터는 생성한 서비스의 ID, 외부 접속 Public URL, 내부 접속 Internal URL, 관리자가 접속할 Admin URL로 이루어집니다.

# keystone endpoint-create \
  --service-id=4fdf89fb665d44f7bf0dd053e8dfadef \
  --publicurl=http://10.10.15.11:5000/v2.0 \
  --internalurl=http://10.10.15.11:5000/v2.0 \
  --adminurl=http://10.10.15.11:35357/v2.0
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminurl  |  http://10.10.15.11:35357/v2.0   |
|      id     | 27fd1214abd24430b18045b835885f6b |
| internalurl |   http://10.10.15.11:5000/v2.0   |
|  publicurl  |   http://10.10.15.11:5000/v2.0   |
|    region   |            regionOne             |
|  service_id | 4fdf89fb665d44f7bf0dd053e8dfadef |
+-------------+----------------------------------+

 

12.  endpoint URL 생성이 완료되면 admin 계정을 생성할 때 추가했던 OS_SERVICE_TOKENOS_SERVICE_ENDPOINT를 환경변수에서 해제합니다.

# unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT

 

13.  이제 keystone 서비스가 정상적으로 실행되는지 테스트합니다. 이때 환경변수를 쉽게 편집하기 위해 vi 에디터로 파일에 저장해두면 좋습니다.

# vi admin-openrc.sh
export OS_USERNAME=admin
export OS_PASSWORD=adminpass
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://10.10.15.11:35357/v2.0

 

14.  Vi 에디터로 만든 환경변수 설정 파일은 다음과 같이 source export할 수 있습니다.

# source admin-openrc.sh

 

15.  이제 파라메터 없이 바로 token을 얻어와 보겠습니다.

# keystone token-get
+-----------+----------------------------------------------------------------------+
|  Property |  Value                                                               |
+-----------+----------------------------------------------------------------------+
|  expires  |  2014-06-15T19:00:15Z                                                |
|     id    | MIIE7QYJKoZIhvcNAQcCoIIE3jCCBNoCAQExCTAHBgUrDgMCGjCCA0MGCSqGSIb3DQEHAa
CCAzQEggMweyJhY2Nlc3MiOiB7InRva2VuIjogeyJpc3N1ZWRfYXQiOiAiMjAxNC0wNS0yN1QwODoxMzo0Mi
4xNTA0MDUiLCAiZXhwaXJlcyI6ICIyMDE0LTA1LTI3VDA5OjEzOjQyWiIsICJpZCI6ICJwbGFjZWhvbGRlci
IsICJ0ZW5hbnQiOiB7ImRlc2NyaXB0aW9uIjogIkFkbWluIFRlbmFudCIsICJlbmFibGVkIjogdHJ1ZSwgIm
lkIjogIjcxNzVlZmQ0ZDIyZTQxYWE4OTAzYjBjYWI0NWZmYWE2IiwgIm5hbWUiOiAiYWRtaW4ifX0sICJzZX
J2aWNlQ2F0YWxvZyI6IFt7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHA6Ly8xMC4xMC4xNS4xMT
ozNTM1Ny92Mi4wIiwgInJlZ2lvbiI6ICJyZWdpb25PbmUiLCAiaW50ZXJuYWxVUkwiOiAiaHR0cDovLzEwLj
EwLjE1LjExOjUwMDAvdjIuMCIsICJpZCI6ICIyNGUzMmJkYzBmYTg0NzU1ODk4Y2M5ZWIyZjg5ZTg4NiIsIC
JwdWJsaWNVUkwiOiAiaHR0cDovLzEwLjEwLjE1LjExOjUwMDAvdjIuMCJ9XSwgImVuZHBvaW50c19saW5rcy
I6IFtdLCAidHlwZSI6ICJpZGVudGl0eSIsICJuYW1lIjogImtleXN0b25lIn1dLCAidXNlciI6IHsidXNlcm
5hbWUiOiAiYWRtaW4iLCAicm9sZXNfbGlua3MiOiBbXSwgImlkIjogIjRkZjcwZWJhYWI2YjQxNzg4NzE0MT
c3MmRiZDJhY2EwIiwgInJvbGVzIjogW3sibmFtZSI6ICJtZW1iZXIifSwgeyJuYW1lIjogImFkbWluIn1dLC
AibmFtZSI6ICJhZG1pbiJ9LCAibWV0YWRhdGEiOiB7ImlzX2FkbWluIjogMCwgInJvbGVzIjogWyIzZWVhMm
IwODMyZWM0OTlkOTYyZTRjZjE4NzJlNzJiOSIsICI4MmI0OWU1NjE5ZjU0MzU3YmY1ZjYzN2M1MWRjZmUyZC
JdfX19MYIBgTCCAX0CAQEwXDBXMQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVW5zZXQxDjAMBgNVBAcMBVVuc2
V0MQ4wDAYDVQQKDAVVbnNldDEYMBYGA1UEAwwPd3d3LmV4YW1wbGUuY29tAgEBMAcGBSsOAwIaMA0GCSqGSI
b3DQEBAQUABIIBAMzeUbt-hokRop8qGVRN7L1BMHpDkh7UaUAK62ThFSV3ydu2zXR8tMGZcSS3lTxIL-0mrt
oun44p2lX9x+9OPNldPKlC39cgyCOnyFqb5kkdteXuD8JJiFq0klyNPzRtjKr6Vxxb4C3Xjf9tLJnzCuZKYB
I9-F+oad0EOoaolLG-RNmD56AdGq3Qnly8MPi3EWeCIbHqTvXrVwBgOYUSYdUk32qEacw7atjxB1NdRzTpsm
m7I261iEKhFTvBfCwQf6PH0AeNHSwpDIgQtJ6f6dlKJAKyKV1puFxUytymmPoLc3t9-IGB-rRDsOUnESGO3E
i11oQrv+FLGZ+62hGORjI=                                                             |
| tenant_id | 7175efd4d22e41aa8903b0cab45ffaa6                                     |
|  user_id  | 4df70ebaab6b417887141772dbd2aca0                                     |
+-----------+----------------------------------------------------------------------+

 

16.  사용자 목록도 확인해 봅니다.

# keystone user-list
+----------------------------------+-------+---------+-----------------+
|                id                |  name | enabled |      email      |
+----------------------------------+-------+---------+-----------------+
| 7bc1bda9d2444b9c92554ff9e0b71e22 | admin |   True  | admin@email.com |
| 129a943bc94b43379a794ae011a87fe9 |  demo |   True  |  demo@email.com |
+----------------------------------+-------+---------+-----------------+

 

17.  사용자가 가지고 있는 롤 목록도 확인해 봅니다.

# keystone user-role-list
+----------------------------------+-------+----------------------------------+----------------------------------+
|                id                |  name |             user_id              |            tenant_id             |
+----------------------------------+-------+----------------------------------+----------------------------------+
| 02ff77d31ec841b3914db4c3daca4f1c | admin | 7bc1bda9d2444b9c92554ff9e0b71e22 | dbd8df87e5c34536844d915b555061b6 |
+----------------------------------+-------+----------------------------------+----------------------------------+



이렇게 해서 Keystone을 설치해 보았습니다. 다음번 포스팅에서는 Glance와 Nova를 설치해 보도록 하겠습니다.

Posted by 나리 짱!!! naleejang
OpenStack Class2015.02.16 16:53

안녕하세요~!!

지난시간에 이어 오늘은 CentOS6.5를 설치하고 거기에 컨트롤러 노드와 컴퓨트 노드를 설치해 보도록 하겠습니다.
이번 시간에는 컨트롤러 노드의 기본 패키지들을 설치해 볼 예정입니다. 앞에서 Ubuntu에서 설치할 때와 같은 내용이 설치되며, 바뀌는 것이 있다면 OS와 설치명령어가 바뀔뿐입니다. 

그럼, 지금부터 컨트롤러 노드를 설치해 볼까요~!!

컨트롤러 노드를 설치해 보자

앞에서 우리는 오픈스택을 설치하기 위한 시스템 구성도를 그려보았습니다. 먼저 컨트롤러 노드에 데이터베이스, 메시지 서비스, 오픈스택 기본 서비스와 인스턴스의 가상 디스크를 관리하는 블록 스토리지 서비스를 설치하겠습니다.

네트워크 인터페이스 설정

CentOS를 설치하면 네트워킹을 위한 IP를 설정해야 합니다. 우분투 서버와 다르게 /etc/sysconfig/network-scripts 디렉터리에 들어가면 각각의 이더넷 카드에 해당하는 환경 설정 파일이 존재합니다. 그럼 지금부터 IP를 설정하겠습니다.

 

1.     /etc/sysconfig/network-scripts/ifcfg-eth0 파일을 vi 편집기로 열어 다음과 같이 편집합니다. no로 되어 있는 ONBOOT 값을 yes로 변경하고, dhcp로 되어 있는 BOOTPROTOnone로 변경합니다. 그리고 IPADDR, NETMASK, GATEWAY, DNS1을 설정합니다.

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

HWADDR=08:00:27:EC:43:E0

TYPE=Ethernet

UUID=84a27f42-ea7d-4f11-a965-2d735f9560e3

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=none

IPADDR=10.10.15.11

NETMASK=255.255.255.0

GATEWAY=10.10.15.1

DNS1=8.8.8.8

 

2.     /etc/hosts 파일을 열어 다음과 같이 컨트롤러 노드, 컴퓨트 노드의 IP 정보를 등록합니다.

# vi /etc/hosts

# controller

10.10.15.11       controller

# compute

10.10.15.21       compute

 

3.     네트워크 인터페이스 설정이 완료되면 시스템에 적용될 수 있도록 네트워크 서비스를 재시작합니다.

# service network restart

 

NTP 설치

NTPNetwork Time Protocol의 약자로 서버와 서버 간 시간을 동기화하는 프로토콜입니다. 컨트롤러 노드에는 NTP 서버를, 그 외 노드에는 NTP 클라이언트를 설치하고 NTP 서버의 시각으로 동기화합니다.

 

1.     yum install을 이용해서 ntp를 설치합니다.

# yum install ntp

Loaded plugins: fastestmirror, security

base                                                                                       | 3.7 kB     00:00    

base/primary_db                                                                            …

Setting up Install Process

Package ntp-4.2.6p5-1.el6.centos.x86_64 already installed and latest version

Nothing to do

 

2.     ntp 설치가 완료되면 ntp.conf에 자신을 나타내는 127.127.1.0을 추가해야 합니다. 이때 기존에 설정되어 있는 server들은 모두 주석 처리합니다.

# vi /etc/ntp.conf
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0

 

3.     ntp.conf 파일 수정이 완료되면 ntp 서버를 시작합니다. 그리고 부팅 시 ntp 서비스가 자동으로 실행될 수 있도록 설정합니다.

# service ntpd start
Starting ntpd:                                             [  OK  ]
# chkconfig ntpd on

 

4.     ntp 시각이 동기화 되었는지 확인합니다.

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
===========================================================
*LOCAL(0)        .LOCL.           5 l   43   64  377    0.000    0.000   0.004

 

 

Database 설치

NTP 서버를 설치했으면 이번에는 데이터베이스 서비스를 설치해야 합니다. 오픈스택의 기본 데이터베이스는 MySQL이며, IceHouse 버전이 릴리즈되면서 mariaDB도 설치가 가능합니다.

 

1.     Mysql-servermysql python 모듈을 설치합니다. 중간에 총 다운로드 사이즈가 11M인데 계속 설치하겠느냐는 메시지가 나오면 y를 입력하고 엔터를 누릅니다.

# yum install mysql mysql-server MySQL-python

Total download size: 11 M

Is this ok [y/N]: y

 

2.     Mysql 서버 설치가 완료되면 /etc/my.cnf 파일을 열어 다음과 같이 bind-address storage-engine, character-set을 설정합니다. 이때 bind-address는 컨트롤러 노드 IP를 입력합니다.

# vi /etc/my.cnf

[mysqld]

bind-address = 10.10.15.11

default-storage-engine = innodb

innodb_file_per_table

collation-server = utf8_general_ci

init-connect = 'SET NAMES utf8'

character-set-server = utf8

 

3.     환경설정이 끝나면 mysql 서비스를 시작합니다. 그리고 chkconfig를 이용해서 재부팅 시에도 mysql이 자동으로 실행될 수 있도록 다음과 같이 mysqldon을 설정합니다.

# service mysqld start

# chkconfig mysqld on


4.     이번에는 MySQL root 사용자 패스워드를 다음과 같은 명령어로 설정합니다. 여기서는 Mysqlroot 패스워드를 openstack이라고 설정했습니다.

# mysqladmin -u root password ‘openstack’

 

5.     mysql의 기본 데이터베이스 및 테이블 설치를 위하여 mysql_install_db를 실행합니다.

# mysql_install_db

WARNING: The host 'controller.openstack' could not be looked up with resolveip.

This probably means that your libc libraries are not 100 % compatible

with this binary MySQL version. The MySQL daemon, mysqld, should work

normally with the exception that host name resolving will not work.

This means that you should use IP addresses instead of hostnames

when specifying MySQL privileges !

Installing MySQL system tables...

OK

Filling help tables...

OK

 

To start mysqld at boot time you have to copy

support-files/mysql.server to the right place for your system

 

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !

To do so, start the server, then issue the following commands:

 

/usr/bin/mysqladmin -u root password 'new-password'

/usr/bin/mysqladmin -u root -h controller.openstack password 'new-password'

 

Alternatively you can run:

/usr/bin/mysql_secure_installation

 

which will also give you the option of removing the test

databases and anonymous user created by default.  This is

strongly recommended for production servers.

 

See the manual for more instructions.

 

You can start the MySQL daemon with:

cd /usr ; /usr/bin/mysqld_safe &

 

You can test the MySQL daemon with mysql-test-run.pl

cd /usr/mysql-test ; perl mysql-test-run.pl

 

Please report any problems with the /usr/bin/mysqlbug script!

 

6.     Mysql 테이블 생성 후에는 익명의 Anonymous 계정을 삭제해야 합니다. 익명의 사용자 계정을 삭제하려면 다음과 같이 mysql_secure_installation을 실행합니다.

# mysql_secure_installation

 

 

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL

      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

 

 

In order to log into MySQL to secure it, we'll need the current

password for the root user.  If you've just installed MySQL, and

you haven't set the root password yet, the password will be blank,

so you should just press enter here.

 

Enter current password for root (enter for none): ********

OK, successfully used password, moving on...

 

Setting the root password ensures that nobody can log into the MySQL

root user without the proper authorisation.

 

You already have a root password set, so you can safely answer 'n'.

 

Change the root password? [Y/n] n

 ... skipping.

 

By default, a MySQL installation has an anonymous user, allowing anyone

to log into MySQL without having to have a user account created for

them.  This is intended only for testing, and to make the installation

go a bit smoother.  You should remove them before moving into a

production environment.

 

Remove anonymous users? [Y/n] y

 ... Success!

 

Normally, root should only be allowed to connect from 'localhost'.  This

ensures that someone cannot guess at the root password from the network.

 

Disallow root login remotely? [Y/n] n

 ... skipping.

 

By default, MySQL comes with a database named 'test' that anyone can

access.  This is also intended only for testing, and should be removed

before moving into a production environment.

 

Remove test database and access to it? [Y/n] y

 - Dropping test database...

 ... Success!

 - Removing privileges on test database...

 ... Success!

 

Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.

 

Reload privilege tables now? [Y/n] y

 ... Success!

 

Cleaning up...

 

 

 

All done!  If you've completed all of the above steps, your MySQL

installation should now be secure.

 

Thanks for using MySQL!

 

Packages 설치

데이터베이스 설치가 완료되면 최신 버전의 오픈스택 패키지를 설치해야 합니다. CentOS6.5 버전에서 설치할 수 있는 버전이 IceHouse이므로 IceHouse를 설치하기 위한 패키지를 설치하겠습니다.

 

1.     Yum install을 이용해서 RDO 레파지토리를 사용하기 위한 yum-plugin-priorities를 설치합니다.

# yum install yum-plugin-priorities

 

2.     이번에는 다음과 같은 명령어로 rdo-release-icehouse 내려 받고 설치합니다.

# yum install http://repos.fedorapeople.org/repos/openstack/openstack-icehouse/rdo-release-icehouse-4.noarch.rpm

 

3.     EPEL 패키지는 패키지 서명 및 저장소 정보에 대한 GPG(GNU Privacy Guard) 키가 포함되어 있습니다. EPEL 패키지는 레드햇, CentOS에 설치되어야 하며 설치 방법은 다음과 같습니다.

# yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

 

4.     이번에는 Openstack-utils를 설치합니다. Openstack-utlis에는 설치 및 시스템 구성을 쉽게 할 수 있는 유틸리티 프로그램이 포함되어 있습니다.

# yum install openstack-utils

 

5.     OpenStack-selinux 패키지는 RHEL CentOS에 대한 OpenStack 설치 과정에서 SELinux를 구성하는 데 필요한 정책 파일이 포함되어 있습니다.

# yum install openstack-selinux


6.     패키지 설치가 모두 완료되면 시스템을 업그레이드합니다.

# yum upgrade

 

7.     업그레이드가 완료되면 시스템을 재부팅합니다.

# reboot

 

Qpid 설치

우분투 서버에서 메시지 서비스로 RabbitMQ를 설치했다면 레드햇이나 CentOS에서는 Qpid를 설치해 보겠습니다. 우분투 서버와 달리 레드햇이나 CentOS에서는 RabbitMQ보다 Qpid를 더 많이 지원합니다.

 

1.     Yum install을 이용해서 Qpid를 설치합니다.

# yum install qpid-cpp-server

 

2.     오픈스택을 쉽게 설치하기 위해 인증을 사용하지 않도록 /etc/qpidd.conf 파일을 열어 다음과 같이 설정합니다.

# vi /etc/qpidd.conf
auth=no

 

3.     Qpid 서버를 시작하고 부팅 시 Qpid 서비스가 자동 시작될 수 있도록 다음과 같이 설정합니다.

# service qpidd start
Starting Qpid AMQP daemon:                                 [  OK  ]
# chkconfig qpidd on

 

이렇게 해서 필수 컴포너트들을 설치해 보았습니다. 다음시간에는 Keystone을 설치해 보도록 하겠습니다.

그럼, 다음시간에 다시 만나요~!!

Posted by 나리 짱!!! naleejang
OpenStack Class2015.02.12 16:34

안녕하세요~!!

지난시간까지는 서버 한대에 CentOS6.5를 설치하고 iceHouse 버전의 오픈스택을 PackStack을 이용하여 설치해 보고, Dashboard를 통하여 Neutron 네트워크 생성을 해 보았습니다. 

오늘은 Multi node에서 오픈스택을 설치하기 위한 정말 필요한 기능만을 선택하여 오픈스택을 구성해 보도록 하겠습니다.  

Multi Node에서의 오픈스택 설치

앞에서 노드 한대에 오픈스택을 모두 설치해 보았다면 이번에는 여러 노드에 오픈스택을 설치해 보도록 하겠습니다. 설치에 앞서 먼저 시스템 구성도를 그려보도록 하겠습니다.

 

Multi Node에서 오픈스택 시스템 구성도

Single Node에서는 PackStack을 이용해 Neutron 오픈스택을 설치하였다면 여기서는 기존 네트워크 방식인 Nova-network을 이용해 아래 그림과 같이 꼭 필요한 서비스만으로 오픈스택을 구성해 보겠습니다.


컨트롤러 노드에는 서포팅 서비스인 데이터베이스인 MySQL과 메시지 서비스인 Qpid를 설치하고, 기본 서비스로 인증 서비스 Keystone, 이미지 서비스 Glance, 컴퓨트 서비스 Nova, 데쉬보드 서비스 Horizon과 추가 서비스로 블록 스토리지인 Cinder를 설치할 예정입니다. 모니터링 및 관리용 IP10.10.15.11eth0을 사용한다고 가정합니다.

컴퓨트 노드에는 Nova 컴퓨트와 Nova-networking, 기본 하이퍼바이저인 KVM 또는 Qemu를 설치합니다. 컴퓨트 노드에서 외부 인터넷과 통신을 하므로 컨트롤러 노드와 다르게 네트워크 카드가 한 장 더 필요합니다. 오픈스택은 이번에 구성한 서비스만으로 운영이 가능하며, 이외에 더 많은 서비스를 추가해서 컴퓨트 서비스인 Nova와 함께 사용할 수 있습니다.


다음번 포스팅에서부터는 본격적으로 위 그림과 같이 오픈스택을 설치해 보도록 하겠습니다.

Posted by 나리 짱!!! naleejang
OpenStack Class2015.02.10 18:18

안녕하세요~!!

그동안 행사 준비 때문에 너무 바뻐서 강좌를 올릴 시간이 없었네요~!! 
특히 그림이 많은 강좌는 더욱더 작업을 하기가 힘이 드는것 같습니다. 어여어여 모든 강좌를 다 오픈해 드려야 하는데 제가 너무 게을러서 이것도 너무 벅찬것 같습니다. 지난시간에는 Packstack All-in-One을 설치해 보았는데요~!! 이번 시간에는 OpenStack Dashboard에 접속해서 Neutron 네트워크를 추가해 보도록 하겠습니다.

Dashboard 접속

오픈스택 설치가 완료되었으면 데쉬보드에 접속해 보겠습니다.

 

1.     설치가 완료된 후 ls -al 명령을 입력하면 다음과 같이 keystone_admin이라는 파일을 확인할수 있습니다.

$ ls –al

total 44

-rw-------. 1 root  root    181 Jun  9 14:31 keystonerc_admin

-rw-------. 1 stack stack 17729 Jun  9 13:02 my_answers.txt

-rw-------. 1 stack stack 17736 Jun  9 13:44 packstack-answers-20140609-134419.txt

 

2.     cat을 이용해 Keystone_admin 파일에서 USERNAME PASSWORD를 확인합니다.

$ sudo cat keystonerc_admin

export OS_USERNAME=admin

export OS_TENANT_NAME=admin

export OS_PASSWORD=d00e7c546ce744ee

export OS_AUTH_URL=http://10.10.15.11:5000/v2.0/

export PS1='[\u@\h \W(keystone_admin)]\$ '

 

3.     데쉬보드를 접속하고 확인한 USERNAMEPASSWORD를 입력합니다. 


4.     로그인을 하면 다음과 같이 데쉬보드 메인 화면을 확인할 수 있습니다.


 Neutron 네트워크 생성

오픈스택 설치가 완료되었다고 할지라도 Neutron 네트워크를 바로 사용할 수는 없습니다. 그래서, Neutron 네트워크 사용을 위한 네트워크 IP 설정 및 네트워크를 생성해 보도록 하겠습니다.

 

1.     Ifconfig를 해서 보면 br-ex에 우리가 설정하고자 하는 외부 IP가 아닌 전혀 다른 IP가 설정되어 있는 것을 확인할 수 있습니다. IP는 오픈스택 설치 시 기본으로 설정해 주는 IP입니다.

$ ifconfig

br-ex     Link encap:Ethernet  HWaddr 12:B1:9E:BD:52:48 

          inet addr:172.24.4.225  Bcast:0.0.0.0  Mask:255.255.255.240

          inet6 addr: fe80::b025:abff:fe5d:4f9f/64 Scope:Link

          UP BROADCAST RUNNING  MTU:1500  Metric:1

          RX packets:10 errors:0 dropped:0 overruns:0 frame:0

          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:684 (684.0 b)  TX bytes:468 (468.0 b)

 

br-int    Link encap:Ethernet  HWaddr DA:0B:40:22:9F:47 

          inet6 addr: fe80::8c0:abff:fee9:a049/64 Scope:Link

          UP BROADCAST RUNNING  MTU:1500  Metric:1

          RX packets:11 errors:0 dropped:0 overruns:0 frame:0

          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:762 (762.0 b)  TX bytes:468 (468.0 b)

 

2.     그럼, /etc/sysconfig/network-scripts/ifcfg-br-ex 파일을 열어 아래와 같이 수정합니다. 이때 DEVICETYPE ovs이며, TypeOVSBridge입니다.

$ sudo vi /etc/sysconfig/network-scripts/ifcfg-br-ex

DEVICE=br-ex

DEVICETYPE=ovs

TYPE=OVSBridge

BOOTPROTO=static

IPADDR=192.168.0.100

NETMASK=255.255.255.0

BROADCAST=192.168.0.255

GATEWAY=192.168.0.1

DNS1=8.8.8.8

NM_CONTROLLED=no

DEFROUTE=yes

IPV4_FAILURE_FATAL=yes

IPV5INIT=no

ONBOOT=yes

 

3.     이번에는 /etc/sysconfig/network-scripts/ifcfg-eth1을 열어 아래와 같이 수정합니다. Ifcfg-eth1에서는 TypeOVSPort로 설정하고, OVS_BRIDGE 파라메터를 추가합니다.

$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

TYPE=OVSPort

DEVICETYPE=ovs

OVS_BRIDGE=br-ex

NM_CONTROLLED=no

IPV6INIT=no

ONBOOT=yes

 

4.     IP 설정이 완료되었으면 네트워크 서비스를 재 시작합니다.

$ sudo service network restart

Shutting down interface br-ex:                             [  OK  ]

Shutting down interface eth0:                              [  OK  ]

Shutting down interface eth1:                              [  OK  ]

Shutting down loopback interface:                          [  OK  ]

Bringing up loopback interface:                            [  OK  ]

Bringing up interface br-ex:  Determining if ip address 192.168.0.100 is already in use for device br-ex...

                                                           [  OK  ]

Bringing up interface eth0:  Determining if ip address 10.10.15.11 is already in use for device eth0...

                                                           [  OK  ]

Bringing up interface eth1:  RTNETLINK answers: File exists

                                                           [  OK  ]

 

 

5.     다시 ifconfig를 해서 보면 br-exIP가 수정된 것을 확인 할 수 있습니다.

$ ifconfig

br-ex     Link encap:Ethernet  HWaddr 08:00:27:04:A8:B0 

          inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0

          inet6 addr: fe80::e403:28ff:fe45:a85c/64 Scope:Link

          UP BROADCAST RUNNING  MTU:1500  Metric:1

          RX packets:16 errors:0 dropped:0 overruns:0 frame:0

          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:3442 (3.3 KiB)  TX bytes:972 (972.0 b)

 

br-int    Link encap:Ethernet  HWaddr DA:0B:40:22:9F:47 

          inet6 addr: fe80::8c0:abff:fee9:a049/64 Scope:Link

          UP BROADCAST RUNNING  MTU:1500  Metric:1

          RX packets:11 errors:0 dropped:0 overruns:0 frame:0

          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:762 (762.0 b)  TX bytes:468 (468.0 b)

 

6.     IP가 수정된 것은 ifconfig 뿐만 아니라 OpenvSwitch에서도 확인할 수 있습니다. 아래와 같이 sudo ovs-vsctl show 명령어를 실행하면 br-exeth1이 포트로 추가되어 있는 것을 확인할 수 있습니다.

$ sudo ovs-vsctl show

aac730c8-4099-4c7d-8ff6-7f251d9e8e46

    Bridge br-int

        Port br-int

            Interface br-int

                type: internal

        Port "qr-5f49aafd-5f"

            tag: 1

            Interface "qr-5f49aafd-5f"

                type: internal

    Bridge br-ex

        Port "eth1"

            Interface "eth1"

        Port br-ex

            Interface br-ex

                type: internal

    ovs_version: "1.11.0"

 

7.     이제 admin 계정으로 데쉬보드를 접속하여 좌측의 관리자 > 시스템 패널 > 라우터 메뉴를 들어갑니다. 그리고, 기존에 생성되어 있던 라우터를 삭제합니다. 

8.     라우터 삭제 버튼을 클릭하면 아래와 같은 확인 메시지가 뜨는데 이때 라우터 삭제 버튼을 클릭합니다.

 

9.     그러면 아래와 같이 라우터가 삭제됩니다.

 

10.     이제 관리자 > 시스템 패널 > 네트워크 메뉴로 들어갑니다. 그리고, public을 네트워크를 삭제합니다.


11.     Public을 선택하고 상단의 빨간 네트워크 삭제 버튼을 클릭하면 아래와 같은 확인 메시지가 나옵니다. 메시지를 확인하고 파란 네트워크 삭제 버튼을 클릭합니다.

 

12.     그러면 네트워크 목록에서 public 네트워크가 삭제된 것을 확인할 수 있습니다.

 

13.     이제 우리가 설정한 IPpublic 네트워크를 다시 생성해야 합니다. 네트워크 목록 화면의 상단에 “+ 네트워크 생성버튼을 클릭하면 아래와 같은 네트워크 생성 창이 뜹니다. 이때 이름은 public-subnet이라고 하고, 프로젝트는 admin을 선택합니다. 그리고, 외부 네트워크에 체크를 한 후 하단의 네트워크 생성 버튼을 클릭합니다.

 

14.     그러면, 네트워크 목록에서 public 네트워크가 생성된 것을 확인할 수 있습니다. 그런데, private 네트워크에는 관련 서브넷이 있는데, public 네트워크에는 보이지 않습니다. 이제부터 public 네트워크의 서브넷을 만들어 보겠습니다. 목록에서 public 네트워크를 클릭합니다.


15.     네트워크 세부 정보와 함께 서브넷 정보도 함께 확인할 수 있는 상세화면으로 전환되었습니다. 그럼, 서브넷 생성 버튼을 클릭합니다.

 

16.  아래와 같이 서브넷 생성 팝업이 뜨면, 서브넷 이름, 네트워크 주소, 게이트웨이 IP를 입력합니다. 서브넷 이름은 public_subnet으로 하고, 네트워크 주소는 미리 설정한 IP 범위를 입력하면 됩니다.


17.  다음 버튼을 클릭하면 할당 서브넷 세부정보를 입력하라는 창으로 전환합니다. 이때 Pools 할당에는 public IP 중 할당 가능한 IP 범위를 입력하면 됩니다. 그리고, DNS 네임 서버가 있으면 네임 서버를 입력하고 생성 버튼을 클릭합니다.

 

18.  그러면 네트워크 목록에서 public 네트워크의 관련 서브넷 정보가 생성된 것을 확인 하실 수 있습니다.


19.  네트워크 생성이 완료되면 라우터 생성을 해야 합니다. 라우터 생성은 demo 계정에서 생성해야 하므로, admin 계정을 로그아웃하고 demo 계정으로 로그인합니다. 그리고, 좌측의 프로젝트 > 네트워크 > 라우터 메뉴를 선택합니다.

 

20.  라우터 생성 버튼을 클릭하면 아래와 같은 라우터 생성 팝업이 뜨는데, 라우터 이름에 생성하고자 하는 라우터 명을 입력하고 라우터 생성 버튼을 클릭합니다.

 

21.  라우터가 생성이 되면 라우터의 게이트웨이와 인터페이스를 설정해야 합니다. 우선, 게이트웨이 먼저 설정해 보도록 하겠습니다. 생성한 라우터의 게이트웨이 설정 버튼을 클릭합니다.

 

22.  게이트웨이 설정 창이 뜨면 외부 네트워크를 아까 생성한 public으로 선택한 후 게이트웨이 설정 버튼을 클릭합니다.


23.  라우터의 게이트웨이가 public 네트워크로 설정되었습니다. 이제 인터페이스를 설정해 보겠습니다. 라우터 이름을 클릭하여 세부 정보로 들어갑니다.

 

24.  라우터 세부 정보에서는 라우터 기본 정보, 인터페이스를 확인 할 수 있습니다. 인터페이스 추가 버튼을 클릭합니다.


25.  인터페이스 추가 창에서는 아래와 같이 서브넷을 선택하고 인터페이스 추가 버튼을 클릭합니다.


26.  아래와 같이 인터페이스가 추가되었습니다. 



인스턴스 생성하기

네트워크 설정이 끝났으면 이제 인스턴스를 생성할 수 있습니다. 인스턴스 생성은 demo 계정으로 로그인하여 진행하면 됩니다.

 

1.     Demo 계정으로 데쉬보드를 로그인 한 후 좌측 메뉴에서 프로젝트 > Compute > 인스턴스 메뉴를 선택합니다.

 

2.     인스턴스 화면 우측 상단의 +인스턴스 시작 버튼을 클릭하면 아래와 같이 인스턴스를 생성할 수 있는 화면이 뜹니다. 그러면, 인스턴스 이름, 이미지를 선택합니다.

 

3.     이번에는 네트워킹 탭에 들어가서 네트워크가 선택되었는지 확인하고 Launch 버튼을 클릭합니다.

 

4.     이제 몇 분만 기다리면 인스턴스가 생성이 됩니다.


이렇게 해서 CentOS에서 설치해보는 오픈스택 All-in-One 편을 모두 마쳤습니다. 

다음 포스팅에서는 Multi node로 오픈스택을 설치해 보도록 하겠습니다.

Posted by 나리 짱!!! naleejang
OpenStack Class2015.01.05 23:49

안녕하세요~!!


2015년을 맞이하여 처음으로 글을 써 봅니다. 
블로그에 방문하시는 모든 분들이 올 한해도 하고자 하시는 모든 일이 다 잘 이루어 지길 바랍니다. 또한 새해 복도 많이 많이 받으셨으면 좋겠습니다.

오늘은 지난 포스팅에 이어 CentOS로 설치한 서버 한대에 오픈스택을 설치해 보도록 하겠습니다. Devstack으로도 CentOS에  오픈스택을 설치할 수 있지만, RedHat 계열인 CentOS는 RDO PackStack이라고 하는 아주 좋은 설치 툴이 있습니다. 

그래서, 이번에는 PackStack을 이용하여 서버 한대에 오픈스택을 설치해 보도록 하겠습니다.

 All-in-One으로 오픈스택을 설치해 보

3장에서 우분투를 설치하고 데브스택을 이용해 오픈스택을 설치했다면 이번 장에서는 레드햇 계열인 CentOS를 설치하고 RDO PackStack을 이용해서 오픈스택을 설치하겠습니다. PackStack은 쉘 스크립트를 이용해서 설치하는 데브스택과 달리 Puppet 기반의 인스톨 유틸리티를 사용합니다.

 

 시스템 구성도를 그려보자

Single Node에 오픈스택을 설치할 때는 테스트나 스터디를 위한 설치이므로 사용하고 있는 컴퓨터에 VisualBoxVMWare로 생성한 가상서버를 주로 이용합니다. 이때 생성한 가상서버에 CentOS를 설치합니다. 레드햇에서 서비스하는 RDO PackStack을 이용해서 그림 6-1과 같은 네트워크 구성으로 설치하겠습니다.







IP 공유기의 게이트웨이 IP192.168.0.1이고 서브넷 마스크는 255.255.255.0이라고 가정합니다. Neutron을 이용해 오픈스택을 설치할 예정이므로 인터넷이 되는 윈도 PC의 네트워크 카드를 외부 인터넷과 연결되는 가상서버의 브리지 네트워크로 설정하고 br-ex 네트워크 IP192.168.0.100으로 사용합니다. 관리 및 모니터링 IP는 다른 공유기와 연결된 Bridge를 이용하는데 Bridge의 게이트웨이 IP10.10.15.1이고 CentOS가 설치된 가상서버의 IP10.10.15.11을 사용합니다. Fixed IP Range10.0.0.0/24를 사용하고 Floating IP Range는 인터넷이 되는 192.168.0.0/24를 사용할 것입니다. 그리고 할당 가능한 Floating IP Pool192.168.0.100에서 192.168.0.200을 사용하겠습니다.

 

Network IP 설정

VisualBox에서 생성한 가상서버에 CentOS 설치가 완료되면 로그인한 후 먼저 Network IP를 설정합니다. IP 설정이 완료되면 그 다음부터는 SSH 클라이언트 툴을 이용해 좀 더 쉽게 오픈스택을 설치할 수 있습니다. 이때 설정할 네트워크 IP는 시스템 구성도에서 미리 그려본 IP를 설정합니다.

 

1.     /etc/sysconfig/network-scripts/ifcfg-eth0 파일을 열어 다음과 같이 내용을 수정합니다. eth0은 모니터링 및 관리용 IP를 사용할 예정이므로 static IP로 설정합니다.

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

HWADDR=08:00:27:EC:43:E0

TYPE=Ethernet

UUID=84a27f42-ea7d-4f11-a965-2d735f9560e3

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=none

NETMASK=255.255.255.0

IPADDR=10.10.15.11

GATEWAY=10.10.15.1

USERCTL=no

IPV6INIT=no

PEERDNS=yes

 

2.     다시 /etc/sysconfig/network-scripts/ifcfg-eth1 파일을 열어 다음과 같이 수정합니다.

# vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

ONBOOT=yes

 

3.     IP 설정이 완료되면 다음과 같은 명령어로 네트워크 서비스를 재시작합니다.

# service network restart

Shutting down interface eth0:                              [  OK  ]

Shutting down loopback interface:                          [  OK  ]

Bringing up loopback interface:                            [  OK  ]

Bringing up interface eth0:  Determining if ip address 10.10.15.11 is already in use for device eth0...

                                                           [  OK  ]

Bringing up interface eth1:                                [  OK  ]

 

4.     네트워크 서비스가 정상적으로 설정되었는지 ifconfig 명령으로 확인합니다.

# ifconfig

eth0      Link encap:Ethernet  HWaddr 08:00:27:EC:43:E0 

          inet addr:10.10.15.11  Bcast:10.10.15.255  Mask:255.255.255.0

          inet6 addr: fe80::a00:27ff:feec:43e0/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:3313 errors:0 dropped:0 overruns:0 frame:0

          TX packets:2028 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:252721 (246.7 KiB)  TX bytes:230736 (225.3 KiB)

 

eth1      Link encap:Ethernet  HWaddr 08:00:27:04:A8:B0 

          inet6 addr: fe80::a00:27ff:fe04:a8b0/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:74 errors:0 dropped:0 overruns:0 frame:0

          TX packets:21 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:8211 (8.0 KiB)  TX bytes:1662 (1.6 KiB)

 

lo        Link encap:Local Loopback 

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

 

PackStack 설치를 위한 사전 준비

네트워크 IP 설정를 완료하면 SSH 클라이언트 툴을 이용해서 해당 네트워크 IP로 접속합니다. 앞서 10.10.15.11로 설정했으므로 SSH 접속 시 10.10.15.11로 접속합니다. 접속한 후 PackStack을 설치하기 전에 설치를 위한 사전 준비를 합니다.

 

1.     Yum을 이용해서 시스템을 업데이트합니다.

# yum update –y

Loaded plugins: fastestmirror, security

base                                             | 3.7 kB     00:00    

base/primary_db                                  | 4.4 MB     00:00    

extras                                           | 3.4 kB     00:00    

extras/primary_db                                |  19 kB     00:00    

updates                                          | 3.4 kB     00:00    

updates/primary_db                               | 3.2 MB     00:00    

Setting up Update Process

….

yum-plugin-security.noarch 0:1.1.30-17.el6_5                         

  yum-utils.noarch 0:1.1.30-17.el6_5                                   

 

Complete!

 

2.     시스템 업데이트가 완료되면 stack 계정을 다음과 같이 추가합니다.

# useradd stack

# passwd stack

New password:

Retype new password:

passwd: all authentication tokens updated successfully.

 

3.     생성한 stack 계정으로 sudo 명령을 사용하기 위해 /etc/sudoers 파일에 쓰기 권한을 추가합니다. 그리고 /etc/sudoers 파일을 열어 “stack ALL=(ALL) ALL”을 추가합니다.

# chmod u+w /etc/sudoers

# vi /etc/sudoers

stack ALL=(ALL) ALL

 

4.     Sudoers 파일 수정을 완료하면 아무 때나 수정할 수 없도록 다음과 같이 쓰기 권한을 제거합니다.

# chmod u-w /etc/sudoers

 

5.     이제 stack 계정으로 전환합니다.

# su stack

$

 

PackStack IceHouse 패키지와 PackStack 설치

네트워크 IP 설정과 사전 준비가 끝나면 설치할 버전의 레파지토리 rpm을 받아와야 합니다. 우리는 icehouse를 설치할 예정이므로 icehouse 패키지를 받아오겠습니다. 만일 다른 버전을 설치하고 싶다면 패도라 레파지토리 사이트(http://repos.fedorapeople.org/repos/openstack)에 방문하면 해당 패키지를 받을 수 있습니다.

1. Yum install을 이용해서 icehouse 패키지를 다음과 같이 설치합니다.

$ sudo yum install -y http://rdo.fedorapeople.org/openstack-icehouse/rdo-release-icehouse.rpm

Loaded plugins: fastestmirror, security

Loading mirror speeds from cached hostfile

 * base: centos.tt.co.kr

 * extras: centos.tt.co.kr

 * updates: centos.tt.co.kr

Setting up Install Process

rdo-release-icehouse-4.noarch.rpm                 |  12 kB     00:00    

Examining /var/tmp/yum-root-TSVoyE/rdo-release-icehouse-4.noarch.rpm: rdo-release-icehouse-3.noarch

Marking /var/tmp/yum-root-TSVoyE/rdo-release-icehouse-4.noarch.rpm to be installed

Resolving Dependencies

--> Running transaction check

---> Package rdo-release.noarch 0:icehouse-4 will be installed

--> Finished Dependency Resolution

 

Dependencies Resolved

 

=========================================================================

 Package      Arch    Version      Repository                       Size

=========================================================================

Installing:

 rdo-release  noarch  icehouse-4   /rdo-release-icehouse-4.noarch  8.7 k

 

Transaction Summary

=========================================================================

Install       1 Package(s)

 

Total size: 8.7 k

Installed size: 8.7 k

Downloading Packages:

Running rpm_check_debug

Running Transaction Test

Transaction Test Succeeded

Running Transaction

  Installing : rdo-release-icehouse-4.noarch                         1/1

  Verifying  : rdo-release-icehouse-4.noarch                         1/1

 

Installed:

  rdo-release.noarch 0:icehouse-4                                        

 

Complete!

 

2. 패키지 설치가 완료되면 packstack을 설치합니다. Yum install을 이용해서 openstack-packstack을 설치합니다. 다음과 같은 메시지들이 지나가면서 오픈스택 icehouse 버전으로 설치가 되는 것을 확인할 수 있습니다.

$ sudo yum install openstack-packstack

Loaded plugins: fastestmirror, security

Loading mirror speeds from cached hostfile

 * base: centos.tt.co.kr

 * extras: centos.tt.co.kr

 * updates: centos.tt.co.kr

foreman                                           | 3.6 kB     00:00    

foreman/primary_db                                |  61 kB     00:00    

foreman-plugins                                   | 2.9 kB     00:00    

foreman-plugins/primary_db                        |  23 kB     00:00    

openstack-icehouse                                | 2.9 kB     00:00    

openstack-icehouse/primary_db                     | 732 kB     00:02    

puppetlabs-deps                                   | 2.5 kB     00:00    

puppetlabs-deps/primary_db                        |  23 kB     00:00    

puppetlabs-products                               | 2.5 kB     00:00    

puppetlabs-products/primary_db                    | 110 kB     00:00    

Setting up Install Process

….

Dependency Installed:

  compat-readline5.x86_64 0:5.2-17.1.el6                                

  openstack-packstack-puppet.noarch 0:2014.1.1-0.12.dev1068.el6         

  openstack-puppet-modules.noarch 0:2014.1-12.el6                       

  ruby.x86_64 0:1.8.7.352-13.el6                                        

  ruby-irb.x86_64 0:1.8.7.352-13.el6                                    

  ruby-libs.x86_64 0:1.8.7.352-13.el6                                   

  ruby-rdoc.x86_64 0:1.8.7.352-13.el6                                   

  rubygem-json.x86_64 0:1.5.5-1.el6                                     

  rubygems.noarch 0:1.3.7-5.el6                                          

 

Complete!

 

3. PackStack은 데브스택의 localrc와 같은 환경 설정 파일을 자동으로 생성합니다. 다음 명령어를 실행하면 PackStack을 설치하기 위한 파라메터 템플릿이 자동으로 생성됩니다.

$ packstack --gen-answer-file=my_answers.txt

 ** my_answers.txt 파일을 생성했다면 본 파일의 내용을 확인하고, 아래와 같은 명령어로 설치하면 됩니다. 만일 생성을 하지 않고 바로 실행을 하고자 한다면 4번과 같이 설치합니다.

$ packstack --answer-file=my_answers.txt


4. 서버 한 대에 오픈스택을 설치할 예정이므로 allinone 옵션을 사용해서 다음과 같이 설치합니다. 설치 완료까지는 수십 여분이 소요되므로 모니터링 하면서 잠시 기다립니다.

$ packstack --allinone

Welcome to Installer setup utility

Packstack changed given value  to required value /home/stack/.ssh/id_rsa.pub

 

Installing:

Clean Up                                             [ DONE ]

Setting up ssh keys                                  [ DONE ]

Discovering hosts' details                           [ DONE ]

Adding pre install manifest entries                  [ DONE ]

Adding MySQL manifest entries                        [ DONE ]

Preparing servers                                    [ DONE ]

Installing Dependencies                              [ DONE ]

Copying Puppet modules and manifests                 [ DONE ]

Applying 10.10.15.11_prescript.pp

10.10.15.11_prescript.pp:                            [ DONE ]      

Applying 10.10.15.11_mysql.pp

Applying Puppet manifests                            [ DONE ]

Finalizing                                           [ DONE ]

 

 **** Installation completed successfully ******

 

 

Additional information:

 * A new answerfile was created in: /home/stack/packstack-answers-20140609-134419.txt

 * Time synchronization installation was skipped. Please note that unsynchronized time on server instances might be problem for some OpenStack components.

 * File /root/keystonerc_admin has been created on OpenStack client host 10.10.15.11. To use the command line tools you need to source the file.

 * Copy of keystonerc_admin file has been created for non-root user in /home/stack.

 * To access the OpenStack Dashboard browse to http://10.10.15.11/dashboard .

Please, find your login credentials stored in the keystonerc_admin in your home directory.

 * To use Nagios, browse to http://10.10.15.11/nagios username : nagiosadmin, password : 231887a7862e4495

 * Because of the kernel update the host 10.10.15.11 requires reboot.

 * The installation log file is available at: /var/tmp/packstack/20140609-134418-LSGqHh/openstack-setup.log

 * The generated manifests are available at: /var/tmp/packstack/20140609-134418-LSGqHh/manifests



이렇게 해서 오픈스택을 설치해 보았습니다. 다음시간에는 설치된 오픈스택 데쉬보도에 접속을 해 보고, Neutron 네트워크도 설정해 보도록 하겠습니다.


그럼, 다음 시간에 다시 만나요~!!

Posted by 나리 짱!!! naleejang
OpenStack Class2014.12.29 23:09

안녕하세요~!! 다들 즐겁고 신나는 크리스마스 보내셨나요?

아이가 있는 분들은 아이와 함께 다들 산타가 되셨을 듯하고, 아직 싱글이신 분들은 연인들과 가족들과 의미있는 시간을 보내셨으리라 생각합니다. 저는 아이가 있기 때문에 물론 일일 산타가 되었습니다. 


오늘은 CentOS를 이용하여 오픈스택을 구축해 볼까 합니다. 그럼, 지금부터 시작합니다.


CentOS도 오픈스택을 구축할 수 있어!

오픈스택의 기본 운영체제는 우분투입니다. 그러나 최근에는 우분투 외에 데비안, 오픈수세와 수세, 레드햇 엔터프라이즈 리눅스, CentOS 그리고 페도라에서도 설치할 수 있습니다.

그 중에서도 서버용 운영체제로 가장 많이 쓰이는 것이 바로 레드햇입니다. 그러나 레드햇은 라이선스 비용이 들기 때문에 이와 유사한 커널이 있는 CentOS에서 오픈스택을 설치하겠습니다. 그리고 테스트 및 스터디를 위해 Single Node 설치와 기본 서비스로 구성되는 Multi Node 오픈스택을 설치하겠습니다.

 

설치 환경을 만들어 보자

오픈스택을 구축할 서버가 있다면 서버를 이용해서 직접 설치를 할 수도 있지만 설치해본 경험이 없다면 가상서버를 준비해서 오픈스택을 한번 정도 설치해보는 것이 좋습니다. 이 전에 오픈스택을 설치할 때 VirtualBox를 이용해서 설치한 것처럼, 이번에도 VirtualBox를 이용해서 설치 환경을 만들어 보겠습니다.

 

 CentOS 다운로드

CentOS 사이트(http://www.centos.org/download/) 사이트에 방문해서 최신 CentOS를 받습니다. 아래 그림에서 [Download now]를 클릭하면 CentOS를 내려 받을 수 있는 페이지로 이동합니다. 그때 목록에 있는 CentOS를 하나 클릭해서 받습니다.

** "오픈스택을 다루는 기술"을 집필 할때의 최신 OS는 CentOS 6 버전이였습니다. 그러나 지금은 CentOS도 업그레이드되어 CentOS 7 이 나왔습니다. 제가 설치했던 CentOS 버전은 6이였습니다. CentOS 6은 http://wiki.centos.org/Download 에서 다운로드 받을 수 있습니다.  

 

 CentOS 설치를 위한 VisualBox 가상서버 준비

VisualBox를 설치하는 과정은 이미 앞에서 다루었으므로 이번에는 CentOS를 설치하기 위해 반드시 체크해야 하는 부분만 살펴보겠습니다.

 

1.     VisualBox를 실행하고 [새로 만들기]를 클릭하면 다음과 같은 가상 머신 만들기 창이 열립니다. 이때 종류는 Linux, 버전은 Red Hat(64 bit)로 선택하고 [다음(N)]을 클릭합니다. 


2.     가상 하드 드라이브 만들기 창이 나오면 생성할 디스크 사이즈를 입력하고 [만들기]를 클릭해서 가상 하드 드라이브를 만듭니다.

 


3.     가상 하드 드라이브가 만들어지면 VisualBox 메인 창에서 생성된 드라이브를 선택하고 [설정] 을 클릭합니다. 다음과 같은 설정 창이 열리면 왼쪽에서 [저장소]를 선택하고 속성에서 [CD/DVD 드라이브(D)]를 클릭한 후 CentOS를 선택합니다. 


4.     [네트워크]를 클릭하고 [어댑터 1] 탭에서 [브리지 어댑터]를 선택합니다. 그리고 하단의 고급을 클릭하고 무작위 모드를 [모두 허용]으로 선택합니다. 같은 방법으로 [어댑터 2] 탭도 설정합니다.


5.     설정을 모두 완료했으면 VisualBox 메인 창에서 [시작]을 클릭합니다. CentOS 설치 화면이 열리면 [Install or upgrade an existing system]이나 [Install system with basic video driver]를 선택합니다.

 


6.     화면이 전환되면서 이미지 파일 테스트 여부를 물으면 [Skip]을 선택합니다.


7.     CentOS 6이라는 로고가 뜨면 하단의 [Next]를 클릭합니다. 이때 화면의 해상도가 낮으면 [Next]가 보이지 않을 수 있습니다. 화면 오른쪽 스크롤 바를 밑으로 내리면 확인할 수 있습니다.


8.     언어 선택에서 English로 두고 [Next]를 클릭합니다.


9.     저장 공간 선택 창이 열리면 기본 저장소(Basic Storage Device)를 그대로 두고 [Next]를 클릭합니다.


10.  하드 디스크 데이터를 삭제할지 여부를 묻는 메시지 창이 열리면 전부 삭제하겠다는 [Yes, discard any data]를 선택합니다.


11.  Hostname에 원하는 Host 이름을 입력합니다. 여기서 Hostnameopenstack이라고 입력했습니다.


12.  시간은 Asia/Seoul을 선택하고 [Next]를 클릭합니다.


13.  Root 패스워크를 입력하는 창이 열리면 설정할 패스워드를 입력한 후 [Next]를 클릭합니다.


14.  패스워드를 암호화할지 여부를 묻는 창이 열리면 항상 사용한다는 [Use Anyway]를 선택합니다.

 


15.  다음으로 설치할 타입을 선택합니다. 처음 설치하는 것이므로 디스크를 모두 사용하겠다는 [Use All Space]를 선택합니다.


16.  설정한 값을 저장하겠냐는 메시지가 뜨면 변경 사항을 저장하겠다는 [Write changes to disk]를 선택합니다. 디스크를 포맷합니다.

 

 

17.  서버 형태를 선택하는 창이 열리면 오픈스택을 설치할 예정이므로 [Basic Server]를 선택하고 [Next]를 클릭합니다. 하단의 소프트웨어 설치 여부를 묻는 내용은 [Customize later]를 선택합니다.


18.  잠시 기다리면 CentOS를 설치합니다. 설치는 몇 분에서 수십 분이 걸리므로 잠시 기다립니다.


19.  CentOS 설치가 끝나면 [Reboot]를 클릭해서 시스템을 재부팅합니다.


20.  시스템이 재부팅되면 다음과 같이 로그인을 할 수 있는 화면으로 전환됩니다.


오늘은 CentOS를 설치해 보았습니다. CentOS7은 좀 더 그래픽한 화면으로 좀 더 설치하게 편하게 되어 있습니다. 아직까지 제가 CentOS 7에서는 설치해 보지 않아서 다음에 CentOS 7에서 오픈스택을 설치할 기회가 생긴다면 그때 다시 또 블로그에 올려 드리도록 하겠습니다. 


그럼, 다음시간에 다시 만나요~~~

Posted by 나리 짱!!! naleejang
OpenStack Class2014.12.22 23:09

안녕하세요~!!


오늘로 서비스가 가능한 오픈스택 설치편을 마무리하였습니다. 

이번 포스팅에서 준비한 내용은 오브젝트 스토리지 서비스인 Swift의 스토리지 서버를 설치와 텔레미터 서비스인 Ceilometer의 컴퓨트 노드 에이전트 설치 부분입니다.


그럼, 지금부터 시작해 보겠습니다.


Swift Storage 서버 설치

SwiftNova와 함께 설치할 수도 있지만 별로도 분리하여 Swift만 설치할 수도 있습니다. 그러나 여기서는 컴퓨트 노드에 함께 설치해서 테스트하겠습니다.

 

1.     우선 /etc 밑에 swift 디렉터리를 생성합니다.

$ sudo mkdir -p /etc/swift

 

2.     컨트롤러 노드의 /etc/swift/swift.conf의 랜덤 문자열을 복사해서 똑같이 /etc/swift/swift.conf 파일에 붙여 넣습니다.

$ sudo vi /etc/swift/swift.conf
[swift-hash]
# random unique string that can never change (DO NOT LOSE)
swift_hash_path_suffix = fLIbertYgibbitZ

 

3.     Swift Account 서버, Container 서버, Object 서버, 파일 포맷을 위한 xfsprogs, swift 연결을 위한 swiftclient, Keystone 인증을 위한 keystoneclient를 설치합니다.

$ sudo apt-get install swift swift-account swift-container swift-object xfsprogs python-swiftclient \n

python-keystoneclient

 

4.     xfs 볼륨을 다음과 같이 생성합니다.

$ sudo fdisk /dev/sdb

 

Command (m for help): n

Partition type:

   p   primary (1 primary, 1 extended, 2 free)

   l   logical (numbered from 5)

Select (default p): p

Partition number (1-4, default 3):

Using default value 3

First sector (0-488397167, default 0):

Using default value 0

Last sector, +sectors or +size{K,M,G} (488397167-488397167, default 488397167):

Using default value 488397167

 

Command (m for help): w


5.     xfs 볼륨 생성이 완료되면 다음과 같이 볼륨을 마운트합니다.

$ sudo mkfs.xfs /dev/sdb1
$ sudo echo "/dev/sdb1 /srv/node/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab
$ sudo mkdir -p /srv/node/sdb1
$ sudo mount /srv/node/sdb1
$ sudo chown -R swift:swift /srv/node

 

6.     이번에는 /etc/rsyncd.conf 파일을 생성하고 다음과 같이 입력해서 저장합니다.

$ sudo vi /etc/rsyncd.conf
uid = swift
gid = swift
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = 10.10.15.31
 
[account]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/account.lock
 
[container]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/container.lock
 
[object]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/object.lock


7.     /etc/default/rsync 파일을 다음과 같이 수정합니다.

$ sudo vi /etc/default/rsync
RSYNC_ENABLE=true

 

8.     Rsync 데몬을 시작합니다.

$ sudo service rsync start

 

9.     Swift recon 디렉토리를 생성하고 권한을 부여합니다.

$ sudo mkdir -p /var/swift/recon
$ sudo chown -R swift:swift /var/swift/recon

 

10.  Swift Proxy 서버에 만들어 놓은 ring.gz 파일을 /etc/swift 디렉터리로 복사해 옵니다.

$ scp swift@10.10.15.11:/etc/swift/*.ring.gz /etc/swift

 

11.  마지막으로 swift 서비스들을 시작합니다.

$ for service in \
  swift-object swift-object-replicator swift-object-updater swift-object-auditor \
  swift-container swift-container-replicator swift-container-updater \
  swift-container-auditor swift-account swift-account-replicator 
  swift-account-reaper swift-account-auditor; do \
service $service start; done



Ceilometer 컴퓨트 에이전트 설치

컨트롤러 노드에 Ceilometer 서버를 설치했다면 컴퓨트 노드에 Ceilometer 컴퓨트 에이전트를 설치해야 합니다.

 

1.     Ceilometer-agent-compute를 설치합니다.

$ sudo apt-get install ceilometer-agent-compute

 

2.     Ceilometer가 설치되면 /etc/nova/nova.conf를 열어 다음과 같이 ceilometer를 사용할 것이라고 설정합니다. 설정 내용은 시간 단위로 인스턴스의 상태를 체크해서 상태 값이 변경되었을 때 알려준다는 뜻입니다.

$ sudo vi /etc/nova/nova.conf
[DEFAULT]
...
instance_usage_audit = True
instance_usage_audit_period = hour
notify_on_state_change = vm_and_task_state
notification_driver = nova.openstack.common.notifier.rpc_notifier
notification_driver = ceilometer.compute.nova_notifier

 

3.     Nova.conf 파일 설정이 끝났으면 nova-compute를 재시작합니다.

$ sudo service nova-compute restart
nova-compute stop/waiting
nova-compute start/running, process 24447

 

4.     이번에는 /etc/ceilometer/ceilometer.conf 파일을 다음과 같이 수정합니다. Ceilometer.conf 파일에 RabbitMQ 정보, Keystone 정보가 포함됩니다.

$ sudo vi /etc/ceilometer/ceilometer.conf
[publisher]
# Secret value for signing metering messages (string value)
metering_secret = 115ca7336ad88e5c64a8 #CEILOMETER_TOKEN
[DEFAULT]
rabbit_host = 10.10.15.11
rabbit_password = rabbitpass
log_dir = /var/log/ceilometer
[keystone_authtoken]
auth_host =10.10.15.11
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = ceilometer
admin_password = ceilometerpass
[service_credentials]
os_auth_url = http://10.10.15.11:5000/v2.0
os_username = ceilometer
os_tenant_name = service
os_password = ceilometerpass

 

5.     이제 ceilometer 서비스를 재시작합니다.

$ sudo service ceilometer-agent-compute restart
ceilometer-agent-compute stop/waiting
ceilometer-agent-compute start/running, process 24490



이렇게해서 서비스가 가능한 한마디로 말해서 시스템이 재부팅되어도 서비스의 재시작 없이 계속 오픈스택 서비스를 사용할 수 있는 오픈스택 설치를 해 보았습니다.


다음 포스팅에서부터는 레드햇 계열인 CentOS에서 오픈스택을 설치해 보도록 하겠습니다. 그럼, 다음시간에 다시 만나요~!! 

Posted by 나리 짱!!! naleejang
OpenStack Class2014.12.19 15:55

안녕하세요~!!


지난시간에 우리는 컴퓨트 노드의 인스턴스 생성을 담당하는 Nova-compute를 설치하였습니다. 이번시간에는 네트워크를 담당하는 Neutron과 블록 스토리지를 관리하는 Cinder를 설치해보도록 하겠습니다.



Neutron 컴퓨트 설치

컴퓨트 노드에 생성되는 인스턴스의 IP를 할당하고 다른 컴퓨트 노드간의 인스턴스들이 서로 통신할 수 있도록 Neutron 컴퓨트를 설치하겠습니다.

 

1.     /etc/sysctl.conf 파일을 열어 다음과 같은 내용을 추가합니다. 네트워크 노드와 달리 컴퓨트 노드에서는 IP를 포워딩 할 일이 없으므로 rp_filter만 설정합니다.

$ sudo vi /etc/sysctl.conf
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

 

2.     수정된 sysctl.conf 파일의 내용을 sysctl 명령을 이용해서 시스템에 적용합니다.

$ sudo sysctl –p
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

 

3.     Neutron, ML2, OpenvSwitch를 설치합니다.

$ sudo apt-get install neutron-common neutron-plugin-ml2 neutron-plugin-openvswitch-agent \n
 openvswitch-datapath-dkms

 

4.     설치가 완료되면 /etc/neutron/neutron.conf 파일을 열어 다음과 같이 RabbitMQ, Neutron 플러그인 정보, Keystone 정보를 수정합니다.

$ sudo vi /etc/neutron/neutron.conf
[DEFAULT]
...
auth_strategy = keystone
...
rpc_backend = neutron.openstack.common.rpc.impl_kombu
rabbit_host = 10.10.15.11
rabbit_password = rabbitpass
...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True
 
[keystone_authtoken]
...
auth_uri = http://10.10.15.11:5000
auth_host = 10.10.15.11
auth_protocol = http
auth_port = 35357
admin_tenant_name = service
admin_user = neutron
admin_password = neutronpass

 

5.     /etc/neutron/plugins/ml2/ml2_conf.ini 파일에 네트워크 타입과 메커니즘 드라이버 정보를 다음과 같이 입력합니다.

$ sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini [ml2] type_drivers = gre tenant_network_types = gre mechanism_drivers = openvswitch [ml2_type_gre] tunnel_id_ranges = 1:1000 [ovs] local_ip = 10.0.10.31 #eth1에 해당하는 IP 입력 tunnel_type = gre enable_tunneling = True [securitygroup] firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver enable_security_group = True

 

6.     환경설정이 완료되면 openvswitch을 재시작합니다.

$ sudo service openvswitch-switch restart

 

7.     서로 다른 컴퓨트 노드간의 인스턴스 네트워킹을 담당할 br-intOpenvswitch에 추가합니다.

$ sudo ovs-vsctl add-br br-int

 

8.     Neutron은 인스턴스에 네트워크 IP를 할당 해야 하는 밀접한 관련이 있으므로 /etc/nova/ nova.conf를 열어 다음과 같이 Neutron 정보를 추가합니다.

$ sudo vi /etc/nova/nova.conf
[DEFAULT]
...
network_api_class = nova.network.neutronv2.api.API
neutron_url = http://10.10.15.11:9696
neutron_auth_strategy = keystone
neutron_admin_tenant_name = service
neutron_admin_username = neutron
neutron_admin_password = neutronpass
neutron_admin_auth_url = http://10.10.15.11:35357/v2.0
linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver
security_group_api = neutron

 

9.     Neutron 정보를 추가했으면 이번에는 nova-computeneutron-plugin을 재시작합니다.

$ sudo service nova-compute restart
nova-compute stop/waiting
nova-compute start/running, process 23167
$ sudo service neutron-plugin-openvswitch-agent restart
neutron-plugin-openvswitch-agent stop/waiting
neutron-plugin-openvswitch-agent start/running, process 23346

 


 

Cinder 볼륨 설치

컨트롤러 노드에서 Cinder 서버를 설치했다면 컴퓨트 노드에서는 Cinder 볼륨을 설치합니다. Cinder 볼륨은 블록 스토리지용 디스크가 별도로 있는 노드에서도 설치가 가능합니다.

 

1.     먼저 lvm을 설치합니다.

$ sudo apt-get install lvm2

 

2.     Fdisk 명령을 이용해서 스토리지용 디스크가 있는지 확인합니다.

$ sudo fdisk -l
 
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000d9e26
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    37974015    18985984   83  Linux
/dev/sda2        37976062    41940991     1982465    5  Extended
/dev/sda5        37976064    41940991     1982464   82  Linux swap / Solaris
 
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
 
Disk /dev/sdb doesn't contain a valid partition table

 

3.     확인된 디바이스로 물리 볼륨(Physical Volume)을 생성합니다.

$ sudo pvcreate /dev/sdb

 

4.     물리 볼륨 생성이 완료되면 볼륨 그룹(Volume Group) cinder-volumes라는 이름으로 다음과 같이 생성합니다.

$ sudo vgcreate cinder-volumes /dev/sdb
Physical volume "/dev/sdb" successfully created


5.     볼륨 그룹을 생성한 후 /etc/lvm/lvm.conf 파일을 열어 LVM이 기존 디바이스에 접근하지 못하도록 다음과 같이 Filter을 설정합니다.

$ sudo vi /etc/lvm/lvm.conf
devices {
...
filter = [ "a/sda1/", "a/sdb/", "r/.*/"]
...
}

 

6.     이제 cinder 볼륨을 설치합니다.

$ sudo apt-get install cinder-volume

 

7.     /etc/cinder/cinder.conf 파일을 열어 RabbitMQ 정보, Keystone 정보, Database 정보를 입력합니다.

$ sudo vi /etc/cinder/cinder.conf
[DEFAULT]
rpc_backend = cinder.openstack.common.rpc.impl_kombu
rabbit_host = 10.10.15.11
rabbit_port = 5672
rabbit_userid = guest
rabbit_password = rabbitpass
glance_host = 10.10.15.11
…
[keystone_authtoken]
auth_uri = http://10.10.15.11:5000
auth_host = 10.10.15.11
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = cinder
admin_password = cinderpass
...
[database]
connection = mysql://cinder:cinderdbpass@10.10.15.11/cinder

 

8.     환경설정이 끝나면 마지막으로 cinder 볼륨과 tgt를 재시작합니다.

$ sudo service cinder-volume restart
cinder-volume stop/waiting
cinder-volume start/running, process 8358
$ sudo service tgt restart
tgt stop/waiting
tgt start/running, process 8383



이렇게 해서 Neutron과 Cinder를 설치해 보았습니다. 다음시간에는 오브젝트 스토리지인 Swift와 미터링 서비스인 Ceilometer를 설치해보도록 하겠습니다. 그럼 다음 시간에 만나요~~~

Posted by 나리 짱!!! naleejang
OpenStack Class2014.12.17 20:49

안녕하세요~!!

요즘 날씨가 정말 추워졌습니다. 출퇴근하실때 정말 옷깃을 단단히 여미고 다니셔야 될 듯 합니다. 

오늘은 컴퓨트 노드를 설치해 볼까 합니다. 지난시간에는 네트워크 노드를 설치했었는데 오늘은 컴퓨트 노드 설치 차례입니다. 그럼, 시작해 볼까요~~~


인스턴스를 생성하는 컴퓨트 노드를 설치해 보자

컴퓨트 노드는 가상서버 즉 인스턴스를 생성하는 하이퍼바이저, 네트워크 IP 및 통신을 담당하는 Neutron이 기본으로 설치됩니다. 여분의 하드디스크가 있느냐에 따라 CinderSwift Storage 서버를 구성하기도 합니다. 여기서는 오픈스택의 기본 하이퍼바이저인 KVMNova 클라이언트, Neutron 클라이언트, Cinder 볼륨, Swift Storage 서버들을 설치하겠습니다.

 

네트워크 인터페이스 설정

컴퓨트 노드는 컨트롤러 노드와 통신할 관리용 IP 하나, 인스턴스들간의 네트워크 경로인 내부 IP 하나가 필요합니다. 그러므로 컴퓨트 노드에 필요한 최소 네트워크 인터페이스 카드는 2장입니다.

 

1.     /etc/network/interface 파일을 열어 eth0은 모니터링 및 관리용 IP로 설정하고, eth1은 내부 IP로 설정합니다.

$ sudo vi /etc/network/interfaces

# The loopback network interface

auto lo

iface lo inet loopback

 

# The primary network interface

auto eth0

iface eth0 inet static

           address 10.10.15.31

           netmask 255.255.255.0

           gateway 10.10.15.1

        dns-nameservers 8.8.8.8

 

auto eth1

iface eth1 inet static

           address 10.10.10.31

           netmask 255.255.255.0

 

2.     /etc/hosts 파일에는 네트워크 노드, 컨트롤러 노드, 컴퓨트 노드의 관리용 IP를 등록합니다.

$ sudo vi /etc/hosts

# compute1

10.10.15.31       compute1

# controller

10.10.15.11       controller

# network

10.10.15.21       network

 

3.     네트워크 인터페이스 설정이 완료되면 우분투 서버에 적용할 수 있게 다음과 같이 네트워크 서비스를 재시작합니다.

$ sudo service networking stop && sudo service networking start

*** 이부분은 컨트롤러 노드나 네트워크 노드와 같습니다. Ubuntu Server 14.04 LTS 버전에서 오픈스택을 설치하시는 분이시라면 당연히 위와 같이 설정을 해 주어야 합니다. 그런데, 14.04 LTS 버전에서 네트워크 설정시 문제가 발생한다고 하였습니다. 저는 그래서, Ubuntu 12.04 LTS 버전에서 설치를 했었습니다. 해결 방법은 아래 블로그에 포스팅해 드렸으니 참조하시길 바랍니다.


 [Ubuntu] Ubuntu 14.04와 13.10에 대한 Networking 서비스 차이


NTP 설치

네트워크 노드와 마찬가지로 ntp(netowk time protocol)를 설치하고 컨트롤러 노드와 시간을 동기화시킵니다.

 

1.     Apt-get을 이용해서 ntp를 설치합니다.

$ sudo apt-get install ntp

 

2.     Ntpudate를 이용해서 컨트롤러 노드의 NTP 서버와 시간을 동기합니다.

$ sudo ntpdate -u 10.10.15.11
28 May 15:04:20 ntpdate[1961]: step time server 10.10.15.11 offset -458349.411737 sec

 

3.     동기화된 시간은 다음과 같은 명령어로 하드웨어 시간인 BIOS 시간과 다시 동기화합니다.

$ sudo hwclock -w

 


데이터 베이스 설치

네트워크 노드와 마찬가지로 컴퓨트 노드도 Apt-get을 이용해서 Python Mysql API만 설치합니다.


1.     Apt-get을 이용하여 Python Mysql API를 설치합니다.

$ sudo apt-get install python-mysqldb



Packages 설치

네트워크 노드와 마찬가지로 컴퓨트 노드에도 패키지가 설치되어야 합니다. 패키지 설치 방법은 컨트롤러 노드와 네트워크 노드와 동일합니다.

 

1.     apt-get을 이용하여 python-software-properties를 설치하고, 레파지토리에 icehouse를 추가합니다.

$ sudo apt-get install python-software-properties
$ sudo add-apt-repository cloud-archive:icehouse

 ** "오픈스택을 다루는 기술"에서는 IceHouse 버전으로 오픈스택을 설치했습니다. 그러나 얼마전에 Juno가 릴리즈되었죠~!! Juno를 설치하시고 싶으신 분들은 클라우드 아카이브를 설정하실때 아래와 같이 juno로 설정하시면 됩니다.

$ sudo add-apt-repository cloud-archive:juno  


2.     패키지가 설치되면 시스템 업데이트 및 업그레이드를 실행합니다.

$ sudo apt-get update

$ sudo apt-get dist-upgrade

 

3.     이때 네트워크 노드의 우분투 버전이 12.04 라면 아래와 같이 백포트된 리눅스 커널을 설치해야 합니다. 리눅스 커널은 Neutron을 사용할 경우에는 설치하는 것이 좋고, Nova-network를 사용할 경우라면 설치하지 않아도 됩니다.

$ sudo apt-get install linux-image-generic-lts-saucy linux-headers-generic-lts-saucy

 

4.     패키지 설치와 시스템 업그레이드가 완료되면 시스템을 재 부팅합니다.

$ sudo reboot



Nova 컴퓨트 설치

데이터베이스까지 설치가 완료되면 오픈스택의 기본 하이퍼바이저인 KVMNova 컴퓨트를 설치해야 합니다. KVM Native 방식이므로 CPU가 가상화를 지원해야만 설치할 수 있습니다. 그러면 지금부터 컴퓨트 서비스인 Nova를 설치하겠습니다.

 

1.     먼저 다음과 같은 명령어로 CPU가 가상화를 지원하는지 확인합니다.

$ egrep -c '(vmx|svm)' /proc/cpuinfo
4


2.     CPU가 가상화를 지원하는지 확인했으면 하이퍼바이저와 nova 컴퓨트를 설치합니다. 설치 시 보이는 python-guestfs는 파일을 생성할 수 있는 파이썬 라이브러리입니다. Nova는 이 라이브러리를 이용해 KVM이나 QEMU의 가상 인스턴스를 생성합니다.

$ sudo apt-get install nova-compute-kvm python-guestfs qemu-kvm

 

3.     일반 계정에서 하이퍼바이저를 읽고 쓰지 못하게 하기 위해서 다음과 같이 Root만 읽고 쓰기를 할 수 있도록 접근 권한을 변경합니다.

$ sudo dpkg-statoverride  --update --add root root 0644 /boot/vmlinuz-$(uname -r)

  

4.     한번 더 커널 버전에서 일반 사용자들의 접근을 막을 수 있도록 /etc/kernel/postinst.d/statoverride 파일을 생성해서 다음과 같이 입력합니다.

$ sudo vi /etc/kernel/postinst.d/statoverride
#!/bin/sh
version="$1"
# passing the kernel version is required
[ -z "${version}" ] && exit 0
dpkg-statoverride --update --add root root 0644 /boot/vmlinuz-${version}

 

5.     생성한 statoverride 파일이 항상 실행될 수 있도록 실행 권한을 추가합니다.

$ sudo chmod +x /etc/kernel/postinst.d/statoverride

 

6.     하이퍼바이저의 보안 설정이 완료되면 /etc/nova/nova.conf 파일을 다음과 같이 수정합니다. nova.conf에는 RabbitMQ 정보, VNC 정보, 데이터베이스 및 Keystone 정보들이 포함됩니다.

$ sudo vi /etc/nova/nova.conf
[DEFAULT]
...
auth_strategy = keystone
...
rpc_backend = rabbit
rabbit_host = 10.10.15.11
rabbit_password = rabbitpass
...
my_ip = 10.10.15.31
vnc_enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = 10.10.15.31
novncproxy_base_url = http://10.10.15.11:6080/vnc_auto.html
...
glance_host =10.10.15.11
...
[database]
# The SQLAlchemy connection string used to connect to the database
connection = mysql://nova:novadbpass@10.10.15.11/nova
 
[keystone_authtoken]
auth_uri = http://10.10.15.11:5000
auth_host =10.10.15.11
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = nova
admin_password = novapass


7.     기본 데이터베이스가 mysql이므로 불필요한 sqlite 파일을 삭제하고 nova-compute 서비스를 재시작합니다.

$ sudo rm /var/lib/nova/nova.sqlite
$ sudo service nova-compute restart

 


이렇게해서 컴퓨트 노드에 반드시 설치되어야 할 기본 서비스들과 KVM 하이퍼바이저, 그리고 Nova Compute를 설치해 보았습니다. 다음 시간에는 Neutron 클라이언트와 Cinder 볼륨을 설치해 보도록 하겠습니다. 

Posted by 나리 짱!!! naleejang
OpenStack Class2014.12.15 22:00

안녕하세요~!!

지난시간까지는 컨트롤러 노드에 필요한 서비스들을 설치했었습니다. 어떤 서비스가 설치되었는지 기억이 나시나요? 인증서비스인 Keystone, 이미지 서비스인 Glance, 컴퓨트 서비스 Nova, 네트워킹 서비스 Neutron, 데쉬보드 서비스 Horizon, 블록스토리지 서비스 Cinder, 오브젝트 스토리지 서비스 Swift, 오케스트레이션 서비스 Heat, 텔레미터 서비스 Ceilometer를 설치했었습니다. 대부분의 서비스들이 Keystone에 서비스와 앤드포인트 URL을 등록하고 데이터베이스를 생성한 후 테이블을 생성했습니다. 그리고, 서비스를 설치한 후 환경설정을 했습니다. 

오늘은 네트워크 서비스의 핵심인 네트워크 노드를 설치해 볼까 합니다. 그럼, 지금부터 시작해 볼까요~~~

SDN을 위한 네트워크 노드를 설치해 보자

네트워크 노드는 Neutron을 이용해서 SDN(Software Defined Network)을 해야 할 경우에 필요합니다. 기존 레거시 네트워크(nova-network)를 이용할 경우에는 필요하지 않습니다. 앞서 Neutron 기본 플러그인 ML2을 사용해서 GRE 방식에 OpenvSwitch 메커니즘 드라이버를 사용하기로 했습니다. 그럼 지금부터 네트워크 노드에 필요한 서비스들을 하나씩 설치하겠습니다.

 

네트워크 인터페이스 설정

네트워크 노드는 모니터링 및 관리를 위한 IP, 컴퓨트 노드의 인스턴스들과 통신할 내부 IP, 인스턴스들이 외부 인터넷을 할 수 있도록 연결하기 위한 외부 IP로 이루어 집니다. 그래서 필요한 이더넷 카드는 총 3장입니다. 그럼 지금부터 네트워킹을 위한 IP 설정을 하겠습니다.

 

1.     eth0은 모니터링 및 관리용 IP, eth1은 내부용 IP, eth2는 외부용 manual IP로 설정합니다.

$ sudo vi /etc/network/interfaces

# The loopback network interface

auto lo

iface lo inet loopback

 

# The primary network interface

auto eth0

iface eth0 inet static

           address 10.10.15.21

           netmask 255.255.255.0

           gateway 10.10.15.1

        dns-servers 8.8.8.8

 

auto eth1

iface eth1 inet static

           address 10.10.10.21

           netmask 255.255.255.0

 

# The external network interface
auto eth2
iface eth2 inet manual
        up ip link set dev $IFACE up
        down ip link set dev $IFACE down

 

2.     /etc/hosts 파일에는 네트워크 노드, 컨트롤러 노드, 컴퓨트 노드의 관리용 IP를 등록합니다.

$ sudo vi /etc/hosts

# network

10.10.15.21       network

 

# controller

10.10.15.11       controller

 

# compute1

10.10.15.31       compute1

 

3.     네트워크 인터페이스 설정이 완료되면 우분투 서버에 적용할 수 있게 다음과 같이 네트워크 서비스를 재시작합니다.

$ sudo service networking stop && sudo service networking start


*** 지난번 블로그에 포스팅한 내용을 보셨나요? Ubuntu Server 14.04 LTS 버전에서 오픈스택을 설치하시는 분이시라면 당연히 위와 같이 설정을 해 주어야 합니다. 그런데, 14.04 LTS 버전에서 네트워크 설정시 문제가 발생한다고 하였습니다. 저는 그래서, Ubuntu 12.04 LTS 버전에서 설치를 했었습니다. 해결 방법은 아래 블로그에 포스팅해 드렸으니 참조하시길 바랍니다.


 [Ubuntu] Ubuntu 14.04와 13.10에 대한 Networking 서비스 차이


NTP 설치

컨트롤러 노드에 NTP(Network Time Protocol) 서버를 설치했다면 네트워크 노드와 컴퓨트 노드에는 클라이언트를 설치합니다.

 

1.     Ntp를 설치합니다.

$ sudo apt-get install ntp

 

2.     Ntpudate를 이용해서 컨트롤러 노드의 NTP 서버와 시간을 동기화합니다.

$ sudo ntpdate -u 10.10.15.11
28 May 10:35:31 ntpdate[2737]: step time server 10.10.15.11 offset -134035.065856 sec


3.     동기화된 시간은 다음과 같은 명령어로 하드웨어 시간인 BIOS 시간과 다시 동기화합니다.

$ sudo hwclock -w

 

데이터베이스 설치

컨트롤러 노드에서 이미 Mysql 서버를 설치했으므로 네트워크 노드와 컴퓨트 노드에서는 Python Mysql API만 설치하면 됩니다


1.   apt-get을 이용해서 Python Mysql API를 설치합니다.

$ sudo apt-get install python-mysqldb

 

Packages 설치

패키지는 컨트롤러 노드 뿐만 아니라 네트워크 노드, 컴퓨트 노드에도 반드시 설치해야 합니다. 만일 패키지 설치를 하지 않고 그냥 지나간다면 노드 간 버전이 맞지 않아 실행이 되지 않습니다. 패키지 설치 방법은 컨트롤러 노드와 동일합니다.

 

1.     apt-get을 이용해서 python-software-properties를 설치하고 레파지토리에 icehouse를 추가합니다.

$ sudo apt-get install python-software-properties
$ sudo add-apt-repository cloud-archive:icehouse

** "오픈스택을 다루는 기술"에서는 IceHouse 버전으로 오픈스택을 설치했습니다. 그러나 얼마전에 Juno가 릴리즈되었죠~!! Juno를 설치하시고 싶으신 분들은 클라우드 아카이브를 설정하실때 아래와 같이 juno로 설정하시면 됩니다.

$ sudo add-apt-repository cloud-archive:juno  


2.     패키지가 설치되면 시스템 업데이트 및 업그레이드를 실행합니다.

$ sudo apt-get update

$ sudo apt-get dist-upgrade

 

3.     이때 네트워크 노드의 우분투 버전이 12.04라면 다음과 같이 백포트된 리눅스 커널을 설치해야 합니다. 리눅스 커널은 Neutron을 사용할 경우 설치하는 것이 좋고, Nova-network를 사용할 경우라면 설치하지 않아도 됩니다.

$ sudo apt-get install linux-image-generic-lts-saucy linux-headers-generic-lts-saucy

 

4.     패키지 설치와 시스템 업그레이드가 완료되면 시스템을 재부팅합니다.

$ sudo reboot

 


 

Neutron 네트워킹 설치

네트워크 노드는 컴퓨트 노드에 설치되는 모든 인스턴스의 IP를 관리하고 외부 인터넷과 연결될 수 있도록 관리합니다. 그럼 지금부터 Neutron을 설치하겠습니다.

 

1.     /etc/sysctl.conf 파일을 열어 다음과 같은 내용을 추가합니다. net.ipv4.ip_forward=1IP를 공유해서 포워딩이 가능하도록 설정하겠다는 뜻입니다. 또한 rp_filter는 패킷이 들어오는 인터페이스와 나가는 인터페이스가 같은지에 대한 검사 여부를 설정하는데 0으로 설정하면 검사를 하지 않겠다는 뜻입니다.

$ sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

 

2.     수정된 sysctl.conf 파일의 내용을 sysctl 명령을 이용해서 시스템에 적용합니다.

$ sudo sysctl –p
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0

 

3.     ML2 플러그인과 OpenvSwitch, L3 에이전트, DHCP 에이전트를 설치합니다.

$ sudo apt-get install neutron-plugin-ml2 neutron-plugin-openvswitch-agent \n
openvswitch-datapath-dkms neutron-l3-agent neutron-dhcp-agent

 

4.     설치가 완료되면 /etc/neutron/neutron.conf 파일의 내용을 다음과 같이 수정합니다. 이때 들어가는 모든 IP는 컨트롤러 노드 IP나 도메인 주소를 입력합니다.

$ sudo vi /etc/neutron/neutron.conf [DEFAULT] ... auth_strategy = keystone ... rpc_backend = neutron.openstack.common.rpc.impl_kombu rabbit_host = 10.10.15.11 rabbit_password = rabbitpass ... core_plugin = ml2 service_plugins = router allow_overlapping_ips = True [keystone_authtoken] ... auth_uri = http://10.10.15.11:5000 auth_host =10.10.15.11 auth_protocol = http auth_port = 35357 admin_tenant_name = service admin_user = neutron admin_password = neutronpass

 

5.     /etc/neutron/l3_agent.ini 파일을 열어 다음과 같이 수정합니다. 우리는 OpenvSwitch을 메커니즘 드라이버로 사용할 것이기 때문에 인터페이스 드라이버는 OVSInterfaceDriver를 사용하겠다고 설정합니다.

$ sudo vi /etc/neutron/l3_agent.ini
[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
use_namespaces = True

 

6.     /etc/neutron/dhcp_agent.ini 파일을 열어 다음과 같이 수정합니다.

$ sudo vi /etc/neutron/dhcp_agent.ini
[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
use_namespaces = True

 

7.     /etc/neutron/metadata_agent.ini 파일에서 keystone으로 인증할 인증정보를 다음과 같이 수정합니다.

$ sudo vi /etc/neutron/metadata_agent.ini
[DEFAULT]
...
auth_url = http://10.10.15.11:5000/v2.0
auth_region = regionOne
admin_tenant_name = service
admin_user = neutron
admin_password = neutronpass
nova_metadata_ip = 10.10.15.11
metadata_proxy_shared_secret = metadatasecret

 

8.     /etc/neutron/plugins/ml2/ml2_conf.ini 파일에서 네트워크 타입과 메커니즘 드라이버 정보를 다음과 같이 입력합니다.

$ sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini [ml2] ... type_drivers = gre tenant_network_types = gre mechanism_drivers = openvswitch [ml2_type_gre] ... tunnel_id_ranges = 1:1000 [ovs] ... local_ip = 10.0.10.21 #eth1에 해당하는 IP 입력 tunnel_type = gre enable_tunneling = True [securitygroup] ... firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver enable_security_group = True metadata_proxy_shared_secret = metadatasecret


9.     환경설정을 모두 마치면 openvswitch을 재시작합니다.

$ sudo service openvswitch-switch restart

 

10.  내부 인스턴스의 IP를 관리할 br-intOpenvswitch에 추가합니다.

$ sudo ovs-vsctl add-br br-int

 

11.  이번에는 외부 인터넷과 연결될 br-exopenvswitch에 추가합니다.

$ sudo ovs-vsctl add-br br-ex

 

12.  Openvswitchbr-ex를 추가했으면 br-ex에 물리 네트워크 카드를 연결해야 합니다. 네트워크 노드의 네트워크 IP를 설정할 때 인스턴스의 외부 인터넷 사용을 위해서 manual IP를 설정했었습니다. 그때 설정했던 manual IP의 네트워크 인터페이스를 다음과 같이 연결합니다.

$ sudo ovs-vsctl add-port br-ex eth2

 

13.  마지막으로 설치했던 neutron 서비스들을 재시작합니다.

$ sudo service neutron-dhcp-agent restart
neutron-dhcp-agent stop/waiting
neutron-dhcp-agent start/running, process 11797
$ sudo service neutron-plugin-openvswitch-agent restart
neutron-plugin-openvswitch-agent stop/waiting
neutron-plugin-openvswitch-agent start/running, process 11814
$ sudo service neutron-dhcp-agent restart
neutron-dhcp-agent stop/waiting
neutron-dhcp-agent start/running, process 11926
$ sudo service neutron-metadata-agent restart
neutron-metadata-agent stop/waiting
neutron-metadata-agent start/running, process 11949 

** "오픈스택을 다루는 기술"에서 이부분에 오류가 있었습니다. neutron-dhcp-agent 서비스 역시 다른 서비스와 마찬가지로 한번만 재 시작을 해 주어야 합니다. 그런데 두번을 재시작을 했습니다. 물론 두번 재시작한다고 해서 문제가 되지는 않습니다. 그리고, neutron-metadata-agent 서비스 역시 재시작을 해 주어야 합니다. 처음 써 본 책이라 생각보다 오류와 오타가 많았습니다. 넓은 마음으로 이해해 주시면 정말 감사하겠습니다.


이렇게서 네트워크 노드를 설치해 보았습니다. 다음 포스팅에서는 컴퓨트 노드를 설치해 보도록 하겠습니다.

그럼, 다음 시간에 다시 만나요~~~~ ^^

Posted by 나리 짱!!! naleejang
OpenStack Class2014.12.13 21:28

안녕하세요~!!


오늘 포스팅하는 내용이 컨트롤러 마지막 설치편이네요~!! 그동안 무슨일이 그렇게 바뻤는지 열심히 포스팅을 하자 해 놓고는 제가 많이 게을렀나봅니다. 오늘은 마지막으로 오케스트레이션 서비스인 Heat와 텔레미터 서비스인 Ceilometer를 설치해 보도록 하겠습니다. 



Heat 설치

Heat는 오픈스택이 Havana 버전으로 릴리즈되면서 새롭게 추가된 오케스트레이션 서비스입니다.  인스턴스를 생성할 때마다 늘 해야 하는 작업을 오케스트레이션 Heat 서비스를 이용하면 자동으로 인스턴스를 생성할 수 있습니다. 쉽게 말해 인스턴스를 생성하기 위한 일련의 과정 즉 프로세스를 오케스트레이션이라 하고, 이런 일련의 과정들을 Heat 서비스를 이용해 자동으로 인스턴스 생성 및 네트워크 설정 등을 할 수 있습니다. 그럼 지금부터 Heat 서버를 설치하겠습니다.


1.     우선 heat-api, heat-api-cnf, heat-engine를 설치합니다.

$ sudo apt-get install heat-api heat-api-cfn heat-engine

 

2.     Heat 서비스를 설치하면 heat.conf 파일의 데이터베이스 정보를 mysql로 수정합니다.

$ sudo vi /etc/heat/heat.conf
[database]
# The SQLAlchemy connection string used to connect to the database
connection = mysql://heat:heatdbpass@10.10.15.11/heat

 

3.     기본 데이터베이스가 mysql이므로 기존 sqlite 파일을 삭제합니다.

$ sudo rm /var/lib/heat/heat.sqlite

 

4.     Mysql에 접속해서 heat 데이터베이스와 사용자 계정을 생성하고 접속 권한을 설정합니다.

$ mysql -u root -p
mysql> CREATE DATABASE heat;
Query OK, 1 row affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' \
IDENTIFIED BY 'heatdbpass';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' \
IDENTIFIED BY 'heatdbpass';
Query OK, 0 rows affected (0.00 sec)
 
mysql> exit
Bye

 

5.     Heat 데이터베이스가 생성되면 이번에는 테이블을 생성합니다. 다음과 같은 warning 메시지가 뜨지만 테이블은 정상적으로 생성됩니다.

$ sudo su -s /bin/sh -c "heat-manage db_sync" heat
No handlers could be found for logger "heat.common.config"
2014-05-28 03:22:46.990 16004 WARNING heat.openstack.common.db.sqlalchemy.session [-] 
This application has not enabled MySQL traditional mode, which means silent data corruption may 
occur. Please encourage the application developers to enable this mode.

 

6.     /etc/heat/heat.conf 파일의 RabbitMQ 정보와 Keystone 정보를 다음과 같이 설정합니다.

$ vi /etc/heat/heat.conf
[DEFAULT]
...
# Print more verbose output (set logging level to INFO instead
# of default WARNING level). (boolean value)
verbose = True
...
# (Optional) The base directory used for relative --log-file
# paths (string value)
log_dir=/var/log/heat
...
rabbit_host = 10.10.15.11
rabbit_password = rabbitpass
 
[keystone_authtoken]
auth_host = 10.10.15.11
auth_port = 35357
auth_protocol = http
auth_uri = http://10.10.15.11:5000/v2.0
admin_tenant_name = service
admin_user = heat
admin_password = heatpass
 
[ec2authtoken]
auth_uri = http://10.10.15.11:5000/v2.0

 

7.     KeystoneHeat 사용자 계정을 생성합니다.

$ source admin-openrc.sh
$ keystone user-create --name=heat --pass=heatpass --email=heat@email.com
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |          heat@email.com          |
| enabled  |               True               |
|    id    | d83082aba04c4c1c9a1642995a98aae7 |
|   name   |               heat               |
| username |               heat               |
+----------+----------------------------------+

 

8.     생성한 사용자 계정은 서비스 테넌트에 추가하고 admin 롤을 설정합니다.

$ keystone user-role-add --user=heat --tenant=service --role=admin

 

9.     이번에는 Heat 서비스를 생성합니다.

$ keystone service-create --name=heat --type=orchestration \
--description="Orchestration"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |          Orchestration           |
|   enabled   |               True               |
|      id     | 1ad5cfe5707a449091c35fb1337fea33 |
|     name    |               heat               |
|     type    |          orchestration           |
+-------------+----------------------------------+

 

10.  생성한 Heat 서비스에 Public URL, Internal URL, Admin URL을 설정합니다.

$ keystone endpoint-create \
  --service-id=1ad5cfe5707a449091c35fb1337fea33 \
  --publicurl=http://10.10.15.11:8004/v1/%\(tenant_id\)s \
  --internalurl=http://10.10.15.11:8004/v1/%\(tenant_id\)s \
--adminurl=http://10.10.15.11:8004/v1/%\(tenant_id\)s
+-------------+------------------------------------------+
|   Property  |                  Value                   |
+-------------+------------------------------------------+
|   adminurl  | http://10.10.15.11:8004/v1/%(tenant_id)s |
|      id     |     9da4fee4a0e3496eb0fca1a8f7673198     |
| internalurl | http://10.10.15.11:8004/v1/%(tenant_id)s |
|  publicurl  | http://10.10.15.11:8004/v1/%(tenant_id)s |
|    region   |                regionOne                 |
|  service_id |     1ad5cfe5707a449091c35fb1337fea33     |
+-------------+------------------------------------------+

 

11.  이번에는 CloudFormation 서비스를 생성합니다.

$ keystone service-create --name=heat-cfn --type=cloudformation \
--description="Orchestration CloudFormation"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |   Orchestration CloudFormation   |
|   enabled   |               True               |
|      id     | 9b268d095c19429e817f951fa89621a4 |
|     name    |             heat-cfn             |
|     type    |          cloudformation          |
+-------------+----------------------------------+

 

12.  생성된 CloudFormation 서비스에 다음과 같이 Public URL, Internal URL, Admin URL을 설정합니다.

$ keystone endpoint-create \
  --service-id=9b268d095c19429e817f951fa89621a4\
  --publicurl=http://10.10.15.11:8000/v1 \
  --internalurl=http://10.10.15.11:8000/v1 \
--adminurl=http://10.10.15.11:8000/v1
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminurl  |    http://10.10.15.11:8000/v1    |
|      id     | d16093dcffad48158967daba3eb9cb41 |
| internalurl |    http://10.10.15.11:8000/v1    |
|  publicurl  |    http://10.10.15.11:8000/v1    |
|    region   |            regionOne             |
|  service_id | 9b268d095c19429e817f951fa89621a4 |
+-------------+----------------------------------+