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.
Po zalogowaniu zobaczymy nasz dashboard gdzie możemy robić wszystko tak samo, jak przez kubectl.
W taki o to sposób mamy działający klaster Kubernetesa gotowy do uruchomienia pierwszej aplikacji.