diff --git a/doc/source/openstack-on-kubernetes/concepts.rst b/doc/source/openstack-on-kubernetes/concepts.rst index 3e439a7..220fd68 100644 --- a/doc/source/openstack-on-kubernetes/concepts.rst +++ b/doc/source/openstack-on-kubernetes/concepts.rst @@ -34,7 +34,8 @@ OpenStack 의 주요 서비스가 Kubernetes 리소스로 어떻게 매핑되는 * - Keystone (인증) - Deployment + Service, 외부 노출용 Ingress * - Nova (compute) - - 컨트롤 컴포넌트는 Pod, 하이퍼바이저 노드는 별도 관리 + - 컨트롤 컴포넌트는 Pod, 하이퍼바이저 노드는 별도 관리. + :ref:`nova-hypervisor-registration` 에서 자세히 다룹니다. * - Neutron (network) - Deployment/DaemonSet 조합 * - Glance (image) @@ -43,6 +44,57 @@ OpenStack 의 주요 서비스가 Kubernetes 리소스로 어떻게 매핑되는 - Operator 또는 StatefulSet (MariaDB, RabbitMQ 등) +.. _nova-hypervisor-registration: + +Kubernetes 노드의 Nova 하이퍼바이저 등록 +============================================ + +:term:`Nova` 가 VM 을 배치하려면 각 노드가 하이퍼바이저(hypervisor)로 +먼저 등록되어 있어야 합니다. +OpenStack on Kubernetes 에서 이 하이퍼바이저는 별도의 물리 서버가 아니라 +nova-compute 가 실행되는 Kubernetes 노드 자신입니다. + +* Kubernetes 노드 1대 = Nova 하이퍼바이저 1대 (nova-compute Pod 가 노드마다 하나) +* 전체 흐름: nova-compute 기동 → 서비스 레코드 → 컴퓨트 노드 레코드 + → 셀(cell) 매핑 → 스케줄러의 배치 후보 + +등록 과정 +------------ + +nova-compute 가 기동하면서 수행하는 일: + +#. 하이퍼바이저 드라이버(libvirt)에서 CPU/메모리/디스크 자원 정보 수집 +#. 서비스(service) 레코드 등록 — "이 호스트의 nova-compute 가 살아 있다" + 는 생존 신고, 이후 주기적인 하트비트로 갱신 +#. 컴퓨트 노드(compute node) 레코드 생성 — 하이퍼바이저의 자원 현황표, + 스케줄러가 VM 배치를 결정할 때 참조 + +등록 이름은 노드의 호스트명(hostname)에서 옵니다 — nova-compute Pod 는 +호스트 네트워크를 사용하므로 Pod 호스트명이 곧 Kubernetes 노드 +호스트명이고, 그 이름이 하이퍼바이저 이름으로 그대로 등록됩니다. + +등록 확인 +------------ + +.. code-block:: console + + $ openstack compute service list --service nova-compute + $ openstack hypervisor list + +* 첫 번째 명령 — 호스트별 nova-compute 서비스 상태. State 가 up 이면 + 생존 신고(하트비트) 정상 +* 두 번째 명령 — Hypervisor Hostname 열에 Kubernetes 노드의 호스트명이 + 그대로 표시 + +셀 매핑 개요 +---------------- + +* 등록된 호스트는 셀(cell)에 매핑되어야 스케줄러의 배치 대상이 됨 +* 매핑은 ``nova-manage cell_v2 discover_hosts`` 가 수행 — 배포 도구가 + 주기적 실행을 자동화하는 것이 일반적 +* 셀 내부 구조는 이 절의 범위 밖 (후속 문서에서 다룰 수 있음) + + 배포 방식 비교 ==============