Site blog
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
Installera och konfigurera etcd
etcd kommer att installeras på easec-linux1, easec-linux2 och easec-linux3. Versionen är 3.4.4 som är den senaste när denna dokumentation skrevs (200317).
Arbetsuppgift 1: Kopiera certifikat till respektive maskin
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 kopiera certifikat till respektive maskin:
scp ca.pem kubernetes.pem kubernetes-key.pem easec@192.168.1.21:~
Ange Pa$$w0rd som lösenord. Om det är första gången du ansluter, får du skriva yes och klicka på Enter.
3. I terminalfönstret, upprepa föregående kommando, men ändra IP-adress till 192.168.1.22 respektive 192.168.1.23.
Arbetsuppgift 2: Installera etcd
1. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att ansluta till easec-linux1:
ssh easec-linux1
Om det är första gången du ansluter, får du skriva in yes och klicka på Enter, skriv därefter in Pa$$w0rd för att ansluta.
2. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att skapa konfigurationskataloger för etcd:
sudo mkdir /etc/etcd /var/lib/etcd
Skriv in Pa$$w0rd som lösenord för sudo.
3. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att flytta certifikat till katalogen /etc/etcd:
sudo mv ~/ca.pem ~/kubernetes.pem ~/kubernetes-key.pem /etc/etcd
4. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att ladda ner binärer för etcd:
wget https://github.com/etcd-io/etcd/releases/download/v3.4.4/etcd-v3.4.4-linux-amd64.tar.gz
5. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att packa upp binärer för etcd:
tar xvzf etcd-v3.4.4-linux-amd64.tar.gz
6. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att flytta binärer till /usr/local/bin:
sudo mv etcd-v3.4.4-linux-amd64/etcd* /usr/local/bin/
Arbetsuppgift 3: Skapa systemd-fil
1. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att skapa systemd-fil:
sudo nano /etc/systemd/system/etcd.service
I mitt förråd på GitHub finns etcd.service-filer för respektive maskin (https://github.com/easec/cluster/tree/master/stacked)
2. I fönstret för nano, skriv in följande:
[Unit]
Description=etcd
Documentation=https://github.com/coreos
[Service]
ExecStart=/usr/local/bin/etcd \
--name 192.168.1.21 \
--cert-file=/etc/etcd/kubernetes.pem \
--key-file=/etc/etcd/kubernetes-key.pem \
--peer-cert-file=/etc/etcd/kubernetes.pem \
--peer-key-file=/etc/etcd/kubernetes-key.pem \
--trusted-ca-file=/etc/etcd/ca.pem \
--peer-trusted-ca-file=/etc/etcd/ca.pem \
--peer-client-cert-auth \
--client-cert-auth \
--initial-advertise-peer-urls https://192.168.1.21:2380 \
--listen-peer-urls https://192.168.1.21:2380 \
--listen-client-urls https://192.168.1.21:2379,http://127.0.0.1:2379 \
--advertise-client-urls https://192.168.1.21:2379 \
--initial-cluster-token etcd-cluster-0 \
--initial-cluster 192.168.1.21=https://192.168.1.21:2380,192.168.1.22=https://192.168.1.22:2380,192.168.1.23=
https://192.168.1.23:2380 \
--initial-cluster-state new \
--data-dir=/var/lib/etcd
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Klicka på ctrl+x, skriv in ett J och klicka på Enter för att spara filen.
3. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att återinläsa konfigurationen för daemon:
sudo systemctl daemon-reload
4. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att starta etcd vid uppstart:
sudo systemctl enable etcd
5. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att starta etcd:
sudo systemctl start etcd
6. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att avsluta session mot Easec-Linux1:
exit
7. Gör om arbetsuppgift 2 och 3 på easec-linux2 och easec-linux3 med respektive IP-adresser.
Arbetsuppgift 4: Verifiera klustret
1. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att verifiera klustret och att det är igång:
ETCDCTL_API=3 etcdctl member list
Notering felsökning:
Ibland händer det att det går fel :-), när systemd används så är kommandot journalctl ett bra verktyg för att se vad som har gått fel.
Exempelvis: sudo journalctl -u etcd.service (om det är etcd), eftersom det kan bli väldigt mycket information kan det vara bra att lägga denna i en textfil, för att sedan undersöka denna textfil lite närmare sudo journalctl -u etcd.service > logg.txt.
Gör du förändringar, kör dessa kommando:
sudo systemctl daemon-reload
sudo systemctl restart etcd
Installation av HA-proxy
HA-proxy kommer att installeras på Easec-Linux7 (192.168.1.27/24).
Arbetsuppgift 1: Installera HA-proxy
1. Anslut till Easec-Linux7 och logga på som easec med lösenordet Pa$$w0rd.
2. På Easec-Linux7 öppna terminalfönstret (ctrl+alt+t) och skriv in följande kommando och klicka på Enter, för att uppdatera referenser till arkiv:
sudo apt-get update
Ange Pa$$w0rd som lösenord för sudo.
3. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att installera HA-proxy:
sudo apt-get install haproxy
Arbetsuppgift 2: Konfigurera HA-proxy
1. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att konfigurera HA-proxy:
sudo nano /etc/haproxy/haproxy.cfg
2. I fönstret med nano, gör förändringar i fetstil:
global
...
default
...
frontend kubernetes
bind 192.168.1.27:6443
option tcplog
mode tcp
default_backend kubernetes-master-nodes
backend kubernetes-master-nodes
mode tcp
balance roundrobin
option tcp-check
server easec-linux1 192.168.1.21:6443 check fall 3 rise 2
server easec-linux2 192.168.1.22:6443 check fall 3 rise 2
server easec-linux3 192.168.1.23:6443 check fall 3 rise 2
Klicka på ctrl+x, skriv in ett J och klicka på Enter för att spara filen.
2. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att starta om HA-proxy:
sudo systemctl restart haproxy
Del 1: Klientverktyg
På klientdator kommer två verktyg att behövas installeras, Cloud Flare SSL för att generera de olika certifikat som behövs och kubectl för att hantera klustret. Dessa verktyg installeras på Easec-Linux8.
Arbetsuppgift 1: Installera cfssl
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:
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 && wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
3. I terminalfönstret skriv in följande kommando och klicka på Enter, för att sätta exekveringsrättigheter:
chmod +x cfssl*
4. I terminalfönstret skriv in följande kommando och klicka på Enter, för att flytta binärer till /usr/local/bin:
sudo mv cfssl_linux-amd64 /usr/local/bin/cfssl
Ange Pa$$w0rd som lösenord för sudo.
5. I terminalfönstret skriv in följande kommando och klicka på Enter, för att flytta binärer till /usr/local/bin:
sudo mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
6. I terminalfönstret skriv in följande kommando och klicka på Enter, för att verifiera installationen:
cfssl version
Arbetsuppgift 2: Installera kubectl
1. I terminalfönstret skriv in följande kommando och klicka på Enter, för att ladda ner binärer för kubectl:
wget https://storage.googleapis.com/kubernetes-release/release/v1.17.3/bin/linux/amd64/kubectl
2. I terminalfönstret skriv in följande kommando och klicka på Enter, för att sätta exekveringsrättigheter:
chmod +x kubectl*
3. I terminalfönstret skriv in följande kommando och klicka på Enter, för att flytta binärer till /usr/local/bin:
sudo mv kubectl /usr/local/bin
4. I terminalfönstret skriv in följande kommando och klicka på Enter, för att verifiera installationen:
kubectl version
Felmeddelande om att verktyget inte kan ansluta till server, kan du ignorera. Det finns ingen server eller servrar i detta läge!
Del 2: Certifikat
Ett antal certifikat kommer att behöva genereras.
Arbetsuppgift 1: Skapa Certificate Authority och generera certifikat
1. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att skapa konfiguration för CA (Certificate Authority):
nano ca-config.json
2. I fönstret med nano, skriv in följande:
{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"kubernetes": {
"usages": ["signing", "key encipherment", "server auth", "client auth"],
"expiry": "8760h"
}
}
}
}
Klicka på ctrl+x, skriv in ett J och klicka på Enter för att spara filen.
3. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att skapa certifikatbegäran för CA:
nano ca-csr.json
4. I fönstret med nano, skriv in följande:
{
"CN": "Kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "SE",
"L": "Lomma",
"O": "Kubernetes",
"OU": "CA",
"ST": "easec"
}
]
}
Klicka på ctrl+x, skriv in ett J och klicka på Enter för att spara filen.
5. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att skapa certifikat och privat nyckel:
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
6. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att verifiera att ca-key.pem och ca.pem har blivit genererade:
ls -la ca*
7. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att skapa certifikatbegäran för etcd-kluster:
nano kubernetes-csr.json
8. I fönstret med nano, skriv in följande:
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "SE",
"L": "Lomma",
"O": "Kubernetes",
"OU": "Kubernetes",
"ST": "easec"
}
]
}
Klicka på ctrl+x, skriv in ett J och klicka på Enter för att spara filen.
Arbetsuppgift 2: Skapa certifikat och privat nyckel
1. I terminalfönstret, skriv in följande kommando och klicka på Enter efter varje \ och efter sista raden:
cfssl gencert \
-ca=ca.pem \
-ca-key=ca-key.pem \
-config=ca-config.json \
-hostname=192.168.1.21,192.168.1.22,192.168.1.23, 192.168.1.27,127.0.0.1,kubernetes.default \
-profile=kubernetes kubernetes-csr.json | \
cfssljson -bare kubernetes
2. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att verifiera att kubernetes-key.pem och kubernetes.pem har skapats:
ls -la k*
.easec kommer att publicera ett antal artiklar där konfiguration av Kubernetes i drift beskrivs.
De olika delarna:
Del 1: Certifikat och klientverktyg. https://portal.easec.se/moodle/blog/index.php?entryid=39
Del 2: HA-Proxy. https://portal.easec.se/moodle/blog/index.php?entryid=40
Del 3: Installera och konfigurera etcd. https://portal.easec.se/moodle/blog/index.php?entryid=41
Del 4: Installera master. https://portal.easec.se/moodle/blog/index.php?entryid=44
Del 5: Installera worker. https://portal.easec.se/moodle/blog/index.php?entryid=45