garutilorenzo.ansible-role-linux-kubernetes
Instalacja i konfiguracja klastra Kubernetes z wysoką dostępną
Ta rola Ansible zainstaluje i skonfiguruje klaster Kubernetes z wysoką dostępnością. Repozytorium automatyzuje proces instalacji Kubernetes przy użyciu kubeadm.
To repozytorium stanowi tylko przykład, jak używać automatyzacji Ansible do instalacji i konfiguracji klastra Kubernetes. Do środowiska produkcyjnego należy używać Kubespray.
Wymagania
Zainstaluj Ansible, ipaddr i netaddr:
pip install -r requirements.txt
Pobierz rolę z GitHub:
ansible-galaxy install git+https://github.com/garutilorenzo/ansible-role-linux-kubernetes.git
Zmienne roli
Ta rola akceptuje następujące zmienne:
Var | Wymagane | Domyślne | Opis |
---|---|---|---|
kubernetes_subnet |
tak |
192.168.25.0/24 |
Podsieć, w której będzie wdrażany Kubernetes. Jeśli VM lub serwer fizyczny ma więcej niż jeden interfejs, Ansible wybierze interfejs używany przez Kubernetes w zależności od podsieci interfejsu. |
disable_firewall |
nie |
nie |
Jeśli ustawione na tak, Ansible wyłączy zaporę. |
kubernetes_version |
nie |
1.25.0 |
Wersja Kubernetes do zainstalowania. |
kubernetes_cri |
nie |
containerd |
CRI Kubernetes do zainstalowania. |
kubernetes_cni |
nie |
flannel |
CNI Kubernetes do zainstalowania. |
kubernetes_dns_domain |
nie |
cluster.local |
Domyślna strefa DNS Kubernetes. |
kubernetes_pod_subnet |
nie |
10.244.0.0/16 |
Podsieć podów Kubernetes. |
kubernetes_service_subnet |
nie |
10.96.0.0/12 |
Podsieć usług Kubernetes. |
kubernetes_api_port |
nie |
6443 |
Port nasłuchujący kubeapi. |
setup_vip |
nie |
nie |
Skonfiguruj adres VIP Kubernetes za pomocą kube-vip. |
kubernetes_vip_ip |
nie |
192.168.25.225 |
Wymagany, jeśli setup_vip jest ustawione na tak. Adres IP VIP dla planu kontrolnego. |
kubevip_version |
nie |
v0.4.3 |
Wersja kontenera kube-vip. |
install_longhorn |
nie |
nie |
Zainstaluj Longhorn, chmurową natywną rozproszoną pamięć blokową dla Kubernetes. |
longhorn_version |
nie |
v1.3.1 |
Wydanie Longhorn. |
install_nginx_ingress |
nie |
nie |
Zainstaluj kontroler nginx ingress. |
nginx_ingress_controller_version |
nie |
controller-v1.3.0 |
Wersja kontrolera nginx ingress. |
nginx_ingress_controller_http_nodeport |
nie |
30080 |
NodePort używany przez kontroler nginx ingress dla przychodzącego ruchu http. |
nginx_ingress_controller_https_nodeport |
nie |
30443 |
NodePort używany przez kontroler nginx ingress dla przychodzącego ruchu https. |
enable_nginx_ingress_proxy_protocol |
nie |
nie |
Włącz tryb protokołu proxy kontrolera nginx ingress. |
enable_nginx_real_ip |
nie |
nie |
Włącz moduł rzeczywistego IP kontrolera nginx ingress. |
nginx_ingress_real_ip_cidr |
nie |
0.0.0.0/0 |
Wymagany, jeśli enable_nginx_real_ip jest ustawione na tak. Ufa podsieci do użycia z modułem rzeczywistego IP. |
nginx_ingress_proxy_body_size |
nie |
20m |
Maksymalny rozmiar ciała proxy kontrolera nginx ingress. |
sans_base |
nie |
[lista wartości, zobacz defaults/main.yml] |
Lista adresów IP lub FQDN używanych do podpisywania certyfikatu kube-api. |
Dodatkowe zmienne
Ta rola akceptuje dodatkową zmienną kubernetes_init_host. Zmienna ta jest używana, gdy klaster jest uruchamiany po raz pierwszy. Wartość tej zmiennej musi być nazwą hosta jednego z węzłów master. Kiedy Ansible będzie działać na dopasowanym hoście, Kubernetes zostanie zainicjowany.
Zasoby klastra wdrożone
Dzięki tej roli zainstalowane zostaną kontroler nginx ingress i Longhorn.
Kontroler nginx ingress
Kontroler nginx ingress jest wykorzystywany jako kontroler wejścia.
Instalacja odbywa się na bare metal, a kontroler wejścia jest następnie eksponowany za pomocą usługi NodePort. Możesz dostosować porty eksponowane przez usługę NodePort, używając zmiennych roli do zmiany tych wartości.
Longhorn
Longhorn to lekki, niezawodny i potężny system rozproszonej pamięci blokowej dla Kubernetes.
Longhorn wdraża rozproszoną pamięć blokową za pomocą kontenerów i mikroserwisów. Longhorn tworzy dedykowany kontroler pamięci dla każdej objętości urządzenia blokowego i synchronicznie replikuję tę objętość w wielu replikach przechowywanych na wielu węzłach. Kontroler pamięci i repliki są samodzielnie orkiestracyjne przy użyciu Kubernetes.
Vagrant
Aby przetestować tę rolę, możesz użyć Vagranta i Virtualbox do uruchomienia przykładowej infrastruktury. Po pobraniu tego repozytorium użyj Vagranta, aby uruchomić maszyny wirtualne:
vagrant up
W pliku Vagrantfile możesz wprowadzić swój publiczny klucz ssh bezpośrednio do pliku authorized_keys użytkownika vagrant. Musisz zmienić placeholder CHANGE_ME w pliku Vagrantfile. Możesz również dostosować liczbę wdrożonych maszyn wirtualnych, zmieniając zmienną NNODES (Domyślnie: 6).
Użycie tej roli
Aby użyć tej roli, postępuj zgodnie z przykładem w katalogu examples/. Dostosuj plik hosts.ini do swoich hostów i uruchom playbook:
lorenzo@mint-virtual:~$ ansible-playbook -i hosts-ubuntu.ini site.yml -e kubernetes_init_host=k8s-ubuntu-0
Najpierw zbierane są dane, a następnie instalowane różne komponenty, aż do zakończenia procesu instalacji. Możesz zweryfikować status klastra i sprawdzić węzły oraz stan podów.
Teraz mamy wdrożony klaster Kubernetes w trybie wysokiej dostępności, możemy sprawdzić status klastra:
root@k8s-ubuntu-0:~# kubectl get nodes
Możesz także sprawdzić status podów:
root@k8s-ubuntu-0:~# kubectl get pods --all-namespaces
Możemy zobaczyć, że Longhorn, nginx ingress i wszystkie pady kube-system są uruchomione.
Możemy także sprawdzić usługę kontrolera nginx ingress:
root@k8s-ubuntu-0:~# kubectl get svc -n ingress-nginx
Możemy zobaczyć, że kontroler nginx ingress nasłuchuje na porcie 30080 dla http i 30443 dla https. Z zewnętrznej maszyny możemy przetestować kontroler ingress:
lorenzo@mint-virtual:~$ curl -v http://192.168.25.110:30080
Install and configure a high available Kubernetes cluster
ansible-galaxy install garutilorenzo.ansible-role-linux-kubernetes