레이블이 [IT] 가상화인 게시물을 표시합니다. 모든 게시물 표시
레이블이 [IT] 가상화인 게시물을 표시합니다. 모든 게시물 표시

2015년 3월 3일 화요일

openstack 인스턴스 생성과 연결 논리도

openstack 인스턴스 생성과 연결 논리도


이번에 openstack을 설치하면서 openstack이 생소한 분들을 위해서 알아보기 쉽게 여러가지 논리도를 만들었는데요. 서비스를 하기 위해서 controller, compute, network node가 어떻게 작동하여 인스턴스가 생성되는지와 사용자가 어떻게 인스턴스와 연결이 되는지 두 가지를 그림으로 표현을 해보았습니다.



▶ 인스턴스 생성 논리도


openstack을 구축했다면 제일 먼저 해보고 싶은 것이 인스턴스를 생성하는 것일텐데요. 이 인스턴스 하나가 생성이 되려면 지금까지 만들어 놓았던 각각의 node들이 모두 유기적으로 동작합니다. 다음의 그림을 먼저 봐주세요.



1. 사용자들이 공인 네트워크를 타고 openstack으로 접속을 합니다. 도메인이 있다면 도메인으로 접속하고 도메인이 없다면 http://123.45.67.89/dashboard 이렇게 openstack으로 접속을 할 것입니다.

2. openstack 대시보드에서 계정을 입력하는 단계를 거칩니다. 계정을 입력하게 되면 keystone에 계정이 등록이 되어 있는지 비밀번호는 맞는지 그리고 role은 무엇이고 어떤 tenant에 들어 있는지 비교를 하게되고 계정과 비밀번호가 일치한다면 비로소 openstack으로 들어가게 되는거죠!

3. 인스턴스를 생성하는 단계입니다. 일단은 controller에 설치된 nova의 도움을 받아서 이미지를 마운트하게 되는데요. 여기서 자신이 원하는 이미지와 사양을 선택할 수 있습니다. 예를 들면 centos6.5 64bit와 vcpu1개, ram1g를 이용하는 20gb 하드웨어가 되겠습니다. 만약 키페어를 만들었다면 여기서 키페어도 가지고 compute로 넘어갑니다.

4. 저장소를 선택하는 단계입니다. openstack은 기본으로 설치되는 일반 저장소와 추가적으로 설치할 수 있는 cinder와 swift를 저장소로 이용합니다. 만약 일반 저장소를 이용한다면 여기서 추가적인 선택을 하지 않고 넘어가도 되고 cinder 또는 swift를 이용한다면 임의로 용량을 선택할 수 있습니다.

5. 인스턴스가 생성되기 바로 전 단계입니다. 이미지와 저장소, 하드웨어 정보를 controller의 nova가 compute의 nova에게 전달해줍니다. 그러면 compute의 nova는 network node의 neutron에게 자신이 생성하게 될 인스턴스의 IP 주소를 요청하고 IP 주소를 받습니다.

6. 인스턴스 생성단계입니다. 전 단계를 모두 성공했다면 약간의 인내심 테스트를 거치고 우리가 원했던 centos6.5 64bit 이미지가 생성됩니다.

▶ 인스턴스 - 사용자 연결 논리도


인스턴스가 생성이 되었다면 리눅스면 putty나 기타 ssh 프로그램을 통해서 접속하고 윈도우는 원격 데스크탑을 통해서 접속을 해야하죠. 사용자가 인스턴스에 접속을 시도하려면 network node를 통과해야 합니다. 그림을 먼저 봐주세요.



1. 위와 마찬가지로 사용자는 openstack 상부에 있는 물리 라우터를 거쳐서 접속을 합니다.

2. network node를 설치하면서 따로 지정해준 외부 연결 인터페이스로 들어갑니다. 위의 예는 eth0으로 했지만 각자 설정한 것에 따라서 eth2, eth3과 같이 달라질 수 있습니다.

3. 외부 연결 인터페이스로 접속을 했다면 network node에 있는 가상 라우터를 마주치게 됩니다. 가상 라우터를 맞게 찾아 왔다면 인스턴스가 속한 가상 네트워크까지 올바르게 찾아왔다는 말이죠?

4. compute node에 있는 인스턴스를 찾아가기 위해서 가상 라우터 주소, 가상 네트워크, 인스턴스 주소 등을 network node와 compute node를 직접 연결하고 있는 터널 인터페이스의 도움을 받아 모두 가지고 인스턴스가 있는 compute node로 갑니다.

5. compute node에 설치된 여러 인스턴스 중 우리가 원하는 정보와 일치하는 인스턴스를 찾아서 연결해주는 단계입니다.

이렇게 사용자는 조금은 복잡한 방법으로 생성한 인스턴스를 찾아갑니다. 마치 연어와 같지 않나요?

이상~!

2015년 2월 21일 토요일

독립적으로 인스턴스를 관리할 수 있게 openstack 사용자 계정 생성하기

독립적으로 인스턴스를 관리할 수 있게 openstack 사용자 계정 생성하기

openstack을 구축했다면 관리자가 아닌 사용자 개념에서 인스턴스를 관리할 수 있도록 계정을 만들어줘야 합니다.
openstack을 매뉴얼대로 설치했다면 

# keystone role-list를 입력했을 때 _member_ 와 admin 두 역할이 출력됩니다.

admin은 흔히 알고 있는 관리자의 개념이고 _member_는 일반 사용자의 개념입니다.
관리 차원이 아닌 openstack을 이용하는 일반 사용자에게 계정을 생성해 주려면 admin이 아닌 _member_ 역할을 부여해야 합니다.

간단히 알고 가는 openstack 계정 상하관계



최상위 그룹은 role입니다. 어떤 role에 속하냐에 따라서 사용자의 계급이 정해지죠. 일반 사용자는 아무리 노력해도 관리자 권한을 얻지 못해요.

이제 사용자의 role이 정해지면 다음은 tenant별로 나뉘게 됩니다. 같은 tenant에 속한 사용자들은 가족이 되는거죠. 가족이 되면 보통 집안에 있는 모든 것을 공유하잖아요. 그래서 다른 사용자의 인스턴스를 관리할 수가 있게 됩니다. 

마지막으로 tenant에는 사용자 계정이 입주하게 됩니다. 일반 사용자는 자신의 계정을 통해 인스턴스를 생성하고 삭제하며 마음대로 자신의 방식대로 방을 꾸밀 수 가 있게 되는거지요.

인스턴스를 개별적으로 관리하기 위한 계정 생성 예

yankees라는 tenant에 입주할 사용자계정 jeter를 만듭니다.

# keystone user-create --name=jeter --pass=jeter_PASS --email=<이메일>
# keystone tenant-create --name=yankees --description="service"
# keystone user-role-add --user=jeter --role=_member_ --tenant=yankees

redsox라는 tenant에 입주할 사용자계정 ortiz를 만듭니다.

# keystone user-create --name=ortiz --pass=ortiz_PASS --email=<이메일>
# keystone tenant-create --name=redsox --description="service"
# keystone user-role-add --user=ortiz --role=_member_ --tenant=redsox

이렇게 계정을 만들면 _member_라는 같은 role을 가진 두 개의 각기 다른 tenant와 user를 만들 수 있습니다. 물론 tenant가 다르니 jeter와 ortiz는 서로 무슨 인스턴스를 가지고 있는지 모르게 됩니다. 하지만 admin role을 가진 관리자는 이 둘의 인스턴스를 모두 들여다 볼 수 있습니다. 

조금씩 틀린 내용이 있을 수 있으니 지적 환영합니다.

이상~!

2015년 2월 2일 월요일

glance 설치 중 CRITICAL glance [-] ValueError: Tables "migrate_version" have non utf8 collation, please make sure all tables are CHARSET=utf8 에러를 만났을 때

glance 설치 중 CRITICAL glance [-] ValueError: Tables "migrate_version" have non utf8 collation, please make sure all tables are CHARSET=utf8 에러를 만났을 때

glance table을 생성하다 보면 'CRITICAL glance [-] ValueError: Tables "migrate_version" have non utf8 collation, please make sure all tables are CHARSET=utf8' 이런 에러를 만날 수 있습니다. 이런 에러가 나오면 table이 제대로 생성이 안되는 현상이 나타납니다. 저 에러는 /var/log/glance/api.log의 맨 밑에서 찾아볼 수 있습니다.

이 에러가 나오면 당황하지 말고 mysql에 해당 명령어를 입력해주면 됩니다.

# mysql -u root -p
mysql> use glance;
mysql> alter table migrate_version convert to character set utf8 collate utf8_unicode_ci;
mysql> flush privileges;
mysql> exit

다시, 
# su -s /bin/sh -c "glance-manage db_sync" glance 
해당 명령어를 입력하면 테이블에 올바르게 생성된 것을 볼 수 있습니다.


2015년 1월 31일 토요일

openstack 설치 후 dashboard 실행 시 Could not reliably determine the server's fully qualified domain name 에러 해결 방법

대시보드까지 잘 들어가져서 성공적으로 설치된 줄 알았는데 'Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message' 이런 에러가 나오면서 인스턴스가 생성이 안되네요.

인터넷 검색해보니 간단한 방법으로 해결이 된다고 합니다.

1.  /etc/httpd/conf/httpd.conf 파일 수정하기

#  vi /etc/httpd/conf/httpd.conf

주석처리 되어 있는 ServerName의 주석을 해제하고 localhost를 입력하면 됩니다.

ServerName localhost

2. httpd 재시작하기

2015년 1월 30일 금요일

openstack 구성 요소 알아보기 - Nova에 대하여

openstack 구성 요소 알아보기 - Nova에 대하여


nova는 openstack 초창기 모델부터 있었던 openstack의 필수 구성요소 중 하나입니다. nova는 중요한 요소이니만큼 하는 openstack 곳곳에서 하는 일이 많습니다. nova에 대해서 찾는데 잘 안나와서 외국 사이트 뒤져서 번역하고 의역을 했더니 조금 이해 안되시는 내용일 있을 수 있습니다.
지금부터 nova에 대해서 천천히 적어보겠습니다.

nova 개념도



openstack이 하는 일들을 구분하여 그림으로 나타낸 그림인데 빨간색으로 표시된 부분이 nova의 영향을 받는 부분입니다.

nova-api란?


  • Nova에서 중추적인 역할을 수행하는 데몬 

  • Nova-api는 openstack API 또는 EC2 API 쿼리에 다른 요소들과 연결이 가능한 매개체를 제공 

  • 인스턴스를 실행하는 것과 같은 대부분의 조직화 활동을 개시되게 하고 몇몇의 정책을 실행


nova-scheduler란?


  • 대기열로 부터 VM 인스턴스 요청을 수행하고 nova가 적정한 위치에서 실행되도록 결정

  • Nova-schedule은 스케쥴링을 위한 알고리즘을 운영할 수 있는 구조를 구현

nova-compute란?


  • Nova-compute는 VM 인스턴스를 생성하고 제거하는 역할을 하는 데몬

  • 대기열에서 작업을 수락하고 데이터베이스의 상태를 업데이트 하는 동안 KVM 인스턴스 시작과 같은 시스템 일련의 명령을 수행

nova-conductor란?


  • Nova-conductor는 grizzly 버전부터 생긴 모듈로 nova-compute와 데이터베이스 사이에서 상호작용을 조절하는 역할 수행

  • Nova-compute에 의해 만들어진 클라우드 데이터베이스에 직접 접근하여 제거하는 것을 목표로 함

nova-volume이란?


  • Nova-volume은 인스턴스들을 계산하기 위해 지속적인 볼륨들의 창조, 결합, 분리를 관리

  • Nova-volume은 다양한 디스크 유형의 볼륨들을 사용할 수 있음


nova-network란?


  • Nova-network는 대기열로 부터 네트워킹 업무들을 수행

  • 네트워킹 업무를 수행하면서 브리지 인터페이스를 셋팅하거나 방화벽 정책을 변경하는 등의 네트워크를 다루기 위한 작업을 수행함 

nova-dhcpbridge란?


  • Nova-dhcpbridge는 데이터베이스 안에 있는 dnsmasq dhcp-script 기능을 사용함으로써 IP 주소를 임대하고 기록하는 역할을 수행

console 관련 구성 요소들


  • Nova-consoleauth

  • Nova-novncproxy

  • Nova-xvpnvncproxy

  • Nova-cert



nova 동작 논리도


대표적으로 중요한 구성 요소들만 적어봤습니다. 이런 구성요소들이 모이면 nova 논리도를 만들게 됩니다. 논리도는 nalee의 IT 이야기를 참조했습니다.



openstack의 구성 요소 중 nova에 대해서 알아봤는데요 nova의 궁극적인 목적은 인스턴스를 생성, 삭제, 관리하며 사용자와 vm을 연결시켜주는 역할을 하는 것입니다. 

이상입니다.

2015년 1월 20일 화요일

AWS를 지탱하는 4가지 구성 요소



현재 클라우드를 논하는 데 있어 가장 많은 비중을 차지하는 서비스는 바로 아마존의 AWS일 것입니다. AWS는 현재 클라우드 서비스를 운영하는 업체들에 있어 많은 영감을 주었으며 사용하는 업체들도 많이 있을 정도로 클라우드의 대표라고 할 수 있습니다.

오늘은 AWS를 구성하는 요소들을 적어보겠습니다. AWS를 구성하는 요소는 크게 4가지로 나눌 수 있는데요.

4가지는 Storage, Computing, Networking, Database입니다. AWS를 구성하는 4가지 요소 지금부터 간력하게 적어보겠습니다.

1. Storage


1) Amazon S3 (Amazon Simple Storage Service)

Amazon S3는 미션 크리티컬한 데이터 및 기본 데이터 저장을 위한 내구성이 뛰어난 스토리지 인프라를 제공합니다.


객체는 지역 내에서 여러 시설의 여러 장치에 중복 저장됩니다.

AWS는 Amazon S3 버젼관리, AWS MFA (Multi-Factor Authentication), 버킷 정책 및

IAM(Identity and Access Management)을 통해 데이터 보존 및 보관을 위한 추가 보호 수단을 제공합니다.



2) Amazon EBS (Amazon Elastic Store)

Amazon EBS는 데이터 볼륨의 PIT (Point in Time) 스냅샷을 생성하는 기능을 제공합니다.

스냅샷은 새로운 Amazon EBS 볼륨을 시작하는 기점이 될 수 있으며 데이터를 장기간 보호할 수 있습니다.

일단, 볼륨을 생성하면 실행 중인 Amazon EC2 인스턴스에 연결할 수 있습니다.

Amazon EBS 볼륨은 인스턴스 수명과 관계없이 지속되는 오픈 인스턴스 스토리지를 제공합니다.


3) AWS Import/Export

AWS Import/Export 는 전송용 이동식 스토리지 장치를 사용하여 대용량 데이터를 AWS 에서 더욱 빠르게 이동할 수

있도록 지원합니다. AWS 는 Amazon 의 고속 내부 네트워크를 사용해 인터넷을 우회하여 스토리지 장치에서 직접

데이터를 송수신합니다. 용량이 큰 데이터 세트의 경우 AWS Import/Export 가 대개 인터넷 전송보다 빠르며

연결을 업그레이드하는 것보다 비용 효율성이 높습니다. AWS Import/Export 를 사용하여 Amazon S3 버킷

안팎으로 또는 EBS 스냅샷으로 데이터를 마이그레이션할 수 있습니다.


4) AWS Storage Gateway

AWS Storage Gateway 를 사용하면 AWS 클라우드 스토리지와 온 프레미스 애플리케이션 사이에 데이터를

원활하게 마이그레이션할 수 있습니다. AWS Storage Gateway 는 볼륨 데이터를 사용자 인프라 및 AWS 에 로컬로

저장합니다. 이를 통해 기존 온 프레미스 애플리케이션에서 데이터를 비용 효율적이고 안전하고 견고한 AWS

스토리지 인프라에 원활하게 저장하고 이 데이터에 액세스할 때의 지연 시간을 줄입니다.


2. Computing


1) Amazon EC2 (Amazon Elastic Compute Cloud)

Amazon EC2는 클라우드에서 규모를 자유 자재로 변경할 수 있는 컴퓨팅 파워를

제공합니다. 몇 분 이내에 EC2 인스턴스를 생성할 수 있는데, 이는 온전한 제어 권한이 귀하에게 있는 가상

머신입니다. 재해 복구 측면에서는 이처럼 귀하가 제어할 수 있는 가상 머신을 신속하게 생성할 수 있는 기능이

필수적입니다. Amazon EC2 의 모든 기능을 설명하는 것은 이 문서의 범위를 벗어납니다. 여기서는 재해 복구와

가장 밀접한 관련이 있는 Amazon EC2 의 측면을 중점적으로 다룹니다.


2) Amazon EC2 VM Import

Amazon EC2 VM Import 기능을 사용하면 가상 머신 이미지를 기존 환경에서 Amazon EC2 인스턴스로 손쉽게

가져올 수 있습니다.

3. Networking

1) Amazon Route 53

Amazon Route 53 는 가용성과 확장성이 높은 DNS (도메인 이름 시스템) 웹 서비스입니다. 이 서비스는 개발자와
기업이 매우 신뢰할 수 있고 비용 효율적인 방식으로 최종 사용자를 인터넷 애플리케이션에 라우팅할 수 있도록
설계되었습니다.
엘라스틱 IP 주소는 동적 클라우드 컴퓨팅에 적합하게 설계된 고정 IP 주소입니다. 그러나 기존의 고정 IP 주소와
달리 엘라스틱 IP 주소를 사용해 공인 IP 주소를 특정 지역 내에 있는 계정의 인스턴스에 프로그래밍 방식으로
다시 매핑하여 인스턴스 또는 가용 영역 장애를 마스킹할 수 있습니다. 재해 복구를 위해 대부분의 필수 시스템에
대한 IP 주소를 사전 할당하여 재해가 발생하기 전에 IP 주소를 미리 알 수 있습니다. 이로써 재해 복구 계획을
간단히 실행할 수 있습니다.


2) Elastic Load Balancing
Elastic Load Balancing 은 수신되는 애플리케이션 트래픽을 여러 Amazon EC2 인스턴스에 자동으로 분산합니다.
따라서 애플리케이션의 내결함성을 크게 높이고, 수신되는 애플리케이션 트래픽에 응답하는 데 필요한 로드
밸런싱 용량을 원활하게 제공할 수 있습니다. 엘라스틱 IP 주소를 사전 할당하는 것과 마찬가지로, Elastic Load
Balancer 를 사전 할당하여 DNS 이름을 미리 알 수 있어 재해 복구 계획을 간단히 실행할 수 있습니다.


3) Amazon VPC (Amazon Virtual Private Cloud)
Amazon VPC를 사용해 Amazon Web Services 클라우드에서 개인적이고 격리된
공간을 프로비저닝하고, 가상 네트워크를 정의해 AWS 리소스를 시작할 수 있습니다. 또한, IP 주소 범위, 서브넷
생성, 라우팅 테이블과 네트워크 게이트웨이의 구성을 선택하는 등 가상 네트워킹 환경을 완벽히 제어할 수
있습니다. 이렇게 하면 기업 데이터 센터와 VPC 를 VPN 으로 연결하여 AWS 클라우드를 기업 데이터 센터의
연장선으로 활용할 수 있습니다. 재해 복구 측면에서는 Amazon VPC 를 사용하여 기존 네트워크 토폴로지를
클라우드까지 확장할 수 있습니다. 이는 특히 일반적으로 내부 네트워크에 있는 기업 애플리케이션을 복구할
때에 적합합니다.


4) Amazon Direct Connect
Amazon Direct Connect 를 사용해 귀하의 프레미스에서 AWS 로 전용 네트워크를 간편하게 연결할 수 있습니다.
많은 경우, 이 서비스는 네트워크 비용을 줄이고, 대역폭 처리량을 높이며, 인터넷 기반 연결보다 더 일관된
네트워크 환경을 제공합니다.




4. Database


1) Amazon Relational Database Service (Amazon RDS)

Amazon RDS 를 사용해 클라우드에서 관계형 데이터베이스를 더욱 간편하게 설정, 관리 및 확장할 수 있습니다.

Amazon RDS 를 재해 복구 준비 단계에서 사용하여 이미 실행 중인 데이터베이스에 있는 중요 데이터를

보존하거나 복구 단계에서 사용하여 생산 데이터베이스를 실행할 수도 있습니다.


2) Amazon SimpleDB
Amazon SimpleDB는 데이터베이스 관리 작업 부담을 덜어주는 고가용성의 유연한 비관계형 데이터
스토리지입니다. 이 스토리지는 재해 복구 준비 및 복구 단계에서도 사용할 수 있습니다.

감사합니다.

2014년 12월 30일 화요일

['나는 한다 Openstack 설치를' 시리즈 8편]매뉴얼대로 Centos에 openstack icehouse 설치하기, dashboard 설치하기

['나는 한다 Openstack 설치를' 시리즈 8편]매뉴얼대로 Centos에 openstack icehouse 설치하기, dashboard 설치하기

이번에는 웹에서 openstack 관리를 가능하게 해주는 dashboard를 설치하겠습니다.

dashboard 설치하기


controller node에 설치하시면 됩니다.

1. 필수 패키지 설치

# yum install -y memcached python-memcached mod_wsgi openstack-dashboard

2. /etc/sysconfig/memcached의 정보와 /etc/openstack-dagaboard/local_settings 일치시키기

# cat /etc/sysconfig/memcached  // port번호 확인해주세요.

# vi /etc/openstack-dahsboard/local_settings

밑에와 같은 부분을 찾아서 주석을 해제해주세요.

CACHES = {
'default': {
'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION' : '127.0.0.1:11211'
}
}

Ex) 위에처럼 하니까 에러나서 저는 위에 있는 명령어 주석처리하고 밑에 처럼 했습니다.

CACHES = {
    'default': {
        'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION' : '127.0.0.1:11211'
    }
}

3. 접속가능한 host 설정하기

# vi /etc/openstack-dahsboard/local_settings

ALLOWED_HOSTS = ['*']


4. host 설정하기

# vi /etc/openstack-dashboard/local_settings

OPENSTACK_HOST = "controller"

5. http 서버로 접속이 가능한지 확인하기

# setsebool -P httpd_can_network_connect on

6. openstack 상태확인하기

# openstack-status

7. apache 웹 서버와 memcached 시작

# service httpd start
# service memcached start
# chkconfig httpd on
# chkconfig memcached on

8. openstack 접속하기

서버 웹 브라우저에서 controller node ip를 입력하여 접속합니다.

http://192.168.137.201/dashboard



여기까지가 openstack 필수설치 코스입니다. 앞으로 추가적으로 blockstorage, ochestration 같은 것들을 추가하여 openstack을 즐길 수 있도록 하겠습니다.

openstack 설치 시리즈 1편
openstack 설치 시리즈 2편
openstack 설치 시리즈 3편
openstack 설치 시리즈 4편
openstack 설치 시리즈 5편
openstack 설치 시리즈 6편
openstack 설치 시리즈 7편
openstack 설치 시리즈 8편

['나는 한다 Openstack 설치를' 시리즈 7편]매뉴얼대로 Centos에 openstack icehouse 설치하기, neutron 설치하기

['나는 한다 Openstack 설치를' 시리즈 7편]매뉴얼대로 Centos에 openstack icehouse 설치하기, neutron 설치하기(2)

기본 network망 구성하기


너무 작게 보일 경우 클릭해서 보시면 커집니다.


controller node에서 설정하기

1. 소스 파일 적용하기
# source /root/admin-openrc.sh

2. network 만들기

# neutron net-create ext-net --shared --router:external=True

3. 서브넷 만들기

# neutron subnet-create ext-net --name ext-subnet \
  --allocation-pool start=<할당받을 대역대>,end=<할당받을 대역대> \
  --disable-dhcp --gateway <외부로 통신 가능한 gateway주소> <외부와 통신가능한 netmask>

예) 제가 이용하는 서버의 물리적인 gateway는 172.16.7.254입니다. vmware나 hyper-v의 가상 라우터가 아니고 서버나 PC가 직접 연결되어 있는 라우터의 주소를 적으면 됩니다.

# neutron subnet-create ext-net --name ext-subnet \
  --allocation-pool start=172.16.7.221,end=172.16.7.225 \
  --disable-dhcp --gateway 172.16.7.254 172.16.7.0/24

4. tenant network 설정하기

# vi /root/demo-openrc.sh

밑의 내용 추가하기
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_TENANT_NAME=demo
export OS_AUTH_URL=http://192.168.137.201:35357/v2.0

# source demo-openrc.sh

# neutron net-create demo-net

5. tenant network 서브넷 만들기

# neutron subnet-create demo-net --name demo-subnet \
  --gateway <TENANT_NETWORK_GATEWAY> <TENANT_NETWORK_SUBNET>

예) 192.168.1.0/24 gateway 192.168.1.1을 이용하는 tenant network 설정 방법입니다.

# neutron subnet-create demo-net --name demo-subnet \
  --gateway 192.168.1.1 192.168.1.0/24

6. tenant network 라우터 만들기

# neutron router-create demo-router
# neutron router-interface-add demo-router demo-subnet
# neutron router-gateway-set demo-router ext-net

7. ping 테스트 해보기

# ping -c 4 172.16.7.221
PING 172.16.7.221 (172.16.7.221) 56(84) bytes of data.
64 bytes from 172.16.7.221: icmp_seq=1 ttl=127 time=2.25 ms
64 bytes from 172.16.7.221: icmp_seq=2 ttl=127 time=1.10 ms
64 bytes from 172.16.7.221: icmp_seq=3 ttl=127 time=1.52 ms
64 bytes from 172.16.7.221: icmp_seq=4 ttl=127 time=1.42 ms

--- 172.16.7.221 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3008ms
rtt min/avg/max/mdev = 1.106/1.577/2.255/0.422 ms

여기까지 network node(neutron) 설정을 마치겠습니다.


2014년 12월 29일 월요일

['나는 한다 Openstack 설치를' 시리즈 6편]매뉴얼대로 Centos에 openstack icehouse 설치하기, neutron 설치하기

['나는 한다 Openstack 설치를' 시리즈 6편]매뉴얼대로 Centos에 openstack icehouse 설치하기, neutron 설치하기

이번에는 networking service인 neutron을 설치하도록 하겠습니다.

controller node 설정하기


1. neutron 데이터베이스 만들기

# mysql -u root -p
mysql> CREATE DATABASE neutron;
mysql> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
IDENTIFIED BY '<비밀번호>';
mysql> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
IDENTIFIED BY '<비밀번호>';
mysql> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'controller' \
IDENTIFIED BY '<비밀번호>';
mysql> exit

2. 인증 서비스 만들기

  • neutron user 만들기

    # keystone user-create --name neutron --pass <비밀번호> --email <email주소>
  • neutron user 연결하기

    # keystone user-role-add --user neutron --tenant service --role admin
  • neutron service 만들기

    # keystone service-create --name neutron --type network --description "OpenStack Networking"
  • 서비스 끝점 만들기

    # keystone endpoint-create \
      --service-id $(keystone service-list | awk '/ network / {print $2}') \
      --publicurl http://192.168.137.201:9696 \
      --adminurl http://192.168.137.201:9696 \
      --internalurl http://192.168.137.201:9696
3. networking components 설치하기

# yum install -y openstack-neutron openstack-neutron-ml2 python-neutronclient

4. 데이터베이스를 사용하기 위해 networking 설정하기

# openstack-config --set /etc/neutron/neutron.conf database connection \
  mysql://neutron:<비밀번호>@controller/neutron

5. 인증 서비스를 사용하기 위해 networking 설정하기

# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
  auth_strategy keystone
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  auth_uri http://192.168.137.201:5000
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  auth_host controller
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  auth_protocol http
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  auth_port 35357
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  admin_tenant_name service
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  admin_user neutron
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  admin_password <비밀번호>

6. qpid 사용을 위한 networking 설정

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

7. 네트워크 변경 시 compute node에 알리기 위한 networking 설정

# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
  notify_nova_on_port_status_changes True
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
  notify_nova_on_port_data_changes True
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
  nova_url http://192.168.137.201:8774/v2
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
  nova_admin_username nova
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
  nova_admin_tenant_id $(keystone tenant-list | awk '/ service / { print $2 }')
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
  nova_admin_password <nova비밀번호>
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
  nova_admin_auth_url http://192.168.137.201:35357/v2.0

8. ML2 플러그인 사용을 위한 networking 설정

# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
  core_plugin ml2
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
  service_plugins router

9. ML2 플러그인 설정하기

# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
  type_drivers gre
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
  tenant_network_types gre
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
  mechanism_drivers openvswitch
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_gre \
  tunnel_id_ranges 1:1000
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup \
  firewall_driver neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup \
  enable_security_group True

10. networking 사용을 위한 compute 설정

# openstack-config --set /etc/nova/nova.conf DEFAULT \
  network_api_class nova.network.neutronv2.api.API
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  neutron_url http://192.168.137.201:9696
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  neutron_auth_strategy keystone
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  neutron_admin_tenant_name service
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  neutron_admin_username neutron
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  neutron_admin_password <neutron비밀번호>
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  neutron_admin_auth_url http://192.168.137.201:35357/v2.0
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  linuxnet_interface_driver nova.network.linux_net.LinuxOVSInterfaceDriver
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  firewall_driver nova.virt.firewall.NoopFirewallDriver
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  security_group_api neutron

11. ML2 심볼릭 링크 만들기

# ln -s plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

12. compute 서비스 재시작하기

# service openstack-nova-api restart
# service openstack-nova-scheduler restart
# service openstack-nova-conductor restart

13. neutron 서비스 시작하기

# service neutron-server start
# chkconfig neutron-server on

network node 설정하기


1. /etc/sysctl.conf 편집하기

#vi /etc/sysctl.conf

net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

# sysctl -p

2. networking components 설치하기

# yum install -y openstack-neutron openstack-neutron-ml2 \
  openstack-neutron-openvswitch

3. 인증 서비스 사용을 위한 networking 설정

# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
  auth_strategy keystone
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  auth_uri http://192.168.137.201:5000
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  auth_host controller
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  auth_protocol http
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  auth_port 35357
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  admin_tenant_name service
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  admin_user neutron
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  admin_password <neutron비밀번호>

4. qpid를 사용하기 위한 설정

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

5. ML2 플러그인을 위한 설정

# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
  core_plugin ml2
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
  service_plugins router
# vi /etc/neutron/neutron.conf
   verbose = True 추가

6. Layer-3(L3) 에이전트 설정하기

# openstack-config --set /etc/neutron/l3_agent.ini DEFAULT \
  interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
# openstack-config --set /etc/neutron/l3_agent.ini DEFAULT \
  use_namespaces True
# vi /etc/neutron/l3_agent.ini
   verbose = True 추가

7. DHCP 에이전트 설정하기

# openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT \
  interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
# openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT \
  dhcp_driver neutron.agent.linux.dhcp.Dnsmasq
# openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT \
  use_namespaces True
# vi /etc/neutron/l3_agent.ini
   verbose = True 추가

GRE 프로토콜 방식으로 DHCP하기

# openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT \
  dnsmasq_config_file /etc/neutron/dnsmasq-neutron.conf
# vi /etc/neutron/dnsmasq-neutron.conf
   dhcp-option-force=26,1454  추가
#killall dnsmasq

8. metadata 에이전트 설정하기

# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \
  auth_url http://192.168.137.201:5000/v2.0
# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \
  auth_region regionOne
# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \
  admin_tenant_name service
# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \
  admin_user neutron
# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \
  admin_password <neutron비밀번호>
# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \
  nova_metadata_ip controller
# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \
  metadata_proxy_shared_secret <metadata비밀번호(아무거나)>
# vi /etc/neutron/metadata_agent.ini
   verbose = True

9. controller node에서 compute 설정하기

# openstack-config --set /etc/nova/nova.conf DEFAULT \
  service_neutron_metadata_proxy true
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  neutron_metadata_proxy_shared_secret <위에서 입력한 비밀번호>
# service openstack-nova-api restart

10. ML2 플러그인 설정하기

# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
  type_drivers gre
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
  tenant_network_types gre
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
  mechanism_drivers openvswitch
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_gre \
  tunnel_id_ranges 1:1000
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs \
  local_ip <network node의 tunnel 인터페이스 IP>
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs \
  tunnel_type gre
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs \
  enable_tunneling True
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup \
  firewall_driver neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup \
  enable_security_group True

11. open vswitch 서비스 설정하기

  • OVS 서비스 시작 및 등록

    # service openvswitch start
    # chkconfig openvswitch on
  • bridge 등록하기

    # ovs-vsctl add-br br-ex
  • bridge 인터페이스 등록하기

    # ovs-vsctl add-port br-ex <외부 네트워크 이더넷 카드 이름(초반에 만들어 놓은 이더넷)>

12. 설치 마무리하기

# ln -s plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

# cp /etc/init.d/neutron-openvswitch-agent /etc/init.d/neutron-openvswitch-agent.orig

# sed -i 's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g' /etc/init.d/neutron-openvswitch-agent

# service neutron-openvswitch-agent start

# service neutron-l3-agent start

# service neutron-dhcp-agent start

# service neutron-metadata-agent start

# chkconfig neutron-openvswitch-agent on

# chkconfig neutron-l3-agent on

# chkconfig neutron-dhcp-agent on

# chkconfig neutron-metadata-agent on

compute node에서 설정하기


1. /etc/sysctl.conf 편집하기

#vi /etc/sysctl.conf

net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

#sysctl -p

2. networking 패키지 설치

# yum install -y openstack-neutron-ml2 openstack-neutron-openvswitch

3. 인증 서비스 사용을 위한 networking 설정

# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
  auth_strategy keystone
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  auth_uri http://192.168.137.201:5000
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  auth_host controller
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  auth_protocol http
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  auth_port 35357
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  admin_tenant_name service
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  admin_user neutron
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
  admin_password <neutron비밀번호>

4. qpid 사용을 위한 networking 설정

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

5. ML2 플러그인 설정하기

# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
  type_drivers gre
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
  tenant_network_types gre
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
  mechanism_drivers openvswitch
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_gre \
  tunnel_id_ranges 1:1000
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs \
  local_ip <compute node tunnel network IP 주소>
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs \
  tunnel_type gre
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs \
  enable_tunneling True
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup \
  firewall_driver neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup \
  enable_security_group True

6. OVS 설정하기

# service openvswitch start
# chkconfig openvswitch on
# ovs-vsctl add-br br-int

7. networking 사용을 위한 compute 설정

# openstack-config --set /etc/nova/nova.conf DEFAULT \
  network_api_class nova.network.neutronv2.api.API
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  neutron_url http://192.168.137.201:9696
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  neutron_auth_strategy keystone
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  neutron_admin_tenant_name service
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  neutron_admin_username neutron
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  neutron_admin_password <neutron 비밀번호>
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  neutron_admin_auth_url http://192.168.137.201:35357/v2.0
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  linuxnet_interface_driver nova.network.linux_net.LinuxOVSInterfaceDriver
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  firewall_driver nova.virt.firewall.NoopFirewallDriver
# openstack-config --set /etc/nova/nova.conf DEFAULT \
  security_group_api neutron

8. 설치 마무리하기

# ln -s plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
# cp /etc/init.d/neutron-openvswitch-agent /etc/init.d/neutron-openvswitch-agent.orig
# sed -i 's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g' /etc/init.d/neutron-openvswitch-agent
# service openstack-nova-compute restart

2014년 12월 28일 일요일

['나는 한다 Openstack 설치를' 시리즈 5편]매뉴얼대로 Centos에 openstack icehouse 설치하기, compute node 설정 및 설치하기

['나는 한다 Openstack 설치를' 시리즈 5편]매뉴얼대로 Centos에 openstack icehouse 설치하기, compute node 설정 및 설치하기

이번에는 openstack에서 가상 OS를 구동해주는 compute service, compute node를 설치하겠습니다. 간략하게 compute node를 설명하면 AWS의 EC2, vmware의 vm등이 되겠습니다.

controller node에 compute 설치하기


1. controller node에 필수 패키지 설치하기

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

2. mysql에 compute 데이터베이스 저장하기

# openstack-config --set /etc/nova/nova.conf \
  database connection mysql://nova:<비밀번호>@localhost/nova

3. qpid를 사용하기 위해 compute 설정하기

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

4. my_ip, vncserver_listen, vncserver_proxyclient_address 설치하기

ip에는 controller node의 ip를 넣어주시면 됩니다.

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

5. nova 데이터베이스 user 만들기

# mysql -u root -p
mysql> CREATE DATABASE nova;
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
IDENTIFIED BY '<비밀번호>';
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'controller' \
IDENTIFIED BY '<비밀번호>';
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
IDENTIFIED BY '<비밀번호>';
mysql> exit

6. 테이블 만들기

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

7. keystone에 nova user 등록하기

# keystone user-create --name=nova --pass=<비밀번호> --email=<email주소>
# keystone user-role-add --user=nova --tenant=service --role=admin

8. controller node에서 compute가 잘 실행되게 하기 위해 openstack-config 설정하기

# openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http://192.168.137.201:5000
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_host controller
# 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 <비밀번호>

9. 다른 openstack service에서 원활하게 접속하게 하기 위해 compute 등록하기

# keystone service-create --name=nova --type=compute \
  --description="OpenStack Compute"
# keystone endpoint-create \
  --service-id=$(keystone service-list | awk '/ compute / {print $2}') \
  --publicurl=http://192.168.137.201:8774/v2/%\(tenant_id\)s \
  --internalurl=http://192.168.137.201:8774/v2/%\(tenant_id\)s \
  --adminurl=http://192.168.137.201:8774/v2/%\(tenant_id\)s

10. compute service들 시작하기, chkconfig에 등록하기

# service openstack-nova-api start
# service openstack-nova-cert start
# service openstack-nova-consoleauth start
# service openstack-nova-scheduler start
# service openstack-nova-conductor start
# service openstack-nova-novncproxy start
# 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 image-list

compute node 설정하기


1. compute 패키지 설치하기

# yum install -y openstack-nova-compute

2. /etc/nova/nova.conf 파일 설정하기

# openstack-config --set /etc/nova/nova.conf database connection mysql://nova:<비밀번호>@controller/nova
# openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http://192.168.137.201:5000
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_host controller
# 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 <비밀번호>

3. qpid 사용을 위한 compute 설정하기

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

4. 인스턴스에 원격 접속을 위해 compute 설정하기

ip는 compute node의 ip를 입력해주세요.
# openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.137.203
# 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 192.168.137.203
# openstack-config --set /etc/nova/nova.conf \
  DEFAULT novncproxy_base_url http://192.168.137.201:6080/vnc_auto.html

5. image service를 실행하는 호스트 지정하기

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

6. 하드웨어 가속 여부 확인하기

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

위의 명령어를 실행 시켜서 1이나 그 이상의 숫자가 나오면 별다른 설정이 필요없지만 0이 나왔을 경우는 밑의 명령어를 추가로 실행해야 합니다.

# openstack-config --set /etc/nova/nova.conf libvirt virt_type qemu

7. compute service 시작하기

# service libvirtd start
# service messagebus start
# service openstack-nova-compute start
# chkconfig libvirtd on
# chkconfig messagebus on
# chkconfig openstack-nova-compute on

이렇게 compute service까지 설치를 마쳤습니다. 다음은 network service 설정하기 입니다.


['나는 한다 Openstack 설치를' 시리즈 4편]매뉴얼대로 Centos에 openstack icehouse 설치하기, glance 설치하기

['나는 한다 Openstack 설치를' 시리즈 4편]매뉴얼대로 Centos에 openstack icehouse 설치하기, glance 설치하기

이번에는 controller node에 설치되어 이미지 파일들을 관리하는 glance를 설치하겠습니다. glance는 controller node에만 설치하면 됩니다.

image service(glance) 설치하기


1. glance 설치하기

# yum install -y openstack-glance python-glanceclient

2. mysql에 glance 데이터베이스 만들기

# openstack-config --set /etc/glance/glance-api.conf database \
  connection mysql://glance:<비밀번호>@localhost/glance
# openstack-config --set /etc/glance/glance-registry.conf database \
  connection mysql://glance:<비밀번호>@localhost/glance

3. glance 데이터베이스 user 만들기

# mysql -u root -p
mysql> CREATE DATABASE glance;
mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
IDENTIFIED BY '<비밀번호>';
mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'controller' \
IDENTIFIED BY '<비밀번호>';
mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
IDENTIFIED BY '<비밀번호>';
mysql> exit

4. image service 테이블 만들기

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

5. keystone에 glance user 등록하기

# keystone user-create --name=glance --pass=<비밀번호> \
   --email=<email주소>
# keystone user-role-add --user=glance --tenant=service --role=admin

6. 인증 서비스 사용을 위해 image service 설정하기

# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \
  auth_uri http://192.168.137.201:5000
# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \
  auth_host controller
# 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 <비밀번호>
# 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://192.168.137.201:5000
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken \
  auth_host controller
# 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 <비밀번호>
# openstack-config --set /etc/glance/glance-registry.conf paste_deploy \
  flavor keystone

7. 다른 openstack 서비스에서 glance로 접속하게 하기 위해 인증 서비스 등록하기

# keystone service-create --name=glance --type=image \
  --description="OpenStack Image Service"
# keystone endpoint-create \
  --service-id=$(keystone service-list | awk '/ image / {print $2}') \
  --publicurl=http://192.168.137.201:9292 \
  --internalurl=http://192.168.137.201:9292 \
  --adminurl=http://192.168.137.201:9292

8. glance 서비스 시작 및 chkconfig에 등록하기

# service openstack-glance-api start
# service openstack-glance-registry start
# chkconfig openstack-glance-api on
# chkconfig openstack-glance-registry on

glance가 잘 설치 되었는지 확인하기


1. image 파일 다운로드하기

# cd /usr/local/src
# wget http://ftp.daum.net/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-minimal.iso

2. image 업로드하기

# glance image-create --name=IMAGELABEL --disk-format=FILEFORMAT \
  --container-format=CONTAINERFORMAT --is-public=ACCESSVALUE < IMAGEFILE

다운 받은 centos 6.5를 업로드하려면 다음과 같이 작성해주세요.
# glance image-create --name=CentOS_6.5_Final --disk-format=iso \
  --container-format=bare --is-public=true < CentOS-6.5-x86_64-minimal.iso

3. image 확인하기

# glance image-list

다음과 같은 화면이 나오면 성공!
+--------------------------------------+------------------+-------------+------------------+-----------+--------+
| ID                                   | Name             | Disk Format | Container Format | Size      | Status |
+--------------------------------------+------------------+-------------+------------------+-----------+--------+
| 3afbb6bf-cb6b-4bd9-afc4-3d74ce1178d7 | CentOS_6.5_Final | iso         | bare             | 417333248 | active |
+--------------------------------------+------------------+-------------+------------------+-----------+--------+

glance에 이미지 업로드 하기는 다음 포스트에도 있으니 참고 바랍니다.


glance 설정하기를 마치겠습니다.


2014년 12월 27일 토요일

['나는 한다 Openstack 설치를' 시리즈 3편]매뉴얼대로 Centos에 openstack icehouse 설치하기, keystone 설치하기

['나는 한다 Openstack 설치를' 시리즈 3편]매뉴얼대로 Centos에 openstack icehouse 설치하기, keystone 설치하기

openstack의 보안에서 가장 핵심이 되는 keystone을 설치하겠습니다. keystone의 구동 방식을 표현한 그림을 첨부하겠습니다. 그림을 보면 금방 이해하실 수 있을 겁니다.
잘 안 보이시면 클릭해서 보셔도 됩니다.

keystone 설치하기


keystone은 controller node에서만 설치하시면 됩니다.

1. openstack-keystone python-keystoneclient

# yum install -y openstack-keystone python-keystoneclient

2. keystone 데이터베이스를 생성하는 명령어입니다. 두번째 줄의 keysone_dbpass에는 사용하시고자 하는 keystone의 비밀번호를 넣어주세요. localhost 부분은 

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

3. mysql에 root로 접속을 합니다.

#mysql -u root -p

4. keystone 데이터베이스 유저를 생성하는 과정입니다. 여기서도 keystone_dbpass에는 위에서 넣은 keystone 비밀번호와 같은 것을 입력하면 됩니다. 

mysql> CREATE DATABASE keystone;
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
  IDENTIFIED BY 'KEYSTONE_DBPASS';  // 'keystone'@'localhost' 이 부분에서 localhost는 keystone 데이터베이스 생성할 때 넣었던 컴퓨터 이름이랑 맞춰주세요.
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
  IDENTIFIED BY 'KEYSTONE_DBPASS';
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'controller' \
  IDENTIFIED BY 'KEYSTONE_DBPASS';
mysql> exit

5. keystone 서비스를 위한 데이터베이스 테이블을 만드는 과정입니다.

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

6. 공유된 암호를 이용하여 인증 서비스와 다른 오픈스택 서비스간에 사용권한 토큰을 정의하기 위해 openssl을 이용하여 임의의 토큰을 생성하고 생성된 토큰을 conf 파일에 저장하는 과정입니다.

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

7. 생성된 데이터에 대한 엑세스를 제한하고 서명키와 인증서를 생성합니다.

# keystone-manage pki_setup --keystone-user keystone --keystone-group keystone

# chown -R keystone:keystone /etc/keystone/ssl

# chmod -R o-rwx /etc/keystone/ssl

8. keystone 시작 및 chkconfig에 등록하기

# service openstack-keystone start

# chkconfig openstack-keystone on

9. 기본적으로 인증 서비스는 만료된 토큰을 데이터베이스에 무기한으로 저장하기 때문에 크론을 이용하여 주기적으로 제거해주는 것이 좋습니다. 

# (crontab -l -u keystone 2>&1 | grep -q token_flush) || \
echo '@hourly /usr/bin/keystone-manage token_flush >/var/log/keystone/keystone-tokenflush.log 2>&1' >> /var/spool/cron/keystone

users, tenants, roles 설정하기


keystone을 설치하고 나면 users, tenants, roles 등을 설정해야 합니다.

1. token 만들기, admin_token에는 /etc/keystone/keystone.conf 파일에 있는 admin_token을 입력해줍니다.

$ export OS_SERVICE_TOKEN=ADMIN_TOKEN(예:vn13ndlasienc)

$ export OS_SERVICE_ENDPOINT=http://192.168.137.201:35357/v2.0

2. admin user 만들기

$ keystone user-create --name=admin --pass=<비밀번호> --email=<email주소>

3. admin role 만들기

$ keystone role-create --name=admin

4. admin tenant 만들기

$ keystone tenant-create --name=admin --description="Admin Tenant"

5. user, role, tenant 연결하기

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

6. 일반 user 만들기

$ keystone user-create --name=demo --pass=<비밀번호> --email=<email주소>

$ keystone tenant-create --name=demo --description="Demo Tenant"

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

7. service tenant 만들기

$ keystone tenant-create --name=service --description="Service Tenant"

services와 API 끝점 설정하기


1. service 엔트리 만들기

$ keystone service-create --name=keystone --type=identity \
  --description="OpenStack Identity"

$ keystone endpoint-create \
  --service-id=$(keystone service-list | awk '/ identity / {print $2}') \
  --publicurl=http://192.168.137.201:5000/v2.0 \
  --internalurl=http://192.168.137.201:5000/v2.0 \
  --adminurl=http://192.168.137.201:35357/v2.0

인증서비스 설치 확인하기


1. 인증서비스가 잘 설치되었는지 확인하기 위하여 OS_SERVICE_TOKEN 와 OS_SERVICE_ENDPOINT 지우기

$ unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT

2. admin의 인증 토큰을 활용하여 일반 user 이름 기반 인증 사용하기

$ keystone --os-username=admin --os-password=<비밀번호> \
  --os-auth-url=http://192.168.137.201:35357/v2.0 token-get

3. admin-openrc.sh 파일 설정하기

# vi /root/admin-openrc.sh

밑의 내용을 입력해주세요.
export OS_USERNAME=admin
export OS_PASSWORD=<비밀번호>
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://192.168.137.201:35357/v2.0

4. admin-openrc.sh 파일 적용하기

$ source admin-openrc.sh

5. admin-openrc.sh 파일이 적용 잘 되었는지 확인하기

$ keystone token-get

6. 일반 유저 sh 파일 만들기

#vi /root/demo-openrc.sh

밑의 내용을 입력해주세요.

export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_TENANT_NAME=demo
export OS_AUTH_URL=http://192.168.137.1:35357/v2.0

7. user 확인하기

$ keystone user-list

$ keystone user-role-list --user admin --tenant admin

여기까지 해서 에러없이 모두 잘 나온다면 인증 서비스(keystone) 설정에 문제가 없는 것입니다.

['나는 한다 Openstack 설치를' 시리즈 2편]매뉴얼대로 Centos에 openstack icehouse 설치하기, 기본 설정하기 2편

['나는 한다 Openstack 설치를' 시리즈 2편]매뉴얼대로 Centos에 openstack icehouse 설치하기, 기본 설정하기 2편

mysql 설치


# yum install -y mysql mysql-server MySQL-python

설치 후 /etc/my.cnf 파일 수정해주세요.

[mysqld]
...
bind-address = 192.168.137.201 // contorller IP 입력
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8

mysql 시작하기


#/etc/init.d/mysqld start
#chkconfig mysqld on
#mysqladmin -u root password <비밀번호>

mysql db 설치하기


#mysql_install_db
#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] n
 ... skipping.

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] n
 ... skipping.

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!

controller node 빼고 모든 node에 python 설치하기

# yum install -y MySQL-python

openstack package 설치하기

 모든 node에서 설치해주세요.

# yum install -y yum-plugin-priorities

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

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

# yum install -y openstack-utils

# yum install -y openstack-selinux

# yum upgrade -y

# shutdown -r 0


messaging server 설치하기

여기서부터는 다시 controller node에서만 설치합니다.

messaging server에서 사용하는 message broker는 세가지가 있는데 redhat계열에서는 Qpid를 이용합니다.

  • RabbitMQ
  • Qpid
  • ZeroMQ
# yum install -y qpid-cpp-server

# vi /etc/qpidd.conf  // qpidd.conf 파일 맨 밑에 auth=yes를 밑의 사진처럼 변경합니다.


# service qpidd start

# chkconfig qpidd on

여기까지 하면 이제 openstack 설치의 기초 공사가 끝난겁니다.


2014년 12월 25일 목요일

['나는 한다 Openstack 설치를' 시리즈 1편]매뉴얼대로 Centos에 openstack icehouse 설치하기, 기본 설정

['나는 한다 Openstack 설치를' 시리즈 1편]매뉴얼대로 Centos에 openstack icehouse 설치하기, 기본 설정

이전에 시도했던 'packstack으로 설치하기'와는 달리 openstack을 하나하나 알아가기 위해서 매뉴얼을 보고 설치를 진행하였습니다.

설치환경

* 플랫폼: windows 2012 R2에 Hyper-v
* OS: Centos 6.6
* 용량: 16GB + LVM 15GB
* 네트워크: 192.168.137.0/24

OS 준비하기

openstack을 설치하려면 기본적으로 3대의 서버가 있어야 합니다.

각 서버의 최소 사양은 아래와 같습니다.
  • Controller Node: 1 processor, 2 GB memory, and 5 GB storage
  • Network Node: 1 processor, 512 MB memory, and 5 GB storage
  • Compute Node: 1 processor, 2 GB memory, and 10 GB storage

openstack 구조도 이해하기

openstack 홈페이지에서 따온 그림입니다. 이번에 하는 설치에서는 위 그림과 같은 형식으로 설치하겠습니다. 

2014년 12월 20일 토요일

glance를 이용하여 openstack에 이미지 업로드하기

glance를 이용하여 openstack에 이미지 업로드하기

glance는 openstack에서 이미지 관리를 담당합니다. 그래서 openstack에 이미지를 업로드 할 때에는 glance를 이용하는데요 사용법은 간단합니다.

  1. 이미지 얻기

    이미지를 업로드 하려면 먼저 이미지가 필요한데요 저는 wget을 이용하여 다운 받은 다음에 업로드 하겠습니다.
    #wget http://ftp.daum.net/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-minimal.iso
    --2014-12-17 20:03:20--  http://ftp.daum.net/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-minimal.iso
    Resolving ftp.daum.net... 117.52.11.181
    Connecting to ftp.daum.net|117.52.11.181|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 417333248 (398M) [application/octet-stream]
    Saving to: “CentOS-6.5-x86_64-minimal.iso”

    100%[======================================>] 417,333,248 3.42M/s   in 2m 0s

    2014-12-17 20:05:21 (3.30 MB/s) - “CentOS-6.5-x86_64-minimal.iso” saved [417333248/417333248]

    위의 메시지가 나오면서 다운로드가 완료됩니다.
  2. glance에 이미지 업로드하기 
    #glance image-create --name "CentOS-6.5-x86_64-minimal" --disk-format iso \
    --container-format bare --is-public True --progress <CentOS-6.5-x86_64-minimal.iso
  3. glance에 삽입된 이미지 확인하기

    #glance image-list

2014년 12월 17일 수요일

openstack 사용자 비밀번호 변경하기

openstack keystone 사용자 비밀번호 변경하기

openstack은 keystone이라는 인증 구성 요소가 계정을 관리합니다. 그래서 모든 계정의 비밀번호는  keystone을 통해서 변경해야 합니다.

비밀번호 바꾸는 거는 상당히 간단합니다.

  1. admin_token 알아내기
    #vi /etc/keystone/keystone.conf  // 여기에 admin_token이 있습니다.
    윗 부분에
    admin_token=smd34235klasdjhkl32534
    이렇게 생긴 줄이 보일 겁니다. 그러면 = 다음부터 잘 복사를 합시다.
  2. 비밀번호 변경하기
    #export SERVICE_TOKEN=smd34235klasdjhkl32534
    #export OS_SERVICE_ENDPOINT=http://192.168.137.61:35357/v2.0
    #keystone user-password-update --pass <password> <user-id>
이것으로 비밀번호 변경은 약 5분 만에 끝났습니다.

Packstack으로 openstack 설치하기

요새 한창 Openstack을 설치하는 중이라 여러가지 방법으로 시도를 해보았는데요. 여러 방법 중에서 packstack으로 설치하는 방법이 제일 쉬워서 기록을 해봅니다.

기본적으로 openstack을 운영하려면 최소 2대의 서버가 필요합니다. 


테스트 용으로 사용을 할 거라면 controller와 compute 먼저 두 대의 서버를 준비해주세요.
  • 설치 환경
    OS: centos6.5
    플랫폼: Hyper-v
    HDD: 32 GB
    네트워크: control 192.168.137.61, compute 192.168.137.62
보통은 public, private 네트워크 두 개를 만들어서 하는 것이 정석이나 이번은 내부와 외부 같은 ip를 쓰겠습니다.

공통 설정

  1. selinux 설정 변경
    #vi /etc/selinux/config
    selinux = disabled  /disabled로 변경
    #setenforce 0  // 재시작 전까지 selinux disabled로 설정
  2. NTP 시간 동기화
    #yum install -y ntp
    #/etc/init.d/ntpd restart
    #ntpdate pool.ntp.org
    #chkconfig on
  3. icehouse와 epel 소스 설치하기
    #yum install -y http://repos.fedorapeople.org/repos/openstack/openstack-icehouse/rdo-release-icehouse-3.noarch.rpm http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
  4. openstack 설치 도구 및 시스템 업데이트
    #yum install -y openstack-utils openstack-selinux
    #yum update -y
    #shutdown -r 0

controller에서 설정하기

  1. packstack 설치하기
    #yum install -y openstack-packstack
  2. 설정파일 생성하기
    #packstack --gen-answer-file=/root/icehouse_openstack.cfg
  3. 생성된 설정 파일 변경하기
    #vi /root/icehouse_openstack.cfg

    Control에 들어가는 부분
    CONFIG_CINDER_HOST=192.168.137.61
    CONFIG_NOVA_COMPUTE_HOSTS=192.168.137.61
    CONFIG_SWIFT_STORAGE_HOSTS=192.168.137.61

    Compute에 들어가는 부분
    CONFIG_SWIFT_PROXY_HOSTS=192.168.137.62
  4. Control node & compute node 설치
    control node에서 packstack으로 설치를 하면 ssh를 통해 compute도 같이 설치하기 때문에 설치 전에 비밀번호를 물어봅니다.
    #packstack --answer-file=/root/icehouse_openstack.cfg

    밑으로 쭉~쭉쭉 설치가 진행 됩니다.
  5. 설치 완료 후 웹 브라우저에서 control의 ip로 접속을 하면 다음 과 같은 화면을 볼 수 있습니다.