Site blog
Den 18-19 maj kör Edument AB .easec:s kurs Orkestrering i Docker online!
Läs mer här: https://www.edument.se/product/orkestrering-i-docker
Installera worker
Rollen worker för Kubernetes kommer att installeras på easec-linux4, easec-linux5 och easec-linux6.
I .easec:s miljö är Docker redan installerat, i din miljö får du installera Docker och konfigurera Docker. För att konfigurera Docker för systemd och overlay2, se mitt blogginlägg: https://portal.easec.se/moodle/blog/index.php?entryid=43
Arbetsuppgift 1: Installera kubeadm, kubelet och kubectl
1. Anslut till Easec-Linux8 och logga på som easec med lösenordet Pa$$w0rd.
2. På Easec-Linux8 öppna terminalfönstret (ctrl+alt+t) och skriv in följande kommando och klicka på Enter, för att ansluta till easec-linux1:
ssh easec-linux4
Om det är första gången du ansluter till easec-linux4, skriv in yes och klicka på Enter. Ange Pa$$w0rd som lösenord.
3. För att lägga till signeringsnyckel för Kubernetes, skriv in följande kommando och klicka på Enter:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Ange Pa$$w0rd som lösenord för sudo.
4. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att lägga till referens till förråd:
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
5. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att lägga uppdatera referenser:
sudo apt-get update
6. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att installera kubeadm kubelet och kubectl:
sudo apt-get install -y kubeadm kubelet kubectl
7. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att säkerställa att kubeadm, kubelet och kubectl inte uppdateras:
sudo apt-mark hold kubeadm kubelet kubectl
8. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att stänga av swap och göra detta permanent:
sudo swapoff -a && sudo sed -i '/ swap / s/^/#/' /etc/fstab
9. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att avsluta anslutning till easec-linux4:
exit
5. Gör om punkt 2 – 9 för easec-linux5 respektive easec-linux6.
Arbetsuppgift 2: Initiera noder
1. På Easec-Linux8, i terminalfönstret, skriv in följande kommando och klicka på Enter, för att kopiera filen anslutning.txt till easec-linux4, easec-linux5 och easec-linux6:
scp ~/anslutning.txt easec@192.168.1.24:~ && scp ~/anslutning.txt easec@192.168.1.25:~ && scp ~/anslutning.txt easec@192.168.1.26:~
Är det första gången du ansluter, får du skriva in yes och klicka på Enter. Ange Pa$$w0rd som lösenord.
2. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att ansluta till easec-linux4:
ssh easec-linux4
Ange Pa$$w0rd som lösenord.
3. I terminalfönstret, skriv in följande kommando och klicka på Enter:
nano anslutning.txt
4. Markera nedre raderna som börjar med sudo kubeadm join (under raden "Then you can join any number of worker nodes … ", högerklicka och välj Kopiera. Klicka på ctrl+x för att avsluta nano.
5. Högerklicka först i terminalfönstret och välj klistra in.
6. Klicka på Enter, ange Pa$$w0rd som lösenord för sudo.
7. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att avsluta anslutningen till easec-linux4:
exit
8. Gör om punkt 2 – 7 för easec-linux5 respektive easec-linux6.
Arbetsuppgift 3: Verifiera noder
1. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att ansluta till easec-linux1 (masternod):
ssh easec-linux1
Ange Pa$$w0rd som lösenord.
2. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att verifiera att du har sex noder, av dessa är tre master:
sudo kubectl --kubeconfig /etc/kubernetes/admin.conf get nodes
Ange Pa$$w0rd som lösenord för sudo.
I .easec:s tvådagars workshop fortsätter vi konfigurationen med:
- Installation av overlay network.
- Installation av klient på easec-linux8.
- Installation av dashboard.
- Installation av registry.
Andra dagen sätter du upp det andra alternativet med extern klustrad etcd.
Två tilläggsdagar erbjuds:
- Kubernetes i molntjänst (aws, Azure eller Google).
- Övervakning.
Installera master
Masterrollen för Kubernetes kommer att installeras på easec-linux1, easec-linux2 och easec-linux3.
I .easec:s miljö är Docker redan installerat, i din miljö får du installera Docker och konfigurera Docker. För att konfigurera Docker för systemd och overlay2, se mitt blogginlägg: https://portal.easec.se/moodle/blog/index.php?entryid=43
Arbetsuppgift 1: Installera kubeadm, kubelet och kubectl
1. Anslut till Easec-Linux8 och logga på som easec med lösenordet Pa$$w0rd.
2. På Easec-Linux8 öppna terminalfönstret (ctrl+alt+t) och skriv in följande kommando och klicka på Enter, för att ansluta till easec-linux1:
ssh easec-linux1
Ange Pa$$w0rd som lösenord.
3. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att lägga till signeringsnyckel för Kubernetes:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Ange Pa$$w0rd som lösenord för sudo.
4. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att lägga till referens till förråd:
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
5. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att uppdatera referenser:
sudo apt-get update
6. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att installera:
sudo apt-get install -y kubeadm kubelet kubectl
7. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att säkerställa att kubeadm kubelet och kubectl inte uppdateras:
sudo apt-mark hold kubeadm kubelet kubectl
8. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att stänga av swap och göra detta permanent:
sudo swapoff -a && sudo sed -i '/ swap / s/^/#/' /etc/fstab
9. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att avsluta anslutning till easec-linux1:
exit
10. Gör om punkt 2 – 9 för easec-linux2 respektive easec-linux3.
Arbetsuppgift 2: Initiera masternoder
1. På Easec-Linux8, i terminalfönstret, skriv in följande kommando och klicka på Enter, för att ansluta till easec-linux1:
ssh easec-linux1
Ange Pa$$w0rd som lösenord.
2. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att skapa konfigurationsfil (notera att denna funktion fortfarande är i beta och kan förändras!): Konfigurationsfil finns här: https://github.com/easec/cluster/blob/master/stacked/config.yaml
nano config.yaml
3. I fönstret med nano, skriv in följande:
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: stable
apiServer:
certSANs:
- "192.168.1.27"
controlPlaneEndpoint: "192.168.1.27:6443"
etcd:
external:
endpoints:
- https://192.168.1.21:2379
- https://192.168.1.22:2379
- https://192.168.1.23:2379
caFile: /etc/etcd/ca.pem
certFile: /etc/etcd/kubernetes.pem
keyFile: /etc/etcd/kubernetes-key.pem
networking:
podSubnet: 10.30.0.0/24
Klicka på ctrl+x, skriv in ett J och klicka på Enter för att spara filen.
4. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att initiera första nod:
sudo kubeadm init --config=config.yaml
Skriv in Pa$$w0rd som lösenord för sudo. Detta kommer att ta en stund!
Bild ovan visas när det är klart!
5. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att kopiera certifikat till de andra noderna:
sudo scp -r /etc/kubernetes/pki easec@192.168.1.22:~ && sudo scp -r /etc/kubernetes/pki easec@192.168.1.23:~
Ange Pa$$w0rd som lösenord för sudo.
6. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att avsluta anslutning till easec-linux1:
exit
7. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att ansluta till easec-linux2:
ssh easec-linux2
Ange Pa$$w0rd som lösenord.
8. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att ta bort certifikat och nyckel för api-server:
rm ~/pki/apiserver.*
9. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att flytta certifikat till katalogen /etc/kubernetes/:
sudo mv ~/pki /etc/kubernetes/
10. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att skapa konfigurationsfil:
nano config.yaml
11. I fönstret med nano, skriv in följande:
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: stable
apiServer:
certSANs:
- "192.168.1.27"
controlPlaneEndpoint: "192.168.1.27:6443"
etcd:
external:
endpoints:
- https://192.168.1.21:2379
- https://192.168.1.22:2379
- https://192.168.1.23:2379
caFile: /etc/etcd/ca.pem
certFile: /etc/etcd/kubernetes.pem
keyFile: /etc/etcd/kubernetes-key.pem
networking:
podSubnet: 10.30.0.0/24
Klicka på ctrl+x, skriv in ett J och klicka på Enter för att spara filen.
12. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att initiera andra noden:
sudo kubeadm init --config=config.yaml
Skriv in Pa$$w0rd som lösenord för sudo. Precis som för easec-linux1 kommer detta att ta en stund!
Bild ovan visas när det är klart!
13. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att avsluta anslutningen till easec-linux2:
exit
14. Gör om punkt 7 – 12, för att initiera tredje noden. Innan du fortsätter med nästa steg, gör följande när du är ansluten till easec-linux3:
a. Markera textraderna som börjar med ”You can now join ..” enligt bild ovan, högerklicka och välj Kopiera.
b. Öppna Textredigeraren och klistra in texten.
c. Lägg till sudo innan kubeadm, både för control-plane nodes och för worker nodes, spara filen med namnet anslutning.txt.
15. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att avsluta anslutningen till easec-linux3:
exit
Inlägget beskriver hur du konfigurerar Docker att använda systemd och overlay2
Arbetsuppgift 1: Modifiera /etc/docker/daemon.json
1. Öppna terminalfönster (ctrl+alt+t), skriv in följande kommando och klicka på Enter:
sudo nano /etc/docker/daemon.json
Ange lösenord för sudo och klicka på Enter.
2. I fönstret för nano, gör följande förändringar (exempel visar även hur konfiguration av DNS för containers görs):
{
"dns": ["8.8.8.8 ", "8.8.4.4 "],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": "100m"
},
"storage-driver ": "overlay2"
}
Klicka på ctrl+x, skriv in ett J och klicka på Enter för att spara filen.
Arbetsuppgift 2: Läs in den nya konfigurationen
1. I terminalfönster, skriv in följande kommando och klicka på Enter:
sudo systemctl daemon-reload
2. I terminalfönster, skriv in följande kommando och klicka på Enter:
sudo systemctl restart docker
1. I terminalfönstret, skriv in följande kommando och klicka på Enter:
docker info
Watchtower är ett program som övervakar dina körandes containers för förändringar av avspeglingen. När du trycker på en uppdatering till ditt Docker-register, upptäcker Watchtower ändringarna och drar ner den nya kopian av avspeglingen. Den startar sedan om container med den avspeglingen med samma startalternativ som originalet.
Låt oss till exempel säga att du har en containerapplikation som heter min-app som körs med en portkoppling på 8090: 3000. Ditt team använder CI/CD för att lansera dagliga uppdateringar av applikationen. När din iteration är klar märker du avspegling och skicka upp denna till registret. Watchtower har konfigurerats för att kontrollera registret var 30: e sekund. När 30-sekunders iterationen är klar, upptäcks förändringarna i avspeglingen och kommer att hämta hem den nya avspeglingen. Watchtower stänger sedan graciöst container för min-app och startar sedan om den med den nya avspeglingen med samma portkopplingar
För att allt detta ska fungera måste Watchtower ha tillgång till Docker API. När du skapar container för Watchtower måste du montera /var/run/docker.sock som en volym till denna.
Arbeta med Watchtower
1. I terminalfönstret, skriv in följande kommando och klicka på Enter:
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower \
-i 30
Kommandot ovan kommer att starta Watchtower i en container, kommunikation kommer att ske mellan container och API för Docker. Växel -i sätter i sekunder cykel för bevakning av förändringar för avspegling.2. Skapa projektkatalog och förflytta dig till denna.
3. Skapa enkel webbsida med namnet index.html:
<html>
<header>
<title>Min webbsida</title>
</header>
<body>
Min webbsida.
</body>
</html>
4. Skapa Dockerfile med följande innehåll:
FROM nginx
COPY index.html /usr/share/nginx/html/index.html
WORKDIR /usr/share/nginx/html
5. Skapa avspegling med följande kommando:
docker build -t <ditt_användarenamn_på_Docker_Hub>/watch_nginx -f Dockerfile .
6. Skicka avspegling till Docker Hub med följande kommando:
docker push <ditt_användarenamn_på_Docker_Hub>/ watch_nginx
7. Starta container med följande kommando:
docker run -d --name min_webb_sida -p 80:80 --restart always <ditt_användarenamn_på_ Docker_Hub>/watch_nginx
8. Öppna webbläsare och surfa till localhost, din sida skall visas.
9. Redigera index.html enligt följande:
<html>
<header>
<title>Min webbsida</title>
</header>
<body>
Min fina webbsida. Gillar du den?
</body>
</html>
10. Skapa ny avspegling med följande kommando:
docker build --no-cache -t <ditt_användarenamn_på_Docker_Hub>/watch_nginx -f Dockerfile .
11. Skicka avspegling till Docker Hub med följande kommando:
docker push <ditt_användarenamn_på_Docker_Hub>/ watch_nginx
12. Återgå till webbläsare, gör refresh på sidan. Efter ca 30 sekunder får du ingen kontakt med sidan. Gör en ny refresh och det nya innehållet visas. Container som startas om med förändringen.
Tidig dator ålder
På 60-talet var det inte så vanligt med datorer, då kostnaden för dessa var väldigt höga. Bara för att hyra en dator var kostnaden alldeles för höga för att de skulle vara vanliga för de flesta företagen.
Ett behov och att lösa detta behov är en drivkraft för utveckling, så också inom datorvärlden. De tidigaste datorerna vara dedicerade för en specifik arbetsuppgift och det kunde ta dagar, t om veckor att köra ett jobb. Detta ledde fram till utvecklingen av virtualisering. Utvecklingen leddes av tanken att kunna dela dators resurser med många användare på samma gång.
När skapandet av centraliserad dator kom, så var detta de första tecknen på virtualisering. Under 60-talet var flera terminal ansluten till en större central dator vilket möjliggjorde att arbetet kunde utföras från en central plats. Att arbeta med en central plats för dator, gav möjlighet att från denna plats kontrollera all bearbetning från en central plats, om en terminal skulle sluta att fungera, kunde användare gå till en annan terminal och logga på denna för att fortsätta sitt arbete. Dock fanns det fortfarande några negativa sidor. Exempelvis om användare kraschade den centrala datorn, så gick systemet ner för alla användare. Detta ledde fram till datorer inte bara behöver kunna separera användare utan även processer som körs i systemet.
Virtualisering
1973 publicerade Gerald J. Popek och Robert P. Goldberg rapporten Formal Requirements for Virtualizable Third Generation Architectures, där de beskriver tre typer av virtualisering:
- Type 0, där virtualisering görs direkt på hårdvara.
- Type 1, där virtualiseringstekniken innehåller ett operativsystem.
- Type 2, där virtualiseringstekniken kräver att det redan finns ett operativsystem.
Detta dokument ligger till grund för all virtualisering som företag och organisationer arbetar med idag och blir också, kan man säga, en delning mellan virtualisering och teknik för att särskilja applikationer eller tjänster.
chroot
1979 togs det ett annat steg med utvecklingen av kommandot chroot (change root). chroot används för att skapa en delad men isolerad miljö. Kommandot ger en möjlighet till att ändra root-miljö för en körandes process tillsammans med dess barn (children).
Detta gav en möjlighet att isolera systemprocesser till egna segregerade filsystem så att tester kunde utföras utan att påverka den globala miljön för systemet. I mars 1982 la Bill Joy till kommandot i den sjunde versionen av Unix.
Solaris Zones
2004 lanserades Solaris containers, Solaris containers skapar en full miljö för applikationen genom att använda Solaris Zones. Med zones får applikationen tillgång till användare, processer, filsystem och hårdvara på systemet. Dock kan applikationen bara se var som finns i sin egen zon.
jail
I syftet att förstå containers, får vi förflyttas oss framåt i tiden lite, till 1990-talet, när Bill Cheswick arbetade med att försöka förstå hur en cracker använde den tid som denna hade på sig i ett system. I sin undersökning byggde Cheswick en miljö som tillätt honom att analysera cracker:s tangentnedslagningar och för att lära sig dennes teknik. Hans lösning var att använda en miljö skapade av chroot och som var modifierad. Resultatet av Cheswick:s studier ledde fram till kommandon jail i Linux.
I mars 2000 (närmare bestämt 4 mars 2000), introducerade FreeBSD kommandot jail i sitt operativsystem. Även om kommandot liknande chroot så inkluderades ytterligare funktioner såsom möjlighet att isolera filsystem, användare, nätverk, etc. FreeBSD jail ger möjlighet till att tilldela IP-adress, konfigurera skräddarsydda mjukvaruinstallation och modifiering för varje miljö. Dock till en kostnad då funktionalitet för mjukvaran påverkades.
control groups (cgroups)
2006 lanserade ett antal utvecklare på Google process containers. Dessa var designade för isolering och begränsningar för resurnyttjande för process. 2007 döptes process container om till control groups (cgroups) för att undvika namnkollision med ordet containers.
LXC
2008 lades cgroups till i Linux kernel 2.6.24 och som i sin tur ledde till att projektet LXC startades. LXC står för Linux Containers och ger en möjlighet till virtualisering på operativsystemsnivå, genom att tillåta att ett antal isolerade Linuxbaserade miljöer (containers) körs på delad Linux kernel. En och var av dessa containers har sina egna processer och nätverk.
LMTCFY
2013 ändrade Google på konceptet containers, genom att göra sitt projekt Let Me Contain That For You (LMTCFY) till ett öppet projekt. Genom att använda LMTCFY, kunde applikationer skrivas för container och med möjlighet att skapa och hantera sina egna undercontainers. Arbetet på LMCTFY stoppades 2015 och Google beslöt att arbetet skulle läggas i projektet libcontainer, som Docker hade startat.
Start för Docker
"The technology was not accessible/useful for developers, containers were not portable between different environments, and there was no ecosystem or set of standard containers," Docker's chief executive Ben Golub.
Docker lanserades som ett open-source projekt 2013. Docker tillhandarhåller möjligheten att paketera containers så att de kan flyttas från en miljö till en annan. Från början använda Docker LXC-teknologien, men 2014 ersattes LXC med libcontainer, vilket ger en möjlighet för container att arbeta med Linux namespaces, libcontainer control groups, capabilities, säkerhetsprofiler i AppArmor, gränssnitt för nätverk och regelverk för brandvägg. Docker bidrar till community med globalt eller lokalt förråd kallat för registry, ett restful API och CLI-klient. Senare har även Docker implementerat hanteringssystem för kluster med namnet Docker Swarm och ett antal andra produkter för orkestrering.
.easec har ett stort antal kurser där du får lära dig allt om Docker och containers, se gärna vidare på https://portal.easec.se/moodle/course/index.php?categoryid=7
Ny kurs från .easec, Orkestrering i Docker.
Två dagars kurs med följande innehåll:
Docker
Modulen ger bakgrundsinformation om Docker och kunskaper hur du installerar Docker.
Lektioner: Bakgrund, Docker bas och Arkitektur
Kommando
I denna modul får du lära dig användbara kommando för att arbeta med Docker och containers.
Lektioner: Kommando och Hantera container
Dockerfile
Dockerfile är en vital funktion för att skapa avspeglingar, men används även av många andra funktioner i Docker. I denna modul tittar vi på grunderna i Dockerfile.
Lektioner: Skapa avspegling och Dockerfile
Orkestrering
I denna modul tittar vi på Docker Compose, Docker Swarm, Docker Machine och Docker Cloud. Alla dessa är inbyggda verktyg för att hantera orkestrering av Docker. I modulen nämns även andra tredjepartstjänster.
Lektioner: Docker Compose, Docker Swarm och Docker Machine
Kubernetes
I denna modul tittar vi på och arbetar med Kubernetes.
Lektioner: Koncept och arkitektur, Deklarativ och imperativ, Nätverksmodell och Första kontakt med kubectl.
På utbildningscenter i Sverige eller via molnet!
Det är ingen hemlighet att .easec gillar Docker, varför inte kombinera släktforskning med Docker? Pdf beskriver hur du tillverkar container i Docker med verktyget Webtrees. Webtrees är ett opensource projekt för släktforskning.
Vill du se hur det ser ut, gå till: http://famjohannesson.se .
Hur jag har gjort, finns beskrivit här: https://stordevsumj.blob.core.windows.net/easec/Skapa_avspegling_for_Webtrees.pdf
Denna nya kurs har fokus på Windows Server 2016/2019, men Linux finns med på ett hörn.
Direktlänk till kursen: https://portal.easec.se/moodle/enrol/index.php?id=19
Azure Container Registry
Du kan implementera ditt egna privata förråd av container genom att använda Container Registry service i Azure. Detta ger möjlighet till att skapa och underhålla din egen samling av avspeglingar för dina Docker containers, samtidigt som du kan dra nytta av fördelarna med plattformen för Azure, när det gäller tillgänglighet, prestanda och flexibilitet.
Du kan läsa mer här: https://stordevsumj.blob.core.windows.net/easec/Skapa_Container_Registry_service.pdf
Från .easec:s kurs Docker.