Alfred Sabitzer

K8s Applications mit MicroK8S auf Raspberry PI


Скачать книгу

Go version: go1.13.8

       Git commit: 20.10.7-0ubuntu1~20.04.1

       Built: Wed Aug 4 19:07:47 2021

       OS/Arch: linux/arm64

       Experimental: false

       containerd:

       Version: 1.5.2-0ubuntu1~20.04.2

       GitCommit:

       runc:

      https://github.com/docker-library/hello-world Version: 1.0.0~rc95-0ubuntu1~20.04.2

       GitCommit:

       docker-init:

       Version: 0.19.0

       GitCommit:

      alfred@monitoring:~$

      Es gibt sehr viele Anleitungen, wie man Docker installiert. Ich habe dazu folgendes Skript.

      #!/bin/bash

      ############################################################################################

      # $Date: 2021-11-22 18:47:00 +0100 (Mo, 22. Nov 2021) $

      # $Revision: 1252 $

      # $Author: alfred $

      # $HeadURL: https://monitoring.slainte.at/svn/slainte/trunk/k8s/k8s_app/portainer/portainer.sh $

      # $Id: portainer.sh 1252 2021-11-22 17:47:00Z alfred $

      #

      # https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-de

      #

      # Installieren Docker und Portainer

      #

      ############################################################################################

      #shopt -o -s errexit #—Terminates the shell script if a command returns an error code.

      shopt -o -s xtrace #—Displays each command before it’s executed.

      shopt -o -s nounset #-No Variables without definition

      #

      sudo apt update

      sudo apt install apt-transport-https ca-certificates curl software-properties-common

      curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

      sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

      sudo apt update

      apt-cache policy docker-ce

      sudo apt install docker-ce

      sudo usermod -aG docker ${USER}

      #

      docker volume create portainer_data

      docker run -d -p 8000:8000 -p 9443:9443 --name portainer \

       --restart=always \

       -v /var/run/docker.sock:/var/run/docker.sock \

       -v /portainer_data:/data \

       portainer/portainer-ce:latest

      docker ps

      docker run -d -p 9001:9001 --name portainer_agent \

       --restart=always \

       -v /var/run/docker.sock:/var/run/docker.sock \

       -v /var/lib/docker/volumes:/var/lib/docker/volumes \

       portainer/agent:latest

      Damit gibt es dann auch den Portainer, der recht praktisch ist, um die lokale Dockerinstallation zu steuern.

      OEBPS/images/image0011.jpg Abbildung 9: Portainer

      Wir müssen das Repository das sich am Kubernetes Cluster befindet in die Konfiguration am Entwicklungsrechner eintragen.

      alfred@monitoring:~/go$ cat /etc/hosts

      127.0.0.1 localhost

      127.0.0.1 monitoring

      127.0.0.1 monitoring.slainte.at

      192.168.0.213 docker.registry

      192.168.0.201 pc1

      192.168.0.202 pc2

      192.168.0.203 pc3

      192.168.0.204 pc4

      192.168.0.205 pc5

      alfred@monitoring:~/go$ sudo cat /etc/docker/daemon.json

      {

       "insecure-registries" : ["docker.registry:5000"]

      }

      Die Registry ist als Loadbalancer-Service ausfallsicher. Die Storage ist in einem persistant volume, somit funktioniert das auch von überall im Cluster.

      Nun können wir versuchen ein hello world zu erzeugen.

      package main

      import "fmt"

      func main() {

       fmt.Println("hello world")

      }

      Dieser Programmteil ist in GO geschrieben. Go wird wie folgt installiert.

      alfred@monitoring:~$ sudo apt install golang

      alfred@monitoring:~$ go version

      go version go1.13.8 linux/arm64

      alfred@monitoring:~$

      Dann kann man das go Programm testen und builden.

      alfred@monitoring:~$ mkdir go

      alfred@monitoring:~$ cd go

      alfred@monitoring:~/go$ nano hello-world.go

      alfred@monitoring:~/go$ go run hello-world.go

      hello world

      alfred@monitoring:~/go$ go build hello-world.go

      alfred@monitoring:~/go$ ls -lisa

      total 1936

      4688691 4 drwxrwxr-x 2 alfred alfred 4096 Sep 30 11:26 .

      1140881 4 drwxr-xr-x 21 alfred alfred 4096 Sep 30 11:25 ..

       127267 1924 -rwxrwxr-x 1 alfred alfred 2097605 Sep 30 11:26 hello-world

      4688693 4 -rw-rw-r-- 1 alfred alfred 75 Sep 30 11:25 hello-world.go

      alfred@monitoring:~/go$ ./hello-world

      hello world

      alfred@monitoring:~/go$

      Jetzt haben wir das go-Programm, und müssen es in einen Docker-Container packen.

      alfred@monitoring:~/go$ docker rmi $(docker images -q) # Löscht alle vorhandenen Images im lokalen Repository

      Um einen Container zu erzeugen, brauchen wir ein dockerfile.

      alfred@monitoring:~/dev/hello-world$ cat dockerfile

      # syntax=docker/dockerfile:1

      # Alpine is chosen for its small footprint

      # compared to Ubuntu

      FROM golang:1.16-alpine

      WORKDIR /app

      LABEL maintainer="[email protected]"

      COPY go.mod ./

      COPY *.go ./

      RUN go build -o /hallo

      EXPOSE 80