Database
 sql >> Baza danych >  >> RDS >> Database

Jak zainstalować Kubernetes za pomocą Kubeadm

Kubernetes został przedstawiony we wcześniejszym artykule „Pierwsze kroki z Kubernetes w Amazon Web Services (AWS)”. Kubernetes został również omówiony w innym artykule, „Korzystanie z Kubernetes (K8s) na IBM Bluemix”. Kubernetes można zainstalować na gołym metalu na prawie każdym systemie operacyjnym, w tym Fedorze, CentOS, Ubuntu i CoreOS, w celach programistycznych.

Problem

Instalacja Kubernetes na gołym metalu obejmuje uruchomienie kilku poleceń w celu skonfigurowania węzła głównego, węzłów roboczych, sieci pod itp.

Rozwiązanie

Kubernetes 1.4 wprowadza nowe narzędzie o nazwie kubeadm do ładowania klastra Kubernetes. kubeadm ładuje klaster Kubernetes za pomocą dwóch poleceń. Po zainstalowaniu platformy Docker, kubectl i kubelet węzeł główny można uruchomić za pomocą kubeadm init i węzły robocze dodane za pomocą dołączenia kubeadm .

W tym artykule użyjemy następującej procedury, aby zainstalować i załadować klaster Kubernetes, a następnie przetestować klaster:

  1. Uruchom trzy nowe instancje Ubuntu na Amazon EC2.
  2. We wszystkich instancjach Ubuntu zainstaluj Docker, kubeadm, kubectl i kubelet.
  3. Z jednej z instancji Ubuntu zainicjuj Master klastra Kubernetes za pomocą następującego polecenia:
    kubeadm init
  4. Zastosuj politykę sieci Calico Pod kubeadm/calico.yaml .
  5. Dołącz do dwóch pozostałych instancji (węzłów) Ubuntu z masterem za pomocą kubeadm join --token= .
  6. Na masterze trzy węzły są wyświetlane za pomocą „kubectl get nodes”.
  7. Uruchom aplikację na master:
    kubectl -s http://localhost:8080 run nginx
       --image=nginx
       --replicas=3 --port=80
    
  8. Wymień pody:
    kubectl get pods -o wide
  9. Odinstaluj klaster Kubernetes.
    kubeadm reset

Ten artykuł ma następujące sekcje:

  • Ustawianie środowiska
  • Instalowanie platformy Docker, kubeadm, kubectl i kubelet na każdym hoście
  • Inicjowanie Mistrza
  • Instalacja sieci Calico Pod
  • Dołączanie węzłów do klastra
  • Instalowanie przykładowej aplikacji
  • Odinstalowywanie klastra
  • Ograniczenia
  • Dalsze zmiany w kubeadm
  • Wniosek

Ustawianie środowiska

kubeadm narzędzie wymaga następujących maszyn z systemem Ubuntu 16.04+, HypriotOS v1.0.1+ lub CentOS 7 działającym na nich.

  • Jedna maszyna dla węzła głównego
  • Jeden lub więcej komputerów dla węzłów roboczych

Na każdym komputerze wymagany jest co najmniej 1 GB pamięci RAM. Wykorzystaliśmy trzy maszyny Ubuntu działające na Amazon EC2 do uruchomienia klastra z jednym węzłem głównym i dwoma węzłami roboczymi. Trzy maszyny z Ubuntu są pokazane na rysunku 1.


Rysunek 1: Maszyny Ubuntu

Instalowanie platformy Docker, kubeadm, kubectl i kubelet na każdym hoście

W tej sekcji zainstalujemy Docker, kubelet, kubectl i kubeadm na każdej z trzech maszyn. Zainstalowane komponenty są omówione w Tabeli 1.

Komponent Opis
Dokowane Środowisko wykonawcze kontenera. Zalecana jest wersja 1.11.2, a v1.10.3 i v1.12.1 również są w porządku. Wymagane na wszystkich komputerach w klastrze.
kubelet Podstawowy składnik Kubernetes, który działa na wszystkich komputerach w klastrze. Uruchamia kontenery i kapsuły. Wymagane na wszystkich komputerach w klastrze.
kubectl Narzędzie wiersza poleceń do zarządzania klastrem. Wymagane tylko w węźle głównym, ale przydatne, jeśli jest zainstalowane na wszystkich węzłach.
kubeadm Narzędzie do ładowania klastra. Wymagane na wszystkich komputerach w klastrze.

Tabela 1: Komponenty do zainstalowania

Uzyskaj publiczny adres IP każdej z trzech maszyn i zaloguj się do każdego z nich przez SSH:

ssh -i "docker.pem" [email protected]
ssh -i "docker.pem" [email protected]
ssh -i "docker.pem" [email protected]

Polecenia instalacji plików binarnych muszą być uruchamiane jako root; dlatego ustaw użytkownika jako root.

sudo su -

Uruchom następujące polecenia na każdym z komputerów:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg
   | apt-key add -
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF

Pierwsze polecenie pobiera wymagane pakiety dla Kubernetes, jak pokazano na rysunku 2.


Rysunek 2: Pobieranie pakietów dla Kubernetes

Polecenie 2 pobiera listy pakietów z repozytoriów i aktualizuje je najnowszymi wersjami pakietów.

apt-get update

Dane wyjściowe pokazano na rysunku 3.


Rysunek 3: Aktualizowanie pakietów repozytoriów

Następnie zainstaluj Docker:

# Install docker if you don't have it already.
apt-get install -y docker.io

Docker zostanie zainstalowany, jak pokazano w wyniku polecenia na rysunku 4.


Rysunek 4: Instalowanie Dockera

Następnie zainstaluj kubelet (główny składnik Kubernetes), kubeadm (narzędzie do ładowania początkowego), kubectl (narzędzie do zarządzania klastrami) i kubernetes-cni (wtyczka sieciowa):

apt-get install -y kubelet kubeadm kubectl kubernetes-cni

Dane wyjściowe z poprzednich poleceń pokazano na rysunku 5.


Rysunek 5: Instalowanie programów kubelet, kubeadm, kubectln i kubernetes-cni

Inicjowanie Master

Następnie zainicjuj master, na którym działa baza danych etcd i serwer API. Kubelet uruchamia Pody do uruchamiania tych komponentów. Uruchom następujące polecenie, które automatycznie wykryje adresy IP:

kubeadm init

Jak pokazano w danych wyjściowych polecenia, najpierw uruchamiane są niektóre kontrole przed lotem w celu sprawdzenia stanu systemu. Następnie generowany jest token główny/tokeny, który ma być używany jako klucz wzajemnego uwierzytelniania dla węzłów roboczych, które chcą dołączyć do klastra. Następnie generowany jest klucz i certyfikat urzędu certyfikacji z podpisem własnym, aby zapewnić tożsamości każdemu z węzłów w klastrze w celu komunikacji z klientami. Klucz i certyfikat serwera API są tworzone dla serwera API w celu komunikacji z klientami. util/kubeconfig tworzony jest plik kubelet, aby połączyć się z serwerem API i innym util/kubeconfig tworzony jest plik dla administracji. Następnie tworzona jest konfiguracja klienta API. Dane wyjściowe z kubeadm init polecenie jest pokazane na rysunku 6.


Rysunek 6: Uruchamiam init Kubeadm

Wszystkie komponenty płaszczyzny sterowania są gotowe. Pierwszy węzeł jest gotowy i wykonywane jest wdrożenie testowe. Tworzone są również niezbędne składniki dodatkowe, kube-discovery, kube-proxy i kube-dns, jak pokazano w wynikach polecenia na rysunku 7. Master Kubernetes zostaje pomyślnie zainicjowany. Generowane jest polecenie o następującej składni; musi być uruchamiany na maszynach (węzłach), które mają dołączyć do klastra.

kubeadm join -token=<token> <IP Address of the master node>

Poprzednie polecenie musi zostać skopiowane i zachowane do późniejszego użycia w węzłach roboczych.


Rysunek 7: Zainicjowano master Kubernetes

Domyślnie węzły główne nie podlegają zaplanowaniu i są tworzone przy użyciu „dedykowane” tainty. Węzeł główny można zaplanować za pomocą następującego polecenia:

kubectl taint nodes --all dedicated-

kubeadm polecenie obsługuje kilka innych opcji (patrz Tabela 2), których nie musieliśmy używać, ale mogą być użyte do zastąpienia domyślnego polecenia.

Parametr polecenia Opis Domyślny
--pomiń kontrole przed lotem Pomija kontrole przed lotem Przeprowadzane są kontrole przed lotem
--użyj-wersji-kubernetes Ustawia używaną wersję Kubernetes v1.5.1
--adresy-api-advertise Kubeadm init polecenie automatycznie wykrywa i używa adresu IP domyślnego interfejsu sieciowego i używa go do generowania certyfikatów dla serwera API. Ten parametr konfiguracyjny może być użyty do zastąpienia wartości domyślnej jednym lub większą liczbą adresów IP, na których serwer API ma zostać zweryfikowany. Automatyczne wykrywanie
--api-external-dns-names Ten parametr konfiguracyjny może być użyty do zastąpienia domyślnego interfejsu sieciowego jedną lub większą liczbą nazw hostów, na których serwer API ma zostać zweryfikowany. Tylko jeden z adresów IP lub zewnętrznych nazw DNS musi być użyty.
--dostawca-chmury Określa dostawcę chmury.

Menedżer chmury obsługuje „aws”, „azure”, „cloudstack”, „gce”, „mesos”, „openstack”, „ovirt”, „rackspace” i „vsphere”. Konfigurację dostawcy chmury można znaleźć w pliku /etc/kubernetes/cloud-config. Korzystanie z dostawcy chmury ma również tę zaletę, że używa trwałych woluminów i równoważenia obciążenia.

Brak automatycznego wykrywania dostawcy chmury
--pod-cidr-sieci Przydziela zakresy sieci (CIDR) do każdego węzła i jest przydatne w przypadku niektórych rozwiązań sieciowych, w tym dostawców flanelowych i chmurowych.
--service-cidr Zastępuje podsieć używaną przez Kubernetes do przypisywania adresów IP do podów. /etc/systemd/system/kubelet.service.d/10-kubeadm.conf również musi zostać zmodyfikowany. 10.96.0.0/12
--service-dns-domain Zastępuje sufiks nazwy DNS do przypisywania usług z nazwami DNS; ma format ..svc.cluster.local . /etc/systemd/system/kubelet.service.d/10-kubeadm.conf również musi zostać zmodyfikowany. cluster.local
--token Określa token, który ma być używany do wzajemnego uwierzytelniania między urządzeniem głównym a węzłami dołączającymi do klastra. Automatycznie generowane

Tabela 2: Opcje poleceń Kubeadm

Instalowanie sieci Calico Pod

Aby pody mogły komunikować się ze sobą, musi być zainstalowany dodatek sieciowy podów. Calico zapewnia konfigurację instalacji hostowaną przez kubeadm w postaci ConfigMap pod adresem http://docs.projectcalico.org/master/getting-started/kubernetes/installation/hosted/kubeadm/calico.yaml, którego użyjemy w tej sekcji, aby zainstalować sieć Pod. Uruchom następujące polecenie na węźle głównym, aby zainstalować sieć Pod:

kubectl apply -f
   http://docs.projectcalico.org/master/getting-started/
   kubernetes/installation/hosted/kubeadm/calico.yaml

Alternatywnie pobierz plik calico.yaml i skopiuj do węzła głównego:

scp -i "docker.pem" calico.yaml [email protected]:~

Następnie uruchom następujące polecenie:

kubectl apply -f calico.yaml

Calico i pojedynczy klaster etcd zostaną zainstalowane, jak pokazano na rysunku 8.


Rysunek 8: Instalowanie zasad Calico

Następnie wypisz wszystkie pody we wszystkich przestrzeniach nazw Kubernetes.

kubectl get pods --all-namespaces

kube-dns Pod musi być uruchomiony, jak pokazano na rysunku 9.


Rysunek 9: Wyświetlanie podów we wszystkich przestrzeniach nazw

Dołączanie węzłów do klastra

W tej sekcji dołączymy węzły robocze do klastra za pomocą dołączenia kubeadm polecenie, które ma następującą składnię:

kubeadm join --token=<token> <master-ip>

Opcjonalnie dołączenie kubeadm polecenie można uruchomić z --skip-preflight-checks opcja pominięcia wstępnej weryfikacji.

Dołączenie kubeadm polecenie używa dostarczonego tokena do komunikacji z serwerem API i uzyskania certyfikatu głównego urzędu certyfikacji oraz tworzy parę kluczy lokalnych. Następnie żądanie podpisania certyfikatu (CSR) jest wysyłane do serwera API w celu podpisania, a lokalny kubelet jest konfigurowany do łączenia się z serwerem API.

Uruchom dołączenie kubeadm polecenie skopiowane z wyjścia kubeadm init na każdym z komputerów Ubuntu, które mają dołączyć do klastra.

Najpierw zaloguj się przez SSH do instancji/instancji Ubuntu:

ssh -i "docker.pem" [email protected]

i

ssh -i "docker.pem" [email protected]

Następnie uruchom dołączenie kubeadm Komenda. Najpierw przeprowadzane są pewne kontrole przed lotem. Podany token został zweryfikowany. Następnie używane jest wykrywanie węzłów. Tworzony jest klient odnajdywania informacji o klastrze i żądane są informacje z serwera interfejsu API. Odbierany jest obiekt informacji o klastrze, a podpis jest weryfikowany przy użyciu podanego tokena. Stwierdzono, że sygnatura i zawartość informacji o klastrze są prawidłowe, a wykrywanie węzła zostało zakończone. Następnie wykonywane jest ładowanie węzła, w którym do nawiązania połączenia wykorzystywane są punkty końcowe API https://10.0.0.129:6443. Następnie żądanie podpisania certyfikatu (csr) jest wykonywane przy użyciu klienta API w celu uzyskania unikalnego certyfikatu dla węzła. Po odebraniu podpisanego certyfikatu z serwera API generowany jest plik konfiguracyjny kubelet. Komunikat „Dołączanie węzła zakończone” na rysunku 10 wskazuje, że węzeł dołączył do klastra.


Rysunek 10: Dołączanie węzła do klastra

Podobnie uruchom to samo polecenie na innym komputerze z systemem Ubuntu. Drugi węzeł również dołącza do klastra, jak pokazano na rysunku 11.


Rysunek 11: Dołączanie drugiego węzła do klastra

Na węźle głównym uruchom następujące polecenie, aby wyświetlić listę węzłów:

kubectl get nodes

Węzeł główny i dwa węzły robocze powinny zostać wyświetlone, jak pokazano na rysunku 12.


Rysunek 12: Wyświetlanie listy węzłów klastra Kubernetes

Instalowanie przykładowej aplikacji

Następnie przetestujemy klaster. Uruchom następujące polecenie, aby uruchomić nginx oparty na klastrze Pod składający się z trzech replik:

kubectl -s http://localhost:8080 run nginx --image=nginx
   --replicas=3 --port=80

Wymień wdrożenia:

kubectl get deployments

Wymień pody obejmujące cały klaster:

kubectl get pods -o wide

Ujawnij wdrożenie jako usługę typu LoadBalancer :

kubectl expose deployment nginx --port=80 --type=LoadBalancer

Wymień usługi:

kubectl get services

Dane wyjściowe z poprzednich poleceń wskazują nginx zostało utworzone wdrożenie, a trzy pody działają w dwóch węzłach roboczych w klastrze. Zostanie również utworzona usługa o nazwie „nginx”, jak pokazano na rysunku 13.


Rysunek 13: Uruchamianie klastra nginx Pod

Skopiuj adres IP klastra usługi. Uruchom polecenie curl, aby wywołać usługę:

curl 10.0.0.99

Znacznik HTML z usługi otrzymuje dane wyjściowe, jak pokazano na rysunku 14.


Rysunek 14: Wywoływanie usługi nginx

Odinstalowywanie klastra

Aby odinstalować klaster zainstalowany przez kubeadm, uruchom następujące polecenie:

kubeadm reset

Klaster zostanie odinstalowany, jak pokazano na rysunku 15.


Rysunek 15: Odinstalowywanie/resetowanie klastra Kubernetes

Ograniczenia

Kubeadm ma kilka ograniczeń i jest zalecany tylko do użytku programistycznego. Ograniczenia kubeadm są następujące;

  • Obsługiwane jest tylko kilka systemów operacyjnych:Ubuntu 16.04+, CentOS 7, HypriotOS v1.0.1+.
  • Nie nadaje się do użytku produkcyjnego.
  • Integracja dostawców chmury jest eksperymentalna.
  • Utworzony zostanie klaster z tylko jednym masterem i jedną bazą danych etcd. Wysoka dostępność nie jest obsługiwana, co oznacza, że ​​master jest pojedynczym punktem awarii (SPOF).
  • Funkcjonalność HostPort i HostIP nie są obsługiwane.
  • Niektóre inne znane problemy, gdy kubeadm jest używany z RHEL/CentOS 7 i VirtualBox.

Dalsze zmiany w kubeadm

Kubeadm jest w wersji alfa w Kubernetes v 1.5 i jest w wersji beta od Kubernetes 1.6. Drobne poprawki i ulepszenia są nadal wprowadzane w kubeadm z każdą nową wersją Kubernetes:

  • W Kubernetes 1.7 modyfikacje wewnętrznych zasobów klastra zainstalowane za pomocą kubeadm są nadpisywane podczas aktualizacji z wersji 1.6 do wersji 1.7.
  • W Kubernetes 1.8 domyślny token Bootstrap utworzony za pomocą kubeadm init staje się nieważny i jest usuwany po 24 godzinach od utworzenia, aby ograniczyć ujawnienie cennego poświadczenia. Dołączenie kubeadm polecenie deleguje ładowanie TLS do iteslf kubelet zamiast ponownego zaimplementowania procesu. Program startowy KubeConfig plik jest zapisywany w /etc/kubernetes/bootstrap-kubelet-conf z dołączaniem kubeadm .

Wniosek

W tym artykule wykorzystaliśmy funkcję narzędzia kubeadm dostępną od wersji Kubernetes 1.4, aby załadować klaster Kubernetes. Najpierw instalowane są wymagane pliki binarne dla platformy Docker, kubectl, kubelet i kubeadm. Następnie kubeadm init Polecenie służy do inicjowania węzła głównego w klastrze. Wreszcie, dołączenie kubeadm Polecenie służy do łączenia węzłów roboczych z klastrem. Przykładowy nginx aplikacja jest uruchamiana w celu przetestowania klastra.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czym jest problem roku 2038?

  2. Zdecyduj między monitorowaniem opartym na agencie a bezagentowym

  3. Grupowanie danych za pomocą funkcji OVER i PARTITION BY

  4. Jak utworzyć tabelę tymczasową w SQL?

  5. Jak dodawać komentarze w SQL?