OpenStack 소스레벨 접근하기


[inatall script]


[API 사용하기]

# dev Doc

# SDK

- jcloud : 클라우드 관련하여 거의 모든 소스를 커버하고있음

  > github에 올라간 잘 짜여진 예제 소스들 참고하자!

- pkgcloud 


[contribute]

- openstack.org에서 회원으로 가입 한 후 개발자커뮤니티와 연동하여 개발

- 슬쉐에 공유된 부대표님 ppt보고 해보자


[writings]

- 개발자가 알아야할 가상화 정보를 많이... 가이드? 해주고있다..


-----------------------------------------------------------------------------------------



1. keystone

 $ keystone user-list

 $ keystone --debug user-list
   : curl부분이 실제 실행되는 부분

root@ubjuno-contnet:~# which keystone
/usr/bin/keystone

$ vi /usr/bin/keystone

* 다른곳의 소스를 imporing만 하고있음.
그부분을 찾자!


root@ubjuno-contnet:~# ps -ef | grep keystone
keystone  2471     1  3 19:42 ?        00:01:03 /usr/bin/python /usr/bin/keystone-all
keystone  3849  2471  0 19:43 ?        00:00:00 /usr/bin/python /usr/bin/keystone-all
keystone  3850  2471  0 19:43 ?        00:00:00 /usr/bin/python /usr/bin/keystone-all
keystone  3851  2471  0 19:43 ?        00:00:00 /usr/bin/python /usr/bin/keystone-all
keystone  3852  2471  0 19:43 ?        00:00:00 /usr/bin/python /usr/bin/keystone-all
root      9110  8463  0 20:17 pts/1    00:00:00 grep --color=auto keystone
root@ubjuno-contnet:~#
root@ubjuno-contnet:~# which keystone-all
/usr/bin/keystone-all
root@ubjuno-contnet:~#
root@ubjuno-contnet:~# vi /usr/bin/keystone-
keystone-all     keystone-manage
root@ubjuno-contnet:~# vi /usr/bin/keystone-all

* main을 찾아요. main이 구현되어있음.

* wsgi, 데몬으로 서비스가 http프로토콜의 경우 웹서버를 띄우지 않아도 웹서버에 올려준거처럼 되어있음
(일반적으로 wsgi는 웹서버의 기능을 떼어 위의 부가서비스들을 따로 운영하게 한다. 미니멀을 지향?, 해당 부가서비스들은 쓰레드로 동작되어 콜되어지는 형태)
* monkeypatch
 - use_eventlet()에 넣어서 돌리면 스레드를 돌려서(green이라는 스레드 풀같은걸로) wsgi로 올려서 OpenStack상의 데몬을 띄운다.


=>임베디드 어쩌고저쩌고?


* 웹에서 쓰레드가 필요한 이유...? 웹서비스들을 스레드로 돌려야 가벼움(자원을 공유하므로)


* admin_workers / public_workers를 구분하여 

server로 ㄱㄱ


root@ubjuno-contnet:~# vi /usr/lib/python2.7/dist-packages/keystone/openstack/common/service.py

- python 2,3버전 대는 완전 다름.
- 소스단에서의 가상화라는 것을 제공하는데(3버전), 가상화하여 묶어서 소스영향력을 줄인다.

* 파이썬 라이브러리들은 지속가능한 걸 선호해야함(너무 금방 사라져버리니까.. 안정화된 걸 골라써야햇)

* tree명령어로 keystone 구조보기
$ tree -L 1 /usr/lib/python2.7/dist-packages/keystone

* 파이썬도 컴파일을 하면 중간코드 형태로 파일이 떨어진다. (.pyc)
*

root@ubjuno-contnet:~# tree -L 1 /usr/lib/python2.7/dist-packages/keystone/auth/
/usr/lib/python2.7/dist-packages/keystone/auth/
├── controllers.py
├── controllers.pyc
├── core.py
├── core.pyc
├── __init__.py
├── __init__.pyc
├── plugins
├── routers.py
└── routers.pyc

1 directory, 8 files


root@ubjuno-contnet:~# tree -L 1 /usr/lib/python2.7/dist-packages/keystone/assignment/
/usr/lib/python2.7/dist-packages/keystone/assignment/
├── backends
├── controllers.py
├── controllers.pyc
├── core.py
├── core.pyc
├── __init__.py
├── __init__.pyc
├── routers.py
├── routers.pyc
├── schema.py
└── schema.pyc

1 directory, 10 files


root@ubjuno-contnet:~# tree -L 1 /usr/lib/python2.7/dist-packages/keystone/assignment/backends/
/usr/lib/python2.7/dist-packages/keystone/assignment/backends/
├── __init__.py
├── __init__.pyc
├── kvs.py
├── kvs.pyc
├── ldap.py
├── ldap.pyc
├── sql.py
└── sql.pyc

0 directories, 8 files

* identity controllers : 메소드와 url을 매핑해주는 로직
- v2 deprecated... 
- v3_to_v2() : 현재 버전 2를 버리지 못하고 해당 함수등을 사용해서 v3로 그냥 맵핑을 시켜주는 형태로 가고있음. 나중에 v2는 한번에 버릴 수 있겠지..

root@ubjuno-contnet:~# vi /usr/lib/python2.7/dist-packages/keystone/assignment/backends/sql.py
* sql 만들기
* create table...
=> DDL, SQL RPM .. 왜 이부분에 프로그래머블하게 SQL을 만들어서 쿼리하는 식으로 가는건가?
-> 결론... sql을 몰라도 (여러 DB를 다룰때..) 정책적으로 SQL 생성이 가능하도록...



# ERD 

여기까지 MVC!
-------------------------------------------------------------------------

root@ubjuno-contnet:~# vi /usr/lib/python2.7/dist-packages/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py
: ovs를 구동시키는 소스들이 다 들어있네

* 전통적인 아주 예전 스타일의 소스코드 스타일인 이유.... 
- 스레드 풀을 받아오기 위해 일수있어,
- 하지만 인프라에대한 소스인데 어쩜 이럴 수 있지?


root@ubjuno-contnet:~# vi /usr/lib/python2.7/dist-packages/neutron/agent/dhcp_agent.py
* dhcp agent
- 런처(server)처럼 떠있다가 dnsmasq를 제어하는 형식





할거 많다...............

------------------------------------------------------------------
 453  tree -L 1 /usr/lib/python2.7/dist-packages/
 454  tree -L 1 /usr/lib/python2.7/dist-packages/keystone
 455  tree -L 1 /usr/lib/python2.7/dist-packages/keystone/auth/
 456  tree -L 1 /usr/lib/python2.7/dist-packages/keystone/middleware/
 457  tree -L 1 /usr/lib/python2.7/dist-packages/keystone/assignment/
 458* tree -L 1 /usr/lib/python2.7/dist-packages/keystone/assignment/b
 459  tree -L 1 /usr/lib/python2.7/dist-packages/




------------------------------------------------------------------

[이 외...]

oslo
분산처리
하둡
디자인패턴

파이썬 <-> R 











# 가상화 + OpenStack + SDN 


#OpenStack?

- 클라우드 Infrastructure를 setup, run을 잘 할수있도록 관리하는 플랫폼

- not Hypervisor

- management Hypervisor

- 클라우드 운영체제


# 서버가상화와 네트워크 가상화 & OpenStack

- nova : 서버가상화, Infrastructure를 관리하기 위함

- neutron : 자연스럽게 네트워크 가상화를 지원하기 위해 quamtum이라는 이름으로 하나의 프로젝트로 제안이되어 공식적으로 릴리즈됨


- 오케스트레이션(heat), 미터링(씰로미터)

- 서버관점? 네트워크 관점? 두 부분으로 나눠져서 생각할 수 있겠다.....


#OVS plugin

- OpenFlow를 준수하는 vSwitch


# SDN

- 기존에는 MDM쪽으로 많은 연구가 이루어졌었다.

- 프로토콜 계층에서 IP layer가 가장 많은 바틀넥이 발생한다. (모든것이 IP 기반으로 동작하기 떄문..)

- SDN에서는 프로그래머블하도록 지원하며 네트웍에대해 원하는대로 지원할 수 있도록 함

- SDN에서는 중앙에서 네트웍변화에 대한 기록을 관리

- Controll layer


OpenStack과 SDN

OpenStack의 서버가상화(nova)나 네트워크가상화(neutron) 환경에서 플러그인 형태로 SDN 컨트롤러들이 연동이 가능

- OpenFlow 프로토콜을 통해서 통신

- 컨트롤러에서 네트웍을 중앙관리함

- 즉 완벽한 독립적으로 개발과 관리가 가능하며, 네트웍의 중앙관리화로 네트웍 통제를 효율적으로 가능


- 컴퓨팅 자원을 관리한다, 네트웍전체를 관리한다가 아닌 네트웍을 관리할때 중앙에서 사람의 두뇌처럼 관리를 할 수 있도록 실현하는게 SDN

- 왜 두뇌를 줘야하지?

: 오케스트레이션을 지원, 중앙화된 네트워크 관리가 쉽게 이루어 질 수 있음


# SDN + DPI (security)

- 보안장비 짱비싸..

- 모든 트래픽이 보안장비를 거쳐가 보안을 강화할 수 있음.

- 엣지 단의 VM들이 보안을 위해서 멀리~ 거쳐야 함.... 


- 분산화된 환경에서 DPI를 배포를 할 수있으면 좋지않을까?

  : 원할 떄 분산화된 DPI의 확장/축소가 가능

  : 오토스케일링이 가능

  : 자원을 나누어 효율적으로 사용할 수 있고

  : 트래픽을 서비스체이닝해서 효율적으로 사용할 수 있음

- DPI를 잘 관리하면 좋지않을까?

- DPI를 SDN으로 관리하자






(참고 http://www.turby.net/42)




모니터링

1. CPU

2. Memory

3. Disk I/O

4. Network

 


# top

: CPU 점유 프로세스들을 실시간으로 조회


(1) 첫번쨰 줄 : 시스템의 전반적 상태. 가동시간, 평균사용량 등

(2) 두번째 줄 : 프로세스들의 상황

(3) 세번째 줄 : CPU 상황

(4) 네번째 줄 : Memory 상황

(5) 다섯번째 줄 : swap 메모리 상황

(6) ~ : 

 PID

USER

PR 

NI 

VIRT 

SHR 

%CPU 

%MEM 

TIME+ 

COMMAND 

 프로세스 ID

사용자 

priority 

NICE 값 

가상메모리 사용량 

(SWAP+RES)

 분할된 페이지, 프로세스에 의해 사용된 메모리를 나눈 메모리의 총합

 CPU 사용률

 메모리 사용률

 CPU TIME

 실행된 명령어


: 옵션

 키

설명 

 t

 요약 정보 표시

 m

 메모리 정보 표시

 A

 시스템 자원을 많이 소모하는 프로세스 정렬

 f

 top의 설정화면 표시

 o

 정렬 순서 정하기

 r

 renice 명령어 실행

 k

 kill 명령어 실행 

 z

 color/mono를 전환




# htop

: top보다 사용자 위주의 모니터링 도구


$ apt-get -y install htop

$ htop




# vmstat 

: 시스템 작업, 하드웨어 및 시스템 정보. 시스템의 리소스 상황(cpu, I/O, memory) 모니터링

procs

memory 

swap 

io

system 

cpu 

 

 r

 b

 swpd

 free

 buff 

 chache 

 si 

 so 

 bi 

 bo 

 in 

 cs 

 us 

 sy 

 id 

 wa  

 st  

 실행중인 프로세스 수(cpu 접근 대기 중인 프로세스 포함)

 인터럽트가 불가능한 sleep 상태에 있는 프로세스의 수

 사용하고 있는 swap 메모리 양

사용가능한 양 

버퍼로 사용되고있는 메모리량 

캐시로 사용되고 있는 메모리양 

swap in (디스크로 스왑되어 나간 메모리 용량) 

swap  out(디스크로 스왑되어 나간 메모리 용량)

 블럭디바이스로 보내는 초당 블럭 수

 블럭디바이스에서 나오는 초당 블럭 수

 초당 인터럽트되는 양
(이더넷패킷도 포함)

 초당 context switch되는 양

process가 cpu를 사용하는 사용하는 시간 - 유저프로세스

process가 cpu를 사용하는 사용하는 시간 - 시스템프로세스

CPU idle한 

 입출력대기 


$ vmstat

$ vmstat 3 

$ vmstat 3 2

$ vmstat -m

$ vmstat -a




# iostat

: 평균 CPU 부하 및 디스크 활동

$ apt-get install -y sysstat

$ iostat




# free



# w -

: 시스템에 로그인한 사용자와 프로세스 출력



# ps










'System > Linux OS ' 카테고리의 다른 글

리눅스 커널 커밋(commit)하기 - ing  (0) 2015.12.23
Linux LVM  (0) 2015.08.12
[ubuntu] 디스크 늘리기(ESXi기반의 VM)  (0) 2015.04.21
[Linux]라우팅 테이블  (0) 2015.04.21
[Linux] TUN/TAP  (0) 2015.04.21

+ Recent posts