User Tools

Site Tools


container:kubernetes:k3s_install

This is an old revision of the document!


Kubernetes via K3s installieren

Gestest wurde das ganze auf drei virtuellen Ubuntu 20.04 Nodes

Update OS

Das OS sollte aktuell sein

Auf alle Nodes:

apt update
apt dist-upgrade -y
reboot


Installation K3s

Auf der Master Node:

export INSTALL_K3S_EXEC="--disable servicelb --disable traefik"
curl -sfL https://get.k3s.io | sh -
systemctl status k3s
kubectl get nodes


Bash Autocomplete kubectl

Auf der Master Node:

echo 'source <(kubectl completion bash)' >> ~/.bashrc
source .bashrc


Worker Nodes hinzufügen

Um eine Work Node hinzuzufügen brauchen wir den Token der Masternode

Auf der Master Node:

root@kube01:~# cat /var/lib/rancher/k3s/server/node-token
K105c7781e15a74582915cbd3b86a8b83885f594894fd3773a402b14a3fd64a67f9::server:afc103a8e6e02aa07535bfe5bcc062a8


Join der Worker Nodes

Auf den Worker Nodes:
Beispiel:
curl -sfL http://get.k3s.io | K3S_URL=https://<IP-MASTER>:6443 K3S_TOKEN=<TOKEN> sh -s -

curl -sfL http://get.k3s.io | K3S_URL=https://192.168.88.121:6443 K3S_TOKEN=K105c7781e15a74582915cbd3b86a8b83885f594894fd3773a402b14a3fd64a67f9::server:afc103a8e6e02aa07535bfe5bcc062a8 sh -s - --docker


Kontrolle des Clusters

Auf der Master Node:

root@kube01:~# kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
kube01   Ready    master   52m   v1.19.3+k3s3
kube03   Ready    <none>   49m   v1.19.3+k3s3
kube02   Ready    <none>   50m   v1.19.3+k3s3


Installation Loadbalancer

Bei der Installation von K3s haben ich den Traefik LB ausgenommen und es wird der Metallb installiert da dieses System nicht in einer Cloud durchgeführt wird.

Die aktuelle Manifest'e kann man sich auf der Hersteller Seite ansehen und runerladen.

Auf der Master Node:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/metallb.yaml

# On first install only
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"


Netzwerk Infos für den LB konfigurieren

Auf der Master Node:

nano metallb_network.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: address-pool-1
      protocol: layer2
      addresses:
      - 192.168.88.124-192.168.88.130


kubectl apply -f metallb_network.yaml


Es ist auch möglich via Subnet das Netz einzustellen

addresses:
      - 192.168.88.0/26


Test Container

Test container um den LB zu testen

Auf dem Master:

kubectl create deployment my-nginx --image=nginx
kubectl expose deployment my-nginx --name=my-nginx --port=80 --type=LoadBalancer

root@kube01:~# kubectl get svc
NAME         TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)        AGE
kubernetes   ClusterIP      10.43.0.1     <none>           443/TCP        64m
my-nginx     LoadBalancer   10.43.2.242   192.168.88.124   80:31200/TCP   59m

root@kube01:~# curl -I http://192.168.88.124
HTTP/1.1 200 OK
Server: nginx/1.19.5
Date: Thu, 26 Nov 2020 10:19:05 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 24 Nov 2020 13:02:03 GMT
Connection: keep-alive
ETag: "5fbd044b-264"
Accept-Ranges: bytes


NFS Storage Provider

Die nötigen Yaml Files runter laden

wget https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/raw/master/deploy/rbac.yaml
wget https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/raw/master/deploy/class.yaml
wget https://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/deployment.yaml

Für ARM
wget https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/blob/master/deploy/deployment-arm.yaml


Anpassen der Files

Es muss das File deployment.yaml oder deployment-arm.yaml angepasst werden.

..
...
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: <IP or FQDN>
            - name: NFS_PATH
              value: <NFS EXPORT PATH>
      volumes:
        - name: nfs-client-root
          nfs:
            server: <IP or FQDN>
            path: <NFS EXPORT PATH>
...
..


Einspielen der Files

kubectl create -f rbac.yaml
kubectl create -f deployment.yaml
kubectl create -f class.yaml


Storage Class anzeigen

root@kube01:~/nfs# kubectl get storageclasses.storage.k8s.io
NAME                   PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
local-path (default)   rancher.io/local-path   Delete          WaitForFirstConsumer   false                  2d6h
managed-nfs-storage    fuseim.pri/ifs          Delete          Immediate              false                  2d5h

Helm

Helm unter K3s

Helm installieren und ENV setzten

snap install helm --classic
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
helm ls --all-namespaces


container/kubernetes/k3s_install.1607358203.txt.gz · Last modified: by stone