kubernetes-on-embedded
所属分类:云原生工具
开发工具:Shell
文件大小:667KB
下载次数:0
上传日期:2019-02-13 13:02:08
上 传 者:
sh-1993
说明: 使用混合嵌入式设备构建kubernetes数据中心
(Build your on kubernetes datacenter with hybrid embedded devices)
文件列表:
LICENSE (11357, 2019-02-13)
ansible.cfg (112, 2019-02-13)
cluster (1451, 2019-02-13)
files (0, 2019-02-13)
files\bootstrap-17.03.sh (3051, 2019-02-13)
files\bootstrap-up.sh (3059, 2019-02-13)
files\bootstrap.sh (2325, 2019-02-13)
files\examples (0, 2019-02-13)
files\examples\alpine.yml (249, 2019-02-13)
files\examples\nginx-deploy.yml (316, 2019-02-13)
files\examples\nginx-service.yml (210, 2019-02-13)
files\examples\nginx.yml (210, 2019-02-13)
images (0, 2019-02-13)
images\EdgeMax-DHCP-configure.png (572283, 2019-02-13)
install_flash.sh (167, 2019-02-13)
kubernetes-up.yml (1504, 2019-02-13)
kubernetes.yml (952, 2019-02-13)
pictures (0, 2019-02-13)
pictures\Kubernetes-systemdesign-raspberrypi-edge.png (45133, 2019-02-13)
pictures\Kubernetes-systemdesign-raspberrypi.graffle (20123, 2019-02-13)
pictures\Kubernetes-systemdesign-raspberrypi.png (99284, 2019-02-13)
reset.yml (490, 2019-02-13)
user-data-example (2255, 2019-02-13)
# Kubernetes-On-Embedded
Dies ist das Repo fur unseren Blogpost https://bee42.com/de/blog/tutorials/kubernetes-cluster-on-embedded/, schaut mal rein!
## Kubernetes 1.9 mit Docker 17.03
_Achtung: Mit der Hypriot-Version 1.4.0 gab es einen schwerwiegenden Fehler: Die Machine-ID wurde nicht neu generiert und war deshalb bei allen RPI's identisch. Das fuhrte zu [Problemen](https://stackoverflow.com/questions/49113253/kubernetes-pods-stuck-at-containercreating) mit dem Netzwerk-Layer!_
![RPI Systemdesign:](pictures/Kubernetes-systemdesign-raspberrypi.png)
Alternative kann man den Cluster auch folgendermassen aufbauen:
Wir bauen einen kompleten Kubernetes-Cluster auf Embedded-Hardware. Dazu benutzen wir einen EdgeRouterX, 2 WLAN-Router, 2 Switches, ein Intel UP-Board und fur den eigentlichen K8S-Cluster Raspberry Pi's.
![RPI Systemdesign edge:](pictures/Kubernetes-systemdesign-raspberrypi-edge.png)
## Einkaufswagen fullen, bestellen, bezahlen, installieren und Spa haben!
Alle Komponenten die Ihr braucht um einen Docker PI-Cluster aufzubauen konnen in der Regel preiswert und zuverlassig bestellt werden. Wir haben uns an der Liste von [Roland Huss](https://ro14nd.de/kubernetes-on-raspberry-pi3) orientiert:
Danke Roland :-)
Wir haben hier den aktuellsten RPI Modell 3B+ genommen, ein RPI 2 funktioniert aber auch, naturlich mit Abstrichen in der Leistung.
Stand 2018-10 ca. 290 Euro
| Anzahl | Systemkomponente | Preis |
|:-------|:--------------------------------------------------------------|:-----------|
| 3 | [Raspberry Pi 3 B+](https://www.amazon.de/dp/B07BDR5PDW) | 3 * 41 EUR |
| 3 | [Micro SD Card 32 GB](https://www.amazon.de//dp/B073JWXGNT) | 3 * 8 EUR |
| 1 | [WLAN Router](https://www.amazon.de/dp/B01MY5JIJ0) | 1 * 34 EUR |
| 4 | [USB Kabel](https://www.amazon.de/dp/B016BEVNK4) | 1 * 7 EUR |
| 1 | [USB Stromgerat](https://www.amazon.de/dp/B00PTLSH9G) | 1 * 29 EUR |
| 1 | [Gehause](https://www.amazon.de/dp/B00NB1WPEE) | 1 * 10 EUR |
| 2 | [Zwischenplatten](https://www.amazon.de/dp/B00NB1WQZW) | 2 * 7 EUR |
| 5 | [Ethernet Kabel](https://www.amazon.de/dp/B005VFZ00E) | 1 * 8 EUR |
| 1 | [Ethernet 8 Port Switch](https://www.amazon.de/dp/B000092RRM) | 1 * 32 EUR |
### Optionen
* Kuhler fur die PI kaufen und installieren
* OnOff Shim von Pimoroni installieren oder selber bauen
* https://shop.pimoroni.com/products/onoff-shim
* http://www.netzmafia.de/skripten/hardware/RasPi/Projekt-OnOff/index.html
* Nicht vergessen es wird ein Ethernet Switch und Ethernetkabel benotigt. Die WLAN Verbindungen sind in der Regel zu storanfallig.
* https://www.amazon.de/dp/B01MU3WUX1
* https://www.amazon.de/dp/B01N362YPG
* POE Switch und POE 3+ Hat installieren.
* https://shop.pimoroni.com/products/raspberry-pi-poe-hat
* TP-Link-TL-WR902AC-AC750
* https://www.amazon.de/dp/B01MY5JIJ0
* Konfiguration via ROOT WLAN Access Point spart den Edge Router und die zweiten TP Link Access Point.
## Kubernetes 1.12.x mit Docker 18.06.x
Stand: 2018-10-06
Wer die aktuelle Docker 18.06 mit dem aktuellen Kubernetes 1.12.x zum laufen bringen mochte,
muss etwas in die Trickkisten greifen und das OS Image fur die RPIs selber herstellen.
### Selbsterstellen des Hypriot OS mit aktuallisierten Packages
* https://github.com/hypriot/image-builder-rpi
Installieren von virtualbox und vagrant mit Homebrew
* https://brew.sh/
* http://caskroom.io/
```
$ brew cask install virtualbox
$ brew cask install virtualbox-extension-pack
$ brew cask install vagrant
```
```
$ git clone https://github.com/hypriot/image-builder-rpi
$ cd image-builder-rpi
$ vagrant up
$ export DOCKER_HOST=tcp://127.0.0.1:2375
# check OS version and docker version
$ docker info | grep 'Operating System'
Operating System: Ubuntu 16.04.5 LTS
$ mv versions.config versions-orginal.config
$ cat >versions.config <
docker-compose.yml <versions.config <
```
__Frage__: Wie bekommt eigentlich heraus welche IP dem PI vom DHCP Server zugeordnet wurde?
```
# install nmap
$ brew install nmap
$ nmap -sn 192.168.42.0/24 # Durch Euer Netz ersetzen
```
Das Passwort fur den Nutzer __pirate__ lautet: **hypriot**.
Im Blog der Hypriot Piraten findet Ihr jede Mengen Erklarungen zum Thema Docker on ARM:
* https://blog.hypriot.com/getting-started-with-docker-on-your-arm-device/
* https://hub.docker.com/u/hypriot/
## Kubernetes-Cluster installieren
### Installation des Kubernetes-Masters
Zur Ausfuhrung unseres Installationsscripts auf den einzelen RPIs benutzen wir [Ansible](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html).
```
$ brew install ansible
```
Dafur benotigen wir zunachst ein Inhaltsverzeichnis. Wir haben mehrere Cluster, deshalb ist die Konfiguration in der Datei `cluster` etwas groer angelegt:
```
[cluster-1-master]
192.168.42.11
[cluster-1-nodes]
192.168.42.12
192.168.42.13
[cluster-1:children]
cluster-1-master
cluster-1-nodes
[cluster-1:vars]
fqdn_master="bee42-crew-01-001.local"
network_address_master="192.168.42.11"
[master:children]
cluster-1-master
[nodes:children]
cluster-1-nodes
```
Fur eine K8s Cluster sollten die Maschinen eine fixe IP Adresse besitzen.
Wir fixieren also die DHCP Records im Edge Max.
![](images/EdgeMax-DHCP-configure.png)
Die Maschinen mussen dann alle rebooted werden.
Auf einem MAC kann man den DNS Cache mit folgendem Kommando erneuern:
```
sudo killall -HUP mDNSResponder
```
Ansible verbindet sich per SSH auf die zu verwaltenden Rechner, dort muss also offentlicher SSH-Key hinterlegt sein. Falls Ihr noch keinen habt, hier ein kleines Beispiel:
```bash
# Schlussel erzeugen
$ ssh-keygen -t ed25519 -C "name@example.org"
# Offentlichen Schlussel auf alle RPIs kopieren
$ ssh-copy-id pirate@192.168.42.11
$ ssh-copy-id pirate@192.168.42.12
...
# Testen der Maschinenverfugbarkeit :
$ export SSH_KEY=~/.ssh/id_ed25519
$ export K8sCLUSTER=cluster-1
$ ansible -u pirate --key=$SSH_KEY -i cluster -l $K8sCLUSTER -m ping all
192.168.42.11 | success >> {
"changed": false,
"ping": "pong"
}
192.168.2.12 | success >> {
"changed": false,
"ping": "pong"
}
```
### K8s-Cluster erzeugen
So, wenn alle Vorbereitungen abgeschlossen sind, kann der Kubernetes-Cluster erzeugt werden. Ein RPI wird zum Master und die restlichen werden als Nodes angeschlossen.
```bash
$ export K8sCLUSTER=cluster-1
$ export KUBERNETES_VERSION=1.13.2
$ export DOCKER_VERSION=18.09.1
$ ansible-playbook -u pirate --key=$SSH_KEY -i cluster -l $K8sCLUSTER kubernetes.yml
$ ssh 192.168.42.11
$ mkdir -p .kube
$ sudo cp /etc/kubernetes/admin.conf .kube/config
$ sudo chown -R pirate:pirate .kube/
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
bee42-crew-04-001 Ready master 8m53s v1.12.0
bee42-crew-04-002 Ready 6m32s v1.12.0
bee42-crew-04-003 Ready 6m22s v1.12.0
$ kubectl run my-shell --rm -i --tty --image alpine -- /bin/sh
> ls
```
```
ssh
sudo useradd -m -p hypriot -s /bin/bash pirate
sudo usermod -aG sudo pirate
exit
ssh-copy-id -i $SSH_KEY pirate@192.168.42.35
```
I2C:
* http://www.netzmafia.de/skripten/hardware/RasPi/RasPi_I2C.html
__Todo__:
* Kopieren der Images eines Release in eine Registry
* Installation der PI's auf der Basis dieser Registry
* Einrichten eines Mirrors
* Einrichten eines DNS Server fur alle Cluster
* Test mit einem Unify Router via Ethernet
* WLAN Router nur fur Crew
* Test mit weiteren AccessPoints
* DHCP?
* Loadbalancer
* Metall LB
* https://medium.com/@JockDaRock/kubernetes-metal-lb-for-on-prem-baremetal-cluster-in-10-minutes-c2eaeb3fe813
* External DNS
* Noip Dynamic DNS
### Cluster vernichten
Manchmal mochte man den Cluster abreissen und vielleicht in einer anderen Version neu bauen, deshalb gibt es auch ein Reset-Playbook:
```bash
$ ansible-playbook -u pirate --key=$SSH_KEY -i cluster -l $K8sCLUSTER reset.yml
```
__TIPP__: Phonix aus der Asche entstehen lassen
Wer einen wirklich unbelastete Maschine benotigt, sollte allerdings lieber die SD Karte flashen und den RPI neu starten.
## Trouble on arm***
* https://github.com/kubernetes/kubernetes/issues/******9
* https://github.com/kubernetes/kubernetes/pull/6***58/files
```
--audit-log-maxage=30 \
--audit-log-maxbackup=3 \
--audit-log-maxsize=100 \
--authorization-mode=Node,RBAC \
--enable-swagger-ui=true \
--event-ttl=1h \
--insecure-bind-address=127.0.0.1 \
--runtime-config=rbac.authorization.k8s.io/v1alpha1 \
--v=2
```
Liebe Grue
Peter
* https://gist.github.com/alexellis/fdbc90de7691a1b9edb545c17da2d975
* https://www.trion.de/news/2018/07/06/kubernetes-raspberry-pi.html
近期下载者:
相关文件:
收藏者: