@startuml kubernetes

footer Kubernetes Plant-UML
scale max 1024 width

skinparam nodesep 10
skinparam ranksep 20

' Azure
!define AzurePuml https://raw.githubusercontent.com/RicardoNiepel/Azure-PlantUML/release/2-1/dist

!includeurl AzurePuml/AzureCommon.puml
!includeurl AzurePuml/AzureSimplified.puml

!includeurl AzurePuml/Compute/AzureAppService.puml
!includeurl AzurePuml/Compute/AzureBatch.puml
!includeurl AzurePuml/Containers/AzureContainerInstance.puml
!includeurl AzurePuml/Containers/AzureContainerRegistry.puml
!includeurl AzurePuml/Containers/AzureKubernetesService.puml
!includeurl AzurePuml/Databases/AzureDatabaseForPostgreSQL.puml
!includeurl AzurePuml/Databases/AzureCosmosDb.puml
!includeurl AzurePuml/Databases/AzureSqlDatabase.puml
!includeurl AzurePuml/DevOps/AzurePipelines.puml
!includeurl AzurePuml/Identity/AzureActiveDirectory.puml
!includeurl AzurePuml/Networking/AzureLoadBalancer.puml
!includeurl AzurePuml/Security/AzureKeyVault.puml
!includeurl AzurePuml/Storage/AzureBlobStorage.puml
!includeurl AzurePuml/Storage/AzureStorage.puml

' Kubernetes
!includeurl https://raw.githubusercontent.com/dcasati/kubernetes-PlantUML/master/dist/kubernetes_Context.puml

!define KubernetesPuml https://raw.githubusercontent.com/dcasati/kubernetes-PlantUML/master/dist

!includeurl KubernetesPuml/OSS/KubernetesApi.puml
!includeurl KubernetesPuml/OSS/KubernetesCcm.puml
!includeurl KubernetesPuml/OSS/KubernetesCm.puml
!includeurl KubernetesPuml/OSS/KubernetesCm.puml
!includeurl KubernetesPuml/OSS/KubernetesCrb.puml
!includeurl KubernetesPuml/OSS/KubernetesCrd.puml
!includeurl KubernetesPuml/OSS/KubernetesCrole.puml
!includeurl KubernetesPuml/OSS/KubernetesCronjob.puml
!includeurl KubernetesPuml/OSS/KubernetesDeploy.puml
!includeurl KubernetesPuml/OSS/KubernetesDs.puml
!includeurl KubernetesPuml/OSS/KubernetesEp.puml
!includeurl KubernetesPuml/OSS/KubernetesEtcd.puml
!includeurl KubernetesPuml/OSS/KubernetesGroup.puml
!includeurl KubernetesPuml/OSS/KubernetesHpa.puml
!includeurl KubernetesPuml/OSS/KubernetesIng.puml
!includeurl KubernetesPuml/OSS/KubernetesJob.puml
!includeurl KubernetesPuml/OSS/KubernetesKproxy.puml
!includeurl KubernetesPuml/OSS/KubernetesKubelet.puml
!includeurl KubernetesPuml/OSS/KubernetesLimits.puml
!includeurl KubernetesPuml/OSS/KubernetesMaster.puml
!includeurl KubernetesPuml/OSS/KubernetesNetpol.puml
!includeurl KubernetesPuml/OSS/KubernetesNode.puml
!includeurl KubernetesPuml/OSS/KubernetesNs.puml
!includeurl KubernetesPuml/OSS/KubernetesPod.puml
!includeurl KubernetesPuml/OSS/KubernetesPsp.puml
!includeurl KubernetesPuml/OSS/KubernetesPv.puml
!includeurl KubernetesPuml/OSS/KubernetesPvc.puml
!includeurl KubernetesPuml/OSS/KubernetesQuota.puml
!includeurl KubernetesPuml/OSS/KubernetesRb.puml
!includeurl KubernetesPuml/OSS/KubernetesRole.puml
!includeurl KubernetesPuml/OSS/KubernetesRs.puml
!includeurl KubernetesPuml/OSS/KubernetesSa.puml
!includeurl KubernetesPuml/OSS/KubernetesSc.puml
!includeurl KubernetesPuml/OSS/KubernetesSched.puml
!includeurl KubernetesPuml/OSS/KubernetesSecret.puml
!includeurl KubernetesPuml/OSS/KubernetesSts.puml
!includeurl KubernetesPuml/OSS/KubernetesSvc.puml
!includeurl KubernetesPuml/OSS/KubernetesUser.puml
!includeurl KubernetesPuml/OSS/KubernetesVol.puml

' KubernetesApi(KubernetesApi, "e_label", "e_descr")
' KubernetesCcm(KubernetesCcm, "e_label", "e_descr")
' KubernetesCm(KubernetesCm, "e_label", "e_descr")
' KubernetesCrole(KubernetesCrole, "e_label", "e_descr")
' KubernetesCm(KubernetesCm, "e_label", "e_descr")
' KubernetesCrb(KubernetesCrb, "e_label", "e_descr")
' KubernetesCrd(KubernetesCrd, "e_label", "e_descr")
' KubernetesCronjob(KubernetesCronjob, "e_label", "e_descr")
' KubernetesDeploy(KubernetesDeploy, "e_label", "e_descr")
' KubernetesDs(KubernetesDs, "e_label", "e_descr")
' KubernetesEp(KubernetesEp, "e_label", "e_descr")
' KubernetesEtcd(KubernetesEtcd, "e_label", "e_descr")
' KubernetesGroup(KubernetesGroup, "e_label", "e_descr")
' KubernetesHpa(KubernetesHpa, "e_label", "e_descr")
' KubernetesIng(KubernetesIng, "e_label", "e_descr")
' KubernetesJob(KubernetesJob, "e_label", "e_descr")
' KubernetesKproxy(KubernetesKproxy, "e_label", "e_descr")
' KubernetesKubelet(KubernetesKubelet, "e_label", "e_descr")
' KubernetesLimits(KubernetesLimits, "e_label", "e_descr")
' KubernetesMaster(KubernetesMaster, "e_label", "e_descr")
' KubernetesNetpol(KubernetesNetpol, "e_label", "e_descr")
' KubernetesNode(KubernetesNode, "e_label", "e_descr")
' KubernetesNs(KubernetesNs, "e_label", "e_descr")
' KubernetesPsp(KubernetesPsp, "e_label", "e_descr")
' KubernetesPv(KubernetesPv, "e_label", "e_descr")
' KubernetesPvc(KubernetesPvc, "e_label", "e_descr")
' KubernetesQuota(KubernetesQuota, "e_label", "e_descr")
' KubernetesRb(KubernetesRb, "e_label", "e_descr")
' KubernetesRole(KubernetesRole, "e_label", "e_descr")
' KubernetesRs(KubernetesRs, "e_label", "e_descr")
' KubernetesSa(KubernetesSa, "e_label", "e_descr")
' KubernetesSc(KubernetesSc, "e_label", "e_descr")
' KubernetesSched(KubernetesSched, "e_label", "e_descr")
' KubernetesSecret(KubernetesSecret, "e_label", "e_descr")
' KubernetesSts(KubernetesSts, "e_label", "e_descr")
' KubernetesUser(KubernetesUser, "e_label", "e_descr")
' KubernetesVol(KubernetesVol, "e_label", "e_descr")

actor "User" as userAlias

left to right direction

' Azure Components
'AzureActiveDirectory(aad, "\nAzure\nActive Directory", "Global")
AzureContainerRegistry(acr, "ACR", "Canada Central")
'AzureCosmosDb(cosmos, "\nCosmos DB", "Global")
'AzureKeyVault(keyvault, "\nAzure\nKey Vault", "Global")
'AzureLoadBalancer(alb, "\nLoad\nBalancer", "Canada Central")
AzureSqlDatabase(sql, "\nSQL Database", "Canada Central")
'AzurePipelines(ado, "CI/CD\nAzure Pipelines", "Global")
AzureKubernetesService(vnode, "AKS virtual node", "Canada Central")
AzureContainerInstance(aci, "ACI", "Canada Central")

' Kubernetes Components
Cluster_Boundary(cluster, "AKS") {
        KubernetesPod(KubernetesNet1, ".NET", "")
        KubernetesPod(KubernetesNet2, ".NET", "")
        KubernetesPod(KubernetesNet3, ".NET", "")
    
        KubernetesPod(KubernetesNode1, "node", "")
        KubernetesPod(KubernetesNode2, "node","")
        KubernetesPod(KubernetesNode3, "node","")

        KubernetesPod(KubernetesPython1, "python","")
        KubernetesPod(KubernetesPython2, "python","")
        KubernetesPod(KubernetesPython3, "python","")
}

Rel_U(userAlias, acr, "User registers container in Azure Container Registry", "1")
Rel_D(cluster, acr, "Container images are pulled from the Azure Container Registry", "2")
Rel(cluster, vnode, "AKS virtual node, a Virtual Kubelet implementation, provisions pods inside ACI from AKS when traffic comes in spikes", "3")
Rel(vnode, aci, "ACI containers write to shared data store", "4")
Rel_D(cluster, sql, "AKS containers write to shared data store", "4")
Rel(aci, sql, "Write to DB", "5")
@enduml