Ten artykuł będzie poświęcony temu jak rozpocząć tworzenie klastra kubernetes używając taniego VPSa. Będzie to środowisko, w którym możemy uruchomić nasze projekty, hostować portfolio, czy testować nowe rozwiązania. Artykuł będzie zawierał listę kroków, pozwalającą uruchomić działający klaster z dostępem do niego z poziomu linii komend, jak i interfejsu graficznego.

Przygotowanie

Do stworzenie klastra będziemy potrzebować

  • Jeden tani VPS - Ja użyje serwera o 4xCPU, 8GB RAM, 40GB ssd, oczywiście mogą być słabsze.

Ważne: VPS musi być w technologi np. KVM. OpenVZ nie nadają się ze względu na współdzielone jądro, co powoduje najczęściej problemy z brakującymi modułami.

  • Możliwość instalacji systemu z obrazem Ubuntu
  • Trochę wolnego czasu i dostęp do internetu

Instalacja niezbędnych narzędzi

Gdy już mamy serwery z czystym, aktualnym Ubuntu na pokładzie możemy przejść do instalacji.

Zaczynamy od zainstalowania potrzebnych paczek systemowych:

1
apt-get install apt-transport-https ca-certificates curl software-properties-common

Dodajemy klucze gpg do repozytoriów Docker i Kubernetesa:

Klucz Docker:

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

Klucz Kubernetes:

1
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

Dodajemy repozytorium do apt i instalujemy potrzebne składowe naszego klastra:

1
2
3
4
5
6
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y docker-ce kubelet kubeadm kubernetes-cni

Przed dalszym etapem prac zostało nam tylko jedno.

Wyłączenie swap. Można to zrobić poleceniem.

1
swapoff -a

Uruchomienie klastra

Klaster uruchamiamy za pomocą komendy.

1
kubeadm init

Pod koniec instalacji dostajemy polecenie do podłączania nowych serwerów do klastra. Warto ją sobie zapisać. Wygląda następująco:

1
kubeadm join 112.218.178.128:6443 --token arsv8l.hjse61jkrocyve49 --discovery-token-ca-cert-hash sha256:c0d68edd20fc539db23f35d935d1e40276895b465a852cb78e83da6335986def

Konfiguracja klienta

Na maszynie lokalnej jest nam potrzebne narzędzie kubectl. Instalacja jest bardzo dobrze opisana w dokumentacji Kubernetesa. Odsyłam do niej w tym celu.

Musimy je skonfigurować. Klaster generuje plik, który wystarczy skopiować do katalogu ~/.kube

1
scp user@112.218.178:/etc/kubernetes/admin.conf ~/.kube/config

Master musi być workerem

Standardowo master kubernetesa ma zablokowaną możliwość uruchamiania na nim podów. Jeśli twój klaster to więcej niż jeden serwer to możesz to pominąć. Jednak jeśli tak jak ja robisz wszystko na jednym serwerze, to trzeba z poziomu maszyny klient wykonać polecenie:

1
kubectl taint nodes --all node-role.kubernetes.io/master-

Wybieramy sieć

Teraz musimy podjąć bardzo ważną decyzję, jakiego providera sieci wybierzemy. Ja ze swojej strony polecam Weave ze względu na bardzo fajny dashboard. Konfigurujemy sieć po stronie systemu operacyjnego

1
2
sudo sysctl net.bridge.bridge-nf-call-iptables=1
echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf

Instalujemy weave za pomocą kubectl z poziomu maszyny klienckiej.

1
2
3
4
5
6
7
8
$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

serviceaccount/weave-net created
clusterrole.rbac.authorization.k8s.io/weave-net created
clusterrolebinding.rbac.authorization.k8s.io/weave-net created
role.rbac.authorization.k8s.io/weave-net created
rolebinding.rbac.authorization.k8s.io/weave-net created
daemonset.extensions/weave-net created

Od tej chwili mamy już pełno prawny działający klaster Kubernetes.

Bo GUI też jest ważne

Pierwszą rzeczą do zrobienia jest instalacja Dashboardu. Jest to bardzo przydatne i wygodne narzędzie.

1
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

Ostatnia rzecz to stworzenie użytkownika, który będzie miał uprawnienia do używania z tego narzędzia. admin-user.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin
namespace: kube-system
---
1
kubectl create -f admin-user.yaml

Gdy mamy stworzonego użytkownika możemy pobrać jego token i użyć do zalogowania się w Dashboard

1
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin | awk '{print $1}')

Żeby się zalogować do Dashbordu trzeba uruchomić proxy

1
kubectl proxy

Aplikacja będzie dostępna pod adresem proxy, które właśnie zostało uruchomione: http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

Należy wybrać token jako forma uwierzytelnienia i wkleić go w pole tekstowe. Dashboard

Po zalogowaniu zobaczymy nasz dashboard gdzie możemy robić wszystko tak samo, jak przez kubectl.

Dashboard

W taki o to sposób mamy działający klaster Kubernetesa gotowy do uruchomienia pierwszej aplikacji.