@startuml

frame "Prometheus" {
    component "Prometheus" as prom
}

frame "NFVO" {
    component "NFVO" as nfvo
}

frame "tacker" {
    component "tacker-server" {
        component "VnfpmControllerV2" as pm_ctl
        component "PrometheusPlugin" as plugin
        component "VnflcmControllerV2" as lcm_ctl
    }
    component "tacker-conductor" {
        component "VnfPm\nDriverV2" as pm_driver
        component "Kubernetes\ninfra-driver" as infra
    }
}

node "Kubernetes Cluster\n(Master)" as k8s_m
cloud "Hardware Resources" as hw {
    node "Kubernetes Cluster\n(Worker)" as k8s_w {
        node "Pod" as ins1
        node "Pod" as ins2
        node "Pod" as ins3
    }
}

'# Relationships
nfvo --> pm_ctl: 1. Create PM job
pm_ctl --> plugin
plugin --> prom: 2. Set PM job
ins1 --> prom: 3. Trigger event
ins2 --> prom
prom --> plugin: 4. POST event
plugin --> pm_driver: 5. Convert event to report
pm_driver --> nfvo: 6. Send report notification
nfvo --> pm_ctl: 7. Get PM report
nfvo --> lcm_ctl: 8. Scale
lcm_ctl --> infra
infra --> k8s_m: 9. Call Kubernetes API
k8s_m --> ins3: 10. Change the number of Pods

@enduml
