Compare commits

...

36 Commits

Author SHA1 Message Date
Jerome Petazzoni
8dacf00bf3 Test gitpod 2020-04-03 10:56:39 -05:00
Jerome Petazzoni
454843b755 Bump up versions 2020-04-02 07:39:10 -05:00
Jerome Petazzoni
63e68ab720 Update kubectl run to kubectl create deploy 2020-03-31 09:09:24 -05:00
Jerome Petazzoni
46f0bc0dfb Update kubectl run slideshow 2020-03-31 08:53:49 -05:00
Jerome Petazzoni
16bb3f1847 Split out chat room instructions for in-person vs online
Add instructions specific to Zoom, explaining how to
use the chat room and the non-verbal communication cues
2020-03-29 09:30:11 -05:00
Jerome Petazzoni
fef3fa31fb Update for Kubernetes 1.18 kubectl run
In Kubernetes 1.18, `kubectl run` no longer creates
a Deployment, and cannot create Jobs or CronJobs
anymore. It only creates Pods. Since we were using
`kubectl run` to create our first Deployment, I've
changed the materials to explain that change, and
explain how the behavior differs between 1.17- and
1.18+, since I expect that people will deal with
a mix of both scenarios for a while (at least a
year).
2020-03-28 13:53:45 -05:00
Jerome Petazzoni
b844e40372 Refactor card generation
Many improvements. QR code, fixed page size, better
use of page estate, etc.

Also pdfkit should kind of work now (not quite using
the full page size, but at least it's not utterly
broken like before).
2020-03-20 13:56:50 -05:00
Jerome Petazzoni
5b5d5946e8 Add logic for QRCode on back of cards 2020-03-20 08:24:58 -05:00
Jerome Petazzoni
af6705fb1e Add script to map DNS
This script needs:
- a list of domains managed by GANDI LiveDNS
- a list of IP addresses of clusters (like in tags/*/ips.txt)

It will replace the current configuration for these
domains so that they point to the clusters.

The apex of each domain and a wildcard entry will
have round-robin records pointing to all the nodes
of the cluster.

In addition, there will be records node[1234...]
pointing to each individual node.
2020-03-19 17:15:43 -05:00
Jerome Petazzoni
bfd63c16c6 Add tailhist to start a websocket server showing bash history on port 1088 2020-03-19 15:49:50 -05:00
Jerome Petazzoni
c506038682 Add QCON slides; tweak title 2020-03-05 02:01:17 -06:00
Jerome Petazzoni
7d8fdd43bd Improve exec syntax section 2020-03-02 21:47:58 -06:00
Jerome Petazzoni
adf0f53aab Update coupons 2020-02-29 11:46:27 -06:00
Jérôme Petazzoni
49fe1b8e17 Merge pull request #547 from tiffanyfay/master-typo
Fix resource typo in k8s slides
2020-02-26 00:01:20 -06:00
tiffany jernigan
073a5f8c84 Fix resource typo in k8s slides 2020-02-25 21:15:01 -08:00
Jerome Petazzoni
032803806d Refactor 'last words' slides 2020-02-24 20:38:01 -06:00
Jerome Petazzoni
f7b327a33a Streamline title slide 2020-02-24 19:00:41 -06:00
Jerome Petazzoni
d3526aac00 Add exercises 2020-02-22 07:43:27 -06:00
Jerome Petazzoni
3736dd6e86 Add 2-day container course 2020-02-19 10:00:24 -06:00
Jerome Petazzoni
c03f199023 Add reference to resource monitoring tools 2020-02-17 04:56:43 -06:00
Jerome Petazzoni
8ba9c2e41b Reorg admin content
Split network interconnect in separate section
2020-02-09 15:12:55 -06:00
Jerome Petazzoni
36d1199b70 Upgrade from 1.15 to illustrate version skipping + retry logic
Instead of upgrading from 1.16 to <latest> we upgrade from 1.15
to 1.16, because upgrading from <latest-1> is a special case and
it is better to show the general case.

Also, the script that sets up admin clusters now has some retry
logic to accommodate hiccups in pssh or in the cloud provider.
2020-02-09 11:29:05 -06:00
Jerome Petazzoni
56e09eef6d Bump up kube ops versions
- Kubernetes binaries installed for ops labs bumped up to 1.17.2
- Composed-based control plane bumped up to 1.17.2
- kuberouter now uses apps/v1 DaemonSet (compatible with 1.16+)
- disable containerd (cosmetic)
2020-02-09 10:37:03 -06:00
Jerome Petazzoni
15f71506b6 Rewrite section about PV and PVC 2020-02-09 10:06:09 -06:00
Jerome Petazzoni
5eb8453597 Add namespace info to YAML section 2020-02-09 07:19:17 -06:00
Jerome Petazzoni
65ee4e3885 Streamline 1-day docker course 2020-02-09 07:05:47 -06:00
Jerome Petazzoni
ac801746eb Add OpenAPI / Swagger info 2020-02-09 06:26:15 -06:00
Jerome Petazzoni
0af16b98c9 Fix CRDs
Use v1beta1 for the first example (it's a bit simpler) and v1 for the second example.
The second example illustrate the served and storage attributes, and the fact that
each version can have a different schema.

Closes #541
2020-02-08 08:54:34 -06:00
Arthur Lutz
2fde58a3ee [cluster-backup] add bivac
Backup Interface for Volumes Attached to Containers
2020-02-08 08:43:21 -06:00
Arthur Lutz
38fec0b00d [extending-api] link to video, not playlist 2020-02-08 08:41:24 -06:00
Arthur Lutz
627800ddd5 [cluster-sizing.md] add link to Kiyot project page 2020-02-08 08:40:38 -06:00
Jérôme Petazzoni
871aab23ad Merge pull request #544 from arthurlogilab/patch-5
[compose/simple-k8s-control-plane] bump hyperkube from 1.14 to 1.16
2020-02-08 08:38:36 -06:00
Jérôme Petazzoni
8d7fa29a79 Merge pull request #543 from arthurlogilab/patch-4
[architecture] add links
2020-02-08 08:37:58 -06:00
Arthur Lutz
22f09c37a3 [compose/simple-k8s-control-plane] bump hyperkube from 1.14 to 1.16 2020-02-07 11:17:29 +01:00
Arthur Lutz
eacffe3cc5 [architecture] add kind as example 2020-02-07 09:40:36 +01:00
Arthur Lutz
d044f2bbd0 [architecture] add links 2020-02-07 09:39:00 +01:00
89 changed files with 2121 additions and 1937 deletions

1
.gitpod.yml Normal file
View File

@@ -0,0 +1 @@
image: jpetazzo/shpod

View File

@@ -9,21 +9,21 @@ services:
etcd:
network_mode: "service:pause"
image: k8s.gcr.io/etcd:3.3.10
image: k8s.gcr.io/etcd:3.4.3
command: etcd
kube-apiserver:
network_mode: "service:pause"
image: k8s.gcr.io/hyperkube:v1.14.0
image: k8s.gcr.io/hyperkube:v1.17.2
command: kube-apiserver --etcd-servers http://127.0.0.1:2379 --address 0.0.0.0 --disable-admission-plugins=ServiceAccount --allow-privileged
kube-controller-manager:
network_mode: "service:pause"
image: k8s.gcr.io/hyperkube:v1.14.0
image: k8s.gcr.io/hyperkube:v1.17.2
command: kube-controller-manager --master http://localhost:8080 --allocate-node-cidrs --cluster-cidr=10.CLUSTER.0.0/16
"Edit the CLUSTER placeholder first. Then, remove this line.":
kube-scheduler:
network_mode: "service:pause"
image: k8s.gcr.io/hyperkube:v1.14.0
image: k8s.gcr.io/hyperkube:v1.17.2
command: kube-scheduler --master http://localhost:8080

View File

@@ -12,7 +12,6 @@ metadata:
name: kube-router-cfg
namespace: kube-system
labels:
tier: node
k8s-app: kube-router
data:
cni-conf.json: |
@@ -32,20 +31,21 @@ data:
]
}
---
apiVersion: extensions/v1beta1
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
k8s-app: kube-router
tier: node
name: kube-router
namespace: kube-system
spec:
selector:
matchLabels:
k8s-app: kube-router
template:
metadata:
labels:
k8s-app: kube-router
tier: node
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ''
spec:

View File

@@ -9,20 +9,20 @@ services:
etcd:
network_mode: "service:pause"
image: k8s.gcr.io/etcd:3.3.10
image: k8s.gcr.io/etcd:3.4.3
command: etcd
kube-apiserver:
network_mode: "service:pause"
image: k8s.gcr.io/hyperkube:v1.14.0
image: k8s.gcr.io/hyperkube:v1.17.2
command: kube-apiserver --etcd-servers http://127.0.0.1:2379 --address 0.0.0.0 --disable-admission-plugins=ServiceAccount
kube-controller-manager:
network_mode: "service:pause"
image: k8s.gcr.io/hyperkube:v1.14.0
image: k8s.gcr.io/hyperkube:v1.17.2
command: kube-controller-manager --master http://localhost:8080
kube-scheduler:
network_mode: "service:pause"
image: k8s.gcr.io/hyperkube:v1.14.0
image: k8s.gcr.io/hyperkube:v1.17.2
command: kube-scheduler --master http://localhost:8080

View File

@@ -1,4 +1,4 @@
apiVersion: apiextensions.k8s.io/v1alpha1
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: coffees.container.training

View File

@@ -1,10 +1,9 @@
apiVersion: apiextensions.k8s.io/v1alpha1
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: coffees.container.training
spec:
group: container.training
version: v1alpha1
scope: Namespaced
names:
plural: coffees
@@ -12,21 +11,25 @@ spec:
kind: Coffee
shortNames:
- cof
additionalPrinterColumns:
- JSONPath: .spec.taste
description: Subjective taste of that kind of coffee bean
name: Taste
type: string
- JSONPath: .metadata.creationTimestamp
name: Age
type: date
validation:
openAPIV3Schema:
properties:
spec:
required:
- taste
properties:
taste:
description: Subjective taste of that kind of coffee bean
type: string
versions:
- name: v1alpha1
served: true
storage: true
schema:
openAPIV3Schema:
properties:
spec:
required:
- taste
properties:
taste:
description: Subjective taste of that kind of coffee bean
type: string
additionalPrinterColumns:
- jsonPath: .spec.taste
description: Subjective taste of that kind of coffee bean
name: Taste
type: string
- jsonPath: .metadata.creationTimestamp
name: Age
type: date

View File

@@ -113,9 +113,12 @@ _cmd_disabledocker() {
TAG=$1
need_tag
pssh "sudo systemctl disable docker.service"
pssh "sudo systemctl disable docker.socket"
pssh "sudo systemctl stop docker"
pssh "
sudo systemctl disable docker.service
sudo systemctl disable docker.socket
sudo systemctl stop docker
sudo killall containerd
"
}
_cmd kubebins "Install Kubernetes and CNI binaries but don't start anything"
@@ -127,18 +130,15 @@ _cmd_kubebins() {
set -e
cd /usr/local/bin
if ! [ -x etcd ]; then
curl -L https://github.com/etcd-io/etcd/releases/download/v3.3.15/etcd-v3.3.15-linux-amd64.tar.gz \
##VERSION##
curl -L https://github.com/etcd-io/etcd/releases/download/v3.4.3/etcd-v3.4.3-linux-amd64.tar.gz \
| sudo tar --strip-components=1 --wildcards -zx '*/etcd' '*/etcdctl'
fi
if ! [ -x hyperkube ]; then
curl -L https://dl.k8s.io/v1.16.2/kubernetes-server-linux-amd64.tar.gz \
| sudo tar --strip-components=3 -zx kubernetes/server/bin/hyperkube
fi
if ! [ -x kubelet ]; then
for BINARY in kubectl kube-apiserver kube-scheduler kube-controller-manager kubelet kube-proxy;
do
sudo ln -s hyperkube \$BINARY
done
##VERSION##
curl -L https://dl.k8s.io/v1.17.2/kubernetes-server-linux-amd64.tar.gz \
| sudo tar --strip-components=3 -zx \
kubernetes/server/bin/kube{ctl,let,-proxy,-apiserver,-scheduler,-controller-manager}
fi
sudo mkdir -p /opt/cni/bin
cd /opt/cni/bin
@@ -249,6 +249,7 @@ EOF"
# Install ship
pssh "
if [ ! -x /usr/local/bin/ship ]; then
##VERSION##
curl -L https://github.com/replicatedhq/ship/releases/download/v0.40.0/ship_0.40.0_linux_amd64.tar.gz |
sudo tar -C /usr/local/bin -zx ship
fi"
@@ -256,7 +257,7 @@ EOF"
# Install the AWS IAM authenticator
pssh "
if [ ! -x /usr/local/bin/aws-iam-authenticator ]; then
##VERSION##
##VERSION##
sudo curl -o /usr/local/bin/aws-iam-authenticator https://amazon-eks.s3-us-west-2.amazonaws.com/1.12.7/2019-03-27/bin/linux/amd64/aws-iam-authenticator
sudo chmod +x /usr/local/bin/aws-iam-authenticator
fi"
@@ -365,6 +366,34 @@ EOF
sudo systemctl start pinger"
}
_cmd tailhist "Install history viewer on port 1088"
_cmd_tailhist () {
TAG=$1
need_tag
pssh "
wget https://github.com/joewalnes/websocketd/releases/download/v0.3.0/websocketd-0.3.0_amd64.deb
sudo dpkg -i websocketd-0.3.0_amd64.deb
sudo mkdir -p /tmp/tailhist
sudo tee /root/tailhist.service <<EOF
[Unit]
Description=tailhist
[Install]
WantedBy=multi-user.target
[Service]
WorkingDirectory=/tmp/tailhist
ExecStart=/usr/bin/websocketd --port=1088 --staticdir=. sh -c \"tail -n +1 -f /home/docker/.history || echo 'Could not read history file. Perhaps you need to \\\"chmod +r .history\\\"?'\"
User=nobody
Group=nogroup
Restart=always
EOF
sudo systemctl enable /root/tailhist.service
sudo systemctl start tailhist"
pssh -I sudo tee /tmp/tailhist/index.html <lib/tailhist.html
}
_cmd opensg "Open the default security group to ALL ingress traffic"
_cmd_opensg() {
need_infra $1

View File

@@ -42,13 +42,15 @@ print("Generated ips.html")
try:
import pdfkit
paper_size = context["paper_size"]
margin = {"A4": "0.5cm", "Letter": "0.2in"}[paper_size]
with open("ips.html") as f:
pdfkit.from_file(f, "ips.pdf", options={
"page-size": context["paper_size"],
"margin-top": context["paper_margin"],
"margin-bottom": context["paper_margin"],
"margin-left": context["paper_margin"],
"margin-right": context["paper_margin"],
"page-size": paper_size,
"margin-top": margin,
"margin-bottom": margin,
"margin-left": margin,
"margin-right": margin,
})
print("Generated ips.pdf")
except ImportError:

View File

@@ -65,6 +65,15 @@ system("""sudo -u docker tee -a /home/docker/.bashrc <<SQRL
export PS1='\e[1m\e[31m[{}] \e[32m(\\$(docker-prompt)) \e[34m\u@\h\e[35m \w\e[0m\n$ '
SQRL""".format(ipv4))
# Bigger history, in a different file, and saved before executing each command
system("""sudo -u docker tee -a /home/docker/.bashrc <<SQRL
export HISTSIZE=9999
export HISTFILESIZE=9999
shopt -s histappend
trap 'history -a' DEBUG
export HISTFILE=~/.history
SQRL""")
# Custom .vimrc
system("""sudo -u docker tee /home/docker/.vimrc <<SQRL
syntax on

View File

@@ -0,0 +1,42 @@
<!DOCTYPE html>
<html>
<head>
<title>bash history</title>
<style>
#log {
font: bold 24px courier;
}
#log div:last-child {
background: yellow;
}
</style>
</head>
<body>
<div id="log"></div>
<script>
var ws = new WebSocket('ws://' + (location.host ? location.host : "localhost:8080") + "/");
var log = document.getElementById('log');
var echo = function(text) {
var line = document.createElement('div');
line.textContent = text;
log.appendChild(line);
line.scrollIntoView();
}
ws.onopen = function() {
document.body.style.backgroundColor = '#cfc';
};
ws.onclose = function() {
document.body.style.backgroundColor = '#fcc';
echo("Disconnected from server. Try to reload this page?");
};
ws.onmessage = function(event) {
echo(event.data);
};
</script>
</body>
</html>

49
prepare-vms/map-dns.py Executable file
View File

@@ -0,0 +1,49 @@
#!/usr/bin/env python
import os
import requests
import yaml
# configurable stuff
domains_file = "../../plentydomains/domains.txt"
config_file = os.path.join(
os.environ["HOME"], ".config/gandi/config.yaml")
tag = "test"
apiurl = "https://dns.api.gandi.net/api/v5/domains"
# inferred stuff
domains = open(domains_file).read().split()
apikey = yaml.safe_load(open(config_file))["apirest"]["key"]
ips = open(f"tags/{tag}/ips.txt").read().split()
settings_file = f"tags/{tag}/settings.yaml"
clustersize = yaml.safe_load(open(settings_file))["clustersize"]
# now do the fucking work
while domains and ips:
domain = domains[0]
domains = domains[1:]
cluster = ips[:clustersize]
ips = ips[clustersize:]
print(f"{domain} => {cluster}")
zone = ""
node = 0
for ip in cluster:
node += 1
zone += f"@ 300 IN A {ip}\n"
zone += f"* 300 IN A {ip}\n"
zone += f"node{node} 300 IN A {ip}\n"
r = requests.put(
f"{apiurl}/{domain}/records",
headers={"x-api-key": apikey},
data=zone)
print(r.text)
#r = requests.get(
# f"{apiurl}/{domain}/records",
# headers={"x-api-key": apikey},
# )
if domains:
print(f"Good, we have {len(domains)} domains left.")
if ips:
print(f"Crap, we have {len(ips)} IP addresses left.")

View File

@@ -10,13 +10,6 @@ cards_template: cards.html
# Use "Letter" in the US, and "A4" everywhere else
paper_size: A4
# Feel free to reduce this if your printer can handle it
paper_margin: 0.2in
# Note: paper_size and paper_margin only apply to PDF generated with pdfkit.
# If you print (or generate a PDF) using ips.html, they will be ignored.
# (The equivalent parameters must be set from the browser's print dialog.)
# This can be "test" or "stable"
engine_version: stable

View File

@@ -10,13 +10,6 @@ cards_template: cards.html
# Use "Letter" in the US, and "A4" everywhere else
paper_size: A4
# Feel free to reduce this if your printer can handle it
paper_margin: 0.2in
# Note: paper_size and paper_margin only apply to PDF generated with pdfkit.
# If you print (or generate a PDF) using ips.html, they will be ignored.
# (The equivalent parameters must be set from the browser's print dialog.)
# This can be "test" or "stable"
engine_version: stable

View File

@@ -10,13 +10,6 @@ cards_template: cards.html
# Use "Letter" in the US, and "A4" everywhere else
paper_size: A4
# Feel free to reduce this if your printer can handle it
paper_margin: 0.2in
# Note: paper_size and paper_margin only apply to PDF generated with pdfkit.
# If you print (or generate a PDF) using ips.html, they will be ignored.
# (The equivalent parameters must be set from the browser's print dialog.)
# This can be "test" or "stable"
engine_version: stable

View File

@@ -10,13 +10,6 @@ cards_template: cards.html
# Use "Letter" in the US, and "A4" everywhere else
paper_size: A4
# Feel free to reduce this if your printer can handle it
paper_margin: 0.2in
# Note: paper_size and paper_margin only apply to PDF generated with pdfkit.
# If you print (or generate a PDF) using ips.html, they will be ignored.
# (The equivalent parameters must be set from the browser's print dialog.)
# This can be "test" or "stable"
engine_version: stable

View File

@@ -12,13 +12,6 @@ cards_template: cards.html
# Use "Letter" in the US, and "A4" everywhere else
paper_size: Letter
# Feel free to reduce this if your printer can handle it
paper_margin: 0.2in
# Note: paper_size and paper_margin only apply to PDF generated with pdfkit.
# If you print (or generate a PDF) using ips.html, they will be ignored.
# (The equivalent parameters must be set from the browser's print dialog.)
# This can be "test" or "stable"
engine_version: test

View File

@@ -12,18 +12,11 @@ cards_template: cards.html
# Use "Letter" in the US, and "A4" everywhere else
paper_size: Letter
# Feel free to reduce this if your printer can handle it
paper_margin: 0.2in
# Note: paper_size and paper_margin only apply to PDF generated with pdfkit.
# If you print (or generate a PDF) using ips.html, they will be ignored.
# (The equivalent parameters must be set from the browser's print dialog.)
# This can be "test" or "stable"
engine_version: stable
# These correspond to the version numbers visible on their respective GitHub release pages
compose_version: 1.24.1
compose_version: 1.25.4
machine_version: 0.15.0
# Password used to connect with the "docker user"

View File

@@ -10,19 +10,13 @@ cards_template: cards.html
# Use "Letter" in the US, and "A4" everywhere else
paper_size: Letter
# Feel free to reduce this if your printer can handle it
paper_margin: 0.2in
# Note: paper_size and paper_margin only apply to PDF generated with pdfkit.
# If you print (or generate a PDF) using ips.html, they will be ignored.
# (The equivalent parameters must be set from the browser's print dialog.)
# This can be "test" or "stable"
engine_version: stable
# These correspond to the version numbers visible on their respective GitHub release pages
compose_version: 1.24.1
compose_version: 1.25.4
machine_version: 0.14.0
# Password used to connect with the "docker user"
docker_user_password: training

View File

@@ -12,13 +12,6 @@ cards_template: cards.html
# Use "Letter" in the US, and "A4" everywhere else
paper_size: Letter
# Feel free to reduce this if your printer can handle it
paper_margin: 0.2in
# Note: paper_size and paper_margin only apply to PDF generated with pdfkit.
# If you print (or generate a PDF) using ips.html, they will be ignored.
# (The equivalent parameters must be set from the browser's print dialog.)
# This can be "test" or "stable"
engine_version: stable

View File

@@ -12,13 +12,6 @@ cards_template: cards.html
# Use "Letter" in the US, and "A4" everywhere else
paper_size: Letter
# Feel free to reduce this if your printer can handle it
paper_margin: 0.2in
# Note: paper_size and paper_margin only apply to PDF generated with pdfkit.
# If you print (or generate a PDF) using ips.html, they will be ignored.
# (The equivalent parameters must be set from the browser's print dialog.)
# This can be "test" or "stable"
engine_version: stable

View File

@@ -1,9 +1,24 @@
#!/bin/sh
set -e
retry () {
N=$1
I=0
shift
while ! "$@"; do
I=$(($I+1))
if [ $I -gt $N ]; then
echo "FAILED, ABORTING"
exit 1
fi
echo "FAILED, RETRYING ($I/$N)"
done
}
export AWS_INSTANCE_TYPE=t3a.small
INFRA=infra/aws-us-west-2
INFRA=infra/aws-eu-west-3
STUDENTS=2
@@ -17,9 +32,9 @@ TAG=$PREFIX-$SETTINGS
--settings settings/$SETTINGS.yaml \
--count $STUDENTS
./workshopctl deploy $TAG
./workshopctl disabledocker $TAG
./workshopctl kubebins $TAG
retry 5 ./workshopctl deploy $TAG
retry 5 ./workshopctl disabledocker $TAG
retry 5 ./workshopctl kubebins $TAG
./workshopctl cards $TAG
SETTINGS=admin-kubenet
@@ -30,9 +45,9 @@ TAG=$PREFIX-$SETTINGS
--settings settings/$SETTINGS.yaml \
--count $((3*$STUDENTS))
./workshopctl disableaddrchecks $TAG
./workshopctl deploy $TAG
./workshopctl kubebins $TAG
retry 5 ./workshopctl disableaddrchecks $TAG
retry 5 ./workshopctl deploy $TAG
retry 5 ./workshopctl kubebins $TAG
./workshopctl cards $TAG
SETTINGS=admin-kuberouter
@@ -43,9 +58,9 @@ TAG=$PREFIX-$SETTINGS
--settings settings/$SETTINGS.yaml \
--count $((3*$STUDENTS))
./workshopctl disableaddrchecks $TAG
./workshopctl deploy $TAG
./workshopctl kubebins $TAG
retry 5 ./workshopctl disableaddrchecks $TAG
retry 5 ./workshopctl deploy $TAG
retry 5 ./workshopctl kubebins $TAG
./workshopctl cards $TAG
#INFRA=infra/aws-us-west-1
@@ -60,7 +75,6 @@ TAG=$PREFIX-$SETTINGS
--settings settings/$SETTINGS.yaml \
--count $((3*$STUDENTS))
./workshopctl deploy $TAG
./workshopctl kube $TAG 1.16.6
retry 5 ./workshopctl deploy $TAG
retry 5 ./workshopctl kube $TAG 1.15.9
./workshopctl cards $TAG

View File

@@ -18,8 +18,14 @@
| default("kube") -%}
{%- set clusternumber = clusternumber
| default(None) -%}
{%- if qrcode == True -%}
{%- set qrcode = "https://container.training/q" -%}
{%- elif qrcode -%}
{%- set qrcode = qrcode -%}
{%- endif -%}
{%- set image_src = {
{# You can also set img_bottom_src instead. #}
{%- set img_logo_src = {
"docker": "https://s3-us-west-2.amazonaws.com/www.breadware.com/integrations/docker.png",
"swarm": "https://cdn.wp.nginx.com/wp-content/uploads/2016/07/docker-swarm-hero2.png",
"kube": "https://avatars1.githubusercontent.com/u/13629408",
@@ -85,9 +91,33 @@
{%- endif -%}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><style>
<head>
<style>
@import url('https://fonts.googleapis.com/css?family=Slabo+27px');
{% if paper_size == "A4" %}
@page {
size: A4; /* Change from the default size of A4 */
margin: 0.5cm; /* Set margin on each page */
}
body {
/* this is A4 minus 0.5cm margins */
width: 20cm;
height: 28.7cm;
}
{% elif paper_size == "Letter" %}
@page {
size: Letter;
margin: 0.2in;
}
body {
/* this is Letter minus 0.2in margins */
width: 8.6in;
heigth: 10.6in;
}
{% endif %}
body, table {
margin: 0;
padding: 0;
@@ -108,53 +138,45 @@ div {
float: left;
border: 1px dotted black;
{% if backside %}
height: 31%;
height: 33%;
{% endif %}
padding-top: 1%;
padding-bottom: 1%;
/* columns * (width+left+right) < 100% */
/*
width: 21.5%;
padding-left: 1.5%;
padding-right: 1.5%;
width: 24.8%;
*/
/**/
width: 30%;
padding-left: 1.5%;
padding-right: 1.5%;
width: 33%;
/**/
}
p {
margin: 0.4em 0 0.4em 0;
margin: 0.8em;
}
div.back {
border: 1px dotted white;
border: 1px dotted grey;
}
div.back p {
margin: 0.5em 1em 0 1em;
span.scale {
white-space: nowrap;
}
img {
height: 4em;
img.logo {
height: 4.5em;
float: right;
margin-right: -0.2em;
}
img.bottom {
height: 2.5em;
display: block;
margin: 0.5em auto;
}
/*
img.enix {
height: 4.0em;
margin-top: 0.4em;
.qrcode img {
width: 40%;
margin: 1em;
}
img.kube {
height: 4.2em;
margin-top: 1.7em;
}
*/
.logpass {
font-family: monospace;
font-weight: bold;
@@ -164,16 +186,43 @@ img.kube {
page-break-after: always;
clear: both;
display: block;
height: 8px;
height: 0;
}
</style></head>
<body>
</style>
<script type="text/javascript" src="https://cdn.rawgit.com/davidshimjs/qrcodejs/gh-pages/qrcode.min.js"></script>
<script type="text/javascript">
function qrcodes() {
[].forEach.call(
document.getElementsByClassName("qrcode"),
(e, index) => {
new QRCode(e, {
text: "{{ qrcode }}",
correctLevel: QRCode.CorrectLevel.L
});
}
);
}
function scale() {
[].forEach.call(
document.getElementsByClassName("scale"),
(e, index) => {
var text_width = e.getBoundingClientRect().width;
var box_width = e.parentElement.getBoundingClientRect().width;
var percent = 100 * box_width / text_width + "%";
e.style.fontSize = percent;
}
);
}
</script>
</head>
<body onload="qrcodes(); scale();">
{% for cluster in clusters %}
<div>
<p>{{ intro }}</p>
<p>
{% if image_src %}
<img src="{{ image_src }}" />
{% if img_logo_src %}
<img class="logo" src="{{ img_logo_src }}" />
{% endif %}
<table>
{% if clusternumber != None %}
@@ -202,7 +251,12 @@ img.kube {
<p>
{% if url %}
{{ slides_are_at }}
<center>{{ url }}</center>
<p>
<span class="scale">{{ url }}</span>
</p>
{% endif %}
{% if img_bottom_src %}
<img class="bottom" src="{{ img_bottom_src }}" />
{% endif %}
</p>
</div>
@@ -211,18 +265,21 @@ img.kube {
{% if backside %}
{% for x in range(pagesize) %}
<div class="back">
<br/>
<p>You got this at the workshop
<p>Thanks for attending
"Getting Started With Kubernetes and Container Orchestration"
during QCON London (March 2019).</p>
during CONFERENCE in Month YYYY!</p>
<p>If you liked that workshop,
I can train your team or organization
on Docker, container, and Kubernetes,
with curriculums of 1 to 5 days.
I can train your team, in person or
online, with custom courses of
any length and any level.
</p>
<p>Interested? Contact me at:</p>
{% if qrcode %}
<p>If you're interested, please scan that QR code to contact me:</p>
<span class="qrcode"></span>
{% else %}
<p>If you're interested, you can contact me at:</p>
{% endif %}
<p>jerome.petazzoni@gmail.com</p>
<p>Thank you!</p>
</div>
{% endfor %}
<span class="pagebreak"></span>

View File

@@ -6,5 +6,10 @@
# And this allows to do "git clone https://container.training".
/info/refs service=git-upload-pack https://github.com/jpetazzo/container.training/info/refs?service=git-upload-pack
/dockermastery https://www.udemy.com/course/docker-mastery/?referralCode=1410924A733D33635CCB
/kubernetesmastery https://www.udemy.com/course/kubernetesmastery/?referralCode=7E09090AF9B79E6C283F
#/dockermastery https://www.udemy.com/course/docker-mastery/?referralCode=1410924A733D33635CCB
#/kubernetesmastery https://www.udemy.com/course/kubernetesmastery/?referralCode=7E09090AF9B79E6C283F
/dockermastery https://www.udemy.com/course/docker-mastery/?couponCode=SWEETFEBSALEC1
/kubernetesmastery https://www.udemy.com/course/kubernetesmastery/?couponCode=SWEETFEBSALEC4
# Shortlink for the QRCode
/q /qrcode.html 200

View File

@@ -222,21 +222,63 @@ f9e8f1642759 About an hour ago /bin/sh -c apt-get install fi 1.627 MB
---
## Introducing JSON syntax
class: extra-details
Most Dockerfile arguments can be passed in two forms:
## Why `sh -c`?
* plain string:
* On UNIX, to start a new program, we need two system calls:
- `fork()`, to create a new child process;
- `execve()`, to replace the new child process with the program to run.
* Conceptually, `execve()` works like this:
`execve(program, [list, of, arguments])`
* When we run a command, e.g. `ls -l /tmp`, something needs to parse the command.
(i.e. split the program and its arguments into a list.)
* The shell is usually doing that.
(It also takes care of expanding environment variables and special things like `~`.)
---
class: extra-details
## Why `sh -c`?
* When we do `RUN ls -l /tmp`, the Docker builder needs to parse the command.
* Instead of implementing its own parser, it outsources the job to the shell.
* That's why we see `sh -c ls -l /tmp` in that case.
* But we can also do the parsing jobs ourselves.
* This means passing `RUN` a list of arguments.
* This is called the *exec syntax*.
---
## Shell syntax vs exec syntax
Dockerfile commands that execute something can have two forms:
* plain string, or *shell syntax*:
<br/>`RUN apt-get install figlet`
* JSON list:
* JSON list, or *exec syntax*:
<br/>`RUN ["apt-get", "install", "figlet"]`
We are going to change our Dockerfile to see how it affects the resulting image.
---
## Using JSON syntax in our Dockerfile
## Using exec syntax in our Dockerfile
Let's change our Dockerfile as follows!
@@ -254,7 +296,7 @@ $ docker build -t figlet .
---
## JSON syntax vs string syntax
## History with exec syntax
Compare the new history:
@@ -269,24 +311,55 @@ IMAGE CREATED CREATED BY SIZE
<missing> 4 days ago /bin/sh -c #(nop) ADD file:b 187.8 MB
```
* JSON syntax specifies an *exact* command to execute.
* Exec syntax specifies an *exact* command to execute.
* String syntax specifies a command to be wrapped within `/bin/sh -c "..."`.
* Shell syntax specifies a command to be wrapped within `/bin/sh -c "..."`.
---
## When to use JSON syntax and string syntax
## When to use exec syntax and shell syntax
* String syntax:
* shell syntax:
* is easier to write
* interpolates environment variables and other shell expressions
* creates an extra process (`/bin/sh -c ...`) to parse the string
* requires `/bin/sh` to exist in the container
* JSON syntax:
* exec syntax:
* is harder to write (and read!)
* passes all arguments without extra processing
* doesn't create an extra process
* doesn't require `/bin/sh` to exist in the container
---
## Pro-tip: the `exec` shell built-in
POSIX shells have a built-in command named `exec`.
`exec` should be followed by a program and its arguments.
From a user perspective:
- it looks like the shell exits right away after the command execution,
- in fact, the shell exits just *before* command execution;
- or rather, the shell gets *replaced* by the command.
---
## Example using `exec`
```dockerfile
CMD exec figlet -f script hello
```
In this example, `sh -c` will still be used, but
`figlet` will be PID 1 in the container.
The shell gets replaced by `figlet` when `figlet` starts execution.
This allows to run processes as PID 1 without using JSON.

View File

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View File

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 81 KiB

View File

@@ -13,7 +13,7 @@
viewBox="0 0 1600 900"
version="1.1"
id="svg696"
sodipodi:docname="how-k8s-works-3.svg"
sodipodi:docname="03.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
enable-background="new">
<metadata
@@ -42,12 +42,12 @@
id="namedview698"
showgrid="false"
inkscape:zoom="0.64"
inkscape:cx="796.38378"
inkscape:cx="521.38378"
inkscape:cy="596.50212"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-y="1098"
inkscape:window-maximized="0"
inkscape:current-layer="g4090"
inkscape:current-layer="g3333"
units="px"
inkscape:snap-object-midpoints="true" />
<title
@@ -561,17 +561,17 @@
id="tspan3660"
y="334.98642"
x="-215.28352"
sodipodi:role="line">$ kubectl run web \</tspan><tspan
sodipodi:role="line">$ kubectl create \</tspan><tspan
style="stroke-width:0.89526182"
y="379.74951"
x="-215.28352"
sodipodi:role="line"
id="tspan4926"> --image=nginx \</tspan><tspan
id="tspan1139"> deployment web \</tspan><tspan
style="stroke-width:0.89526182"
y="424.5126"
x="-215.28352"
sodipodi:role="line"
id="tspan4928"> --replicas=3</tspan></text>
id="tspan4928"> --image=nginx</tspan></text>
</g>
<g
transform="matrix(2.7869707,0,0,2.7869707,980.45108,349.43174)"

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View File

@@ -13,7 +13,7 @@
viewBox="0 0 1600 900"
version="1.1"
id="svg696"
sodipodi:docname="how-k8s-works-4.svg"
sodipodi:docname="04.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
enable-background="new">
<metadata
@@ -42,12 +42,12 @@
id="namedview698"
showgrid="false"
inkscape:zoom="0.64"
inkscape:cx="796.38378"
inkscape:cx="521.38378"
inkscape:cy="596.50212"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-y="1098"
inkscape:window-maximized="0"
inkscape:current-layer="g1250"
inkscape:current-layer="g3333"
units="px"
inkscape:snap-object-midpoints="true" />
<title
@@ -561,17 +561,17 @@
id="tspan3660"
y="334.98642"
x="-215.28352"
sodipodi:role="line">$ kubectl run web \</tspan><tspan
sodipodi:role="line">$ kubectl create \</tspan><tspan
style="stroke-width:0.89526182"
y="379.74951"
x="-215.28352"
sodipodi:role="line"
id="tspan4926"> --image=nginx \</tspan><tspan
id="tspan1139"> deployment web \</tspan><tspan
style="stroke-width:0.89526182"
y="424.5126"
x="-215.28352"
sodipodi:role="line"
id="tspan4928"> --replicas=3</tspan></text>
id="tspan4928"> --image=nginx</tspan></text>
</g>
<g
transform="matrix(2.7869707,0,0,2.7869707,980.45108,349.43174)"

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View File

@@ -13,7 +13,7 @@
viewBox="0 0 1600 900"
version="1.1"
id="svg696"
sodipodi:docname="how-k8s-works-05.svg"
sodipodi:docname="05.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
enable-background="new">
<metadata
@@ -42,10 +42,10 @@
id="namedview698"
showgrid="false"
inkscape:zoom="0.64"
inkscape:cx="521.38378"
inkscape:cx="246.38378"
inkscape:cy="596.50212"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-y="1098"
inkscape:window-maximized="0"
inkscape:current-layer="g3333"
units="px"
@@ -558,37 +558,32 @@
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35.8104744px;line-height:1.25;font-family:Consolas;-inkscape-font-specification:'Consolas, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.89526182"
xml:space="preserve"><tspan
style="stroke-width:0.89526182"
id="tspan3660"
y="334.98642"
x="-215.28352"
sodipodi:role="line">$ kubectl run web \</tspan><tspan
sodipodi:role="line"
id="tspan1146">$ kubectl create \</tspan><tspan
style="stroke-width:0.89526182"
y="379.74951"
x="-215.28352"
sodipodi:role="line"
id="tspan4926"> --image=nginx \</tspan><tspan
id="tspan1150"> deployment web \</tspan><tspan
style="stroke-width:0.89526182"
y="424.5126"
x="-215.28352"
sodipodi:role="line"
id="tspan4928"> --replicas=3</tspan><tspan
id="tspan4926"> --image=nginx</tspan><tspan
style="stroke-width:0.89526182"
y="469.2757"
x="-215.28352"
sodipodi:role="line"
id="tspan1141">...</tspan><tspan
id="tspan1143">deployment.apps/web</tspan><tspan
style="stroke-width:0.89526182"
y="514.03882"
x="-215.28352"
sodipodi:role="line"
id="tspan1143">deployment.apps/web</tspan><tspan
style="stroke-width:0.89526182"
y="558.80188"
x="-215.28352"
sodipodi:role="line"
id="tspan1147">created</tspan><tspan
style="stroke-width:0.89526182"
y="603.565"
y="558.80188"
x="-215.28352"
sodipodi:role="line"
id="tspan1145">$</tspan></text>

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 83 KiB

View File

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View File

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View File

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View File

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View File

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View File

@@ -13,7 +13,7 @@
viewBox="0 0 1600 900"
version="1.1"
id="svg696"
sodipodi:docname="how-k8s-works-11.svg"
sodipodi:docname="11.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
enable-background="new">
<metadata
@@ -42,10 +42,10 @@
id="namedview698"
showgrid="false"
inkscape:zoom="0.64"
inkscape:cx="796.38378"
inkscape:cx="521.38378"
inkscape:cy="596.50212"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-y="1098"
inkscape:window-maximized="0"
inkscape:current-layer="g3409"
units="px"
@@ -1132,78 +1132,6 @@
y="125.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">PENDING</tspan></text>
</g>
<g
inkscape:label="pod 2"
id="g1233"
style="display:inline">
<rect
y="139.72913"
x="287.1362"
height="36.022667"
width="174.12718"
id="rect15580"
style="display:inline;opacity:1;fill:#ffaaaa;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)" />
<text
id="text15584"
y="166.5461"
x="292.32904"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
xml:space="preserve"><tspan
style="stroke-width:0.69919914"
y="166.5461"
x="292.32904"
id="tspan15582"
sodipodi:role="line">Pod</tspan></text>
<text
id="text15598"
y="165.23392"
x="351.05563"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
xml:space="preserve"
inkscape:label="pod 2 status"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583"
y="165.23392"
x="351.05563"
id="tspan15596"
sodipodi:role="line">PENDING</tspan></text>
</g>
<g
inkscape:label="pod 3"
id="g1226"
style="display:inline">
<rect
style="display:inline;opacity:1;fill:#ffaaaa;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)"
id="rect15586"
width="174.12718"
height="36.022667"
x="287.1362"
y="179.72913"
inkscape:label="rectangle" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
x="292.32904"
y="206.5461"
id="text15590"
inkscape:label="label"><tspan
sodipodi:role="line"
id="tspan15588"
x="292.32904"
y="206.5461"
style="stroke-width:0.69919914">Pod</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
x="351.05563"
y="205.23392"
id="text15602"
inkscape:label="status"><tspan
sodipodi:role="line"
id="tspan15600"
x="351.05563"
y="205.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">PENDING</tspan></text>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View File

@@ -13,7 +13,7 @@
viewBox="0 0 1600 900"
version="1.1"
id="svg696"
sodipodi:docname="how-k8s-works-12.svg"
sodipodi:docname="12.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
enable-background="new">
<metadata
@@ -42,12 +42,12 @@
id="namedview698"
showgrid="false"
inkscape:zoom="0.64"
inkscape:cx="796.38378"
inkscape:cx="521.38378"
inkscape:cy="596.50212"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-y="1098"
inkscape:window-maximized="0"
inkscape:current-layer="g4153"
inkscape:current-layer="g3409"
units="px"
inkscape:snap-object-midpoints="true" />
<title
@@ -1132,78 +1132,6 @@
y="125.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">PENDING</tspan></text>
</g>
<g
inkscape:label="pod 2"
id="g1233"
style="display:inline">
<rect
y="139.72913"
x="287.1362"
height="36.022667"
width="174.12718"
id="rect15580"
style="display:inline;opacity:1;fill:#cccccc;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)" />
<text
id="text15584"
y="166.5461"
x="292.32904"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
xml:space="preserve"><tspan
style="stroke-width:0.69919914"
y="166.5461"
x="292.32904"
id="tspan15582"
sodipodi:role="line">Pod</tspan></text>
<text
id="text15598"
y="165.23392"
x="351.05563"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
xml:space="preserve"
inkscape:label="pod 2 status"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583"
y="165.23392"
x="351.05563"
id="tspan15596"
sodipodi:role="line">PENDING</tspan></text>
</g>
<g
inkscape:label="pod 3"
id="g1226"
style="display:inline">
<rect
style="display:inline;opacity:1;fill:#cccccc;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)"
id="rect15586"
width="174.12718"
height="36.022667"
x="287.1362"
y="179.72913"
inkscape:label="rectangle" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
x="292.32904"
y="206.5461"
id="text15590"
inkscape:label="label"><tspan
sodipodi:role="line"
id="tspan15588"
x="292.32904"
y="206.5461"
style="stroke-width:0.69919914">Pod</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
x="351.05563"
y="205.23392"
id="text15602"
inkscape:label="status"><tspan
sodipodi:role="line"
id="tspan15600"
x="351.05563"
y="205.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">PENDING</tspan></text>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View File

@@ -13,7 +13,7 @@
viewBox="0 0 1600 900"
version="1.1"
id="svg696"
sodipodi:docname="how-k8s-works-13.svg"
sodipodi:docname="13.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
enable-background="new">
<metadata
@@ -42,12 +42,12 @@
id="namedview698"
showgrid="false"
inkscape:zoom="0.64"
inkscape:cx="796.38378"
inkscape:cx="521.38378"
inkscape:cy="596.50212"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-y="1098"
inkscape:window-maximized="0"
inkscape:current-layer="g4153"
inkscape:current-layer="g3409"
units="px"
inkscape:snap-object-midpoints="true" />
<title
@@ -1132,78 +1132,6 @@
y="125.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">PENDING</tspan></text>
</g>
<g
inkscape:label="pod 2"
id="g1233"
style="display:inline">
<rect
y="139.72913"
x="287.1362"
height="36.022667"
width="174.12718"
id="rect15580"
style="display:inline;opacity:1;fill:#ffaaaa;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)" />
<text
id="text15584"
y="166.5461"
x="292.32904"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
xml:space="preserve"><tspan
style="stroke-width:0.69919914"
y="166.5461"
x="292.32904"
id="tspan15582"
sodipodi:role="line">Pod</tspan></text>
<text
id="text15598"
y="165.23392"
x="351.05563"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
xml:space="preserve"
inkscape:label="pod 2 status"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583"
y="165.23392"
x="351.05563"
id="tspan15596"
sodipodi:role="line">PENDING</tspan></text>
</g>
<g
inkscape:label="pod 3"
id="g1226"
style="display:inline">
<rect
style="display:inline;opacity:1;fill:#ffaaaa;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)"
id="rect15586"
width="174.12718"
height="36.022667"
x="287.1362"
y="179.72913"
inkscape:label="rectangle" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
x="292.32904"
y="206.5461"
id="text15590"
inkscape:label="label"><tspan
sodipodi:role="line"
id="tspan15588"
x="292.32904"
y="206.5461"
style="stroke-width:0.69919914">Pod</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
x="351.05563"
y="205.23392"
id="text15602"
inkscape:label="status"><tspan
sodipodi:role="line"
id="tspan15600"
x="351.05563"
y="205.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">PENDING</tspan></text>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View File

@@ -13,7 +13,7 @@
viewBox="0 0 1600 900"
version="1.1"
id="svg696"
sodipodi:docname="how-k8s-works-14.svg"
sodipodi:docname="14.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
enable-background="new">
<metadata
@@ -42,12 +42,12 @@
id="namedview698"
showgrid="false"
inkscape:zoom="0.64"
inkscape:cx="796.38378"
inkscape:cx="521.38378"
inkscape:cy="596.50212"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-y="1098"
inkscape:window-maximized="0"
inkscape:current-layer="how-does-k8s-work"
inkscape:current-layer="g3409"
units="px"
inkscape:snap-object-midpoints="true" />
<title
@@ -1132,78 +1132,6 @@
y="125.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">→ node 1</tspan></text>
</g>
<g
inkscape:label="pod 2"
id="g1233"
style="display:inline">
<rect
y="139.72913"
x="287.1362"
height="36.022667"
width="174.12718"
id="rect15580"
style="display:inline;opacity:1;fill:#ffaaaa;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)" />
<text
id="text15584"
y="166.5461"
x="292.32904"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
xml:space="preserve"><tspan
style="stroke-width:0.69919914"
y="166.5461"
x="292.32904"
id="tspan15582"
sodipodi:role="line">Pod</tspan></text>
<text
id="text15598"
y="165.23392"
x="351.05563"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
xml:space="preserve"
inkscape:label="pod 2 status"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583"
y="165.23392"
x="351.05563"
id="tspan15596"
sodipodi:role="line">→ node 2</tspan></text>
</g>
<g
inkscape:label="pod 3"
id="g1226"
style="display:inline">
<rect
style="display:inline;opacity:1;fill:#ffaaaa;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)"
id="rect15586"
width="174.12718"
height="36.022667"
x="287.1362"
y="179.72913"
inkscape:label="rectangle" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
x="292.32904"
y="206.5461"
id="text15590"
inkscape:label="label"><tspan
sodipodi:role="line"
id="tspan15588"
x="292.32904"
y="206.5461"
style="stroke-width:0.69919914">Pod</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
x="351.05563"
y="205.23392"
id="text15602"
inkscape:label="status"><tspan
sodipodi:role="line"
id="tspan15600"
x="351.05563"
y="205.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">→ node 1</tspan></text>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View File

@@ -13,7 +13,7 @@
viewBox="0 0 1600 900"
version="1.1"
id="svg696"
sodipodi:docname="how-k8s-works-15.svg"
sodipodi:docname="15.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
enable-background="new">
<metadata
@@ -42,12 +42,12 @@
id="namedview698"
showgrid="false"
inkscape:zoom="0.64"
inkscape:cx="796.38378"
inkscape:cx="521.38378"
inkscape:cy="596.50212"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-y="1098"
inkscape:window-maximized="0"
inkscape:current-layer="g4090"
inkscape:current-layer="g3409"
units="px"
inkscape:snap-object-midpoints="true" />
<title
@@ -1132,78 +1132,6 @@
y="125.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">→ node 1</tspan></text>
</g>
<g
inkscape:label="pod 2"
id="g1233"
style="display:inline">
<rect
y="139.72913"
x="287.1362"
height="36.022667"
width="174.12718"
id="rect15580"
style="display:inline;opacity:1;fill:#cccccc;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)" />
<text
id="text15584"
y="166.5461"
x="292.32904"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
xml:space="preserve"><tspan
style="stroke-width:0.69919914"
y="166.5461"
x="292.32904"
id="tspan15582"
sodipodi:role="line">Pod</tspan></text>
<text
id="text15598"
y="165.23392"
x="351.05563"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
xml:space="preserve"
inkscape:label="pod 2 status"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583"
y="165.23392"
x="351.05563"
id="tspan15596"
sodipodi:role="line">→ node 2</tspan></text>
</g>
<g
inkscape:label="pod 3"
id="g1226"
style="display:inline">
<rect
style="display:inline;opacity:1;fill:#cccccc;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)"
id="rect15586"
width="174.12718"
height="36.022667"
x="287.1362"
y="179.72913"
inkscape:label="rectangle" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
x="292.32904"
y="206.5461"
id="text15590"
inkscape:label="label"><tspan
sodipodi:role="line"
id="tspan15588"
x="292.32904"
y="206.5461"
style="stroke-width:0.69919914">Pod</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
x="351.05563"
y="205.23392"
id="text15602"
inkscape:label="status"><tspan
sodipodi:role="line"
id="tspan15600"
x="351.05563"
y="205.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">→ node 1</tspan></text>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View File

@@ -13,7 +13,7 @@
viewBox="0 0 1600 900"
version="1.1"
id="svg696"
sodipodi:docname="how-k8s-works-16.svg"
sodipodi:docname="16.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
enable-background="new">
<metadata
@@ -42,12 +42,12 @@
id="namedview698"
showgrid="false"
inkscape:zoom="0.64"
inkscape:cx="796.38378"
inkscape:cx="527.63378"
inkscape:cy="596.50212"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-y="1098"
inkscape:window-maximized="0"
inkscape:current-layer="g1226"
inkscape:current-layer="g3958"
units="px"
inkscape:snap-object-midpoints="true" />
<title
@@ -215,7 +215,7 @@
<path
id="path2325"
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
style="fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill:#cccccc;fill-opacity:1"
transform="scale(0.2)" />
</marker>
<marker
@@ -229,7 +229,7 @@
<path
id="path2179"
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
style="fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill:#cccccc;fill-opacity:1"
transform="scale(-0.2)" />
</marker>
<marker
@@ -622,7 +622,7 @@
inkscape:label="processes">
<rect
transform="matrix(0.81282896,0,0,0.58385092,716.88649,392.00625)"
style="display:inline;opacity:1;vector-effect:none;fill:#ffaaaa;fill-opacity:1;stroke:none;stroke-width:2.78697062;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter-1)"
style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2.78697062;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter-1)"
id="rect10198"
width="231.99153"
height="125.52966"
@@ -917,22 +917,6 @@
d="m 8755,7700 c -213,-13 -315,-58 -382,-169 -60,-100 -68,-159 -68,-504 0,-264 -2,-310 -15,-316 -8,-5 -51,-16 -95,-26 -201,-44 -451,-139 -671,-255 -134,-71 -173,-81 -217,-59 -12,6 -112,102 -222,212 -214,216 -271,259 -369,279 -73,16 -160,-5 -244,-58 -68,-43 -319,-288 -405,-394 -111,-138 -147,-256 -113,-372 28,-98 100,-189 320,-407 113,-111 206,-207 206,-212 0,-5 -29,-67 -64,-137 -111,-223 -195,-472 -222,-661 -11,-78 -18,-99 -39,-120 l -26,-26 -367,-1 c -376,-1 -392,-2 -494,-42 -39,-16 -107,-80 -127,-121 -85,-169 -78,-795 9,-936 55,-89 161,-141 309,-152 46,-3 238,0 428,7 294,11 346,11 357,-1 8,-8 24,-45 36,-84 56,-176 144,-367 269,-585 40,-70 71,-135 71,-151 0,-21 -14,-39 -62,-81 -115,-98 -452,-420 -511,-487 -66,-76 -113,-165 -123,-233 -19,-137 109,-320 405,-578 73,-63 153,-127 179,-142 181,-105 384,-23 638,258 49,55 147,166 217,247 112,129 131,147 158,147 18,0 86,-29 172,-74 192,-101 283,-140 477,-206 l 165,-55 v -115 c -1,-63 -5,-236 -9,-385 -8,-238 -7,-280 8,-355 22,-108 58,-179 116,-234 83,-78 147,-91 555,-113 106,-6 253,13 350,44 145,47 205,136 227,339 9,85 8,158 -6,397 -17,266 -17,296 -3,323 20,38 57,54 227,100 169,45 288,89 461,170 152,71 194,78 263,44 64,-31 132,-96 279,-267 150,-176 212,-232 305,-275 55,-26 71,-30 130,-26 42,2 84,12 112,25 67,33 200,143 335,278 189,189 275,317 283,425 11,147 -80,278 -375,537 -232,204 -243,235 -140,406 78,128 99,179 152,362 52,177 88,263 130,314 50,58 67,61 299,51 357,-16 507,11 621,111 81,72 112,165 126,379 22,361 22,349 0,453 -34,168 -93,243 -226,287 -88,29 -251,40 -440,28 -275,-17 -345,-16 -385,8 -46,27 -75,80 -100,185 -29,126 -42,157 -131,320 -45,82 -94,181 -110,221 -29,75 -37,154 -19,188 5,10 82,83 171,162 197,174 286,275 342,387 40,81 42,89 42,175 0,81 -3,98 -30,149 -50,99 -374,445 -487,520 -121,80 -220,91 -333,38 -116,-54 -220,-148 -438,-398 -117,-133 -156,-163 -211,-163 -48,0 -89,18 -178,78 -99,67 -103,68 -353,162 -228,86 -322,127 -344,154 -10,12 -10,43 0,163 18,213 16,481 -4,566 -34,137 -96,215 -206,259 -50,20 -76,22 -256,24 -110,1 -258,-2 -330,-6 z m 273,-2665 c 374,-61 734,-332 917,-690 221,-434 146,-893 -202,-1226 -223,-214 -467,-310 -751,-296 -509,25 -986,432 -1124,957 -28,110 -35,292 -14,404 47,248 190,477 402,642 236,184 494,254 772,209 z"
inkscape:connector-curvature="0" />
</g>
<g
inkscape:label="gear kubelet bottom"
style="display:inline;fill:#000000;stroke:none"
transform="matrix(0.00664382,0,0,-0.00664382,1197.6781,433.7108)"
id="g15716">
<path
style="fill:#000000"
inkscape:connector-curvature="0"
d="m 3178,10980 c -109,-24 -156,-48 -202,-102 -77,-89 -98,-254 -77,-588 7,-116 7,-187 1,-211 -17,-59 -55,-87 -156,-110 -144,-33 -203,-54 -355,-125 -184,-85 -283,-124 -314,-124 -28,0 -28,0 -189,184 -206,237 -328,326 -458,334 -59,4 -75,0 -130,-25 -78,-37 -132,-86 -313,-280 -163,-175 -205,-241 -212,-337 -10,-130 39,-209 284,-452 106,-106 193,-196 193,-202 0,-5 -25,-50 -56,-98 -88,-141 -179,-338 -240,-521 -65,-195 -66,-197 -101,-221 -24,-15 -58,-17 -313,-17 -247,-1 -291,-3 -331,-18 C 150,8044 96,7999 64,7945 5,7844 -18,7561 15,7341 c 26,-171 62,-247 143,-301 88,-58 118,-63 451,-69 l 305,-6 32,-100 c 17,-55 44,-131 59,-170 42,-109 160,-334 211,-400 67,-87 78,-118 59,-155 -8,-16 -70,-82 -138,-147 -300,-287 -368,-369 -386,-466 -11,-59 2,-128 33,-181 110,-185 442,-493 569,-527 93,-25 201,14 309,110 35,31 140,139 234,241 95,102 188,200 208,219 l 35,34 118,-55 c 179,-84 294,-125 574,-202 93,-26 92,-21 79,-256 -13,-265 -13,-526 1,-592 21,-98 65,-165 130,-198 88,-45 152,-54 384,-54 402,2 489,31 562,191 55,120 64,260 37,632 -12,160 -13,230 -6,247 9,19 40,32 171,74 196,62 300,103 454,181 65,33 123,59 127,57 4,-2 93,-97 197,-213 311,-344 393,-405 552,-405 101,0 156,32 333,194 253,233 323,333 323,461 0,61 -5,79 -35,135 -41,76 -146,190 -310,333 -195,172 -220,199 -220,238 0,23 26,81 89,194 88,158 141,273 197,430 55,153 110,182 323,171 384,-19 419,-19 486,-1 87,23 137,61 169,127 40,83 51,177 50,433 -1,203 -3,239 -23,310 -29,110 -61,152 -141,192 -96,48 -177,57 -410,47 -265,-12 -300,-11 -338,5 -49,21 -70,58 -102,185 -32,123 -38,138 -147,346 -40,74 -79,162 -88,194 -28,96 -21,107 175,294 183,176 250,258 282,349 40,114 4,248 -98,363 -302,341 -390,409 -524,410 -136,0 -248,-84 -515,-385 -101,-114 -137,-143 -186,-151 -35,-6 -56,3 -229,99 -36,19 -135,57 -220,82 -187,57 -291,104 -321,146 -21,30 -21,34 -13,217 16,337 -1,480 -67,584 -66,102 -140,134 -342,149 -287,20 -346,20 -439,-1 z m 417,-2460 c 230,-33 421,-122 573,-265 176,-166 263,-357 279,-612 15,-258 -65,-503 -224,-682 -321,-360 -957,-435 -1393,-163 -189,117 -322,293 -386,509 -32,109 -44,319 -24,440 74,463 476,779 995,782 61,0 142,-4 180,-9 z"
id="path15712" />
<path
style="fill:#000000"
inkscape:connector-curvature="0"
d="m 8755,7700 c -213,-13 -315,-58 -382,-169 -60,-100 -68,-159 -68,-504 0,-264 -2,-310 -15,-316 -8,-5 -51,-16 -95,-26 -201,-44 -451,-139 -671,-255 -134,-71 -173,-81 -217,-59 -12,6 -112,102 -222,212 -214,216 -271,259 -369,279 -73,16 -160,-5 -244,-58 -68,-43 -319,-288 -405,-394 -111,-138 -147,-256 -113,-372 28,-98 100,-189 320,-407 113,-111 206,-207 206,-212 0,-5 -29,-67 -64,-137 -111,-223 -195,-472 -222,-661 -11,-78 -18,-99 -39,-120 l -26,-26 -367,-1 c -376,-1 -392,-2 -494,-42 -39,-16 -107,-80 -127,-121 -85,-169 -78,-795 9,-936 55,-89 161,-141 309,-152 46,-3 238,0 428,7 294,11 346,11 357,-1 8,-8 24,-45 36,-84 56,-176 144,-367 269,-585 40,-70 71,-135 71,-151 0,-21 -14,-39 -62,-81 -115,-98 -452,-420 -511,-487 -66,-76 -113,-165 -123,-233 -19,-137 109,-320 405,-578 73,-63 153,-127 179,-142 181,-105 384,-23 638,258 49,55 147,166 217,247 112,129 131,147 158,147 18,0 86,-29 172,-74 192,-101 283,-140 477,-206 l 165,-55 v -115 c -1,-63 -5,-236 -9,-385 -8,-238 -7,-280 8,-355 22,-108 58,-179 116,-234 83,-78 147,-91 555,-113 106,-6 253,13 350,44 145,47 205,136 227,339 9,85 8,158 -6,397 -17,266 -17,296 -3,323 20,38 57,54 227,100 169,45 288,89 461,170 152,71 194,78 263,44 64,-31 132,-96 279,-267 150,-176 212,-232 305,-275 55,-26 71,-30 130,-26 42,2 84,12 112,25 67,33 200,143 335,278 189,189 275,317 283,425 11,147 -80,278 -375,537 -232,204 -243,235 -140,406 78,128 99,179 152,362 52,177 88,263 130,314 50,58 67,61 299,51 357,-16 507,11 621,111 81,72 112,165 126,379 22,361 22,349 0,453 -34,168 -93,243 -226,287 -88,29 -251,40 -440,28 -275,-17 -345,-16 -385,8 -46,27 -75,80 -100,185 -29,126 -42,157 -131,320 -45,82 -94,181 -110,221 -29,75 -37,154 -19,188 5,10 82,83 171,162 197,174 286,275 342,387 40,81 42,89 42,175 0,81 -3,98 -30,149 -50,99 -374,445 -487,520 -121,80 -220,91 -333,38 -116,-54 -220,-148 -438,-398 -117,-133 -156,-163 -211,-163 -48,0 -89,18 -178,78 -99,67 -103,68 -353,162 -228,86 -322,127 -344,154 -10,12 -10,43 0,163 18,213 16,481 -4,566 -34,137 -96,215 -206,259 -50,20 -76,22 -256,24 -110,1 -258,-2 -330,-6 z m 273,-2665 c 374,-61 734,-332 917,-690 221,-434 146,-893 -202,-1226 -223,-214 -467,-310 -751,-296 -509,25 -986,432 -1124,957 -28,110 -35,292 -14,404 47,248 190,477 402,642 236,184 494,254 772,209 z"
id="path15714" />
</g>
<g
inkscape:label="gear kubelet top"
id="g15722"
@@ -999,7 +983,7 @@
inkscape:connector-curvature="0"
id="path10622"
d="m 667.78448,388.64882 378.69472,37.60476"
style="display:inline;opacity:1;vector-effect:none;fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker2181);marker-end:url(#marker2327);paint-order:normal" />
style="display:inline;opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1;stroke:#cccccc;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker2181);marker-end:url(#marker2327);paint-order:normal" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
@@ -1132,78 +1116,6 @@
y="125.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">→ node 1</tspan></text>
</g>
<g
inkscape:label="pod 2"
id="g1233"
style="display:inline">
<rect
y="139.72913"
x="287.1362"
height="36.022667"
width="174.12718"
id="rect15580"
style="display:inline;opacity:1;fill:#ffaaaa;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)" />
<text
id="text15584"
y="166.5461"
x="292.32904"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
xml:space="preserve"><tspan
style="stroke-width:0.69919914"
y="166.5461"
x="292.32904"
id="tspan15582"
sodipodi:role="line">Pod</tspan></text>
<text
id="text15598"
y="165.23392"
x="351.05563"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
xml:space="preserve"
inkscape:label="pod 2 status"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583"
y="165.23392"
x="351.05563"
id="tspan15596"
sodipodi:role="line">→ node 2</tspan></text>
</g>
<g
inkscape:label="pod 3"
id="g1226"
style="display:inline">
<rect
style="display:inline;opacity:1;fill:#ffaaaa;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)"
id="rect15586"
width="174.12718"
height="36.022667"
x="287.1362"
y="179.72913"
inkscape:label="rectangle" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
x="292.32904"
y="206.5461"
id="text15590"
inkscape:label="label"><tspan
sodipodi:role="line"
id="tspan15588"
x="292.32904"
y="206.5461"
style="stroke-width:0.69919914">Pod</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
x="351.05563"
y="205.23392"
id="text15602"
inkscape:label="status"><tspan
sodipodi:role="line"
id="tspan15600"
x="351.05563"
y="205.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">→ node 1</tspan></text>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 73 KiB

View File

@@ -13,7 +13,7 @@
viewBox="0 0 1600 900"
version="1.1"
id="svg696"
sodipodi:docname="how-k8s-works-17.svg"
sodipodi:docname="17.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
enable-background="new">
<metadata
@@ -42,12 +42,12 @@
id="namedview698"
showgrid="false"
inkscape:zoom="0.64"
inkscape:cx="796.38378"
inkscape:cx="992.73727"
inkscape:cy="596.50212"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-y="1098"
inkscape:window-maximized="0"
inkscape:current-layer="g4153"
inkscape:current-layer="g10196"
units="px"
inkscape:snap-object-midpoints="true" />
<title
@@ -146,36 +146,6 @@
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
id="path2052" />
</marker>
<marker
inkscape:stockid="TriangleOutS"
orient="auto"
refY="0.0"
refX="0.0"
id="marker1984"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1982"
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
transform="scale(0.2)" />
</marker>
<marker
inkscape:stockid="TriangleInS"
orient="auto"
refY="0.0"
refX="0.0"
id="marker1196"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1194"
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
transform="scale(-0.2)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
@@ -588,12 +558,12 @@
<path
inkscape:connector-curvature="0"
d="M 68.458394,58.765531 H 59.79659 a 0.92615261,0.92615261 0 0 0 -0.918561,0.918561 v 8.661804 a 0.92615261,0.92615261 0 0 0 0.918561,0.926153 h 8.661804 a 0.92615261,0.92615261 0 0 0 0.888196,-0.926153 v -8.661804 a 0.92615261,0.92615261 0 0 0 -0.918561,-0.918561"
style="display:none;opacity:1;vector-effect:none;fill:#96bbf9;fill-opacity:1;stroke:none;stroke-width:0.7591415;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
style="display:inline;opacity:1;vector-effect:none;fill:#96bbf9;fill-opacity:1;stroke:none;stroke-width:0.7591415;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path10192" />
<path
inkscape:connector-curvature="0"
d="m 82.16849,58.067121 a 0.82746421,0.82746421 0 0 0 0.842647,-0.827464 V 55.888385 A 0.82746421,0.82746421 0 0 0 82.183672,55.06092 H 77.955254 V 51.098202 A 0.92615261,0.92615261 0 0 0 77.036693,50.179641 H 73.081566 V 45.973997 A 0.82746421,0.82746421 0 0 0 72.254102,45.146533 H 70.90283 a 0.82746421,0.82746421 0 0 0 -0.797098,0.827464 v 4.228418 h -4.478935 v -4.228418 a 0.82746421,0.82746421 0 0 0 -0.835056,-0.827464 h -1.336089 a 0.82746421,0.82746421 0 0 0 -0.827464,0.827464 v 4.228418 h -4.448569 v -4.228418 a 0.82746421,0.82746421 0 0 0 -0.827464,-0.827464 h -1.351272 a 0.82746421,0.82746421 0 0 0 -0.827464,0.827464 v 4.228418 h -3.947536 a 0.92615261,0.92615261 0 0 0 -0.926153,0.895787 v 3.939944 h -4.213235 a 0.82746421,0.82746421 0 0 0 -0.827464,0.827464 v 1.351272 a 0.82746421,0.82746421 0 0 0 0.827464,0.827464 h 4.213235 v 4.440978 h -4.213235 a 0.82746421,0.82746421 0 0 0 -0.827464,0.827464 v 1.374046 a 0.82746421,0.82746421 0 0 0 0.827464,0.835056 h 4.213235 v 4.448566 h -4.213235 a 0.82746421,0.82746421 0 0 0 -0.827464,0.827464 v 1.351272 a 0.82746421,0.82746421 0 0 0 0.827464,0.827464 h 4.213235 v 3.932354 a 0.92615261,0.92615261 0 0 0 0.918561,0.918561 h 3.955128 v 4.228419 a 0.82746421,0.82746421 0 0 0 0.827464,0.827464 h 1.351272 a 0.82746421,0.82746421 0 0 0 0.827464,-0.827464 v -4.228419 h 4.448569 v 4.228419 a 0.82746421,0.82746421 0 0 0 0.827464,0.827464 h 1.336089 a 0.82746421,0.82746421 0 0 0 0.827464,-0.827464 v -4.228419 h 4.486527 v 4.228419 a 0.82746421,0.82746421 0 0 0 0.827464,0.827464 h 1.351272 a 0.82746421,0.82746421 0 0 0 0.827464,-0.827464 v -4.228419 h 3.955127 a 0.92615261,0.92615261 0 0 0 0.888195,-0.918561 v -3.939945 h 4.213236 a 0.82746421,0.82746421 0 0 0 0.842647,-0.827464 V 70.790329 A 0.82746421,0.82746421 0 0 0 82.183672,69.962865 H 77.955254 V 65.52189 h 4.213236 a 0.82746421,0.82746421 0 0 0 0.842647,-0.835056 v -1.34368 A 0.82746421,0.82746421 0 0 0 82.16849,62.485324 H 77.955254 V 58.067121 Z M 74.842774,74.76823 H 53.404619 V 53.299712 h 21.438155 z"
style="display:none;opacity:1;vector-effect:none;fill:#96bbf9;fill-opacity:1;stroke:none;stroke-width:0.7591415;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
style="display:inline;opacity:1;vector-effect:none;fill:#96bbf9;fill-opacity:1;stroke:none;stroke-width:0.7591415;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path10194" />
</g>
<g
@@ -622,7 +592,7 @@
inkscape:label="processes">
<rect
transform="matrix(0.81282896,0,0,0.58385092,716.88649,392.00625)"
style="display:inline;opacity:1;vector-effect:none;fill:#ffaaaa;fill-opacity:1;stroke:none;stroke-width:2.78697062;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter-1)"
style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2.78697062;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter-1)"
id="rect10198"
width="231.99153"
height="125.52966"
@@ -756,70 +726,6 @@
id="g4132"
inkscape:label="pods"
style="display:inline">
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffaaaa;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1065.6051,588.949 38.7689,-11.2425 38.7688,11.2425 -38.7688,11.24254 z"
id="path10214" />
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffaaaa;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1065.6051,593.25418 v 41.2523 l 36.1218,20.00898 0.1788,-50.46488 z"
id="path10216" />
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffaaaa;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1143.1428,593.25418 v 41.2523 l -36.1217,20.00898 -0.1788,-50.46488 z"
id="path10218" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.02975464px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.55074388"
x="1084.0165"
y="674.76129"
id="text10222"><tspan
sodipodi:role="line"
id="tspan10220"
x="1084.0165"
y="674.76129"
style="stroke-width:0.55074388">pod</tspan></text>
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffaaaa;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1177.078,188.949 38.7689,-11.2425 38.7688,11.2425 -38.7688,11.24254 z"
id="path910" />
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffaaaa;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1177.078,193.25418 v 41.2523 l 36.1218,20.00898 0.1788,-50.46488 z"
id="path912" />
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffaaaa;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1254.6157,193.25418 v 41.2523 l -36.1217,20.00898 -0.1788,-50.46488 z"
id="path914" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.02975464px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.55074388"
x="1195.4893"
y="274.76129"
id="text1121"><tspan
sodipodi:role="line"
id="tspan1119"
x="1195.4893"
y="274.76129"
style="stroke-width:0.55074388">pod</tspan></text>
<path
id="path1123"
d="m 1065.6051,188.949 38.7689,-11.2425 38.7688,11.2425 -38.7688,11.24254 z"
@@ -885,22 +791,6 @@
d="m 8755,7700 c -213,-13 -315,-58 -382,-169 -60,-100 -68,-159 -68,-504 0,-264 -2,-310 -15,-316 -8,-5 -51,-16 -95,-26 -201,-44 -451,-139 -671,-255 -134,-71 -173,-81 -217,-59 -12,6 -112,102 -222,212 -214,216 -271,259 -369,279 -73,16 -160,-5 -244,-58 -68,-43 -319,-288 -405,-394 -111,-138 -147,-256 -113,-372 28,-98 100,-189 320,-407 113,-111 206,-207 206,-212 0,-5 -29,-67 -64,-137 -111,-223 -195,-472 -222,-661 -11,-78 -18,-99 -39,-120 l -26,-26 -367,-1 c -376,-1 -392,-2 -494,-42 -39,-16 -107,-80 -127,-121 -85,-169 -78,-795 9,-936 55,-89 161,-141 309,-152 46,-3 238,0 428,7 294,11 346,11 357,-1 8,-8 24,-45 36,-84 56,-176 144,-367 269,-585 40,-70 71,-135 71,-151 0,-21 -14,-39 -62,-81 -115,-98 -452,-420 -511,-487 -66,-76 -113,-165 -123,-233 -19,-137 109,-320 405,-578 73,-63 153,-127 179,-142 181,-105 384,-23 638,258 49,55 147,166 217,247 112,129 131,147 158,147 18,0 86,-29 172,-74 192,-101 283,-140 477,-206 l 165,-55 v -115 c -1,-63 -5,-236 -9,-385 -8,-238 -7,-280 8,-355 22,-108 58,-179 116,-234 83,-78 147,-91 555,-113 106,-6 253,13 350,44 145,47 205,136 227,339 9,85 8,158 -6,397 -17,266 -17,296 -3,323 20,38 57,54 227,100 169,45 288,89 461,170 152,71 194,78 263,44 64,-31 132,-96 279,-267 150,-176 212,-232 305,-275 55,-26 71,-30 130,-26 42,2 84,12 112,25 67,33 200,143 335,278 189,189 275,317 283,425 11,147 -80,278 -375,537 -232,204 -243,235 -140,406 78,128 99,179 152,362 52,177 88,263 130,314 50,58 67,61 299,51 357,-16 507,11 621,111 81,72 112,165 126,379 22,361 22,349 0,453 -34,168 -93,243 -226,287 -88,29 -251,40 -440,28 -275,-17 -345,-16 -385,8 -46,27 -75,80 -100,185 -29,126 -42,157 -131,320 -45,82 -94,181 -110,221 -29,75 -37,154 -19,188 5,10 82,83 171,162 197,174 286,275 342,387 40,81 42,89 42,175 0,81 -3,98 -30,149 -50,99 -374,445 -487,520 -121,80 -220,91 -333,38 -116,-54 -220,-148 -438,-398 -117,-133 -156,-163 -211,-163 -48,0 -89,18 -178,78 -99,67 -103,68 -353,162 -228,86 -322,127 -344,154 -10,12 -10,43 0,163 18,213 16,481 -4,566 -34,137 -96,215 -206,259 -50,20 -76,22 -256,24 -110,1 -258,-2 -330,-6 z m 273,-2665 c 374,-61 734,-332 917,-690 221,-434 146,-893 -202,-1226 -223,-214 -467,-310 -751,-296 -509,25 -986,432 -1124,957 -28,110 -35,292 -14,404 47,248 190,477 402,642 236,184 494,254 772,209 z"
inkscape:connector-curvature="0" />
</g>
<g
inkscape:label="gear kubelet bottom"
style="display:inline;fill:#000000;stroke:none"
transform="matrix(0.00664382,0,0,-0.00664382,1197.6781,433.7108)"
id="g15716">
<path
style="fill:#000000"
inkscape:connector-curvature="0"
d="m 3178,10980 c -109,-24 -156,-48 -202,-102 -77,-89 -98,-254 -77,-588 7,-116 7,-187 1,-211 -17,-59 -55,-87 -156,-110 -144,-33 -203,-54 -355,-125 -184,-85 -283,-124 -314,-124 -28,0 -28,0 -189,184 -206,237 -328,326 -458,334 -59,4 -75,0 -130,-25 -78,-37 -132,-86 -313,-280 -163,-175 -205,-241 -212,-337 -10,-130 39,-209 284,-452 106,-106 193,-196 193,-202 0,-5 -25,-50 -56,-98 -88,-141 -179,-338 -240,-521 -65,-195 -66,-197 -101,-221 -24,-15 -58,-17 -313,-17 -247,-1 -291,-3 -331,-18 C 150,8044 96,7999 64,7945 5,7844 -18,7561 15,7341 c 26,-171 62,-247 143,-301 88,-58 118,-63 451,-69 l 305,-6 32,-100 c 17,-55 44,-131 59,-170 42,-109 160,-334 211,-400 67,-87 78,-118 59,-155 -8,-16 -70,-82 -138,-147 -300,-287 -368,-369 -386,-466 -11,-59 2,-128 33,-181 110,-185 442,-493 569,-527 93,-25 201,14 309,110 35,31 140,139 234,241 95,102 188,200 208,219 l 35,34 118,-55 c 179,-84 294,-125 574,-202 93,-26 92,-21 79,-256 -13,-265 -13,-526 1,-592 21,-98 65,-165 130,-198 88,-45 152,-54 384,-54 402,2 489,31 562,191 55,120 64,260 37,632 -12,160 -13,230 -6,247 9,19 40,32 171,74 196,62 300,103 454,181 65,33 123,59 127,57 4,-2 93,-97 197,-213 311,-344 393,-405 552,-405 101,0 156,32 333,194 253,233 323,333 323,461 0,61 -5,79 -35,135 -41,76 -146,190 -310,333 -195,172 -220,199 -220,238 0,23 26,81 89,194 88,158 141,273 197,430 55,153 110,182 323,171 384,-19 419,-19 486,-1 87,23 137,61 169,127 40,83 51,177 50,433 -1,203 -3,239 -23,310 -29,110 -61,152 -141,192 -96,48 -177,57 -410,47 -265,-12 -300,-11 -338,5 -49,21 -70,58 -102,185 -32,123 -38,138 -147,346 -40,74 -79,162 -88,194 -28,96 -21,107 175,294 183,176 250,258 282,349 40,114 4,248 -98,363 -302,341 -390,409 -524,410 -136,0 -248,-84 -515,-385 -101,-114 -137,-143 -186,-151 -35,-6 -56,3 -229,99 -36,19 -135,57 -220,82 -187,57 -291,104 -321,146 -21,30 -21,34 -13,217 16,337 -1,480 -67,584 -66,102 -140,134 -342,149 -287,20 -346,20 -439,-1 z m 417,-2460 c 230,-33 421,-122 573,-265 176,-166 263,-357 279,-612 15,-258 -65,-503 -224,-682 -321,-360 -957,-435 -1393,-163 -189,117 -322,293 -386,509 -32,109 -44,319 -24,440 74,463 476,779 995,782 61,0 142,-4 180,-9 z"
id="path15712" />
<path
style="fill:#000000"
inkscape:connector-curvature="0"
d="m 8755,7700 c -213,-13 -315,-58 -382,-169 -60,-100 -68,-159 -68,-504 0,-264 -2,-310 -15,-316 -8,-5 -51,-16 -95,-26 -201,-44 -451,-139 -671,-255 -134,-71 -173,-81 -217,-59 -12,6 -112,102 -222,212 -214,216 -271,259 -369,279 -73,16 -160,-5 -244,-58 -68,-43 -319,-288 -405,-394 -111,-138 -147,-256 -113,-372 28,-98 100,-189 320,-407 113,-111 206,-207 206,-212 0,-5 -29,-67 -64,-137 -111,-223 -195,-472 -222,-661 -11,-78 -18,-99 -39,-120 l -26,-26 -367,-1 c -376,-1 -392,-2 -494,-42 -39,-16 -107,-80 -127,-121 -85,-169 -78,-795 9,-936 55,-89 161,-141 309,-152 46,-3 238,0 428,7 294,11 346,11 357,-1 8,-8 24,-45 36,-84 56,-176 144,-367 269,-585 40,-70 71,-135 71,-151 0,-21 -14,-39 -62,-81 -115,-98 -452,-420 -511,-487 -66,-76 -113,-165 -123,-233 -19,-137 109,-320 405,-578 73,-63 153,-127 179,-142 181,-105 384,-23 638,258 49,55 147,166 217,247 112,129 131,147 158,147 18,0 86,-29 172,-74 192,-101 283,-140 477,-206 l 165,-55 v -115 c -1,-63 -5,-236 -9,-385 -8,-238 -7,-280 8,-355 22,-108 58,-179 116,-234 83,-78 147,-91 555,-113 106,-6 253,13 350,44 145,47 205,136 227,339 9,85 8,158 -6,397 -17,266 -17,296 -3,323 20,38 57,54 227,100 169,45 288,89 461,170 152,71 194,78 263,44 64,-31 132,-96 279,-267 150,-176 212,-232 305,-275 55,-26 71,-30 130,-26 42,2 84,12 112,25 67,33 200,143 335,278 189,189 275,317 283,425 11,147 -80,278 -375,537 -232,204 -243,235 -140,406 78,128 99,179 152,362 52,177 88,263 130,314 50,58 67,61 299,51 357,-16 507,11 621,111 81,72 112,165 126,379 22,361 22,349 0,453 -34,168 -93,243 -226,287 -88,29 -251,40 -440,28 -275,-17 -345,-16 -385,8 -46,27 -75,80 -100,185 -29,126 -42,157 -131,320 -45,82 -94,181 -110,221 -29,75 -37,154 -19,188 5,10 82,83 171,162 197,174 286,275 342,387 40,81 42,89 42,175 0,81 -3,98 -30,149 -50,99 -374,445 -487,520 -121,80 -220,91 -333,38 -116,-54 -220,-148 -438,-398 -117,-133 -156,-163 -211,-163 -48,0 -89,18 -178,78 -99,67 -103,68 -353,162 -228,86 -322,127 -344,154 -10,12 -10,43 0,163 18,213 16,481 -4,566 -34,137 -96,215 -206,259 -50,20 -76,22 -256,24 -110,1 -258,-2 -330,-6 z m 273,-2665 c 374,-61 734,-332 917,-690 221,-434 146,-893 -202,-1226 -223,-214 -467,-310 -751,-296 -509,25 -986,432 -1124,957 -28,110 -35,292 -14,404 47,248 190,477 402,642 236,184 494,254 772,209 z"
id="path15714" />
</g>
<g
inkscape:label="gear kubelet top"
id="g15722"
@@ -947,13 +837,6 @@
id="path6537"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path1190"
d="m 1111.0371,563.36562 20.858,-81.27407"
style="display:inline;fill:#ff0000;stroke:#ff0000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker1196);marker-end:url(#marker1984);paint-order:normal"
inkscape:label="node bottom left" />
<path
style="display:none;fill:#cccccc;stroke:#cccccc;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker3586);marker-end:url(#marker3758);paint-order:normal"
d="m 1208.6771,562.24204 -20.5498,-80.96111"
@@ -975,13 +858,6 @@
d="m 1111.0371,163.36562 20.858,-81.27407"
style="display:inline;fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker2054);marker-end:url(#marker2202);paint-order:normal"
inkscape:label="node top left" />
<path
style="display:inline;fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker2634);marker-end:url(#marker2794);paint-order:normal"
d="M 1208.6771,162.24204 1188.1273,81.28093"
id="path2050"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:label="node top right" />
<path
inkscape:label="node top"
style="display:inline;opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1;stroke:#cccccc;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker1880);marker-end:url(#marker2026);paint-order:normal"
@@ -1100,78 +976,6 @@
y="125.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">CREATING</tspan></text>
</g>
<g
inkscape:label="pod 2"
id="g1233"
style="display:inline">
<rect
y="139.72913"
x="287.1362"
height="36.022667"
width="174.12718"
id="rect15580"
style="display:inline;opacity:1;fill:#cccccc;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)" />
<text
id="text15584"
y="166.5461"
x="292.32904"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
xml:space="preserve"><tspan
style="stroke-width:0.69919914"
y="166.5461"
x="292.32904"
id="tspan15582"
sodipodi:role="line">Pod</tspan></text>
<text
id="text15598"
y="165.23392"
x="351.05563"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
xml:space="preserve"
inkscape:label="pod 2 status"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583"
y="165.23392"
x="351.05563"
id="tspan15596"
sodipodi:role="line">CREATING</tspan></text>
</g>
<g
inkscape:label="pod 3"
id="g1226"
style="display:inline">
<rect
style="display:inline;opacity:1;fill:#cccccc;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)"
id="rect15586"
width="174.12718"
height="36.022667"
x="287.1362"
y="179.72913"
inkscape:label="rectangle" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
x="292.32904"
y="206.5461"
id="text15590"
inkscape:label="label"><tspan
sodipodi:role="line"
id="tspan15588"
x="292.32904"
y="206.5461"
style="stroke-width:0.69919914">Pod</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
x="351.05563"
y="205.23392"
id="text15602"
inkscape:label="status"><tspan
sodipodi:role="line"
id="tspan15600"
x="351.05563"
y="205.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">CREATING</tspan></text>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -13,7 +13,7 @@
viewBox="0 0 1600 900"
version="1.1"
id="svg696"
sodipodi:docname="how-k8s-works-18.svg"
sodipodi:docname="18.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
enable-background="new">
<metadata
@@ -42,12 +42,12 @@
id="namedview698"
showgrid="false"
inkscape:zoom="0.64"
inkscape:cx="796.38378"
inkscape:cx="246.38378"
inkscape:cy="596.50212"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-y="1098"
inkscape:window-maximized="0"
inkscape:current-layer="g3409"
inkscape:current-layer="how-does-k8s-work"
units="px"
inkscape:snap-object-midpoints="true" />
<title
@@ -146,36 +146,6 @@
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
id="path2052" />
</marker>
<marker
inkscape:stockid="TriangleOutS"
orient="auto"
refY="0.0"
refX="0.0"
id="marker1984"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1982"
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
style="fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill:#cccccc;fill-opacity:1"
transform="scale(0.2)" />
</marker>
<marker
inkscape:stockid="TriangleInS"
orient="auto"
refY="0.0"
refX="0.0"
id="marker1196"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1194"
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
style="fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill:#cccccc;fill-opacity:1"
transform="scale(-0.2)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
@@ -215,7 +185,7 @@
<path
id="path2325"
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
style="fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill:#cccccc;fill-opacity:1"
transform="scale(0.2)" />
</marker>
<marker
@@ -229,7 +199,7 @@
<path
id="path2179"
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
style="fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill:#cccccc;fill-opacity:1"
transform="scale(-0.2)" />
</marker>
<marker
@@ -588,12 +558,12 @@
<path
inkscape:connector-curvature="0"
d="M 68.458394,58.765531 H 59.79659 a 0.92615261,0.92615261 0 0 0 -0.918561,0.918561 v 8.661804 a 0.92615261,0.92615261 0 0 0 0.918561,0.926153 h 8.661804 a 0.92615261,0.92615261 0 0 0 0.888196,-0.926153 v -8.661804 a 0.92615261,0.92615261 0 0 0 -0.918561,-0.918561"
style="display:none;opacity:1;vector-effect:none;fill:#96bbf9;fill-opacity:1;stroke:none;stroke-width:0.7591415;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
style="display:inline;opacity:1;vector-effect:none;fill:#96bbf9;fill-opacity:1;stroke:none;stroke-width:0.7591415;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path10192" />
<path
inkscape:connector-curvature="0"
d="m 82.16849,58.067121 a 0.82746421,0.82746421 0 0 0 0.842647,-0.827464 V 55.888385 A 0.82746421,0.82746421 0 0 0 82.183672,55.06092 H 77.955254 V 51.098202 A 0.92615261,0.92615261 0 0 0 77.036693,50.179641 H 73.081566 V 45.973997 A 0.82746421,0.82746421 0 0 0 72.254102,45.146533 H 70.90283 a 0.82746421,0.82746421 0 0 0 -0.797098,0.827464 v 4.228418 h -4.478935 v -4.228418 a 0.82746421,0.82746421 0 0 0 -0.835056,-0.827464 h -1.336089 a 0.82746421,0.82746421 0 0 0 -0.827464,0.827464 v 4.228418 h -4.448569 v -4.228418 a 0.82746421,0.82746421 0 0 0 -0.827464,-0.827464 h -1.351272 a 0.82746421,0.82746421 0 0 0 -0.827464,0.827464 v 4.228418 h -3.947536 a 0.92615261,0.92615261 0 0 0 -0.926153,0.895787 v 3.939944 h -4.213235 a 0.82746421,0.82746421 0 0 0 -0.827464,0.827464 v 1.351272 a 0.82746421,0.82746421 0 0 0 0.827464,0.827464 h 4.213235 v 4.440978 h -4.213235 a 0.82746421,0.82746421 0 0 0 -0.827464,0.827464 v 1.374046 a 0.82746421,0.82746421 0 0 0 0.827464,0.835056 h 4.213235 v 4.448566 h -4.213235 a 0.82746421,0.82746421 0 0 0 -0.827464,0.827464 v 1.351272 a 0.82746421,0.82746421 0 0 0 0.827464,0.827464 h 4.213235 v 3.932354 a 0.92615261,0.92615261 0 0 0 0.918561,0.918561 h 3.955128 v 4.228419 a 0.82746421,0.82746421 0 0 0 0.827464,0.827464 h 1.351272 a 0.82746421,0.82746421 0 0 0 0.827464,-0.827464 v -4.228419 h 4.448569 v 4.228419 a 0.82746421,0.82746421 0 0 0 0.827464,0.827464 h 1.336089 a 0.82746421,0.82746421 0 0 0 0.827464,-0.827464 v -4.228419 h 4.486527 v 4.228419 a 0.82746421,0.82746421 0 0 0 0.827464,0.827464 h 1.351272 a 0.82746421,0.82746421 0 0 0 0.827464,-0.827464 v -4.228419 h 3.955127 a 0.92615261,0.92615261 0 0 0 0.888195,-0.918561 v -3.939945 h 4.213236 a 0.82746421,0.82746421 0 0 0 0.842647,-0.827464 V 70.790329 A 0.82746421,0.82746421 0 0 0 82.183672,69.962865 H 77.955254 V 65.52189 h 4.213236 a 0.82746421,0.82746421 0 0 0 0.842647,-0.835056 v -1.34368 A 0.82746421,0.82746421 0 0 0 82.16849,62.485324 H 77.955254 V 58.067121 Z M 74.842774,74.76823 H 53.404619 V 53.299712 h 21.438155 z"
style="display:none;opacity:1;vector-effect:none;fill:#96bbf9;fill-opacity:1;stroke:none;stroke-width:0.7591415;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
style="display:inline;opacity:1;vector-effect:none;fill:#96bbf9;fill-opacity:1;stroke:none;stroke-width:0.7591415;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path10194" />
</g>
<g
@@ -622,7 +592,7 @@
inkscape:label="processes">
<rect
transform="matrix(0.81282896,0,0,0.58385092,716.88649,392.00625)"
style="display:inline;opacity:1;vector-effect:none;fill:#ffaaaa;fill-opacity:1;stroke:none;stroke-width:2.78697062;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter-1)"
style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2.78697062;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter-1)"
id="rect10198"
width="231.99153"
height="125.52966"
@@ -756,70 +726,6 @@
id="g4132"
inkscape:label="pods"
style="display:inline">
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1065.6051,588.949 38.7689,-11.2425 38.7688,11.2425 -38.7688,11.24254 z"
id="path10214" />
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1065.6051,593.25418 v 41.2523 l 36.1218,20.00898 0.1788,-50.46488 z"
id="path10216" />
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1143.1428,593.25418 v 41.2523 l -36.1217,20.00898 -0.1788,-50.46488 z"
id="path10218" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.02975464px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.55074388"
x="1084.0165"
y="674.76129"
id="text10222"><tspan
sodipodi:role="line"
id="tspan10220"
x="1084.0165"
y="674.76129"
style="stroke-width:0.55074388">pod</tspan></text>
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1177.078,188.949 38.7689,-11.2425 38.7688,11.2425 -38.7688,11.24254 z"
id="path910" />
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1177.078,193.25418 v 41.2523 l 36.1218,20.00898 0.1788,-50.46488 z"
id="path912" />
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1254.6157,193.25418 v 41.2523 l -36.1217,20.00898 -0.1788,-50.46488 z"
id="path914" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.02975464px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.55074388"
x="1195.4893"
y="274.76129"
id="text1121"><tspan
sodipodi:role="line"
id="tspan1119"
x="1195.4893"
y="274.76129"
style="stroke-width:0.55074388">pod</tspan></text>
<path
id="path1123"
d="m 1065.6051,188.949 38.7689,-11.2425 38.7688,11.2425 -38.7688,11.24254 z"
@@ -885,22 +791,6 @@
d="m 8755,7700 c -213,-13 -315,-58 -382,-169 -60,-100 -68,-159 -68,-504 0,-264 -2,-310 -15,-316 -8,-5 -51,-16 -95,-26 -201,-44 -451,-139 -671,-255 -134,-71 -173,-81 -217,-59 -12,6 -112,102 -222,212 -214,216 -271,259 -369,279 -73,16 -160,-5 -244,-58 -68,-43 -319,-288 -405,-394 -111,-138 -147,-256 -113,-372 28,-98 100,-189 320,-407 113,-111 206,-207 206,-212 0,-5 -29,-67 -64,-137 -111,-223 -195,-472 -222,-661 -11,-78 -18,-99 -39,-120 l -26,-26 -367,-1 c -376,-1 -392,-2 -494,-42 -39,-16 -107,-80 -127,-121 -85,-169 -78,-795 9,-936 55,-89 161,-141 309,-152 46,-3 238,0 428,7 294,11 346,11 357,-1 8,-8 24,-45 36,-84 56,-176 144,-367 269,-585 40,-70 71,-135 71,-151 0,-21 -14,-39 -62,-81 -115,-98 -452,-420 -511,-487 -66,-76 -113,-165 -123,-233 -19,-137 109,-320 405,-578 73,-63 153,-127 179,-142 181,-105 384,-23 638,258 49,55 147,166 217,247 112,129 131,147 158,147 18,0 86,-29 172,-74 192,-101 283,-140 477,-206 l 165,-55 v -115 c -1,-63 -5,-236 -9,-385 -8,-238 -7,-280 8,-355 22,-108 58,-179 116,-234 83,-78 147,-91 555,-113 106,-6 253,13 350,44 145,47 205,136 227,339 9,85 8,158 -6,397 -17,266 -17,296 -3,323 20,38 57,54 227,100 169,45 288,89 461,170 152,71 194,78 263,44 64,-31 132,-96 279,-267 150,-176 212,-232 305,-275 55,-26 71,-30 130,-26 42,2 84,12 112,25 67,33 200,143 335,278 189,189 275,317 283,425 11,147 -80,278 -375,537 -232,204 -243,235 -140,406 78,128 99,179 152,362 52,177 88,263 130,314 50,58 67,61 299,51 357,-16 507,11 621,111 81,72 112,165 126,379 22,361 22,349 0,453 -34,168 -93,243 -226,287 -88,29 -251,40 -440,28 -275,-17 -345,-16 -385,8 -46,27 -75,80 -100,185 -29,126 -42,157 -131,320 -45,82 -94,181 -110,221 -29,75 -37,154 -19,188 5,10 82,83 171,162 197,174 286,275 342,387 40,81 42,89 42,175 0,81 -3,98 -30,149 -50,99 -374,445 -487,520 -121,80 -220,91 -333,38 -116,-54 -220,-148 -438,-398 -117,-133 -156,-163 -211,-163 -48,0 -89,18 -178,78 -99,67 -103,68 -353,162 -228,86 -322,127 -344,154 -10,12 -10,43 0,163 18,213 16,481 -4,566 -34,137 -96,215 -206,259 -50,20 -76,22 -256,24 -110,1 -258,-2 -330,-6 z m 273,-2665 c 374,-61 734,-332 917,-690 221,-434 146,-893 -202,-1226 -223,-214 -467,-310 -751,-296 -509,25 -986,432 -1124,957 -28,110 -35,292 -14,404 47,248 190,477 402,642 236,184 494,254 772,209 z"
inkscape:connector-curvature="0" />
</g>
<g
inkscape:label="gear kubelet bottom"
style="display:inline;fill:#000000;stroke:none"
transform="matrix(0.00664382,0,0,-0.00664382,1197.6781,433.7108)"
id="g15716">
<path
style="fill:#000000"
inkscape:connector-curvature="0"
d="m 3178,10980 c -109,-24 -156,-48 -202,-102 -77,-89 -98,-254 -77,-588 7,-116 7,-187 1,-211 -17,-59 -55,-87 -156,-110 -144,-33 -203,-54 -355,-125 -184,-85 -283,-124 -314,-124 -28,0 -28,0 -189,184 -206,237 -328,326 -458,334 -59,4 -75,0 -130,-25 -78,-37 -132,-86 -313,-280 -163,-175 -205,-241 -212,-337 -10,-130 39,-209 284,-452 106,-106 193,-196 193,-202 0,-5 -25,-50 -56,-98 -88,-141 -179,-338 -240,-521 -65,-195 -66,-197 -101,-221 -24,-15 -58,-17 -313,-17 -247,-1 -291,-3 -331,-18 C 150,8044 96,7999 64,7945 5,7844 -18,7561 15,7341 c 26,-171 62,-247 143,-301 88,-58 118,-63 451,-69 l 305,-6 32,-100 c 17,-55 44,-131 59,-170 42,-109 160,-334 211,-400 67,-87 78,-118 59,-155 -8,-16 -70,-82 -138,-147 -300,-287 -368,-369 -386,-466 -11,-59 2,-128 33,-181 110,-185 442,-493 569,-527 93,-25 201,14 309,110 35,31 140,139 234,241 95,102 188,200 208,219 l 35,34 118,-55 c 179,-84 294,-125 574,-202 93,-26 92,-21 79,-256 -13,-265 -13,-526 1,-592 21,-98 65,-165 130,-198 88,-45 152,-54 384,-54 402,2 489,31 562,191 55,120 64,260 37,632 -12,160 -13,230 -6,247 9,19 40,32 171,74 196,62 300,103 454,181 65,33 123,59 127,57 4,-2 93,-97 197,-213 311,-344 393,-405 552,-405 101,0 156,32 333,194 253,233 323,333 323,461 0,61 -5,79 -35,135 -41,76 -146,190 -310,333 -195,172 -220,199 -220,238 0,23 26,81 89,194 88,158 141,273 197,430 55,153 110,182 323,171 384,-19 419,-19 486,-1 87,23 137,61 169,127 40,83 51,177 50,433 -1,203 -3,239 -23,310 -29,110 -61,152 -141,192 -96,48 -177,57 -410,47 -265,-12 -300,-11 -338,5 -49,21 -70,58 -102,185 -32,123 -38,138 -147,346 -40,74 -79,162 -88,194 -28,96 -21,107 175,294 183,176 250,258 282,349 40,114 4,248 -98,363 -302,341 -390,409 -524,410 -136,0 -248,-84 -515,-385 -101,-114 -137,-143 -186,-151 -35,-6 -56,3 -229,99 -36,19 -135,57 -220,82 -187,57 -291,104 -321,146 -21,30 -21,34 -13,217 16,337 -1,480 -67,584 -66,102 -140,134 -342,149 -287,20 -346,20 -439,-1 z m 417,-2460 c 230,-33 421,-122 573,-265 176,-166 263,-357 279,-612 15,-258 -65,-503 -224,-682 -321,-360 -957,-435 -1393,-163 -189,117 -322,293 -386,509 -32,109 -44,319 -24,440 74,463 476,779 995,782 61,0 142,-4 180,-9 z"
id="path15712" />
<path
style="fill:#000000"
inkscape:connector-curvature="0"
d="m 8755,7700 c -213,-13 -315,-58 -382,-169 -60,-100 -68,-159 -68,-504 0,-264 -2,-310 -15,-316 -8,-5 -51,-16 -95,-26 -201,-44 -451,-139 -671,-255 -134,-71 -173,-81 -217,-59 -12,6 -112,102 -222,212 -214,216 -271,259 -369,279 -73,16 -160,-5 -244,-58 -68,-43 -319,-288 -405,-394 -111,-138 -147,-256 -113,-372 28,-98 100,-189 320,-407 113,-111 206,-207 206,-212 0,-5 -29,-67 -64,-137 -111,-223 -195,-472 -222,-661 -11,-78 -18,-99 -39,-120 l -26,-26 -367,-1 c -376,-1 -392,-2 -494,-42 -39,-16 -107,-80 -127,-121 -85,-169 -78,-795 9,-936 55,-89 161,-141 309,-152 46,-3 238,0 428,7 294,11 346,11 357,-1 8,-8 24,-45 36,-84 56,-176 144,-367 269,-585 40,-70 71,-135 71,-151 0,-21 -14,-39 -62,-81 -115,-98 -452,-420 -511,-487 -66,-76 -113,-165 -123,-233 -19,-137 109,-320 405,-578 73,-63 153,-127 179,-142 181,-105 384,-23 638,258 49,55 147,166 217,247 112,129 131,147 158,147 18,0 86,-29 172,-74 192,-101 283,-140 477,-206 l 165,-55 v -115 c -1,-63 -5,-236 -9,-385 -8,-238 -7,-280 8,-355 22,-108 58,-179 116,-234 83,-78 147,-91 555,-113 106,-6 253,13 350,44 145,47 205,136 227,339 9,85 8,158 -6,397 -17,266 -17,296 -3,323 20,38 57,54 227,100 169,45 288,89 461,170 152,71 194,78 263,44 64,-31 132,-96 279,-267 150,-176 212,-232 305,-275 55,-26 71,-30 130,-26 42,2 84,12 112,25 67,33 200,143 335,278 189,189 275,317 283,425 11,147 -80,278 -375,537 -232,204 -243,235 -140,406 78,128 99,179 152,362 52,177 88,263 130,314 50,58 67,61 299,51 357,-16 507,11 621,111 81,72 112,165 126,379 22,361 22,349 0,453 -34,168 -93,243 -226,287 -88,29 -251,40 -440,28 -275,-17 -345,-16 -385,8 -46,27 -75,80 -100,185 -29,126 -42,157 -131,320 -45,82 -94,181 -110,221 -29,75 -37,154 -19,188 5,10 82,83 171,162 197,174 286,275 342,387 40,81 42,89 42,175 0,81 -3,98 -30,149 -50,99 -374,445 -487,520 -121,80 -220,91 -333,38 -116,-54 -220,-148 -438,-398 -117,-133 -156,-163 -211,-163 -48,0 -89,18 -178,78 -99,67 -103,68 -353,162 -228,86 -322,127 -344,154 -10,12 -10,43 0,163 18,213 16,481 -4,566 -34,137 -96,215 -206,259 -50,20 -76,22 -256,24 -110,1 -258,-2 -330,-6 z m 273,-2665 c 374,-61 734,-332 917,-690 221,-434 146,-893 -202,-1226 -223,-214 -467,-310 -751,-296 -509,25 -986,432 -1124,957 -28,110 -35,292 -14,404 47,248 190,477 402,642 236,184 494,254 772,209 z"
id="path15714" />
</g>
<g
inkscape:label="gear kubelet top"
id="g15722"
@@ -947,13 +837,6 @@
id="path6537"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path1190"
d="m 1111.0371,563.36562 20.858,-81.27407"
style="display:inline;fill:#cccccc;stroke:#cccccc;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker1196);marker-end:url(#marker1984);paint-order:normal"
inkscape:label="node bottom left" />
<path
style="display:none;fill:#cccccc;stroke:#cccccc;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker3586);marker-end:url(#marker3758);paint-order:normal"
d="m 1208.6771,562.24204 -20.5498,-80.96111"
@@ -967,7 +850,7 @@
inkscape:connector-curvature="0"
id="path10622"
d="m 667.78448,388.64882 378.69472,37.60476"
style="display:inline;opacity:1;vector-effect:none;fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker2181);marker-end:url(#marker2327);paint-order:normal" />
style="display:inline;opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1;stroke:#cccccc;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker2181);marker-end:url(#marker2327);paint-order:normal" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
@@ -975,13 +858,6 @@
d="m 1111.0371,163.36562 20.858,-81.27407"
style="display:inline;fill:#cccccc;fill-rule:evenodd;stroke:#cccccc;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker2054);marker-end:url(#marker2202);paint-order:normal"
inkscape:label="node top left" />
<path
style="display:inline;fill:#cccccc;fill-rule:evenodd;stroke:#cccccc;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker2634);marker-end:url(#marker2794);paint-order:normal"
d="M 1208.6771,162.24204 1188.1273,81.28093"
id="path2050"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:label="node top right" />
<path
inkscape:label="node top"
style="display:inline;opacity:1;vector-effect:none;fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker1880);marker-end:url(#marker2026);paint-order:normal"
@@ -1100,78 +976,6 @@
y="125.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">RUNNING</tspan></text>
</g>
<g
inkscape:label="pod 2"
id="g1233"
style="display:inline">
<rect
y="139.72913"
x="287.1362"
height="36.022667"
width="174.12718"
id="rect15580"
style="display:inline;opacity:1;fill:#ffaaaa;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)" />
<text
id="text15584"
y="166.5461"
x="292.32904"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
xml:space="preserve"><tspan
style="stroke-width:0.69919914"
y="166.5461"
x="292.32904"
id="tspan15582"
sodipodi:role="line">Pod</tspan></text>
<text
id="text15598"
y="165.23392"
x="351.05563"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
xml:space="preserve"
inkscape:label="pod 2 status"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583"
y="165.23392"
x="351.05563"
id="tspan15596"
sodipodi:role="line">RUNNING</tspan></text>
</g>
<g
inkscape:label="pod 3"
id="g1226"
style="display:inline">
<rect
style="display:inline;opacity:1;fill:#ffaaaa;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)"
id="rect15586"
width="174.12718"
height="36.022667"
x="287.1362"
y="179.72913"
inkscape:label="rectangle" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
x="292.32904"
y="206.5461"
id="text15590"
inkscape:label="label"><tspan
sodipodi:role="line"
id="tspan15588"
x="292.32904"
y="206.5461"
style="stroke-width:0.69919914">Pod</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
x="351.05563"
y="205.23392"
id="text15602"
inkscape:label="status"><tspan
sodipodi:role="line"
id="tspan15600"
x="351.05563"
y="205.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">RUNNING</tspan></text>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -13,7 +13,7 @@
viewBox="0 0 1600 900"
version="1.1"
id="svg696"
sodipodi:docname="how-k8s-works-19.svg"
sodipodi:docname="19.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
enable-background="new">
<metadata
@@ -42,12 +42,12 @@
id="namedview698"
showgrid="false"
inkscape:zoom="0.64"
inkscape:cx="796.38378"
inkscape:cx="246.38378"
inkscape:cy="596.50212"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-y="1098"
inkscape:window-maximized="0"
inkscape:current-layer="g4090"
inkscape:current-layer="how-does-k8s-work"
units="px"
inkscape:snap-object-midpoints="true" />
<title
@@ -146,36 +146,6 @@
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
id="path2052" />
</marker>
<marker
inkscape:stockid="TriangleOutS"
orient="auto"
refY="0.0"
refX="0.0"
id="marker1984"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1982"
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
style="fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill:#cccccc;fill-opacity:1"
transform="scale(0.2)" />
</marker>
<marker
inkscape:stockid="TriangleInS"
orient="auto"
refY="0.0"
refX="0.0"
id="marker1196"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1194"
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
style="fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill:#cccccc;fill-opacity:1"
transform="scale(-0.2)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
@@ -588,12 +558,12 @@
<path
inkscape:connector-curvature="0"
d="M 68.458394,58.765531 H 59.79659 a 0.92615261,0.92615261 0 0 0 -0.918561,0.918561 v 8.661804 a 0.92615261,0.92615261 0 0 0 0.918561,0.926153 h 8.661804 a 0.92615261,0.92615261 0 0 0 0.888196,-0.926153 v -8.661804 a 0.92615261,0.92615261 0 0 0 -0.918561,-0.918561"
style="display:none;opacity:1;vector-effect:none;fill:#96bbf9;fill-opacity:1;stroke:none;stroke-width:0.7591415;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
style="display:inline;opacity:1;vector-effect:none;fill:#96bbf9;fill-opacity:1;stroke:none;stroke-width:0.7591415;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path10192" />
<path
inkscape:connector-curvature="0"
d="m 82.16849,58.067121 a 0.82746421,0.82746421 0 0 0 0.842647,-0.827464 V 55.888385 A 0.82746421,0.82746421 0 0 0 82.183672,55.06092 H 77.955254 V 51.098202 A 0.92615261,0.92615261 0 0 0 77.036693,50.179641 H 73.081566 V 45.973997 A 0.82746421,0.82746421 0 0 0 72.254102,45.146533 H 70.90283 a 0.82746421,0.82746421 0 0 0 -0.797098,0.827464 v 4.228418 h -4.478935 v -4.228418 a 0.82746421,0.82746421 0 0 0 -0.835056,-0.827464 h -1.336089 a 0.82746421,0.82746421 0 0 0 -0.827464,0.827464 v 4.228418 h -4.448569 v -4.228418 a 0.82746421,0.82746421 0 0 0 -0.827464,-0.827464 h -1.351272 a 0.82746421,0.82746421 0 0 0 -0.827464,0.827464 v 4.228418 h -3.947536 a 0.92615261,0.92615261 0 0 0 -0.926153,0.895787 v 3.939944 h -4.213235 a 0.82746421,0.82746421 0 0 0 -0.827464,0.827464 v 1.351272 a 0.82746421,0.82746421 0 0 0 0.827464,0.827464 h 4.213235 v 4.440978 h -4.213235 a 0.82746421,0.82746421 0 0 0 -0.827464,0.827464 v 1.374046 a 0.82746421,0.82746421 0 0 0 0.827464,0.835056 h 4.213235 v 4.448566 h -4.213235 a 0.82746421,0.82746421 0 0 0 -0.827464,0.827464 v 1.351272 a 0.82746421,0.82746421 0 0 0 0.827464,0.827464 h 4.213235 v 3.932354 a 0.92615261,0.92615261 0 0 0 0.918561,0.918561 h 3.955128 v 4.228419 a 0.82746421,0.82746421 0 0 0 0.827464,0.827464 h 1.351272 a 0.82746421,0.82746421 0 0 0 0.827464,-0.827464 v -4.228419 h 4.448569 v 4.228419 a 0.82746421,0.82746421 0 0 0 0.827464,0.827464 h 1.336089 a 0.82746421,0.82746421 0 0 0 0.827464,-0.827464 v -4.228419 h 4.486527 v 4.228419 a 0.82746421,0.82746421 0 0 0 0.827464,0.827464 h 1.351272 a 0.82746421,0.82746421 0 0 0 0.827464,-0.827464 v -4.228419 h 3.955127 a 0.92615261,0.92615261 0 0 0 0.888195,-0.918561 v -3.939945 h 4.213236 a 0.82746421,0.82746421 0 0 0 0.842647,-0.827464 V 70.790329 A 0.82746421,0.82746421 0 0 0 82.183672,69.962865 H 77.955254 V 65.52189 h 4.213236 a 0.82746421,0.82746421 0 0 0 0.842647,-0.835056 v -1.34368 A 0.82746421,0.82746421 0 0 0 82.16849,62.485324 H 77.955254 V 58.067121 Z M 74.842774,74.76823 H 53.404619 V 53.299712 h 21.438155 z"
style="display:none;opacity:1;vector-effect:none;fill:#96bbf9;fill-opacity:1;stroke:none;stroke-width:0.7591415;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
style="display:inline;opacity:1;vector-effect:none;fill:#96bbf9;fill-opacity:1;stroke:none;stroke-width:0.7591415;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path10194" />
</g>
<g
@@ -756,70 +726,6 @@
id="g4132"
inkscape:label="pods"
style="display:inline">
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1065.6051,588.949 38.7689,-11.2425 38.7688,11.2425 -38.7688,11.24254 z"
id="path10214" />
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1065.6051,593.25418 v 41.2523 l 36.1218,20.00898 0.1788,-50.46488 z"
id="path10216" />
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1143.1428,593.25418 v 41.2523 l -36.1217,20.00898 -0.1788,-50.46488 z"
id="path10218" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.02975464px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.55074388"
x="1084.0165"
y="674.76129"
id="text10222"><tspan
sodipodi:role="line"
id="tspan10220"
x="1084.0165"
y="674.76129"
style="stroke-width:0.55074388">pod</tspan></text>
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1177.078,188.949 38.7689,-11.2425 38.7688,11.2425 -38.7688,11.24254 z"
id="path910" />
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1177.078,193.25418 v 41.2523 l 36.1218,20.00898 0.1788,-50.46488 z"
id="path912" />
<path
inkscape:export-ydpi="376.57999"
inkscape:export-xdpi="376.57999"
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.74113631;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 1254.6157,193.25418 v 41.2523 l -36.1217,20.00898 -0.1788,-50.46488 z"
id="path914" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.02975464px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.55074388"
x="1195.4893"
y="274.76129"
id="text1121"><tspan
sodipodi:role="line"
id="tspan1119"
x="1195.4893"
y="274.76129"
style="stroke-width:0.55074388">pod</tspan></text>
<path
id="path1123"
d="m 1065.6051,188.949 38.7689,-11.2425 38.7688,11.2425 -38.7688,11.24254 z"
@@ -947,13 +853,6 @@
id="path6537"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path1190"
d="m 1111.0371,563.36562 20.858,-81.27407"
style="display:inline;fill:#cccccc;stroke:#cccccc;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker1196);marker-end:url(#marker1984);paint-order:normal"
inkscape:label="node bottom left" />
<path
style="display:none;fill:#cccccc;stroke:#cccccc;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker3586);marker-end:url(#marker3758);paint-order:normal"
d="m 1208.6771,562.24204 -20.5498,-80.96111"
@@ -975,13 +874,6 @@
d="m 1111.0371,163.36562 20.858,-81.27407"
style="display:inline;fill:#cccccc;fill-rule:evenodd;stroke:#cccccc;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker2054);marker-end:url(#marker2202);paint-order:normal"
inkscape:label="node top left" />
<path
style="display:inline;fill:#cccccc;fill-rule:evenodd;stroke:#cccccc;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker2634);marker-end:url(#marker2794);paint-order:normal"
d="M 1208.6771,162.24204 1188.1273,81.28093"
id="path2050"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:label="node top right" />
<path
inkscape:label="node top"
style="display:inline;opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1;stroke:#cccccc;stroke-width:20;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker1880);marker-end:url(#marker2026);paint-order:normal"
@@ -1100,78 +992,6 @@
y="125.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">RUNNING</tspan></text>
</g>
<g
inkscape:label="pod 2"
id="g1233"
style="display:inline">
<rect
y="139.72913"
x="287.1362"
height="36.022667"
width="174.12718"
id="rect15580"
style="display:inline;opacity:1;fill:#cccccc;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)" />
<text
id="text15584"
y="166.5461"
x="292.32904"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
xml:space="preserve"><tspan
style="stroke-width:0.69919914"
y="166.5461"
x="292.32904"
id="tspan15582"
sodipodi:role="line">Pod</tspan></text>
<text
id="text15598"
y="165.23392"
x="351.05563"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
xml:space="preserve"
inkscape:label="pod 2 status"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583"
y="165.23392"
x="351.05563"
id="tspan15596"
sodipodi:role="line">RUNNING</tspan></text>
</g>
<g
inkscape:label="pod 3"
id="g1226"
style="display:inline">
<rect
style="display:inline;opacity:1;fill:#cccccc;fill-opacity:1;stroke:none;stroke-width:8.37233353;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter15564)"
id="rect15586"
width="174.12718"
height="36.022667"
x="287.1362"
y="179.72913"
inkscape:label="rectangle" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.96796608px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.69919914"
x="292.32904"
y="206.5461"
id="text15590"
inkscape:label="label"><tspan
sodipodi:role="line"
id="tspan15588"
x="292.32904"
y="206.5461"
style="stroke-width:0.69919914">Pod</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;line-height:1.25;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.49064583"
x="351.05563"
y="205.23392"
id="text15602"
inkscape:label="status"><tspan
sodipodi:role="line"
id="tspan15600"
x="351.05563"
y="205.23392"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.62533379px;font-family:'Droid Serif';-inkscape-font-specification:'Droid Serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.49064583">RUNNING</tspan></text>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View File

@@ -5,7 +5,7 @@
speaker: jpetazzo
title: Kubernetes Intensive Course
attend: https://qconlondon.com/london2020/workshop/kubernetes-intro
#slides: https://qconuk2019.container.training/
slides: https://2020-03-qcon.container.training/
- date: 2020-03-05
country: uk
@@ -14,7 +14,7 @@
speaker: jpetazzo
title: Docker Intensive Course
attend: https://qconlondon.com/london2020/workshop/docker-intensive-course
#slides: https://qconuk2019.container.training/
slides: https://2020-03-qcon.container.training/
- date: 2020-02-03
country: fr
@@ -24,6 +24,7 @@
title: Fondamentaux Conteneurs et Docker (in French)
lang: fr
attend: https://enix.io/fr/services/formation/
slides: https://2020-02-enix.container.training/
- date: 2020-02-04
country: fr
@@ -33,6 +34,7 @@
title: Fondamentaux Orchestration et Kubernetes (in French)
lang: fr
attend: https://enix.io/fr/services/formation/
slides: https://2020-02-enix.container.training/
- date: 2020-02-05
country: fr
@@ -42,6 +44,7 @@
title: Kubernetes et Méthodologies DevOps (in French)
lang: fr
attend: https://enix.io/fr/services/formation/
slides: https://2020-02-enix.container.training/
- date: 2020-02-06
country: fr
@@ -51,6 +54,7 @@
title: Kubernetes Avancé (in French)
lang: fr
attend: https://enix.io/fr/services/formation/
slides: https://2020-02-enix.container.training/
- date: 2020-02-07
country: fr
@@ -60,6 +64,7 @@
title: Opérer Kubernetes (in French)
lang: fr
attend: https://enix.io/fr/services/formation/
slides: https://2020-02-enix.container.training/
- date: [2019-11-04, 2019-11-05]
country: de

View File

@@ -19,58 +19,51 @@ chapters:
- logistics.md
- containers/intro.md
- shared/about-slides.md
- shared/chat-room-im.md
#- shared/chat-room-zoom.md
- shared/toc.md
-
- containers/Docker_Overview.md
#- containers/Docker_Overview.md
#- containers/Docker_History.md
- containers/Training_Environment.md
- containers/Installing_Docker.md
#- containers/Installing_Docker.md
- containers/First_Containers.md
- containers/Background_Containers.md
- containers/Start_And_Attach.md
-
#- containers/Start_And_Attach.md
- containers/Naming_And_Inspecting.md
#- containers/Labels.md
- containers/Getting_Inside.md
- containers/Initial_Images.md
-
- containers/Building_Images_Interactively.md
- containers/Building_Images_With_Dockerfiles.md
- containers/Cmd_And_Entrypoint.md
-
- containers/Copying_Files_During_Build.md
- containers/Exercise_Dockerfile_Basic.md
- containers/Multi_Stage_Builds.md
- containers/Publishing_To_Docker_Hub.md
- containers/Dockerfile_Tips.md
- containers/Exercise_Dockerfile_Advanced.md
-
- containers/Naming_And_Inspecting.md
- containers/Labels.md
- containers/Getting_Inside.md
- containers/Resource_Limits.md
-
- containers/Container_Networking_Basics.md
- containers/Network_Drivers.md
- containers/Container_Network_Model.md
#- containers/Connecting_Containers_With_Links.md
- containers/Ambassadors.md
-
#- containers/Network_Drivers.md
#- containers/Container_Network_Model.md
- containers/Local_Development_Workflow.md
- containers/Windows_Containers.md
- containers/Working_With_Volumes.md
- containers/Compose_For_Dev_Stacks.md
- containers/Exercise_Composefile.md
-
- containers/Docker_Machine.md
- containers/Advanced_Dockerfiles.md
- containers/Init_Systems.md
- containers/Application_Configuration.md
- containers/Logging.md
-
- containers/Namespaces_Cgroups.md
- containers/Copy_On_Write.md
- containers/Multi_Stage_Builds.md
#- containers/Publishing_To_Docker_Hub.md
- containers/Dockerfile_Tips.md
- containers/Exercise_Dockerfile_Advanced.md
#- containers/Docker_Machine.md
#- containers/Advanced_Dockerfiles.md
#- containers/Init_Systems.md
#- containers/Application_Configuration.md
#- containers/Logging.md
#- containers/Namespaces_Cgroups.md
#- containers/Copy_On_Write.md
#- containers/Containers_From_Scratch.md
-
- containers/Container_Engines.md
- containers/Pods_Anatomy.md
#- containers/Container_Engines.md
#- containers/Pods_Anatomy.md
#- containers/Ecosystem.md
- containers/Orchestration_Overview.md
#- containers/Orchestration_Overview.md
-
- shared/thankyou.md
- containers/links.md

View File

@@ -19,6 +19,8 @@ chapters:
# - shared/logistics.md
- containers/intro.md
- shared/about-slides.md
#- shared/chat-room-im.md
#- shared/chat-room-zoom.md
- shared/toc.md
- - containers/Docker_Overview.md
- containers/Docker_History.md

77
slides/intro-twodays.yml Normal file
View File

@@ -0,0 +1,77 @@
title: |
Introduction
to Containers
chat: "[Slack](https://dockercommunity.slack.com/messages/C7GKACWDV)"
#chat: "[Gitter](https://gitter.im/jpetazzo/workshop-yyyymmdd-city)"
gitrepo: github.com/jpetazzo/container.training
slides: http://container.training/
#slidenumberprefix: "#SomeHashTag &mdash; "
exclude:
- self-paced
chapters:
- shared/title.md
- logistics.md
- containers/intro.md
- shared/about-slides.md
- shared/chat-room-im.md
#- shared/chat-room-zoom.md
- shared/toc.md
- # DAY 1
- containers/Docker_Overview.md
#- containers/Docker_History.md
- containers/Training_Environment.md
- containers/First_Containers.md
- containers/Background_Containers.md
- containers/Initial_Images.md
-
- containers/Building_Images_Interactively.md
- containers/Building_Images_With_Dockerfiles.md
- containers/Cmd_And_Entrypoint.md
- containers/Copying_Files_During_Build.md
- containers/Exercise_Dockerfile_Basic.md
-
- containers/Dockerfile_Tips.md
- containers/Multi_Stage_Builds.md
- containers/Publishing_To_Docker_Hub.md
- containers/Exercise_Dockerfile_Advanced.md
-
- containers/Naming_And_Inspecting.md
- containers/Labels.md
- containers/Start_And_Attach.md
- containers/Getting_Inside.md
- containers/Resource_Limits.md
- # DAY 2
- containers/Container_Networking_Basics.md
- containers/Network_Drivers.md
- containers/Container_Network_Model.md
-
- containers/Local_Development_Workflow.md
- containers/Working_With_Volumes.md
- containers/Compose_For_Dev_Stacks.md
- containers/Exercise_Composefile.md
-
- containers/Installing_Docker.md
- containers/Container_Engines.md
- containers/Init_Systems.md
- containers/Advanced_Dockerfiles.md
-
- containers/Application_Configuration.md
- containers/Logging.md
- containers/Orchestration_Overview.md
-
- shared/thankyou.md
- containers/links.md
#-
#- containers/Docker_Machine.md
#- containers/Ambassadors.md
#- containers/Namespaces_Cgroups.md
#- containers/Copy_On_Write.md
#- containers/Containers_From_Scratch.md
#- containers/Pods_Anatomy.md
#- containers/Ecosystem.md

View File

@@ -20,7 +20,7 @@ The control plane can run:
- in containers, on the same nodes that run other application workloads
(example: Minikube; 1 node runs everything)
(example: [Minikube](https://github.com/kubernetes/minikube); 1 node runs everything, [kind](https://kind.sigs.k8s.io/))
- on a dedicated node
@@ -28,7 +28,7 @@ The control plane can run:
- on a dedicated set of nodes
(example: Kubernetes The Hard Way; kops)
(example: [Kubernetes The Hard Way](https://github.com/kelseyhightower/kubernetes-the-hard-way); [kops](https://github.com/kubernetes/kops))
- outside of the cluster
@@ -352,7 +352,7 @@ We demonstrated *update* and *watch* semantics.
- That's where the actual logic of Kubernetes lives
- When we create a Deployment (e.g. with `kubectl run web --image=nginx`),
- When we create a Deployment (e.g. with `kubectl create deployment web --image=nginx`),
- we create a Deployment object

View File

@@ -360,3 +360,7 @@ docker run --rm --net host -v $PWD:/vol \
- [kube-backup](https://github.com/pieterlange/kube-backup)
simple scripts to save resource YAML to a git repository
- [bivac](https://github.com/camptocamp/bivac)
Backup Interface for Volumes Attached to Containers

View File

@@ -154,7 +154,7 @@ class: extra-details
- "Running Kubernetes without nodes"
- Systems like [Virtual Kubelet](https://virtual-kubelet.io/) or Kiyot can run pods using on-demand resources
- Systems like [Virtual Kubelet](https://virtual-kubelet.io/) or [Kiyot](https://static.elotl.co/docs/latest/kiyot/kiyot.html) can run pods using on-demand resources
- Virtual Kubelet can leverage e.g. ACI or Fargate to run pods

View File

@@ -81,7 +81,7 @@
## What version are we running anyway?
- When I say, "I'm running Kubernetes 1.16", is that the version of:
- When I say, "I'm running Kubernetes 1.15", is that the version of:
- kubectl
@@ -254,7 +254,7 @@ and kubectl, which can be one MINOR ahead or behind API server.]
sudo vim /etc/kubernetes/manifests/kube-apiserver.yaml
```
- Look for the `image:` line, and update it to e.g. `v1.17.0`
- Look for the `image:` line, and update it to e.g. `v1.16.0`
]
@@ -308,11 +308,11 @@ and kubectl, which can be one MINOR ahead or behind API server.]
]
Note 1: kubeadm thinks that our cluster is running 1.17.0.
Note 1: kubeadm thinks that our cluster is running 1.16.0.
<br/>It is confused by our manual upgrade of the API server!
Note 2: kubeadm itself is still version 1.16.6.
<br/>It doesn't know how to upgrade do 1.17.X.
Note 2: kubeadm itself is still version 1.15.9.
<br/>It doesn't know how to upgrade do 1.16.X.
---
@@ -334,8 +334,39 @@ Note 2: kubeadm itself is still version 1.16.6.
]
Note: kubeadm still thinks that our cluster is running 1.17.0.
<br/>But at least it knows about version 1.17.X now.
Problem: kubeadm doesn't know know how to handle
upgrades from version 1.15.
This is because we installed version 1.17 (or even later).
We need to install kubeadm version 1.16.X.
---
## Downgrading kubeadm
- We need to go back to version 1.16.X (e.g. 1.16.6)
.exercise[
- View available versions for package `kubeadm`:
```bash
apt show kubeadm -a | grep ^Version | grep 1.16
```
- Downgrade kubeadm:
```
sudo apt install kubeadm=1.16.6-00
```
- Check what kubeadm tells us:
```
sudo kubeadm upgrade plan
```
]
kubeadm should now agree to upgrade to 1.16.6.
---
@@ -351,7 +382,7 @@ Note: kubeadm still thinks that our cluster is running 1.17.0.
- Perform the upgrade:
```bash
sudo kubeadm upgrade apply v1.17.2
sudo kubeadm upgrade apply v1.16.6
```
]
@@ -375,7 +406,7 @@ Note: kubeadm still thinks that our cluster is running 1.17.0.
- Upgrade kubelet:
```bash
sudo apt install kubelet=1.17.2-00
sudo apt install kubelet=1.16.6-00
```
]
@@ -423,7 +454,7 @@ Note: kubeadm still thinks that our cluster is running 1.17.0.
## Upgrading kubelet the right way
- The command that we need to run was shown by kubeadm
- We need to upgrade kubeadm, upgrade kubelet config, then upgrade kubelet
(after upgrading the control plane)
@@ -432,8 +463,10 @@ Note: kubeadm still thinks that our cluster is running 1.17.0.
- Download the configuration on each node, and upgrade kubelet:
```bash
for N in 1 2 3; do
ssh test$N sudo kubeadm upgrade node config --kubelet-version v1.17.2
ssh test$N sudo apt install kubelet=1.17.2-00
ssh test$N "
sudo apt install kubeadm=1.16.6-00 &&
sudo kubeadm upgrade node &&
sudo apt install kubelet=1.16.6-00"
done
```
]
@@ -442,7 +475,7 @@ Note: kubeadm still thinks that our cluster is running 1.17.0.
## Checking what we've done
- All our nodes should now be updated to version 1.17.2
- All our nodes should now be updated to version 1.16.6
.exercise[
@@ -459,7 +492,7 @@ class: extra-details
## Skipping versions
- This example worked because we went from 1.16 to 1.17
- This example worked because we went from 1.15 to 1.16
- If you are upgrading from e.g. 1.14, you will have to go through 1.15 first

View File

@@ -162,6 +162,8 @@ class: extra-details
---
class: extra-details
## What's BGP?
- BGP (Border Gateway Protocol) is the protocol used between internet routers
@@ -220,6 +222,22 @@ class: extra-details
---
class: extra-details
## Checking the CNI configuration
- By default, kubelet gets the CNI configuration from `/etc/cni/net.d`
.exercise[
- Check the content of `/etc/cni/net.d`
]
(On most machines, at this point, `/etc/cni/net.d` doesn't even exist).)
---
## Our control plane
- We will use a Compose file to start the control plane
@@ -358,6 +376,26 @@ Note: the DaemonSet won't create any pods (yet) since there are no nodes (yet).
---
class: extra-details
## Checking the CNI configuration
- At this point, kuberouter should have installed its CNI configuration
(in `/etc/cni/net.d`)
.exercise[
- Check the content of `/etc/cni/net.d`
]
- There should be a file created by kuberouter
- The file should contain the node's podCIDR
---
## Setting up a test
- Let's create a Deployment and expose it with a Service
@@ -405,6 +443,8 @@ This shows that we are using IPVS (vs. iptables, which picked random endpoints).
---
class: extra-details
## Troubleshooting
- What if we need to check that everything is working properly?
@@ -428,6 +468,8 @@ We should see the local pod CIDR connected to `kube-bridge`, and the other nodes
---
class: extra-details
## More troubleshooting
- We can also look at the output of the kube-router pods
@@ -444,6 +486,8 @@ We should see the local pod CIDR connected to `kube-bridge`, and the other nodes
---
class: extra-details
## Trying `kubectl logs` / `kubectl exec`
.exercise[
@@ -469,6 +513,8 @@ What does that mean?
---
class: extra-details
## Internal name resolution
- To execute these commands, the API server needs to connect to kubelet
@@ -485,6 +531,8 @@ What does that mean?
---
class: extra-details
## Another way to check the logs
- We can also ask the logs directly to the container engine
@@ -526,163 +574,3 @@ done
- This could be useful for embedded platforms with very limited resources
(or lab environments for learning purposes)
---
# Interconnecting clusters
- We assigned different Cluster CIDRs to each cluster
- This allows us to connect our clusters together
- We will leverage kube-router BGP abilities for that
- We will *peer* each kube-router instance with a *route reflector*
- As a result, we will be able to ping each other's pods
---
## Disclaimers
- There are many methods to interconnect clusters
- Depending on your network implementation, you will use different methods
- The method shown here only works for nodes with direct layer 2 connection
- We will often need to use tunnels or other network techniques
---
## The plan
- Someone will start the *route reflector*
(typically, that will be the person presenting these slides!)
- We will update our kube-router configuration
- We will add a *peering* with the route reflector
(instructing kube-router to connect to it and exchange route information)
- We should see the routes to other clusters on our nodes
(in the output of e.g. `route -n` or `ip route show`)
- We should be able to ping pods of other nodes
---
## Starting the route reflector
- Only do this slide if you are doing this on your own
- There is a Compose file in the `compose/frr-route-reflector` directory
- Before continuing, make sure that you have the IP address of the route reflector
---
## Configuring kube-router
- This can be done in two ways:
- with command-line flags to the `kube-router` process
- with annotations to Node objects
- We will use the command-line flags
(because it will automatically propagate to all nodes)
.footnote[Note: with Calico, this is achieved by creating a BGPPeer CRD.]
---
## Updating kube-router configuration
- We need to pass two command-line flags to the kube-router process
.exercise[
- Edit the `kuberouter.yaml` file
- Add the following flags to the kube-router arguments:
```
- "--peer-router-ips=`X.X.X.X`"
- "--peer-router-asns=64512"
```
(Replace `X.X.X.X` with the route reflector address)
- Update the DaemonSet definition:
```bash
kubectl apply -f kuberouter.yaml
```
]
---
## Restarting kube-router
- The DaemonSet will not update the pods automatically
(it is using the default `updateStrategy`, which is `OnDelete`)
- We will therefore delete the pods
(they will be recreated with the updated definition)
.exercise[
- Delete all the kube-router pods:
```bash
kubectl delete pods -n kube-system -l k8s-app=kube-router
```
]
Note: the other `updateStrategy` for a DaemonSet is RollingUpdate.
<br/>
For critical services, we might want to precisely control the update process.
---
## Checking peering status
- We can see informative messages in the output of kube-router:
```
time="2019-04-07T15:53:56Z" level=info msg="Peer Up"
Key=X.X.X.X State=BGP_FSM_OPENCONFIRM Topic=Peer
```
- We should see the routes of the other clusters show up
- For debugging purposes, the reflector also exports a route to 1.0.0.2/32
- That route will show up like this:
```
1.0.0.2 172.31.X.Y 255.255.255.255 UGH 0 0 0 eth0
```
- We should be able to ping the pods of other clusters!
---
## If we wanted to do more ...
- kube-router can also export ClusterIP addresses
(by adding the flag `--advertise-cluster-ip`)
- They are exported individually (as /32)
- This would allow us to easily access other clusters' services
(without having to resolve the individual addresses of pods)
- Even better if it's combined with DNS integration
(to facilitate name → ClusterIP resolution)

View File

@@ -71,7 +71,7 @@
(straightforward on CPU; more complex on other metrics)
- Ressource management and scheduling
- Resource management and scheduling
(reserve CPU/RAM for containers; placement constraints)

View File

@@ -5,63 +5,63 @@ They say, "a picture is worth one thousand words."
The following 19 slides show what really happens when we run:
```bash
kubectl run web --image=nginx --replicas=3
kubectl create deployment web --image=nginx
```
---
class: pic
![](images/kubectl-run-slideshow/01.svg)
![](images/kubectl-create-deployment-slideshow/01.svg)
---
class: pic
![](images/kubectl-run-slideshow/02.svg)
![](images/kubectl-create-deployment-slideshow/02.svg)
---
class: pic
![](images/kubectl-run-slideshow/03.svg)
![](images/kubectl-create-deployment-slideshow/03.svg)
---
class: pic
![](images/kubectl-run-slideshow/04.svg)
![](images/kubectl-create-deployment-slideshow/04.svg)
---
class: pic
![](images/kubectl-run-slideshow/05.svg)
![](images/kubectl-create-deployment-slideshow/05.svg)
---
class: pic
![](images/kubectl-run-slideshow/06.svg)
![](images/kubectl-create-deployment-slideshow/06.svg)
---
class: pic
![](images/kubectl-run-slideshow/07.svg)
![](images/kubectl-create-deployment-slideshow/07.svg)
---
class: pic
![](images/kubectl-run-slideshow/08.svg)
![](images/kubectl-create-deployment-slideshow/08.svg)
---
class: pic
![](images/kubectl-run-slideshow/09.svg)
![](images/kubectl-create-deployment-slideshow/09.svg)
---
class: pic
![](images/kubectl-run-slideshow/10.svg)
![](images/kubectl-create-deployment-slideshow/10.svg)
---
class: pic
![](images/kubectl-run-slideshow/11.svg)
![](images/kubectl-create-deployment-slideshow/11.svg)
---
class: pic
![](images/kubectl-run-slideshow/12.svg)
![](images/kubectl-create-deployment-slideshow/12.svg)
---
class: pic
![](images/kubectl-run-slideshow/13.svg)
![](images/kubectl-create-deployment-slideshow/13.svg)
---
class: pic
![](images/kubectl-run-slideshow/14.svg)
![](images/kubectl-create-deployment-slideshow/14.svg)
---
class: pic
![](images/kubectl-run-slideshow/15.svg)
![](images/kubectl-create-deployment-slideshow/15.svg)
---
class: pic
![](images/kubectl-run-slideshow/16.svg)
![](images/kubectl-create-deployment-slideshow/16.svg)
---
class: pic
![](images/kubectl-run-slideshow/17.svg)
![](images/kubectl-create-deployment-slideshow/17.svg)
---
class: pic
![](images/kubectl-run-slideshow/18.svg)
![](images/kubectl-create-deployment-slideshow/18.svg)
---
class: pic
![](images/kubectl-run-slideshow/19.svg)
![](images/kubectl-create-deployment-slideshow/19.svg)

View File

@@ -6,7 +6,7 @@
- Our goal is to build a minimal cluster allowing us to:
- create a Deployment (with `kubectl run` or `kubectl create deployment`)
- create a Deployment (with `kubectl create deployment`)
- expose it with a Service
- connect to that service

View File

@@ -172,7 +172,7 @@ Note: we don't need to specify `--validate=false` here.
## Advantage of YAML
- Using YAML (instead of `kubectl run`/`create`/etc.) allows to be *declarative*
- Using YAML (instead of `kubectl create <kind>`) allows to be *declarative*
- The YAML describes the desired state of our cluster and applications
@@ -194,7 +194,7 @@ Note: we don't need to specify `--validate=false` here.
## YAML in practice
- Get started with `kubectl run`/`create`/`expose`/etc.
- Get started with `kubectl create deployment` and `kubectl expose`
- Dump the YAML with `kubectl get -o yaml`

View File

@@ -0,0 +1,31 @@
# Exercise — ConfigMaps
- In this exercise, we will use a ConfigMap to store static assets
- While there are some circumstances where this can be useful ...
- ... It is generally **not** a good idea!
- Once you've read that warning, check the next slide for instructions :)
---
## Exercise — ConfigMaps
This will use the wordsmith app.
We want to store the static files (served by `web`) in a ConfigMap.
1. Transform the `static` directory into a ConfigMap.
(https://github.com/jpetazzo/wordsmith/tree/master/web/static)
2. Find out where that `static` directory is located in `web`.
(for instance, by using `kubectl exec` to investigate)
3. Update the definition of the `web` Deployment to use the ConfigMap.
(note: fonts and images will be broken; that's OK)
4. Make a minor change in the ConfigMap (e.g. change the text color)

View File

@@ -0,0 +1,63 @@
# Exercise — Helm charts
Let's write a Helm chart for wordsmith!
We will need the YAML manifests that we wrote earlier.
Level 1: create a chart to deploy wordsmith.
Level 2: make it so that the number of replicas can be set with `--set replicas=X`.
Level 3: change the colors of the lego bricks.
(For level 3, fork the repository and use ctr.run to build images.)
See next slide if you need hints!
---
## Hints
*Scroll one slide at a time to see hints.*
--
Use `helm create` to create a new chart.
--
Delete the content of the `templates` directory and put your YAML instead.
--
Install the resulting chart. Voilà!
--
Use `{{ .Values.replicas }}` in the YAML manifest for `words`.
--
Also add `replicas: 5` to `values.yaml` to provide a default value.
---
## Changing the color
- Fork the repository
- Make sure that your fork has valid Dockerfiles
(or identify a branch that has valid Dockerfiles)
- Use the following images:
ctr.run/yourgithubusername/wordsmith/db:branchname
(replace db with web and words for the other components)
- Change the images and/or CSS in `web/static`
- Commit, push, trigger a rolling update
(`imagePullPolicy` should be `Always`, which is the default)

View File

@@ -0,0 +1,39 @@
# Exercise — deploying on Kubernetes
Let's deploy the wordsmith app on Kubernetes!
As a reminder, we have the following components:
| Name | Image | Port |
|-------|---------------------------------|------|
| db | jpetazzo/wordsmith-db:latest | 5432 |
| web | jpetazzo/wordsmith-web:latest | 80 |
| words | jpetazzo/wordsmith-words:latest | 8080 |
We need `web` to be available from outside the cluster.
See next slide if you need hints!
---
## Hints
*Scroll one slide at a time to see hints.*
--
- For each component, we need to create a deployment and a service
--
- Deployments can be created with `kubectl create deployment`
--
- Services can be created with `kubectl expose`
--
- Public services (like `web`) need to use a special type
(e.g. `NodePort`)

View File

@@ -0,0 +1,77 @@
# Exercise — writing YAML
Let's write YAML manifests for the wordsmith app!
It can be a single YAML file or multiple files in a directory.
See next slides for testing instructions and hints.
---
## How to test our YAML
If `XYZ` is that YAML file (or directory with YAML files), we should be able to:
1. Create a new namespace, e.g. `foo123`
2. Deploy wordsmith with a single command
(e.g. `kubectl apply --namespace foo123 -f XYZ`)
3. Find out the connection information for `web`
(e.g. `kubectl get service web --namespace`)
4. Connect to it and see the wordsmith app
See next slide for hints.
---
## Strategies
There are at least three methods to write our YAML.
1. Dump the YAML of existing wordsmith deployments and services.
(we can dump YAML with `kubectl get -o yaml ...`)
2. Adapt existing YAML (from the docs or dockercoins).
(for reference, kubercoins is at https://github.com/jpetazzo/kubercoins)
3. Write it entirely from scratch.
See next slide for more hints.
---
## Adapting YAML
*Scroll one slide at a time to see hints.*
--
One option is to start with the YAML from kubercoins.
(see https://github.com/jpetazzo/kubercoins)
--
Adapt the YAML of a deployment (e.g. worker) to run "web".
--
We need to change the name, labels, selectors, and image.
--
Then adapt the YAML of a service (e.g. webui).
--
We need to change the name, labels, selectors, possibly port number.
--
Repeat for the other components.

View File

@@ -151,7 +151,7 @@ There are many possibilities!
- Replacing built-in types with CRDs
(see [this lightning talk by Tim Hockin](https://www.youtube.com/watch?v=ji0FWzFwNhA&index=2&list=PLj6h78yzYM2PZf9eA7bhWnIh_mK1vyOfU))
(see [this lightning talk by Tim Hockin](https://www.youtube.com/watch?v=ji0FWzFwNhA))
---

157
slides/k8s/interco.md Normal file
View File

@@ -0,0 +1,157 @@
# Interconnecting clusters
- We assigned different Cluster CIDRs to each cluster
- This allows us to connect our clusters together
- We will leverage kube-router BGP abilities for that
- We will *peer* each kube-router instance with a *route reflector*
- As a result, we will be able to ping each other's pods
---
## Disclaimers
- There are many methods to interconnect clusters
- Depending on your network implementation, you will use different methods
- The method shown here only works for nodes with direct layer 2 connection
- We will often need to use tunnels or other network techniques
---
## The plan
- Someone will start the *route reflector*
(typically, that will be the person presenting these slides!)
- We will update our kube-router configuration
- We will add a *peering* with the route reflector
(instructing kube-router to connect to it and exchange route information)
- We should see the routes to other clusters on our nodes
(in the output of e.g. `route -n` or `ip route show`)
- We should be able to ping pods of other nodes
---
## Starting the route reflector
- Only do this slide if you are doing this on your own
- There is a Compose file in the `compose/frr-route-reflector` directory
- Before continuing, make sure that you have the IP address of the route reflector
---
## Configuring kube-router
- This can be done in two ways:
- with command-line flags to the `kube-router` process
- with annotations to Node objects
- We will use the command-line flags
(because it will automatically propagate to all nodes)
.footnote[Note: with Calico, this is achieved by creating a BGPPeer CRD.]
---
## Updating kube-router configuration
- We need to pass two command-line flags to the kube-router process
.exercise[
- Edit the `kuberouter.yaml` file
- Add the following flags to the kube-router arguments:
```
- "--peer-router-ips=`X.X.X.X`"
- "--peer-router-asns=64512"
```
(Replace `X.X.X.X` with the route reflector address)
- Update the DaemonSet definition:
```bash
kubectl apply -f kuberouter.yaml
```
]
---
## Restarting kube-router
- The DaemonSet will not update the pods automatically
(it is using the default `updateStrategy`, which is `OnDelete`)
- We will therefore delete the pods
(they will be recreated with the updated definition)
.exercise[
- Delete all the kube-router pods:
```bash
kubectl delete pods -n kube-system -l k8s-app=kube-router
```
]
Note: the other `updateStrategy` for a DaemonSet is RollingUpdate.
<br/>
For critical services, we might want to precisely control the update process.
---
## Checking peering status
- We can see informative messages in the output of kube-router:
```
time="2019-04-07T15:53:56Z" level=info msg="Peer Up"
Key=X.X.X.X State=BGP_FSM_OPENCONFIRM Topic=Peer
```
- We should see the routes of the other clusters show up
- For debugging purposes, the reflector also exports a route to 1.0.0.2/32
- That route will show up like this:
```
1.0.0.2 172.31.X.Y 255.255.255.255 UGH 0 0 0 eth0
```
- We should be able to ping the pods of other clusters!
---
## If we wanted to do more ...
- kube-router can also export ClusterIP addresses
(by adding the flag `--advertise-cluster-ip`)
- They are exported individually (as /32)
- This would allow us to easily access other clusters' services
(without having to resolve the individual addresses of pods)
- Even better if it's combined with DNS integration
(to facilitate name → ClusterIP resolution)

View File

@@ -151,9 +151,9 @@
## Creating a deployment for our HTTP server
- We *could* do `kubectl run httpenv --image=jpetazzo/httpenv` ...
- We will create a deployment with `kubectl create deployment`
- But since `kubectl run` is being deprecated, let's see how to use `kubectl create` instead
- Then we will scale it with `kubectl scale`
.exercise[

View File

@@ -115,6 +115,22 @@ The output is a list of available API routes.
---
## OpenAPI (fka Swagger)
- The Kubernetes API serves an OpenAPI Specification
(OpenAPI was formerly known as Swagger)
- OpenAPI has many advantages
(generate client library code, generate test code ...)
- For us, this means we can explore the API with [Swagger UI](https://swagger.io/tools/swagger-ui/)
(for instance with the [Swagger UI add-on for Firefox](https://addons.mozilla.org/en-US/firefox/addon/swagger-ui-ff/))
---
## `kubectl proxy` is intended for local use
- By default, the proxy listens on port 8001
@@ -135,6 +151,8 @@ The output is a list of available API routes.
---
class: extra-details
## Running `kubectl proxy` on a remote machine
- If we wanted to connect to the proxy from another machine, we would need to:
@@ -152,6 +170,8 @@ The output is a list of available API routes.
---
class: extra-details
## Security considerations
- Running `kubectl proxy` openly is a huge security risk

View File

@@ -10,14 +10,47 @@
- In that container in the pod, we are going to run a simple `ping` command
- Then we are going to start additional copies of the pod
--
- Sounds simple enough, right?
--
- Except ... that the `kubectl run` command changed in Kubernetes 1.18!
- We'll explain what has changed, and why
---
## Choose your own adventure
- First, let's check which version of Kubernetes we're running
.exercise[
- Check our API server version:
```bash
kubectl version
```
- Look at the **Server Version** in the second part of the output
]
- In the following slides, we will talk about 1.17- or 1.18+
(to indicate "up to Kubernetes 1.17" and "from Kubernetes 1.18")
---
## Starting a simple pod with `kubectl run`
- `kubectl run` is convenient to start a single pod
- We need to specify at least a *name* and the image we want to use
- Optionally, we can specify the command to run in the pod
.exercise[
- Let's ping the address of `localhost`, the loopback interface:
@@ -25,90 +58,289 @@
kubectl run pingpong --image alpine ping 127.0.0.1
```
<!-- ```hide kubectl wait deploy/pingpong --for condition=available``` -->
<!-- ```hide kubectl wait pod --selector=run=pingpong --for condition=ready``` -->
]
--
---
(Starting with Kubernetes 1.12, we get a message telling us that
`kubectl run` is deprecated. Let's ignore it for now.)
## What do we see?
- In Kubernetes 1.18+, the output tells us that a Pod is created:
```
pod/pingpong created
```
- In Kubernetes 1.17-, the output is much more verbose:
```
kubectl run --generator=deployment/apps.v1 is DEPRECATED
and will be removed in a future version. Use kubectl run
--generator=run-pod/v1 or kubectl create instead.
deployment.apps/pingpong created
```
- There is a deprecation warning ...
- ... And a Deployment was created instead of a Pod
🤔 What does that mean?
---
## Behind the scenes of `kubectl run`
## Show me all you got!
- Let's look at the resources that were created by `kubectl run`
- What resources were created by `kubectl run`?
.exercise[
- List most resource types:
- Let's ask Kubernetes to show us *all* the resources:
```bash
kubectl get all
```
]
Note: `kubectl get all` is a lie. It doesn't show everything.
(But it shows a lot of "usual suspects", i.e. commonly used resources.)
---
## The situation with Kubernetes 1.18+
```
NAME READY STATUS RESTARTS AGE
pod/pingpong 1/1 Running 0 9s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h30m
```
We wanted a pod, we got a pod, named `pingpong`. Great!
(We can ignore `service/kubernetes`, it was already there before.)
---
## The situation with Kubernetes 1.17-
```
NAME READY STATUS RESTARTS AGE
pod/pingpong-6ccbc77f68-kmgfn 1/1 Running 0 11s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h45
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/pingpong 1/1 1 1 11s
NAME DESIRED CURRENT READY AGE
replicaset.apps/pingpong-6ccbc77f68 1 1 1 11s
```
Our pod is not named `pingpong`, but `pingpong-xxxxxxxxxxx-yyyyy`.
We have a Deployment named `pingpong`, and an extra Replica Set, too. What's going on?
---
## From Deployment to Pod
We have the following resources:
- `deployment.apps/pingpong`
This is the Deployment that we just created.
- `replicaset.apps/pingpong-xxxxxxxxxx`
This is a Replica Set created by this Deployment.
- `pod/pingpong-xxxxxxxxxx-yyyyy`
This is a *pod* created by the Replica Set.
Let's explain what these things are.
---
## Pod
- Can have one or multiple containers
- Runs on a single node
(Pod cannot "straddle" multiple nodes)
- Pods cannot be moved
(e.g. in case of node outage)
- Pods cannot be scaled
(except by manually creating more Pods)
---
class: extra-details
## Pod details
- A Pod is not a process; it's an environment for containers
- it cannot be "restarted"
- it cannot "crash"
- The containers in a Pod can crash
- They may or may not get restarted
(depending on Pod's restart policy)
- If all containers exit successfully, the Pod ends in "Succeeded" phase
- If some containers fail and don't get restarted, the Pod ends in "Failed" phase
---
## Replica Set
- Set of identical (replicated) Pods
- Defined by a pod template + number of desired replicas
- If there are not enough Pods, the Replica Set creates more
(e.g. in case of node outage; or simply when scaling up)
- If there are too many Pods, the Replica Set deletes some
(e.g. if a node was disconnected and comes back; or when scaling down)
- We can scale up/down a Replica Set
- we update the manifest of the Replica Set
- as a consequence, the Replica Set controller creates/deletes Pods
---
## Deployment
- Replica Sets control *identical* Pods
- Deployments are used to roll out different Pods
(different image, command, environment variables, ...)
- When we update a Deployment with a new Pod definition:
- a new Replica Set is created with the new Pod definition
- that new Replica Set is progressively scaled up
- meanwhile, the old Replica Set(s) is(are) scaled down
- This is a *rolling update*, minimizing application downtime
- When we scale up/down a Deployment, it scales up/down its Replica Set
---
## `kubectl run` through the ages
- When we want to run an app on Kubernetes, we *generally* want a Deployment
- Up to Kubernetes 1.17, `kubectl run` created a Deployment
- it could also create other things, by using special flags
- this was powerful, but potentially confusing
- creating a single Pod was done with `kubectl run --restart=Never`
- other resources could also be created with `kubectl create ...`
- From Kubernetes 1.18, `kubectl run` creates a Pod
- other kinds of resources can still be created with `kubectl create`
---
## Creating a Deployment the proper way
- Let's destroy that `pingpong` app that we created
- Then we will use `kubectl create deployment` to re-create it
.exercise[
- On Kubernetes 1.18+, delete the Pod named `pingpong`:
```bash
kubectl delete pod pingpong
```
- On Kubernetes 1.17-, delete the Deployment named `pingpong`:
```bash
kubectl delete deployment pingpong
```
]
---
## Running `ping` in a Deployment
<!-- ##VERSION## -->
- When using `kubectl create deployment`, we cannot indicate the command to execute
(at least, not in Kubernetes 1.18)
- We can:
- write a custom YAML manifest for our Deployment
--
We should see the following things:
- `deployment.apps/pingpong` (the *deployment* that we just created)
- `replicaset.apps/pingpong-xxxxxxxxxx` (a *replica set* created by the deployment)
- `pod/pingpong-xxxxxxxxxx-yyyyy` (a *pod* created by the replica set)
- (yeah right ... too soon!)
Note: as of 1.10.1, resource types are displayed in more detail.
--
- use an image that has the command to execute baked in
- (much easier!)
--
- We will use the image `jpetazzo/ping`
(it has a default command of `ping 127.0.0.1`)
---
## What are these different things?
## Creating a Deployment running `ping`
- A *deployment* is a high-level construct
- Let's create a Deployment named `pingpong`
- allows scaling, rolling updates, rollbacks
- It will use the image `jpetazzo/ping`
- multiple deployments can be used together to implement a
[canary deployment](https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/#canary-deployments)
.exercise[
- delegates pods management to *replica sets*
- Create the Deployment:
```bash
kubectl create deployment pingpong --image=jpetazzo/ping
```
- A *replica set* is a low-level construct
- Check the resources that were created:
```bash
kubectl get all
```
- makes sure that a given number of identical pods are running
<!-- ```hide kubectl wait pod --selector=run=pingpong --for condition=ready ``` -->
- allows scaling
- rarely used directly
- A *replication controller* is the (deprecated) predecessor of a replica set
---
## Our `pingpong` deployment
- `kubectl run` created a *deployment*, `deployment.apps/pingpong`
```
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.apps/pingpong 1 1 1 1 10m
```
- That deployment created a *replica set*, `replicaset.apps/pingpong-xxxxxxxxxx`
```
NAME DESIRED CURRENT READY AGE
replicaset.apps/pingpong-7c8bbcd9bc 1 1 1 10m
```
- That replica set created a *pod*, `pod/pingpong-xxxxxxxxxx-yyyyy`
```
NAME READY STATUS RESTARTS AGE
pod/pingpong-7c8bbcd9bc-6c9qz 1/1 Running 0 10m
```
- We'll see later how these folks play together for:
- scaling, high availability, rolling updates
]
---
@@ -294,132 +526,6 @@ Let's leave `kubectl logs` running while we keep exploring.
---
## What if we wanted something different?
- What if we wanted to start a "one-shot" container that *doesn't* get restarted?
- We could use `kubectl run --restart=OnFailure` or `kubectl run --restart=Never`
- These commands would create *jobs* or *pods* instead of *deployments*
- Under the hood, `kubectl run` invokes "generators" to create resource descriptions
- We could also write these resource descriptions ourselves (typically in YAML),
<br/>and create them on the cluster with `kubectl apply -f` (discussed later)
- With `kubectl run --schedule=...`, we can also create *cronjobs*
---
## Scheduling periodic background work
- A Cron Job is a job that will be executed at specific intervals
(the name comes from the traditional cronjobs executed by the UNIX crond)
- It requires a *schedule*, represented as five space-separated fields:
- minute [0,59]
- hour [0,23]
- day of the month [1,31]
- month of the year [1,12]
- day of the week ([0,6] with 0=Sunday)
- `*` means "all valid values"; `/N` means "every N"
- Example: `*/3 * * * *` means "every three minutes"
---
## Creating a Cron Job
- Let's create a simple job to be executed every three minutes
- Cron Jobs need to terminate, otherwise they'd run forever
.exercise[
- Create the Cron Job:
```bash
kubectl run every3mins --schedule="*/3 * * * *" --restart=OnFailure \
--image=alpine sleep 10
```
- Check the resource that was created:
```bash
kubectl get cronjobs
```
]
---
## Cron Jobs in action
- At the specified schedule, the Cron Job will create a Job
- The Job will create a Pod
- The Job will make sure that the Pod completes
(re-creating another one if it fails, for instance if its node fails)
.exercise[
- Check the Jobs that are created:
```bash
kubectl get jobs
```
]
(It will take a few minutes before the first job is scheduled.)
---
## What about that deprecation warning?
- As we can see from the previous slide, `kubectl run` can do many things
- The exact type of resource created is not obvious
- To make things more explicit, it is better to use `kubectl create`:
- `kubectl create deployment` to create a deployment
- `kubectl create job` to create a job
- `kubectl create cronjob` to run a job periodically
<br/>(since Kubernetes 1.14)
- Eventually, `kubectl run` will be used only to start one-shot pods
(see https://github.com/kubernetes/kubernetes/pull/68132)
---
## Various ways of creating resources
- `kubectl run`
- easy way to get started
- versatile
- `kubectl create <resource>`
- explicit, but lacks some features
- can't create a CronJob before Kubernetes 1.14
- can't pass command-line arguments to deployments
- `kubectl create -f foo.yaml` or `kubectl apply -f foo.yaml`
- all features are available
- requires writing YAML
---
## Viewing logs of multiple pods
- When we specify a deployment name, only one single pod's logs are shown
@@ -428,13 +534,15 @@ Let's leave `kubectl logs` running while we keep exploring.
- A selector is a logic expression using *labels*
- Conveniently, when you `kubectl run somename`, the associated objects have a `run=somename` label
- If we check the pods created by the deployment, they all have the label `app=pingpong`
(this is just a default label that gets added when using `kubectl create deployment`)
.exercise[
- View the last line of log from all pods with the `run=pingpong` label:
- View the last line of log from all pods with the `app=pingpong` label:
```bash
kubectl logs -l run=pingpong --tail 1
kubectl logs -l app=pingpong --tail 1
```
]
@@ -449,7 +557,7 @@ Let's leave `kubectl logs` running while we keep exploring.
- Combine `-l` and `-f` flags:
```bash
kubectl logs -l run=pingpong --tail 1 -f
kubectl logs -l app=pingpong --tail 1 -f
```
<!--
@@ -480,7 +588,7 @@ class: extra-details
- Stream the logs:
```bash
kubectl logs -l run=pingpong --tail 1 -f
kubectl logs -l app=pingpong --tail 1 -f
```
<!-- ```wait error:``` -->
@@ -586,3 +694,195 @@ class: extra-details
- This is a quick way to check connectivity
(if we can reach 1.1, we probably have internet access)
---
## Creating other kinds of resources
- Deployments are great for stateless web apps
(as well as workers that keep running forever)
- Jobs are great for "long" background work
("long" being at least minutes our hours)
- CronJobs are great to schedule Jobs at regular intervals
(just like the classic UNIX `cron` daemon with its `crontab` files)
- Pods are great for one-off execution that we don't care about
(because they don't get automatically restarted if something goes wrong)
---
## Creating a Job
- A Job will create a Pod
- If the Pod fails, the Job will create another one
- The Job will keep trying until:
- either a Pod succeeds,
- or we hit the *backoff limit* of the Job (default=6)
.exercise[
- Create a Job that has a 50% chance of success:
```bash
kubectl create job flipcoin --image=alpine -- sh -c 'exit $(($RANDOM%2))'
```
]
---
## Our Job in action
- Our Job will create a Pod named `flipcoin-xxxxx`
- If the Pod succeeds, the Job stops
- If the Pod fails, the Job creates another Pod
.exercise[
- Check the status of the Pod(s) created by the Job:
```bash
kubectl get pods --selector=job-name=flipcoin
```
]
---
class: extra-details
## More advanced jobs
- We can specify a number of "completions" (default=1)
- This indicates how many times the Job must be executed
- We can specify the "parallelism" (default=1)
- This indicates how many Pods should be running in parallel
- These options cannot be specified with `kubectl create job`
(we have to write our own YAML manifest to use them)
---
## Scheduling periodic background work
- A Cron Job is a Job that will be executed at specific intervals
(the name comes from the traditional cronjobs executed by the UNIX crond)
- It requires a *schedule*, represented as five space-separated fields:
- minute [0,59]
- hour [0,23]
- day of the month [1,31]
- month of the year [1,12]
- day of the week ([0,6] with 0=Sunday)
- `*` means "all valid values"; `/N` means "every N"
- Example: `*/3 * * * *` means "every three minutes"
---
## Creating a Cron Job
- Let's create a simple job to be executed every three minutes
- Careful: make sure that the job terminates!
(The Cron Job will not hold if a previous job is still running)
.exercise[
- Create the Cron Job:
```bash
kubectl create cronjob every3mins --schedule="*/3 * * * *" \
--image=alpine -- sleep 10
```
- Check the resource that was created:
```bash
kubectl get cronjobs
```
]
---
## Cron Jobs in action
- At the specified schedule, the Cron Job will create a Job
- The Job will create a Pod
- The Job will make sure that the Pod completes
(re-creating another one if it fails, for instance if its node fails)
.exercise[
- Check the Jobs that are created:
```bash
kubectl get jobs
```
]
(It will take a few minutes before the first job is scheduled.)
---
class: extra-details
## What about `kubectl run` before v1.18?
- Creating a Deployment:
`kubectl run`
- Creating a Pod:
`kubectl run --restart=Never`
- Creating a Job:
`kubectl run --restart=OnFailure`
- Creating a Cron Job:
`kubectl run --restart=OnFailure --schedule=...`
*Avoid using these forms, as they are deprecated since Kubernetes 1.18!*
---
## Beyond `kubectl create`
- As hinted earlier, `kubectl create` doesn't always expose all options
- can't express parallelism or completions of Jobs
- can't express Pods with multiple containers
- can't express healthchecks, resource limits
- etc.
- `kubectl create` and `kubectl run` are *helpers* that generate YAML manifests
- If we write these manifests ourselves, we can use all features and options
- We'll see later how to do that!

View File

@@ -1,4 +1,4 @@
# What's next?
# Last words
- Congratulations!
@@ -189,6 +189,20 @@ are a few tools that can help us.*
---
## Developer experience
- How do we on-board a new developer?
- What do they need to install to get a dev stack?
- How does a code change make it from dev to prod?
- How does someone add a component to a stack?
*These questions are good "sanity checks" to validate our strategy!*
---
## Some guidelines
- Start small

View File

@@ -132,15 +132,15 @@ Exactly what we need!
- Everything created with `kubectl run` has a label `run`
- We can use that property to view the logs of all the pods created with `kubectl run`
- Everything created with `kubectl create deployment` has a label `app`
- Similarly, everything created with `kubectl create deployment` has a label `app`
- We can use that property to view the logs of all the pods created with `kubectl create deployment`
.exercise[
- View the logs for all the things started with `kubectl run`:
- View the logs for all the things started with `kubectl create deployment`:
```bash
stern -l run
stern -l app
```
<!--

View File

@@ -64,3 +64,19 @@ If it shows our nodes and their CPU and memory load, we're good!
]
- We can also use selectors (`-l app=...`)
---
## Other tools
- kube-capacity is a great CLI tool to view resources
(https://github.com/robscott/kube-capacity)
- It can show resource and limits, and compare them with usage
- It can show utilization per node, or per pod
- kube-resource-report can generate HTML reports
(https://github.com/hjacobs/kube-resource-report)

View File

@@ -570,7 +570,7 @@ After the Kibana UI loads, we need to click around a bit
## Deploying our apps with operators
- It is very simple to deploy with `kubectl run` / `kubectl expose`
- It is very simple to deploy with `kubectl create deployment` / `kubectl expose`
- We can unlock more features by writing YAML and using `kubectl apply`

View File

@@ -30,8 +30,6 @@
- Go to @@SLIDES@@ to view these slides
- Join the chat room: @@CHAT@@
<!-- ```open @@SLIDES@@``` -->
]

View File

@@ -144,158 +144,23 @@ spec:
---
## Persistent Volume Claims
## Individual volumes
- To abstract the different types of storage, a pod can use a special volume type
- The Pods of a Stateful set can have individual volumes
- This type is a *Persistent Volume Claim*
(i.e. in a Stateful set with 3 replicas, there will be 3 volumes)
- A Persistent Volume Claim (PVC) is a resource type
- These volumes can be either:
(visible with `kubectl get persistentvolumeclaims` or `kubectl get pvc`)
- allocated from a pool of pre-existing volumes (disks, partitions ...)
- A PVC is not a volume; it is a *request for a volume*
- created dynamically using a storage system
---
- This introduces a bunch of new Kubernetes resource types:
## Persistent Volume Claims in practice
Persistent Volumes, Persistent Volume Claims, Storage Classes
- Using a Persistent Volume Claim is a two-step process:
- creating the claim
- using the claim in a pod (as if it were any other kind of volume)
- A PVC starts by being Unbound (without an associated volume)
- Once it is associated with a Persistent Volume, it becomes Bound
- A Pod referring an unbound PVC will not start
(but as soon as the PVC is bound, the Pod can start)
---
## Binding PV and PVC
- A Kubernetes controller continuously watches PV and PVC objects
- When it notices an unbound PVC, it tries to find a satisfactory PV
("satisfactory" in terms of size and other characteristics; see next slide)
- If no PV fits the PVC, a PV can be created dynamically
(this requires to configure a *dynamic provisioner*, more on that later)
- Otherwise, the PVC remains unbound indefinitely
(until we manually create a PV or setup dynamic provisioning)
---
## What's in a Persistent Volume Claim?
- At the very least, the claim should indicate:
- the size of the volume (e.g. "5 GiB")
- the access mode (e.g. "read-write by a single pod")
- Optionally, it can also specify a Storage Class
- The Storage Class indicates:
- which storage system to use (e.g. Portworx, EBS...)
- extra parameters for that storage system
e.g.: "replicate the data 3 times, and use SSD media"
---
## What's a Storage Class?
- A Storage Class is yet another Kubernetes API resource
(visible with e.g. `kubectl get storageclass` or `kubectl get sc`)
- It indicates which *provisioner* to use
(which controller will create the actual volume)
- And arbitrary parameters for that provisioner
(replication levels, type of disk ... anything relevant!)
- Storage Classes are required if we want to use [dynamic provisioning](https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/)
(but we can also create volumes manually, and ignore Storage Classes)
---
## Defining a Persistent Volume Claim
Here is a minimal PVC:
```yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: my-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
```
---
## Using a Persistent Volume Claim
Here is a Pod definition like the ones shown earlier, but using a PVC:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-using-a-claim
spec:
containers:
- image: ...
name: container-using-a-claim
volumeMounts:
- mountPath: /my-vol
name: my-volume
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: my-claim
```
---
## Persistent Volume Claims and Stateful sets
- The pods in a stateful set can define a `volumeClaimTemplate`
- A `volumeClaimTemplate` will dynamically create one Persistent Volume Claim per pod
- Each pod will therefore have its own volume
- These volumes are numbered (like the pods)
- When updating the stateful set (e.g. image upgrade), each pod keeps its volume
- When pods get rescheduled (e.g. node failure), they keep their volume
(this requires a storage system that is not node-local)
- These volumes are not automatically deleted
(when the stateful set is scaled down or deleted)
(and also `volumeClaimTemplates`, that appear within Stateful Set manifests!)
---
@@ -441,11 +306,9 @@ nodes and encryption of gossip traffic) were removed for simplicity.
## Caveats
- We haven't used a `volumeClaimTemplate` here
- We aren't using actual persistence yet
- That's because we don't have a storage provider yet
(except if you're running this on your own and your cluster has one)
(no `volumeClaimTemplate`, Persistent Volume, etc.)
- What happens if we lose a pod?
@@ -474,3 +337,266 @@ nodes and encryption of gossip traffic) were removed for simplicity.
- we lose all the data (ouch)
- If we run Consul without persistent storage, backups are a good idea!
---
# Persistent Volumes Claims
- Our Pods can use a special volume type: a *Persistent Volume Claim*
- A Persistent Volume Claim (PVC) is also a Kubernetes resource
(visible with `kubectl get persistentvolumeclaims` or `kubectl get pvc`)
- A PVC is not a volume; it is a *request for a volume*
- It should indicate at least:
- the size of the volume (e.g. "5 GiB")
- the access mode (e.g. "read-write by a single pod")
---
## What's in a PVC?
- A PVC contains at least:
- a list of *access modes* (ReadWriteOnce, ReadOnlyMany, ReadWriteMany)
- a size (interpreted as the minimal storage space needed)
- It can also contain optional elements:
- a selector (to restrict which actual volumes it can use)
- a *storage class* (used by dynamic provisioning, more on that later)
---
## What does a PVC look like?
Here is a manifest for a basic PVC:
```yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: my-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
```
---
## Using a Persistent Volume Claim
Here is a Pod definition like the ones shown earlier, but using a PVC:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-using-a-claim
spec:
containers:
- image: ...
name: container-using-a-claim
volumeMounts:
- mountPath: /my-vol
name: my-volume
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: my-claim
```
---
## Creating and using Persistent Volume Claims
- PVCs can be created manually and used explicitly
(as shown on the previous slides)
- They can also be created and used through Stateful Sets
(this will be shown later)
---
## Lifecycle of Persistent Volume Claims
- When a PVC is created, it starts existing in "Unbound" state
(without an associated volume)
- A Pod referencing an unbound PVC will not start
(the scheduler will wait until the PVC is bound to place it)
- A special controller continuously monitors PVCs to associate them with PVs
- If no PV is available, one must be created:
- manually (by operator intervention)
- using a *dynamic provisioner* (more on that later)
---
class: extra-details
## Which PV gets associated to a PVC?
- The PV must satisfy the PVC constraints
(access mode, size, optional selector, optional storage class)
- The PVs with the closest access mode are picked
- Then the PVs with the closest size
- It is possible to specify a `claimRef` when creating a PV
(this will associate it to the specified PVC, but only if the PV satisfies all the requirements of the PVC; otherwise another PV might end up being picked)
- For all the details about the PersistentVolumeClaimBinder, check [this doc](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/storage/persistent-storage.md#matching-and-binding)
---
## Persistent Volume Claims and Stateful sets
- A Stateful set can define one (or more) `volumeClaimTemplate`
- Each `volumeClaimTemplate` will create one Persistent Volume Claim per pod
- Each pod will therefore have its own individual volume
- These volumes are numbered (like the pods)
- Example:
- a Stateful set is named `db`
- it is scaled to replicas
- it has a `volumeClaimTemplate` named `data`
- then it will create pods `db-0`, `db-1`, `db-2`
- these pods will have volumes named `data-db-0`, `data-db-1`, `data-db-2`
---
## Persistent Volume Claims are sticky
- When updating the stateful set (e.g. image upgrade), each pod keeps its volume
- When pods get rescheduled (e.g. node failure), they keep their volume
(this requires a storage system that is not node-local)
- These volumes are not automatically deleted
(when the stateful set is scaled down or deleted)
- If a stateful set is scaled back up later, the pods get their data back
---
## Dynamic provisioners
- A *dynamic provisioner* monitors unbound PVCs
- It can create volumes (and the corresponding PV) on the fly
- This requires the PVCs to have a *storage class*
(annotation `volume.beta.kubernetes.io/storage-provisioner`)
- A dynamic provisioner only acts on PVCs with the right storage class
(it ignores the other ones)
- Just like `LoadBalancer` services, dynamic provisioners are optional
(i.e. our cluster may or may not have one pre-installed)
---
## What's a Storage Class?
- A Storage Class is yet another Kubernetes API resource
(visible with e.g. `kubectl get storageclass` or `kubectl get sc`)
- It indicates which *provisioner* to use
(which controller will create the actual volume)
- And arbitrary parameters for that provisioner
(replication levels, type of disk ... anything relevant!)
- Storage Classes are required if we want to use [dynamic provisioning](https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/)
(but we can also create volumes manually, and ignore Storage Classes)
---
## The default storage class
- At most one storage class can be marked as the default class
(by annotating it with `storageclass.kubernetes.io/is-default-class=true`)
- When a PVC is created, it will be annotated with the default storage class
(unless it specifies an explicit storage class)
- This only happens at PVC creation
(existing PVCs are not updated when we mark a class as the default one)
---
## Dynamic provisioning setup
This is how we can achieve fully automated provisioning of persistent storage.
1. Configure a storage system.
(It needs to have an API, or be capable of automated provisioning of volumes.)
2. Install a dynamic provisioner for this storage system.
(This is some specific controller code.)
3. Create a Storage Class for this system.
(It has to match what the dynamic provisioner is expecting.)
4. Annotate the Storage Class to be the default one.
---
## Dynamic provisioning usage
After setting up the system (previous slide), all we need to do is:
*Create a Stateful Set that makes use of a `volumeClaimTemplate`.*
This will trigger the following actions.
1. The Stateful Set creates PVCs according to the `volumeClaimTemplate`.
2. The Stateful Set creates Pods using these PVCs.
3. The PVCs are automatically annotated with our Storage Class.
4. The dynamic provisioner provisions volumes and creates the corresponding PVs.
5. The PersistentVolumeClaimBinder associates the PVs and the PVCs together.
6. PVCs are now bound, the Pods can start.

View File

@@ -1,8 +1,8 @@
## Versions installed
- Kubernetes 1.17.2
- Docker Engine 19.03.5
- Docker Compose 1.24.1
- Kubernetes 1.18.0
- Docker Engine 19.03.8
- Docker Compose 1.25.4
<!-- ##VERSION## -->
@@ -27,11 +27,11 @@ class: extra-details
*however ...*
- Kubernetes 1.15 validates Docker Engine versions [up to 18.09](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.15.md#dependencies)
- Kubernetes 1.15 validates Docker Engine versions [up to 18.09](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.15.md#dependencies)
<br/>
(the latest version when Kubernetes 1.14 was released)
- Kubernetes 1.13 only validates Docker Engine versions [up to 18.06](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.13.md#external-dependencies)
- Kubernetes 1.13 only validates Docker Engine versions [up to 18.06](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.13.md#external-dependencies)
- Is it a problem if I use Kubernetes with a "too recent" Docker Engine?

View File

@@ -209,19 +209,37 @@ And *then* it is time to look at orchestration!
## Managing stack deployments
- The best deployment tool will vary, depending on:
- Applications are made of many resources
- the size and complexity of your stack(s)
- how often you change it (i.e. add/remove components)
- the size and skills of your team
(Deployments, Services, and much more)
- A few examples:
- We need to automate the creation / update / management of these resources
- shell scripts invoking `kubectl`
- YAML resources descriptions committed to a repo
- [Helm](https://github.com/kubernetes/helm) (~package manager)
- [Spinnaker](https://www.spinnaker.io/) (Netflix' CD platform)
- [Brigade](https://brigade.sh/) (event-driven scripting; no YAML)
- There is no "absolute best" tool or method; it depends on:
- the size and complexity of our stack(s)
- how often we change it (i.e. add/remove components)
- the size and skills of our team
---
## A few tools to manage stacks
- Shell scripts invoking `kubectl`
- YAML resource manifests committed to a repo
- [Kustomize](https://github.com/kubernetes-sigs/kustomize)
(YAML manifests + patches applied on top)
- [Helm](https://github.com/kubernetes/helm)
(YAML manifests + templating engine)
- [Spinnaker](https://www.spinnaker.io/)
(Netflix' CD platform)
- [Brigade](https://brigade.sh/)
(event-driven scripting; no YAML)
---
@@ -260,17 +278,3 @@ Sorry Star Trek fans, this is not the federation you're looking for!
- Synchronize resources across clusters
- Discover resources across clusters
---
## Developer experience
*We've put this last, but it's pretty important!*
- How do you on-board a new developer?
- What do they need to install to get a dev stack?
- How does a code change make it from dev to prod?
- How does someone add a component to a stack?

View File

@@ -140,3 +140,27 @@ We can safely ignore them.)
- Our version control system now has a full history of what we deploy
- Compares to "Infrastructure-as-Code", but for app deployments
---
class: extra-details
## Specifying the namespace
- When creating resources from YAML manifests, the namespace is optional
- If we specify a namespace:
- resources are created in the specified namespace
- this is typical for things deployed only once per cluster
- example: system components, cluster add-ons ...
- If we don't specify a namespace:
- resources are created in the current namespace
- this is typical for things that may be deployed multiple times
- example: applications (production, staging, feature branches ...)

View File

@@ -21,25 +21,33 @@ chapters:
- logistics.md
- k8s/intro.md
- shared/about-slides.md
- shared/chat-room-im.md
#- shared/chat-room-zoom.md
- shared/toc.md
- - k8s/prereqs-admin.md
-
- k8s/prereqs-admin.md
- k8s/architecture.md
- k8s/deploymentslideshow.md
- k8s/dmuc.md
- - k8s/multinode.md
-
- k8s/multinode.md
- k8s/cni.md
- k8s/interco.md
-
- k8s/apilb.md
- k8s/control-plane-auth.md
- - k8s/setup-managed.md
- k8s/setup-selfhosted.md
#- k8s/setup-managed.md
#- k8s/setup-selfhosted.md
- k8s/cluster-upgrade.md
- k8s/staticpods.md
- k8s/cluster-backup.md
- k8s/cloud-controller-manager.md
- k8s/bootstrap.md
- - k8s/resource-limits.md
- k8s/metrics-server.md
- k8s/cluster-sizing.md
- k8s/horizontal-pod-autoscaler.md
- - k8s/lastwords-admin.md
- k8s/staticpods.md
-
#- k8s/cloud-controller-manager.md
#- k8s/bootstrap.md
- k8s/control-plane-auth.md
- k8s/podsecuritypolicy.md
- k8s/csr-api.md
- k8s/openid-connect.md
-
#- k8s/lastwords-admin.md
- k8s/links.md
- shared/thankyou.md

View File

@@ -21,6 +21,8 @@ chapters:
- logistics.md
- k8s/intro.md
- shared/about-slides.md
- shared/chat-room-im.md
#- shared/chat-room-zoom.md
- shared/toc.md
# DAY 1
- - k8s/prereqs-admin.md
@@ -29,6 +31,7 @@ chapters:
- k8s/dmuc.md
- - k8s/multinode.md
- k8s/cni.md
- k8s/interco.md
- - k8s/apilb.md
- k8s/setup-managed.md
- k8s/setup-selfhosted.md
@@ -58,7 +61,7 @@ chapters:
- k8s/operators.md
###- k8s/operators-design.md
# CONCLUSION
- - k8s/lastwords-admin.md
- - k8s/lastwords.md
- k8s/links.md
- shared/thankyou.md
- |

View File

@@ -20,6 +20,8 @@ chapters:
- logistics.md
- k8s/intro.md
- shared/about-slides.md
- shared/chat-room-im.md
#- shared/chat-room-zoom.md
- shared/toc.md
-
- shared/prereqs.md
@@ -44,6 +46,7 @@ chapters:
#- k8s/buildshiprun-selfhosted.md
- k8s/buildshiprun-dockerhub.md
- k8s/ourapponkube.md
#- k8s/exercise-wordsmith.md
-
- k8s/yamldeploy.md
- k8s/setup-k8s.md
@@ -53,9 +56,10 @@ chapters:
- shared/hastyconclusions.md
- k8s/daemonset.md
#- k8s/dryrun.md
#- k8s/kubectlproxy.md
#- k8s/exercise-yaml.md
#- k8s/localkubeconfig.md
#- k8s/accessinternal.md
#- k8s/kubectlproxy.md
- k8s/rollout.md
#- k8s/healthchecks.md
#- k8s/healthchecks-more.md
@@ -69,6 +73,7 @@ chapters:
#- k8s/helm-create-basic-chart.md
#- k8s/helm-create-better-chart.md
#- k8s/helm-secrets.md
#- k8s/exercise-helm.md
#- k8s/create-chart.md
#- k8s/create-more-charts.md
#- k8s/netpol.md
@@ -77,6 +82,7 @@ chapters:
#- k8s/openid-connect.md
#- k8s/podsecuritypolicy.md
- k8s/volumes.md
#- k8s/exercise-configmap.md
#- k8s/build-with-docker.md
#- k8s/build-with-kaniko.md
- k8s/configuration.md
@@ -93,5 +99,6 @@ chapters:
#- k8s/gitworkflows.md
-
- k8s/whatsnext.md
- k8s/lastwords.md
- k8s/links.md
- shared/thankyou.md

View File

@@ -22,6 +22,8 @@ chapters:
- logistics-bridget.md
- k8s/intro.md
- shared/about-slides.md
- shared/chat-room-im.md
#- shared/chat-room-zoom.md
- shared/toc.md
- - shared/prereqs.md
#- shared/webssh.md
@@ -45,9 +47,9 @@ chapters:
#- k8s/buildshiprun-selfhosted.md
- k8s/buildshiprun-dockerhub.md
- k8s/ourapponkube.md
#- k8s/kubectlproxy.md
#- k8s/localkubeconfig.md
#- k8s/accessinternal.md
#- k8s/kubectlproxy.md
- - k8s/dashboard.md
#- k8s/kubectlscale.md
- k8s/scalingdockercoins.md

View File

@@ -20,6 +20,8 @@ chapters:
#- logistics.md
- k8s/intro.md
- shared/about-slides.md
#- shared/chat-room-im.md
#- shared/chat-room-zoom.md
- shared/toc.md
-
- shared/prereqs.md
@@ -45,6 +47,7 @@ chapters:
- k8s/buildshiprun-selfhosted.md
- k8s/buildshiprun-dockerhub.md
- k8s/ourapponkube.md
#- k8s/exercise-wordsmith.md
- k8s/yamldeploy.md
-
- k8s/setup-k8s.md
@@ -54,6 +57,7 @@ chapters:
- shared/hastyconclusions.md
- k8s/daemonset.md
- k8s/dryrun.md
#- k8s/exercise-yaml.md
-
- k8s/rollout.md
- k8s/healthchecks.md
@@ -61,9 +65,9 @@ chapters:
- k8s/record.md
-
- k8s/namespaces.md
- k8s/kubectlproxy.md
- k8s/localkubeconfig.md
- k8s/accessinternal.md
- k8s/kubectlproxy.md
-
- k8s/ingress.md
- k8s/kustomize.md
@@ -72,6 +76,7 @@ chapters:
- k8s/helm-create-basic-chart.md
- k8s/helm-create-better-chart.md
- k8s/helm-secrets.md
#- k8s/exercise-helm.md
-
- k8s/netpol.md
- k8s/authn-authz.md
@@ -81,6 +86,7 @@ chapters:
- k8s/control-plane-auth.md
-
- k8s/volumes.md
#- k8s/exercise-configmap.md
- k8s/build-with-docker.md
- k8s/build-with-kaniko.md
-
@@ -112,6 +118,6 @@ chapters:
- k8s/cloud-controller-manager.md
- k8s/gitworkflows.md
-
- k8s/whatsnext.md
- k8s/lastwords.md
- k8s/links.md
- shared/thankyou.md

View File

@@ -20,6 +20,8 @@ chapters:
- logistics.md
- k8s/intro.md
- shared/about-slides.md
- shared/chat-room-im.md
#- shared/chat-room-zoom.md
- shared/toc.md
-
- shared/prereqs.md
@@ -44,6 +46,7 @@ chapters:
#- k8s/buildshiprun-selfhosted.md
- k8s/buildshiprun-dockerhub.md
- k8s/ourapponkube.md
#- k8s/exercise-wordsmith.md
-
- k8s/yamldeploy.md
#- k8s/setup-k8s.md
@@ -53,10 +56,11 @@ chapters:
- shared/hastyconclusions.md
- k8s/daemonset.md
- k8s/dryrun.md
#- k8s/exercise-yaml.md
-
#- k8s/kubectlproxy.md
- k8s/localkubeconfig.md
- k8s/accessinternal.md
#- k8s/kubectlproxy.md
- k8s/rollout.md
- k8s/healthchecks.md
#- k8s/healthchecks-more.md
@@ -70,6 +74,7 @@ chapters:
- k8s/helm-create-basic-chart.md
- k8s/helm-create-better-chart.md
- k8s/helm-secrets.md
#- k8s/exercise-helm.md
-
- k8s/netpol.md
- k8s/authn-authz.md
@@ -78,6 +83,7 @@ chapters:
#- k8s/podsecuritypolicy.md
-
- k8s/volumes.md
#- k8s/exercise-configmap.md
#- k8s/build-with-docker.md
#- k8s/build-with-kaniko.md
- k8s/configuration.md
@@ -95,5 +101,6 @@ chapters:
#- k8s/gitworkflows.md
-
- k8s/whatsnext.md
- k8s/lastwords.md
- k8s/links.md
- shared/thankyou.md

11
slides/qrcode.html Normal file
View File

@@ -0,0 +1,11 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Send an email to Jérôme</title>
<meta http-equiv="refresh" content="0;URL='mailto:jerome.petazzoni@gmail.com?subject=I%20was%20at%20your%20Docker/Kubernetes%20workshop%20in%20London.%20Can%20you%20train%20my%20team%3F
'" />
</head>
<body>
<p>Click <a href="mailto:jerome.petazzoni@gmail.com?subject=I%20was%20at%20your%20Docker/Kubernetes%20workshop%20in%20London.%20Can%20you%20train%20my%20team%3F">
here</a> to send an email to Jérôme to inquire about Docker/Kubernetes training.</p>
</body>
</html>

View File

@@ -73,19 +73,3 @@ class: extra-details
- you want only the most essential information
- You can review these slides another time if you want, they'll be waiting for you ☺
---
class: in-person, chat-room
## Chat room
- We've set up a chat room that we will monitor during the workshop
- Don't hesitate to use it to ask questions, or get help, or share feedback
- The chat room will also be available after the workshop
- Join the chat room: @@CHAT@@
- Say hi in the chat room!

View File

@@ -0,0 +1,11 @@
## Chat room
- We've set up a chat room that we will monitor during the workshop
- Don't hesitate to use it to ask questions, or get help, or share feedback
- The chat room will also be available after the workshop
- Join the chat room: @@CHAT@@
- Say hi in the chat room!

View File

@@ -0,0 +1,68 @@
## Use the chat!
- In the Zoom UI, click on "Chat" (at the bottom of the screen, in the middle)
- This will bring up the chat panel
- Say hi in the group chat!
- If you'd like, you can open the chat to its own separate window:
- click on the little `v` on the left of "Zoom Group Chat"
- select "Pop Out"
- We will be monitoring the Zoom chat during the whole training
- Don't hesitate to use it to ask questions, or get help, or share feedback
---
## Use non-verbal communication cues
- ... wait, what?!?
--
- In the Zoom UI, click on "Participants" (at the bottom of the screen, in the middle)
- This will bring up the list of participants
- You can pop it out if you like (just like the chat window)
- At the bottom of the list of participants, there are feedback buttons:
raise hand, yes, no, go slower, go faster
- If you click on "more" (on the right of these feedback buttons), you can also:
thumbs down, thumbs up, applause, need a break, away
- Click on "thumbs up" to let us know that everything is working fine!
---
## Use your webcam (if you'd like!)
- If you would like to turn on your webcam, feel free to do so
- You don't have to, but your teacher will appreciate it :)
(it's easier to teach and get feedback from human faces!)
- You are welcome to smile / frown / raise your hand ... through your webcam as well!
- Great metaphor, courtesy of
[Liz Howard](https://twitter.com/lizthedeveloper)):
*“It's just like being in a classroom.
<br/>People with their webcam on are in the front row;
<br/>people with their webcam off are in the back row.”*
---
## During the session
- We will often ask "yes/no" questions; use the corresponding buttons
- If you have a question, you can ask in the chat, or use "raise hand"

View File

@@ -50,8 +50,6 @@ Misattributed to Benjamin Franklin
- Go to @@SLIDES@@ to view these slides
- Join the chat room: @@CHAT@@
<!-- ```open @@SLIDES@@``` -->
]

View File

@@ -11,11 +11,16 @@ class: title, in-person
@@TITLE@@<br/></br>
.footnote[
**Be kind to the WiFi!**<br/>
<!-- *Use the 5G network.* -->
*Don't use your hotspot.*<br/>
*Don't stream videos or download big files during the workshop[.](https://www.youtube.com/watch?v=h16zyxiwDLY)*<br/>
*Thank you!*
**Slides: @@SLIDES@@**
**Slides[:](https://www.youtube.com/watch?v=h16zyxiwDLY) @@SLIDES@@**
]
<!--
WiFi: **Something**<br/>
Password: **Something**
**Be kind to the WiFi!**<br/>
*Use the 5G network.*
*Don't use your hotspot.*<br/>
*Don't stream videos or download big files during the workshop*<br/>
*Thank you!*
-->

View File

@@ -24,6 +24,8 @@ chapters:
- logistics.md
- swarm/intro.md
- shared/about-slides.md
- shared/chat-room-im.md
#- shared/chat-room-zoom.md
- shared/toc.md
- - shared/prereqs.md
- shared/connecting.md

View File

@@ -24,6 +24,8 @@ chapters:
- logistics.md
- swarm/intro.md
- shared/about-slides.md
- shared/chat-room-im.md
#- shared/chat-room-zoom.md
- shared/toc.md
- - shared/prereqs.md
- shared/connecting.md

View File

@@ -19,6 +19,8 @@ chapters:
#- shared/logistics.md
- swarm/intro.md
- shared/about-slides.md
#- shared/chat-room-im.md
#- shared/chat-room-zoom.md
- shared/toc.md
- - shared/prereqs.md
- shared/connecting.md