Skip to content

Commit 90c2503

Browse files
erthalionsdudoladov
authored andcommitted
Add pod diagram and tex sources (zalando#472)
1 parent 3f8b760 commit 90c2503

File tree

7 files changed

+218
-2
lines changed

7 files changed

+218
-2
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,7 @@ _testmain.go
3030
.idea
3131

3232
scm-source.json
33+
34+
# diagrams
35+
*.aux
36+
*.log

README.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,16 @@ new Postgres cluster CRD was submitted:
3333

3434
![postgresql-operator](docs/diagrams/operator.png "K8S resources, created by operator")
3535

36-
There is a browser-friendly version of this documentation at
37-
[postgres-operator.readthedocs.io](https://postgres-operator.readthedocs.io)
36+
This picture is not complete without an overview of what is inside a pod, so
37+
let's zoom in:
38+
39+
![pod](docs/diagrams/pod.png "Database pod components")
40+
41+
These two diagrams should help you to understand the basics of what kind of
42+
functionality the operator provides. Below we discuss all everything in more
43+
details.
44+
45+
There is a browser-friendly version of this documentation at [postgres-operator.readthedocs.io](https://postgres-operator.readthedocs.io)
3846

3947
## Table of contents
4048

docs/diagrams/Makefile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
OBJ=$(patsubst %.tex, %.png, $(wildcard *.tex))
2+
3+
.PHONY: all
4+
5+
all: $(OBJ)
6+
7+
%.pdf: %.tex
8+
lualatex $< -shell-escape $@
9+
10+
%.png: %.pdf
11+
convert -flatten -density 300 $< -quality 90 $@

docs/diagrams/operator.png

0 Bytes
Loading

docs/diagrams/operator.tex

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
\documentclass{article}
2+
\usepackage{tikz}
3+
\usepackage[graphics,tightpage,active]{preview}
4+
\usetikzlibrary{arrows, shadows.blur, positioning, fit, calc, backgrounds}
5+
\usepackage{lscape}
6+
7+
\pagenumbering{gobble}
8+
9+
\PreviewEnvironment{tikzpicture}
10+
\PreviewEnvironment{equation}
11+
\PreviewEnvironment{equation*}
12+
\newlength{\imagewidth}
13+
\newlength{\imagescale}
14+
\pagestyle{empty}
15+
\thispagestyle{empty}
16+
17+
\begin{document}
18+
\begin{center}
19+
\begin{tikzpicture}[
20+
scale=0.5,transform shape,
21+
font=\sffamily,
22+
every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm},
23+
operator/.style={draw,solid,thick,circle,fill=red!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
24+
component/.style={draw,solid,thick,rounded corners,fill=yellow!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
25+
border/.style={draw,dashed,rounded corners,fill=gray!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
26+
pod/.style={draw,solid,thick,rounded corners,fill=blue!20, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
27+
service/.style={draw,solid,thick,rounded corners,fill=blue!20, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
28+
endpoint/.style={draw,solid,thick,rounded corners,fill=blue!20, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
29+
secret/.style={draw,solid,thick,rounded corners,fill=blue!20, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
30+
pvc/.style={draw,solid,thick,rounded corners,fill=blue!20, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
31+
label/.style={rectangle,inner sep=0,outer sep=0},
32+
to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize},
33+
every node/.style={align=center}]
34+
35+
% Position the nodes using a matrix layout
36+
37+
\matrix{
38+
\& \node[component] (crd) {CRD}; \\
39+
\& \node[operator] (operator) {Operator}; \\
40+
\path
41+
node[service] (service-master) {Master}
42+
node[label, right of=service-master] (service-middle) {}
43+
node[label, below of=service-middle] (services-label) {Services}
44+
node[service, right=.5cm of service-master] (service-replica) {Replica}
45+
node[border, behind path,
46+
fit=(service-master)(service-replica)(services-label)
47+
] (services) {};
48+
\&
49+
\node[component] (sts) {Statefulset}; \& \node[component] (pdb) {Pod Disruption Budget}; \\
50+
\path
51+
node[service] (master-endpoint) {Master}
52+
node[service, right=.5cm of master-endpoint] (replica-endpoint) {Replica}
53+
node[label, right of=master-endpoint] (endpoint-middle) {}
54+
node[label, below of=endpoint-middle] (endpoint-label) {Endpoints}
55+
node[border, behind path,
56+
fit=(master-endpoint)(replica-endpoint)(endpoint-label)
57+
] (endpoints) {}; \&
58+
\node[component] (pod-template) {Pod Template}; \&
59+
\node[border] (secrets) {
60+
\begin{tikzpicture}[]
61+
\node[secret] (users-secret) at (0, 0) {Users};
62+
\node[secret] (robots-secret) at (2, 0) {Robots};
63+
\node[secret] (standby-secret) at (4, 0) {Standby};
64+
\end{tikzpicture} \\
65+
Secrets
66+
}; \\ \&
67+
\path
68+
node[pod] (replica1-pod) {Replica}
69+
node[pod, left=.5cm of replica1-pod] (master-pod) {Master}
70+
node[pod, right=.5cm of replica1-pod] (replica2-pod) {Replica}
71+
node[label, below of=replica1-pod] (pod-label) {Pods}
72+
node[border, behind path,
73+
fit=(master-pod)(replica1-pod)(replica2-pod)(pod-label)
74+
] (pods) {}; \\ \&
75+
\path
76+
node[pvc] (replica1-pvc) {Replica}
77+
node[pvc, left=.5cm of replica1-pvc] (master-pvc) {Master}
78+
node[pvc, right=.5cm of replica1-pvc] (replica2-pvc) {Replica}
79+
node[label, below of=replica1-pvc] (pvc-label) {Persistent Volume Claims}
80+
node[border, behind path,
81+
fit=(master-pvc)(replica1-pvc)(replica2-pvc)(pvc-label)
82+
] (pvcs) {}; \&
83+
\\ \& \\
84+
};
85+
86+
% Draw the arrows between the nodes and label them.
87+
\draw[to] (crd) -- node[midway,above] {} node[midway,below] {} (operator);
88+
\draw[to] (operator) -- node[midway,above] {} node[midway,below] {} (sts);
89+
\draw[to] (operator) -- node[midway,above] {} node[midway,below] {} (secrets);
90+
\draw[to] (operator) -| node[midway,above] {} node[midway,below] {} (pdb);
91+
\draw[to] (service-master) -- node[midway,above] {} node[midway,below] {} (master-endpoint);
92+
\draw[to] (service-replica) -- node[midway,above] {} node[midway,below] {} (replica-endpoint);
93+
\draw[to] (master-pod) -- node[midway,above] {} node[midway,below] {} (master-pvc);
94+
\draw[to] (replica1-pod) -- node[midway,above] {} node[midway,below] {} (replica1-pvc);
95+
\draw[to] (replica2-pod) -- node[midway,above] {} node[midway,below] {} (replica2-pvc);
96+
\draw[to] (operator) -| node[midway,above] {} node[midway,below] {} (services);
97+
\draw[to] (sts) -- node[midway,above] {} node[midway,below] {} (pod-template);
98+
\draw[to] (pod-template) -- node[midway,above] {} node[midway,below] {} (pods);
99+
\end{tikzpicture}
100+
\end{center}
101+
\end{document}

docs/diagrams/pod.png

236 KB
Loading

docs/diagrams/pod.tex

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
\documentclass{article}
2+
\usepackage{tikz}
3+
\usepackage[graphics,tightpage,active]{preview}
4+
\usetikzlibrary{arrows, shadows.blur, positioning, fit, calc, backgrounds}
5+
\usepackage{lscape}
6+
7+
\pagenumbering{gobble}
8+
9+
\PreviewEnvironment{tikzpicture}
10+
\PreviewEnvironment{equation}
11+
\PreviewEnvironment{equation*}
12+
\newlength{\imagewidth}
13+
\newlength{\imagescale}
14+
\pagestyle{empty}
15+
\thispagestyle{empty}
16+
17+
\begin{document}
18+
\begin{center}
19+
\begin{tikzpicture}[
20+
scale=0.5,transform shape,
21+
font=\sffamily,
22+
every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm},
23+
pod/.style={draw,solid,thick,circle,fill=red!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
24+
component/.style={draw,solid,thick,rounded corners,fill=yellow!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
25+
border/.style={draw,dashed,rounded corners,fill=gray!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
26+
volume/.style={draw,solid,thick,rounded corners,fill=blue!20, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
27+
sidecar/.style={draw,solid,thick,rounded corners,fill=blue!20, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
28+
k8s-label/.style={draw,solid,thick,rounded corners,fill=blue!20, minimum width=1.5cm, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
29+
affinity/.style={draw,solid,thick,rounded corners,fill=blue!20, minimum width=2cm, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
30+
label/.style={rectangle,inner sep=0,outer sep=0},
31+
to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize},
32+
every node/.style={align=center}]
33+
34+
% Position the nodes using a matrix layout
35+
36+
\matrix{
37+
\path
38+
node[k8s-label] (app-label) {App}
39+
node[k8s-label, right=.25cm of app-label] (role-label) {Role}
40+
node[k8s-label, right=.25cm of role-label] (custom-label) {Custom}
41+
node[label, below of=role-label] (k8s-label-label) {K8S Labels}
42+
node[border, behind path,
43+
fit=(app-label)(role-label)(custom-label)(k8s-label-label)
44+
] (k8s-labels) {}; \& \&
45+
\path
46+
node[affinity] (affinity) {Affinity}
47+
node[label, right=.25cm of affinity] (affinity-middle) {}
48+
node[affinity, right=.25cm of affinity-middle] (anti-affinity) {Anti-affinity}
49+
node[label, below of=affinity-middle] (affinity-label) {Assigning to nodes}
50+
node[border, behind path,
51+
fit=(affinity)(anti-affinity)(affinity-label)
52+
] (affinity) {}; \\
53+
\& \node[pod] (pod) {Pod}; \& \\
54+
\path
55+
node[volume, minimum width={width("shm-volume")}] (data-volume) {Data}
56+
node[volume, right=.25cm of data-volume, minimum width={width("shm-volume")}] (tokens-volume) {Tokens}
57+
node[volume, right=.25cm of tokens-volume] (shm-volume) {/dev/shm}
58+
node[label, below of=tokens-volume] (volumes-label) {Volumes}
59+
node[border, behind path,
60+
fit=(data-volume)(shm-volume)(tokens-volume)(volumes-label)
61+
] (volumes) {}; \&
62+
\node[component] (spilo) {Spilo}; \&
63+
\node[sidecar] (scalyr) {Scalyr}; \& \\ \&
64+
\path
65+
node[component] (patroni) {Patroni}
66+
node[component, below=.25cm of patroni] (postgres) {PostgreSQL}
67+
node[border, behind path,
68+
fit=(postgres)(patroni)
69+
] (spilo-components) {}; \&
70+
\path
71+
node[sidecar] (custom-sidecar1) {User defined}
72+
node[label, right=.25cm of custom-sidecar1] (sidecars-middle) {}
73+
node[sidecar, right=.25cm of sidecars-middle] (custom-sidecar2) {User defined}
74+
node[label, below of=sidecars-middle] (sidecars-label) {Custom sidecars}
75+
node[border, behind path,
76+
fit=(custom-sidecar1)(custom-sidecar2)(sidecars-label)
77+
] (sidecars) {};
78+
\\ \& \\
79+
};
80+
81+
% Draw the arrows between the nodes and label them.
82+
\draw[to] (pod) to [bend left=25] (volumes);
83+
\draw[to] (pod) to [bend left=25] (k8s-labels);
84+
\draw[to] (pod) to [bend right=25] (affinity);
85+
\draw[to] (pod) to [bend right=25] (scalyr);
86+
\draw[to] (pod) to [bend right=25] (sidecars);
87+
\draw[to] (pod) -- node[midway,above] {} node[midway,below] {} (spilo);
88+
\draw[to] (spilo) -- node[midway,above] {} node[midway,below] {} (spilo-components);
89+
90+
\end{tikzpicture}
91+
\end{center}
92+
\end{document}

0 commit comments

Comments
 (0)