Code Monkey home page Code Monkey logo

kubernetes-plantuml's Introduction

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

This repo is heavily influenced by the awesome work from Ricardo Niepel on Azure-PlantUML

vscode

Table of Contents

Getting Started

TL;DR - If you're familiar with PlantUML this is what you need:

' 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 PlantUML
  2. Graphviz
  3. Copy one of the examples from: https://github.com/dcasati/kubernetes-PlantUML/tree/master/samples

I also have an introduction to PlantUML here

Examples

A basic hello world example could look like this:

kubernetes

This picture was rendered with the following code:

@startuml kubernetes

footer Kubernetes Plant-UML
scale max 1024 width

skinparam 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.puml

actor "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:

more complete example

and the accompaining code:

@startuml kubernetes

footer Kubernetes Plant-UML
scale max 1024 width

skinparam 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.puml

actor "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 microservices

microsoervices-diagram

The equivalent of that in PlantUML would look like this:

microservices-plantuml

@startuml kubernetes

footer Kubernetes Plant-UML
scale max 1024 width

skinparam 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.puml

actor "DevOps" as devopsAlias
collections "Client Apps" as clientalias
collections "Helm Charts" as helmalias

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, "\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 KubernetesCronjob
(Kubernetes Cronjob)
KubernetesCronjob OSS/KubernetesCronjob.puml
OSS KubernetesGroup
(Kubernetes Group)
KubernetesGroup OSS/KubernetesGroup.puml
OSS KubernetesPsp
(Kubernetes Psp)
KubernetesPsp OSS/KubernetesPsp.puml
OSS KubernetesRole
(Kubernetes Role)
KubernetesRole OSS/KubernetesRole.puml
OSS KubernetesApi
(Kubernetes Api)
KubernetesApi OSS/KubernetesApi.puml
OSS KubernetesJob
(Kubernetes Job)
KubernetesJob OSS/KubernetesJob.puml
OSS KubernetesCm
(Kubernetes Cm)
KubernetesCm OSS/KubernetesCm.puml
OSS KubernetesMaster
(Kubernetes Master)
KubernetesMaster OSS/KubernetesMaster.puml
OSS KubernetesKproxy
(Kubernetes Kproxy)
KubernetesKproxy OSS/KubernetesKproxy.puml
OSS KubernetesCrd
(Kubernetes Crd)
KubernetesCrd OSS/KubernetesCrd.puml
OSS KubernetesDs
(Kubernetes Ds)
KubernetesDs OSS/KubernetesDs.puml
OSS KubernetesSc
(Kubernetes Sc)
KubernetesSc OSS/KubernetesSc.puml
OSS KubernetesCrb
(Kubernetes Crb)
KubernetesCrb OSS/KubernetesCrb.puml
OSS KubernetesSched
(Kubernetes Sched)
KubernetesSched OSS/KubernetesSched.puml
OSS KubernetesLimits
(Kubernetes Limits)
KubernetesLimits OSS/KubernetesLimits.puml
OSS KubernetesQuota
(Kubernetes Quota)
KubernetesQuota OSS/KubernetesQuota.puml
OSS KubernetesVol
(Kubernetes Vol)
KubernetesVol OSS/KubernetesVol.puml
OSS KubernetesSa
(Kubernetes Sa)
KubernetesSa OSS/KubernetesSa.puml
OSS KubernetesKubelet
(Kubernetes Kubelet)
KubernetesKubelet OSS/KubernetesKubelet.puml
OSS KubernetesPvc
(Kubernetes Pvc)
KubernetesPvc OSS/KubernetesPvc.puml
OSS KubernetesCcm
(Kubernetes Ccm)
KubernetesCcm OSS/KubernetesCcm.puml
OSS KubernetesSts
(Kubernetes Sts)
KubernetesSts OSS/KubernetesSts.puml
OSS KubernetesNetpol
(Kubernetes Netpol)
KubernetesNetpol OSS/KubernetesNetpol.puml
OSS KubernetesCrole
(Kubernetes Crole)
KubernetesCrole OSS/KubernetesCrole.puml
OSS KubernetesRs
(Kubernetes Rs)
KubernetesRs OSS/KubernetesRs.puml
OSS KubernetesNode
(Kubernetes Node)
KubernetesNode OSS/KubernetesNode.puml
OSS KubernetesSecret
(Kubernetes Secret)
KubernetesSecret OSS/KubernetesSecret.puml
OSS KubernetesNs
(Kubernetes Ns)
KubernetesNs OSS/KubernetesNs.puml
OSS KubernetesDeploy
(Kubernetes Deploy)
KubernetesDeploy OSS/KubernetesDeploy.puml
OSS KubernetesUser
(Kubernetes User)
KubernetesUser OSS/KubernetesUser.puml
OSS KubernetesPv
(Kubernetes Pv)
KubernetesPv OSS/KubernetesPv.puml
OSS KubernetesEp
(Kubernetes Ep)
KubernetesEp OSS/KubernetesEp.puml
OSS KubernetesSvc
(Kubernetes Svc)
KubernetesSvc OSS/KubernetesSvc.puml
OSS KubernetesRb
(Kubernetes Rb)
KubernetesRb OSS/KubernetesRb.puml
OSS KubernetesEtcd
(Kubernetes Etcd)
KubernetesEtcd OSS/KubernetesEtcd.puml
OSS KubernetesIng
(Kubernetes Ing)
KubernetesIng OSS/KubernetesIng.puml
OSS KubernetesHpa
(Kubernetes Hpa)
KubernetesHpa 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

kubernetes-plantuml's People

Contributors

dcasati avatar paddy-hack avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kubernetes-plantuml's Issues

Kubernetes symbol color is off

The Kubernetes symbols/icons in the PlantUML generated images look too light.

Just compare this icon

K8S Pod

with the icons in the "hello-world" example

image

I've tried redefining KUBERNETES_SYMBOL_COLOR after including kubernetes_Common.puml but that doesn't fix things. When using #000000 the icons become grayish, so there is an effect, but they don't become black as I would have expected.

BTW, the upstream icons use #326CE5 not #0072C6 as defined in dist/kubernetes_Common.puml via KUBERENETES_COLOR. FWIW, the "hello-world" uses #66abdd which is different again.

I suspect the C4 stuff is throwing a monkey wrench but haven't pursued that lead (yet?).

plantuml guide + fix for text overlap in kubernetes azure diagram

Hi Diego,
Thanks for the impressive work on kubernetes diagrams!

2 topics I'd like to discuss with you

  1. plantuml guide
    I am working with @arnaud Roques (creator/owner of plantuml) on a guide for stdlib to be released next week.
    I'd like to include one of your diagrams as it showcases the power of plantuml. i..e this page
    https://crashedmind.github.io/PlantUMLHitchhikersGuide/kubernetes/kubernetes.html

  2. the current diagram
    https://github.com/dcasati/kubernetes-PlantUML/blob/master/samples/microservices-azure-aks.puml has a text overlap when using the plantuml server.

This can be fixed by adding "skinparam linetype polyline"

thanks,
Chris

Kubernetes icons don't appear in the diagram

Hi @dcasati I was trying to get started with generating K8s plantuml diagram for sample example kuberentes.puml however kubernetes icons seems missing in the generated diagram (preview). Can you suggest if I am missing something here. Thanks!

k8s-plantuml

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.