[OpenStack] OSP Architecture
# Provisioning Flow
- Horizon 을 통해 오픈스택 접근
- Horizon 에서는 keystone으로 인증 요청을 위해 REST call
- 컴포넌트 간 요청에 사용되는 인증 토큰을 생성하고 사용자에게 전송
- 대시보드 또는 CLI에서 새 인스턴스 요청 시 , ‘launch instance’ 또는 ‘nova-boot’ 양식으로 작성됨. 해당 양식을 REST API로 변환하여 nova-api로 전송
- 작업을 수행하기 전, 항상 keystone 인증이 필요하므로 인증 작업을 실시
- 인증 요청에 성공하면 인증 토큰을 받는다.
- nova-api는 nova DB와 통신
- 새 인스턴스를 위한 초기 DB 엔트리 생성
- nova-api는 rpc.call 요청을 nova-scheduler에 전송
- nova-scheduler는 queue에서 해당 요청을 가져옴
- nova-secheduler가 nova-DB와 통신하면서, 필터링과 가중치를 통해 적절한 호스트(컴퓨트노드)를 찾음
- 필터링과 가중치 적용 후, 선정된 호스트 ID를 가진 인스턴스 엔트리를 재전송
- nova-scheduler는 선정된 호스트의 nova-compute로 인스턴스 실행을 위한 rpc.cast 전송
- nova-compute는 queue에서 해당 요청을 가져옴
- nova-compute는 인스턴스 정보(image, flavor 등)를 얻기 위해 nova-conductor로 rpc.call 요청 전송
- nova-conductor는 queue에서 해당 요청을 가져옴
- 인스턴스 정보를 찾기 위해 nova-DB와 통신
- 찾은 인스턴스 정보를 queue에 전송하고 nova-compute는 해당 인스턴스 정보를 가져옴
- 인스턴스 정보를 바탕으로 인스턴스 생성을 위한 작업을 시작. Image ID로 해당 Image URI 요청
- nova-compute는 이미지 메타데이터 받음
- IP address, subnet 등 네트워크 정보를 받기 위해 neutron-server로 API call
- 네트워크 정보를 받음
- 디스크 할당을 위해 cinder-api로 API call
- 블록 스토리지 정보를 받음
- 인스턴스 생성을 위한 정보를 바탕으로 하이퍼바이저(libvirt)에 인스턴스 생성 요청
- 인스턴스 생성