{"id":13567284,"url":"https://github.com/dcasati/kubernetes-PlantUML","last_synced_at":"2025-04-04T01:31:41.294Z","repository":{"id":47168309,"uuid":"256649785","full_name":"dcasati/kubernetes-PlantUML","owner":"dcasati","description":"Kubernetes diagrams using VS Code","archived":false,"fork":false,"pushed_at":"2021-09-10T08:16:39.000Z","size":6590,"stargazers_count":246,"open_issues_count":6,"forks_count":46,"subscribers_count":12,"default_branch":"master","last_synced_at":"2024-11-04T22:36:45.746Z","etag":null,"topics":["architecture","diagrams","graphviz","kubernetes-plantuml","plantuml-files"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dcasati.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-04-18T02:00:30.000Z","updated_at":"2024-11-04T21:06:51.000Z","dependencies_parsed_at":"2022-09-24T04:43:27.536Z","dependency_job_id":null,"html_url":"https://github.com/dcasati/kubernetes-PlantUML","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcasati%2Fkubernetes-PlantUML","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcasati%2Fkubernetes-PlantUML/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcasati%2Fkubernetes-PlantUML/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcasati%2Fkubernetes-PlantUML/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dcasati","download_url":"https://codeload.github.com/dcasati/kubernetes-PlantUML/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247107816,"owners_count":20884793,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["architecture","diagrams","graphviz","kubernetes-plantuml","plantuml-files"],"created_at":"2024-08-01T13:02:27.601Z","updated_at":"2025-04-04T01:31:36.278Z","avatar_url":"https://github.com/dcasati.png","language":null,"funding_links":[],"categories":["Diagrams as Code","Misc"],"sub_categories":[],"readme":"# Kubernetes-PlantUML\n\nThese are the PlantUML sprites, macros and stereotypes for creating PlantUML diagrams with the Kubernetes components.\nThe official Kubernetes Icons Set (where this work is based) can be found [here](https://github.com/kubernetes/community/tree/master/icons)\n\nThis repo is heavily influenced by the awesome work from Ricardo Niepel on [Azure-PlantUML](https://github.com/RicardoNiepel/Azure-PlantUML)\n\n![vscode](media/vscode.gif)\n\n**Table of Contents**\n- [Kubernetes-PlantUML](#kubernetes-plantuml)\n  - [Getting Started](#getting-started)\n  - [Examples](#examples)\n  - [Using kubernetes-PlantUML with other PlantUML files](#using-kubernetes-plantuml-with-other-plantuml-files)\n  - [List of Supported Symbols](#list-of-supported-symbols)\n  - [Contributing](#contributing)\n  - [Reference](#reference)\n\n## Getting Started\n\nTL;DR - If you're familiar with PlantUML this is what you need:\n\n```vim\n' Kubernetes\n!define KubernetesPuml https://raw.githubusercontent.com/dcasati/kubernetes-PlantUML/master/dist\n\n' global definition\n!includeurl KubernetesPuml/kubernetes_Common.puml\n!includeurl KubernetesPuml/kubernetes_Context.puml\n!includeurl KubernetesPuml/kubernetes_Simplified.puml\n\n' k8s specific components\n!includeurl KubernetesPuml/OSS/KubernetesPod.puml\n!includeurl KubernetesPuml/OSS/KubernetesPsp.puml\n!includeurl KubernetesPuml/OSS/KubernetesPv.puml\n!includeurl KubernetesPuml/OSS/KubernetesPvc.puml\n\n[...]\n\n```\n\nIf you're starting with PlantUML, here's what you need:\n  1. VS Code with the PlantUML extension ![PlantUML](https://github.com/dcasati/better-diagrams/blob/master/images/plantUML.png)\n  1. [Graphviz](https://graphviz.gitlab.io)\n  1. Copy one of the examples from: https://github.com/dcasati/kubernetes-PlantUML/tree/master/samples\n\nI also have an introduction to PlantUML [here](https://github.com/dcasati/better-diagrams)\n\n## Examples\n\nA basic `hello world` example could look like this:\n\n![kubernetes](media/hello-world.png)\n\nThis picture was rendered with the following code:\n\n```vim\n@startuml kubernetes\n\nfooter Kubernetes Plant-UML\nscale max 1024 width\n\nskinparam nodesep 10\nskinparam ranksep 10\n\n' Kubernetes\n!define KubernetesPuml https://raw.githubusercontent.com/dcasati/kubernetes-PlantUML/master/dist\n\n!includeurl KubernetesPuml/kubernetes_Common.puml\n!includeurl KubernetesPuml/kubernetes_Context.puml\n!includeurl KubernetesPuml/kubernetes_Simplified.puml\n\n!includeurl KubernetesPuml/OSS/KubernetesSvc.puml\n!includeurl KubernetesPuml/OSS/KubernetesPod.puml\n\nactor \"User\" as userAlias\nleft to right direction\n\n' Kubernetes Components\nCluster_Boundary(cluster, \"Kubernetes Cluster\") {\n    Namespace_Boundary(ns, \"Web\") {\n        KubernetesSvc(svc, \"service\", \"\")\n        KubernetesPod(pod1, \"web-pod1\", \"\")\n        KubernetesPod(pod2, \"web-pod2\", \"\")\n    }\n}\n\nRel(userAlias,svc,\"get HTTP/1.1 index.html\", \"1\")\nRel(svc,pod1,\"load Balances to Pods\", \"2\")\nRel(svc,pod2,\"load Balances to Pods\", \"2\")\nRel_U(pod1, svc, \"serves content\", \"3\")\nRel(svc, userAlias, \"return content to\", \"4\")\n@enduml\n```\n\nA more complete example would look like this picture:\n\n![more complete example](media/kubernetes.png)\n\nand the accompaining code:\n\n```vim\n@startuml kubernetes\n\nfooter Kubernetes Plant-UML\nscale max 1024 width\n\nskinparam nodesep 10\nskinparam ranksep 10\n\n' Kubernetes\n!define KubernetesPuml https://raw.githubusercontent.com/dcasati/kubernetes-PlantUML/master/dist\n\n!includeurl KubernetesPuml/kubernetes_Common.puml\n!includeurl KubernetesPuml/kubernetes_Context.puml\n!includeurl KubernetesPuml/kubernetes_Simplified.puml\n\n!includeurl KubernetesPuml/OSS/KubernetesSvc.puml\n!includeurl KubernetesPuml/OSS/KubernetesIng.puml\n!includeurl KubernetesPuml/OSS/KubernetesPod.puml\n!includeurl KubernetesPuml/OSS/KubernetesRs.puml\n!includeurl KubernetesPuml/OSS/KubernetesDeploy.puml\n!includeurl KubernetesPuml/OSS/KubernetesHpa.puml\n\nactor \"User\" as userAlias\nleft to right direction\n\n' Kubernetes Components\nCluster_Boundary(cluster, \"Kubernetes Cluster\") {\n    Namespace_Boundary(ns, \"Back End\") {\n        KubernetesIng(ingress, \"your.domain.com\", \"\")\n        KubernetesSvc(svc, \"service\", \"\")\n        KubernetesPod(pod1, \"pod1\", \"\")\n        KubernetesPod(pod2, \"pod2\", \"\")\n        KubernetesPod(pod3, \"pod3\", \"\")\n\n        KubernetesRs(rs,\"\",\"\")\n        KubernetesDeploy(deploy,\"deployment\",\"\")\n        KubernetesHpa(hpa, \"HPA\", \"\")\n    }\n}\n\nRel(userAlias,ingress,\" \")\nRel(ingress,svc,\" \")\n\nRel(svc,pod1,\" \")\nRel(svc,pod2,\" \")\nRel(svc,pod3,\" \")\n\nRel_U(rs,pod1,\" \")\nRel_U(rs,pod2,\" \")\nRel_U(rs,pod3,\" \")\n\nRel_U(deploy,rs, \" \")\nRel_U(hpa,deploy, \" \")\n\n@enduml\n```\n\n## Using kubernetes-PlantUML with other PlantUML files\n\nYou can certainly mix and match the stencils from kubernetes-PlantUML with other PlantUML files. For instance, \nhere is an example of using it with the Azure-PlantUML files to ilustrate this reference architecture ![microservices](https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/microservices/aks)\n\n![microsoervices-diagram](https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/microservices/_images/aks.png)\n\nThe equivalent of that in PlantUML would look like this:\n\n![microservices-plantuml](media/microservices-azure-aks.png)\n\n```vim\n@startuml kubernetes\n\nfooter Kubernetes Plant-UML\nscale max 1024 width\n\nskinparam nodesep 10\nskinparam ranksep 10\n\n' Azure\n!define AzurePuml https://raw.githubusercontent.com/RicardoNiepel/Azure-PlantUML/release/2-1/dist\n\n!includeurl AzurePuml/AzureCommon.puml\n!includeurl AzurePuml/AzureSimplified.puml\n\n!includeurl AzurePuml/Containers/AzureContainerRegistry.puml\n!includeurl AzurePuml/Databases/AzureCosmosDb.puml\n!includeurl AzurePuml/Databases/AzureSqlDatabase.puml\n!includeurl AzurePuml/DevOps/AzurePipelines.puml\n!includeurl AzurePuml/Identity/AzureActiveDirectory.puml\n!includeurl AzurePuml/Networking/AzureLoadBalancer.puml\n!includeurl AzurePuml/Security/AzureKeyVault.puml\n\n' Kubernetes\n!define KubernetesPuml https://raw.githubusercontent.com/dcasati/kubernetes-PlantUML/master/dist\n\n!includeurl KubernetesPuml/kubernetes_Common.puml\n!includeurl KubernetesPuml/kubernetes_Context.puml\n!includeurl KubernetesPuml/kubernetes_Simplified.puml\n\n!includeurl KubernetesPuml/OSS/KubernetesApi.puml\n!includeurl KubernetesPuml/OSS/KubernetesIng.puml\n!includeurl KubernetesPuml/OSS/KubernetesPod.puml\n\nactor \"DevOps\" as devopsAlias\ncollections \"Client Apps\" as clientalias\ncollections \"Helm Charts\" as helmalias\n\nleft to right direction\n\n' Azure Components\nAzureActiveDirectory(aad, \"\\nAzure\\nActive Directory\", \"Global\")\nAzureContainerRegistry(acr, \"ACR\", \"Canada Central\")\nAzureCosmosDb(cosmos, \"\\nCosmos DB\", \"Global\")\nAzureKeyVault(keyvault, \"\\nAzure\\nKey Vault\", \"Global\")\nAzureLoadBalancer(alb, \"\\nLoad\\nBalancer\", \"Canada Central\")\nAzureSqlDatabase(sql, \"\\nExternal\\ndata stores\", \"Canada Central\")\nAzurePipelines(ado, \"CI/CD\\nAzure Pipelines\", \"Global\")\n\n' Kubernetes Components\nCluster_Boundary(cluster, \"Kubernetes Cluster\") {\n    KubernetesApi(KubernetesApi, \"Kubernetes API\", \"\")\n\n    Namespace_Boundary(nsFrontEnd, \"Front End\") {\n        KubernetesIng(ingress, \"API Gateway\", \"\")\n    }\n\n    Namespace_Boundary(nsBackEnd, \"Back End\") {\n        KubernetesPod(KubernetesBE1, \"\", \"\")\n        KubernetesPod(KubernetesBE2, \"\", \"\")\n        KubernetesPod(KubernetesBE3, \"\", \"\")\n    }\n\n    Namespace_Boundary(nsUtil, \"Utiliy Services\") {\n        KubernetesPod(KubernetesUtil1, \"\", \"\")\n        KubernetesPod(KubernetesUtil2, \"\",\"\")\n    }\n}\n\nRel(devopsAlias, aad, \"AUTH\")\nRel(helmalias, KubernetesApi, \"helm upgrade\")\n\nRel(aad, keyvault, \" \")\nRel(KubernetesApi, aad, \"RBAC\", \"ASYNC\")\n\nRel(clientalias, alb, \"HTTP\", \"ASYNC\")\nRel(alb, ingress, \"HTTP\", \"ASYNC\")\n\nRel(ingress, KubernetesBE1, \" \")\nRel(KubernetesBE1, KubernetesBE2, \" \")\nRel(KubernetesBE1, KubernetesBE3, \" \")\n\nRel(KubernetesBE2, sql, \" \")\nRel(KubernetesBE3, keyvault, \"Pod Identity\")\nRel(KubernetesBE3, cosmos, \" \")\n\nRel(ado, acr, \"docker push\")\nRel_U(KubernetesApi, acr, \"docker pull\")\n@enduml\n```\n\n## List of Supported Symbols\nCategory | Macro (Name) | \u003cpre\u003eMono \u003c/pre\u003e | Url\n  ---    |  ---  | :--- | :---\n**OSS** | | | | **OSS/all.puml**\nOSS | KubernetesCronjob \u003c/br\u003e (Kubernetes Cronjob) |![KubernetesCronjob](dist/OSS/KubernetesCronjob(m).png?raw=true) | OSS/KubernetesCronjob.puml\nOSS | KubernetesGroup \u003c/br\u003e (Kubernetes Group) |![KubernetesGroup](dist/OSS/KubernetesGroup(m).png?raw=true) | OSS/KubernetesGroup.puml\nOSS | KubernetesPsp \u003c/br\u003e (Kubernetes Psp) |![KubernetesPsp](dist/OSS/KubernetesPsp(m).png?raw=true) | OSS/KubernetesPsp.puml\nOSS | KubernetesRole \u003c/br\u003e (Kubernetes Role) |![KubernetesRole](dist/OSS/KubernetesRole(m).png?raw=true) | OSS/KubernetesRole.puml\nOSS | KubernetesApi \u003c/br\u003e (Kubernetes Api) |![KubernetesApi](dist/OSS/KubernetesApi(m).png?raw=true) | OSS/KubernetesApi.puml\nOSS | KubernetesJob \u003c/br\u003e (Kubernetes Job) |![KubernetesJob](dist/OSS/KubernetesJob(m).png?raw=true) | OSS/KubernetesJob.puml\nOSS | KubernetesCm \u003c/br\u003e (Kubernetes Cm) |![KubernetesCm](dist/OSS/KubernetesCm(m).png?raw=true) | OSS/KubernetesCm.puml\nOSS | KubernetesMaster \u003c/br\u003e (Kubernetes Master) |![KubernetesMaster](dist/OSS/KubernetesMaster(m).png?raw=true) | OSS/KubernetesMaster.puml\nOSS | KubernetesKproxy \u003c/br\u003e (Kubernetes Kproxy) |![KubernetesKproxy](dist/OSS/KubernetesKproxy(m).png?raw=true) | OSS/KubernetesKproxy.puml\nOSS | KubernetesCrd \u003c/br\u003e (Kubernetes Crd) |![KubernetesCrd](dist/OSS/KubernetesCrd(m).png?raw=true) | OSS/KubernetesCrd.puml\nOSS | KubernetesDs \u003c/br\u003e (Kubernetes Ds) |![KubernetesDs](dist/OSS/KubernetesDs(m).png?raw=true) | OSS/KubernetesDs.puml\nOSS | KubernetesSc \u003c/br\u003e (Kubernetes Sc) |![KubernetesSc](dist/OSS/KubernetesSc(m).png?raw=true) | OSS/KubernetesSc.puml\nOSS | KubernetesCrb \u003c/br\u003e (Kubernetes Crb) |![KubernetesCrb](dist/OSS/KubernetesCrb(m).png?raw=true) | OSS/KubernetesCrb.puml\nOSS | KubernetesSched \u003c/br\u003e (Kubernetes Sched) |![KubernetesSched](dist/OSS/KubernetesSched(m).png?raw=true) | OSS/KubernetesSched.puml\nOSS | KubernetesLimits \u003c/br\u003e (Kubernetes Limits) |![KubernetesLimits](dist/OSS/KubernetesLimits(m).png?raw=true) | OSS/KubernetesLimits.puml\nOSS | KubernetesQuota \u003c/br\u003e (Kubernetes Quota) |![KubernetesQuota](dist/OSS/KubernetesQuota(m).png?raw=true) | OSS/KubernetesQuota.puml\nOSS | KubernetesVol \u003c/br\u003e (Kubernetes Vol) |![KubernetesVol](dist/OSS/KubernetesVol(m).png?raw=true) | OSS/KubernetesVol.puml\nOSS | KubernetesSa \u003c/br\u003e (Kubernetes Sa)|![KubernetesSa](dist/OSS/KubernetesSa(m).png?raw=true) | OSS/KubernetesSa.puml\nOSS | KubernetesKubelet \u003c/br\u003e (Kubernetes Kubelet) |![KubernetesKubelet](dist/OSS/KubernetesKubelet(m).png?raw=true) | OSS/KubernetesKubelet.puml\nOSS | KubernetesPvc \u003c/br\u003e (Kubernetes Pvc) |![KubernetesPvc](dist/OSS/KubernetesPvc(m).png?raw=true) | OSS/KubernetesPvc.puml\nOSS | KubernetesCcm \u003c/br\u003e (Kubernetes Ccm) |![KubernetesCcm](dist/OSS/KubernetesCcm(m).png?raw=true) | OSS/KubernetesCcm.puml\nOSS | KubernetesSts \u003c/br\u003e (Kubernetes Sts) |![KubernetesSts](dist/OSS/KubernetesSts(m).png?raw=true) | OSS/KubernetesSts.puml\nOSS | KubernetesNetpol \u003c/br\u003e (Kubernetes Netpol) |![KubernetesNetpol](dist/OSS/KubernetesNetpol(m).png?raw=true) | OSS/KubernetesNetpol.puml\nOSS | KubernetesCrole \u003c/br\u003e (Kubernetes Crole) |![KubernetesCrole](dist/OSS/KubernetesCrole(m).png?raw=true) | OSS/KubernetesCrole.puml\nOSS | KubernetesRs \u003c/br\u003e (Kubernetes Rs) |![KubernetesRs](dist/OSS/KubernetesRs(m).png?raw=true) | OSS/KubernetesRs.puml\nOSS | KubernetesNode \u003c/br\u003e (Kubernetes Node) |![KubernetesNode](dist/OSS/KubernetesNode(m).png?raw=true) | OSS/KubernetesNode.puml\nOSS | KubernetesSecret \u003c/br\u003e (Kubernetes Secret) |![KubernetesSecret](dist/OSS/KubernetesSecret(m).png?raw=true) | OSS/KubernetesSecret.puml\nOSS | KubernetesNs \u003c/br\u003e (Kubernetes Ns) |![KubernetesNs](dist/OSS/KubernetesNs(m).png?raw=true) | OSS/KubernetesNs.puml\nOSS | KubernetesDeploy \u003c/br\u003e (Kubernetes Deploy) |![KubernetesDeploy](dist/OSS/KubernetesDeploy(m).png?raw=true) | OSS/KubernetesDeploy.puml\nOSS | KubernetesUser \u003c/br\u003e (Kubernetes User) |![KubernetesUser](dist/OSS/KubernetesUser(m).png?raw=true) | OSS/KubernetesUser.puml\nOSS | KubernetesPv \u003c/br\u003e (Kubernetes Pv) |![KubernetesPv](dist/OSS/KubernetesPv(m).png?raw=true) | OSS/KubernetesPv.puml\nOSS | KubernetesEp \u003c/br\u003e (Kubernetes Ep) |![KubernetesEp](dist/OSS/KubernetesEp(m).png?raw=true) | OSS/KubernetesEp.puml\nOSS | KubernetesSvc \u003c/br\u003e (Kubernetes Svc) |![KubernetesSvc](dist/OSS/KubernetesSvc(m).png?raw=true) | OSS/KubernetesSvc.puml\nOSS | KubernetesRb \u003c/br\u003e (Kubernetes Rb) |![KubernetesRb](dist/OSS/KubernetesRb(m).png?raw=true) | OSS/KubernetesRb.puml\nOSS | KubernetesEtcd \u003c/br\u003e (Kubernetes Etcd)|![KubernetesEtcd](dist/OSS/KubernetesEtcd(m).png?raw=true) | OSS/KubernetesEtcd.puml\nOSS | KubernetesIng \u003c/br\u003e (Kubernetes Ing) |![KubernetesIng](dist/OSS/KubernetesIng(m).png?raw=true) | OSS/KubernetesIng.puml\nOSS | KubernetesHpa \u003c/br\u003e (Kubernetes Hpa) |![KubernetesHpa](dist/OSS/KubernetesHpa(m).png?raw=true) | OSS/KubernetesHpa.puml\n\n## Contributing\nI've built this on a necessity that I have for making better diagrams when Kubernetes is part of the solution. This is based on a community effort \nand as such this should belong to the Kubernetes community. Feel free to fork and to submit PRs.\n\n## Reference\nNone of the work here would be possible without the foundation from Ricardo Niepel, PlantUML and the C4 Model\n\n* Ricardo Niepel - [Azure-PlantUML](https://github.com/RicardoNiepel/Azure-PlantUML)\n* C4 Model - [https://c4model.com](https://c4model.com/)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdcasati%2Fkubernetes-PlantUML","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdcasati%2Fkubernetes-PlantUML","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdcasati%2Fkubernetes-PlantUML/lists"}