https://github.com/dcasati/kubernetes-PlantUML
Kubernetes diagrams using VS Code
https://github.com/dcasati/kubernetes-PlantUML
architecture diagrams graphviz kubernetes-plantuml plantuml-files
Last synced: 27 days ago
JSON representation
Kubernetes diagrams using VS Code
- Host: GitHub
- URL: https://github.com/dcasati/kubernetes-PlantUML
- Owner: dcasati
- License: mit
- Created: 2020-04-18T02:00:30.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2021-09-10T08:16:39.000Z (over 3 years ago)
- Last Synced: 2024-11-04T22:36:45.746Z (6 months ago)
- Topics: architecture, diagrams, graphviz, kubernetes-plantuml, plantuml-files
- Homepage:
- Size: 6.28 MB
- Stars: 246
- Watchers: 12
- Forks: 46
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ccamel - dcasati/kubernetes-PlantUML - Kubernetes diagrams using VS Code (Misc)
- awesome-kubernetes-architecture-diagrams - https://github.com/dcasati/kubernetes-PlantUML
- awesome-kubernetes-architecture-diagrams - https://github.com/dcasati/kubernetes-PlantUML
README
# Kubernetes-PlantUML
These are the PlantUML sprites, macros and stereotypes for creating PlantUML diagrams with the Kubernetes components.
The official Kubernetes Icons Set (where this work is based) can be found [here](https://github.com/kubernetes/community/tree/master/icons)This repo is heavily influenced by the awesome work from Ricardo Niepel on [Azure-PlantUML](https://github.com/RicardoNiepel/Azure-PlantUML)

**Table of Contents**
- [Kubernetes-PlantUML](#kubernetes-plantuml)
- [Getting Started](#getting-started)
- [Examples](#examples)
- [Using kubernetes-PlantUML with other PlantUML files](#using-kubernetes-plantuml-with-other-plantuml-files)
- [List of Supported Symbols](#list-of-supported-symbols)
- [Contributing](#contributing)
- [Reference](#reference)## Getting Started
TL;DR - If you're familiar with PlantUML this is what you need:
```vim
' Kubernetes
!define KubernetesPuml https://raw.githubusercontent.com/dcasati/kubernetes-PlantUML/master/dist' global definition
!includeurl KubernetesPuml/kubernetes_Common.puml
!includeurl KubernetesPuml/kubernetes_Context.puml
!includeurl KubernetesPuml/kubernetes_Simplified.puml' k8s specific components
!includeurl KubernetesPuml/OSS/KubernetesPod.puml
!includeurl KubernetesPuml/OSS/KubernetesPsp.puml
!includeurl KubernetesPuml/OSS/KubernetesPv.puml
!includeurl KubernetesPuml/OSS/KubernetesPvc.puml[...]
```
If you're starting with PlantUML, here's what you need:
1. VS Code with the PlantUML extension 
1. [Graphviz](https://graphviz.gitlab.io)
1. Copy one of the examples from: https://github.com/dcasati/kubernetes-PlantUML/tree/master/samplesI also have an introduction to PlantUML [here](https://github.com/dcasati/better-diagrams)
## Examples
A basic `hello world` example could look like this:

This picture was rendered with the following code:
```vim
@startuml kubernetesfooter Kubernetes Plant-UML
scale max 1024 widthskinparam nodesep 10
skinparam ranksep 10' Kubernetes
!define KubernetesPuml https://raw.githubusercontent.com/dcasati/kubernetes-PlantUML/master/dist!includeurl KubernetesPuml/kubernetes_Common.puml
!includeurl KubernetesPuml/kubernetes_Context.puml
!includeurl KubernetesPuml/kubernetes_Simplified.puml!includeurl KubernetesPuml/OSS/KubernetesSvc.puml
!includeurl KubernetesPuml/OSS/KubernetesPod.pumlactor "User" as userAlias
left to right direction' Kubernetes Components
Cluster_Boundary(cluster, "Kubernetes Cluster") {
Namespace_Boundary(ns, "Web") {
KubernetesSvc(svc, "service", "")
KubernetesPod(pod1, "web-pod1", "")
KubernetesPod(pod2, "web-pod2", "")
}
}Rel(userAlias,svc,"get HTTP/1.1 index.html", "1")
Rel(svc,pod1,"load Balances to Pods", "2")
Rel(svc,pod2,"load Balances to Pods", "2")
Rel_U(pod1, svc, "serves content", "3")
Rel(svc, userAlias, "return content to", "4")
@enduml
```A more complete example would look like this picture:

and the accompaining code:
```vim
@startuml kubernetesfooter Kubernetes Plant-UML
scale max 1024 widthskinparam nodesep 10
skinparam ranksep 10' Kubernetes
!define KubernetesPuml https://raw.githubusercontent.com/dcasati/kubernetes-PlantUML/master/dist!includeurl KubernetesPuml/kubernetes_Common.puml
!includeurl KubernetesPuml/kubernetes_Context.puml
!includeurl KubernetesPuml/kubernetes_Simplified.puml!includeurl KubernetesPuml/OSS/KubernetesSvc.puml
!includeurl KubernetesPuml/OSS/KubernetesIng.puml
!includeurl KubernetesPuml/OSS/KubernetesPod.puml
!includeurl KubernetesPuml/OSS/KubernetesRs.puml
!includeurl KubernetesPuml/OSS/KubernetesDeploy.puml
!includeurl KubernetesPuml/OSS/KubernetesHpa.pumlactor "User" as userAlias
left to right direction' Kubernetes Components
Cluster_Boundary(cluster, "Kubernetes Cluster") {
Namespace_Boundary(ns, "Back End") {
KubernetesIng(ingress, "your.domain.com", "")
KubernetesSvc(svc, "service", "")
KubernetesPod(pod1, "pod1", "")
KubernetesPod(pod2, "pod2", "")
KubernetesPod(pod3, "pod3", "")KubernetesRs(rs,"","")
KubernetesDeploy(deploy,"deployment","")
KubernetesHpa(hpa, "HPA", "")
}
}Rel(userAlias,ingress," ")
Rel(ingress,svc," ")Rel(svc,pod1," ")
Rel(svc,pod2," ")
Rel(svc,pod3," ")Rel_U(rs,pod1," ")
Rel_U(rs,pod2," ")
Rel_U(rs,pod3," ")Rel_U(deploy,rs, " ")
Rel_U(hpa,deploy, " ")@enduml
```## Using kubernetes-PlantUML with other PlantUML files
You can certainly mix and match the stencils from kubernetes-PlantUML with other PlantUML files. For instance,
here is an example of using it with the Azure-PlantUML files to ilustrate this reference architecture 
The equivalent of that in PlantUML would look like this:

```vim
@startuml kubernetesfooter Kubernetes Plant-UML
scale max 1024 widthskinparam nodesep 10
skinparam ranksep 10' Azure
!define AzurePuml https://raw.githubusercontent.com/RicardoNiepel/Azure-PlantUML/release/2-1/dist!includeurl AzurePuml/AzureCommon.puml
!includeurl AzurePuml/AzureSimplified.puml!includeurl AzurePuml/Containers/AzureContainerRegistry.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' Kubernetes
!define KubernetesPuml https://raw.githubusercontent.com/dcasati/kubernetes-PlantUML/master/dist!includeurl KubernetesPuml/kubernetes_Common.puml
!includeurl KubernetesPuml/kubernetes_Context.puml
!includeurl KubernetesPuml/kubernetes_Simplified.puml!includeurl KubernetesPuml/OSS/KubernetesApi.puml
!includeurl KubernetesPuml/OSS/KubernetesIng.puml
!includeurl KubernetesPuml/OSS/KubernetesPod.pumlactor "DevOps" as devopsAlias
collections "Client Apps" as clientalias
collections "Helm Charts" as helmaliasleft 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, "\nExternal\ndata stores", "Canada Central")
AzurePipelines(ado, "CI/CD\nAzure Pipelines", "Global")' Kubernetes Components
Cluster_Boundary(cluster, "Kubernetes Cluster") {
KubernetesApi(KubernetesApi, "Kubernetes API", "")Namespace_Boundary(nsFrontEnd, "Front End") {
KubernetesIng(ingress, "API Gateway", "")
}Namespace_Boundary(nsBackEnd, "Back End") {
KubernetesPod(KubernetesBE1, "", "")
KubernetesPod(KubernetesBE2, "", "")
KubernetesPod(KubernetesBE3, "", "")
}Namespace_Boundary(nsUtil, "Utiliy Services") {
KubernetesPod(KubernetesUtil1, "", "")
KubernetesPod(KubernetesUtil2, "","")
}
}Rel(devopsAlias, aad, "AUTH")
Rel(helmalias, KubernetesApi, "helm upgrade")Rel(aad, keyvault, " ")
Rel(KubernetesApi, aad, "RBAC", "ASYNC")Rel(clientalias, alb, "HTTP", "ASYNC")
Rel(alb, ingress, "HTTP", "ASYNC")Rel(ingress, KubernetesBE1, " ")
Rel(KubernetesBE1, KubernetesBE2, " ")
Rel(KubernetesBE1, KubernetesBE3, " ")Rel(KubernetesBE2, sql, " ")
Rel(KubernetesBE3, keyvault, "Pod Identity")
Rel(KubernetesBE3, cosmos, " ")Rel(ado, acr, "docker push")
Rel_U(KubernetesApi, acr, "docker pull")
@enduml
```## List of Supported Symbols
Category | Macro (Name) |Mono| Url
--- | --- | :--- | :---
**OSS** | | | | **OSS/all.puml**
OSS | KubernetesCronjob (Kubernetes Cronjob) |.png?raw=true) | OSS/KubernetesCronjob.puml
OSS | KubernetesGroup (Kubernetes Group) |.png?raw=true) | OSS/KubernetesGroup.puml
OSS | KubernetesPsp (Kubernetes Psp) |.png?raw=true) | OSS/KubernetesPsp.puml
OSS | KubernetesRole (Kubernetes Role) |.png?raw=true) | OSS/KubernetesRole.puml
OSS | KubernetesApi (Kubernetes Api) |.png?raw=true) | OSS/KubernetesApi.puml
OSS | KubernetesJob (Kubernetes Job) |.png?raw=true) | OSS/KubernetesJob.puml
OSS | KubernetesCm (Kubernetes Cm) |.png?raw=true) | OSS/KubernetesCm.puml
OSS | KubernetesMaster (Kubernetes Master) |.png?raw=true) | OSS/KubernetesMaster.puml
OSS | KubernetesKproxy (Kubernetes Kproxy) |.png?raw=true) | OSS/KubernetesKproxy.puml
OSS | KubernetesCrd (Kubernetes Crd) |.png?raw=true) | OSS/KubernetesCrd.puml
OSS | KubernetesDs (Kubernetes Ds) |.png?raw=true) | OSS/KubernetesDs.puml
OSS | KubernetesSc (Kubernetes Sc) |.png?raw=true) | OSS/KubernetesSc.puml
OSS | KubernetesCrb (Kubernetes Crb) |.png?raw=true) | OSS/KubernetesCrb.puml
OSS | KubernetesSched (Kubernetes Sched) |.png?raw=true) | OSS/KubernetesSched.puml
OSS | KubernetesLimits (Kubernetes Limits) |.png?raw=true) | OSS/KubernetesLimits.puml
OSS | KubernetesQuota (Kubernetes Quota) |.png?raw=true) | OSS/KubernetesQuota.puml
OSS | KubernetesVol (Kubernetes Vol) |.png?raw=true) | OSS/KubernetesVol.puml
OSS | KubernetesSa (Kubernetes Sa)|.png?raw=true) | OSS/KubernetesSa.puml
OSS | KubernetesKubelet (Kubernetes Kubelet) |.png?raw=true) | OSS/KubernetesKubelet.puml
OSS | KubernetesPvc (Kubernetes Pvc) |.png?raw=true) | OSS/KubernetesPvc.puml
OSS | KubernetesCcm (Kubernetes Ccm) |.png?raw=true) | OSS/KubernetesCcm.puml
OSS | KubernetesSts (Kubernetes Sts) |.png?raw=true) | OSS/KubernetesSts.puml
OSS | KubernetesNetpol (Kubernetes Netpol) |.png?raw=true) | OSS/KubernetesNetpol.puml
OSS | KubernetesCrole (Kubernetes Crole) |.png?raw=true) | OSS/KubernetesCrole.puml
OSS | KubernetesRs (Kubernetes Rs) |.png?raw=true) | OSS/KubernetesRs.puml
OSS | KubernetesNode (Kubernetes Node) |.png?raw=true) | OSS/KubernetesNode.puml
OSS | KubernetesSecret (Kubernetes Secret) |.png?raw=true) | OSS/KubernetesSecret.puml
OSS | KubernetesNs (Kubernetes Ns) |.png?raw=true) | OSS/KubernetesNs.puml
OSS | KubernetesDeploy (Kubernetes Deploy) |.png?raw=true) | OSS/KubernetesDeploy.puml
OSS | KubernetesUser (Kubernetes User) |.png?raw=true) | OSS/KubernetesUser.puml
OSS | KubernetesPv (Kubernetes Pv) |.png?raw=true) | OSS/KubernetesPv.puml
OSS | KubernetesEp (Kubernetes Ep) |.png?raw=true) | OSS/KubernetesEp.puml
OSS | KubernetesSvc (Kubernetes Svc) |.png?raw=true) | OSS/KubernetesSvc.puml
OSS | KubernetesRb (Kubernetes Rb) |.png?raw=true) | OSS/KubernetesRb.puml
OSS | KubernetesEtcd (Kubernetes Etcd)|.png?raw=true) | OSS/KubernetesEtcd.puml
OSS | KubernetesIng (Kubernetes Ing) |.png?raw=true) | OSS/KubernetesIng.puml
OSS | KubernetesHpa (Kubernetes Hpa) |.png?raw=true) | OSS/KubernetesHpa.puml## Contributing
I'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
and as such this should belong to the Kubernetes community. Feel free to fork and to submit PRs.## Reference
None of the work here would be possible without the foundation from Ricardo Niepel, PlantUML and the C4 Model* Ricardo Niepel - [Azure-PlantUML](https://github.com/RicardoNiepel/Azure-PlantUML)
* C4 Model - [https://c4model.com](https://c4model.com/)