CSE: Kubernetes dla tych w vCloudzie

CSE: Kubernetes dla tych w vCloudzie
Cześć wszystkim!

Zdarzyło się, że nasz mały zespół, nie powiem, żeby niedawno, a na pewno nie nagle, dorósł do przeniesienia niektórych (a w przyszłości być może wszystkich) produktów do Kubernetes.

Powodów było wiele, ale nasza historia nie dotyczy kontrowersji.

Z infrastrukturalnych podstaw mieliśmy mały wybór. vCloud Director i vCloud Director. Wybraliśmy ten, który był nowszy i postanowiliśmy zaczynać.

Przechodząc kolejny raz przez "The Hard Way", bardzo szybko doszedłem do wniosku, że narzędzie do automatyzacji przynajmniej podstawowych procesów, takich jak wdrażanie i sizing, było potrzebne już wczoraj. Głęboka analiza w Google ujawniła produkt taki jak VMware Container Service Extension (CSE) — otwarte źródło, które pozwala automatyzować tworzenie i sizing klastrów k8s dla tych, którzy pracują w vCloud.

Zastrzeżenie: CSE ma swoje ograniczenia, ale w naszych celach okazał się idealny. Ponadto rozwiązanie musi być wspierane przez dostawcę chmury, ale ponieważ część serwerowa również jest open-source, wymagaj jego dostępności u najbliższego menedżera 🙂

Aby rozpocząć korzystanie, wymagana jest administracyjna konto w organizacji vCloud oraz wcześniej utworzona sieć routowana dla klastra (w trakcie wdrażania dostęp do internetu z tej sieci jest niezbędny, nie zapomnij skonfigurować Firewall/NAT). Adresacja nie ma znaczenia. W tym przykładzie weźmiemy 10.0.240.0/24.

CSE: Kubernetes dla tych w vCloudzie

Ponieważ po utworzeniu, klastra trzeba będzie jakoś zarządzać, zaleca się posiadanie VPN z trasowaniem do utworzonej sieci. Używamy standardowego SSL-VPN, skonfigurowanego na Edge Gateway naszej organizacji.

Następnie należy zainstalować klienta CSE w miejscu, z którego będzie zarządzane klasterami k8s. W moim przypadku jest to laptop roboczy i para dobrze schowanych kontenerów, które zajmują się automatyzacją.

Klient wymaga zainstalowanego Pythona w wersji 3.7.3 lub wyższej oraz zainstalowanego modułu vcd-cli, więc zainstalujemy to i to.

pip3 install vcd-cli

pip3 install container-service-extension

Po instalacji sprawdzamy wersję CSE i otrzymujemy następujące:

# vcd cse version
Error: No such command "cse".

Niespodziewanie, ale naprawialne. Okazuje się, że CSE należy dodać jako moduł do vcd-cli.
Aby to zrobić, najpierw trzeba zalogować się do vcd-cli w naszej organizacji:

# vcd login MyCloud.provider.com org-dev admin
Password: 
admin logged in, org: 'org-dev', vdc: 'org-dev_vDC01'

Następnie vcd-cli utworzy plik konfiguracyjny ~/ .vcd-cli / profiles.yaml
Na jego końcu należy dodać to, co następuje:

extensions:
  - container_service_extension.client.cse

Po tym ponownie sprawdzamy:

# vcd cse version
CSE, Container Service Extension for VMware vCloud Director, version 2.5.0

Etap instalacji klienta został zakończony. Spróbujemy uruchomić pierwszy klaster.
CSE ma kilka zestawów parametrów użycia, wszystkie można zobaczyć tutaj.

Na początek utworzymy klucze dla bezhasłowego dostępu do przyszłego klastra. To ważny moment, ponieważ domyślnie węzły nie będą miały włączonego logowania za pomocą hasła, a jeśli nie ustawimy kluczy, może to spowodować wiele problemów poprzez konsolę maszyn wirtualnych, co nie jest za wygodne.

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

Spróbujmy uruchomić tworzenie klastra:

vcd cse cluster create MyCluster --network k8s_cluster_net --ssh-key ~/.ssh/id_rsa.pub --nodes 3 --enable-nfs

Jeśli otrzymasz błąd Error: Session has expired or user not logged in. Please re-login. — logujemy się ponownie do vcd-cli w vCloud, jak opisano powyżej, i ponawiamy próbę.

Tym razem wszystko poszło dobrze i zadanie tworzenia klastra zostało uruchomione.

cluster operation: Tworzenie klastra vApp 'MyCluster' (38959587-54f4-4a49-8f2e-61c3a3e879e0) z szablonu 'photon-v2_k8-1.12_weave-2.3.0' (rewizja 1)

Zakończenie zadania zajmie około 20 minut, w międzyczasie omówimy główne parametry uruchamiania.

—network — sieć, którą wcześniej utworzyliśmy.
—ssh-key — klucze, które utworzyliśmy, które zostaną zapisane na węzłach klastra
—nodes n — Liczba węzłów roboczych klastra. Mistrz będzie zawsze jeden, to ograniczenie CSE
—enable-nfs — utwórz dodatkowy węzeł dla współdzielonego NFS pod persistent volumes. Trochę egzotyczna opcja, do jej dalszej konfiguracji wrócimy później.

W międzyczasie w vCloud można wizualnie obserwować tworzenie klastra.
CSE: Kubernetes dla tych w vCloudzie

Gdy zadanie tworzenia klastra zostanie zakończone, jest on gotowy do pracy.

Sprawdźmy poprawność wdrożenia poleceniem vcd cse cluster info MyCluster

CSE: Kubernetes dla tych w vCloudzie

Następnie musimy uzyskać konfigurację klastra do użycia. kubectl

# vcd cse cluster config MyCluster > ./.kube/config

Można sprawdzić stan klastra przy jej użyciu:

CSE: Kubernetes dla tych w vCloudzie

Na tym etapie klaster można uznać za w pełni działający, gdyby nie historia z persistent volumes. Ponieważ jesteśmy w vCloud, nie będziemy mogli użyć dostawcy vSphere. Opcja —enable-nfs ma na celu złagodzenie tego problemu, ale nie do końca. Wymagana jest ręczna konfiguracja.

Na początek nasz węzeł musi utworzyć oddzielny niezależny dysk w vCloud. Gwarantuje to, że nasze dane nie znikną z klastrem, jeśli zostanie on usunięty. Podłączymy również dysk do NFS.

# vcd disk create nfs-shares-1 100g --description 'Kubernetes NFS shares'
# vcd vapp attach mycluster nfsd-9604 nfs-shares-1

Po tym zalogujemy się przez SSH (naprawdę utworzyłeś klucze?) na nasz węzeł NFS i ostatecznie podłączymy dysk:

root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Uwaga: Istniejąca etykieta dysku na /dev/sdb zostanie zniszczona, a wszystkie dane na tym dysku zostaną utracone. Czy chcesz kontynuować?
Tak/Nie? tak
(parted) unit GB
(parted) mkpart primary 0 100
(parted) print
Model: VMware Virtual disk (scsi)
Dysk /dev/sdb: 100GB
Rozmiar sektora (logiczny/fizyczny): 512B/512B
Tabela partycji: gpt
Flagi dysku:

Numer  Start   Koniec  Rozmiar  System plików  Nazwa     Flagi
 1      0.00GB  100GB  100GB               primary

(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Tworzenie systemu plików z 24413696 bloków 4k i 6111232 inodami
UUID systemu plików: 8622c0f5-4044-4ebf-95a5-0372256b34f0
Kopie zapasowe superbloku przechowywane w blokach:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872

Alokacja tabel grupowych: zakończono
Zapis tabel inodów: zakończono
Tworzenie dziennika (32768 bloków): zakończono
Zapis superbloków i informacji o rozrachunku systemu plików: zakończono

Tworzymy katalog dla danych i montujemy tam nową partycję:

mkdir /export
echo '/dev/sdb1  /export   ext4  defaults   0 0' >> /etc/fstab
mount -a

Stworzymy pięć testowych partycji i udostępnimy je dla klastra:

>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Dodaj to na końcu pliku
/export/vol1 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol2 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol3 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol4 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol5 *(rw,sync,no_root_squash,no_subtree_check)
#:wq! ;)
# Następnie - eksportujemy partycje
>exportfs -r

Po całej tej magii, można stworzyć PV i PVC w naszym klastrze w następujący sposób:
PV:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-vol1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    # Taki sam adres IP jak host NFS, do którego się wcześniej ssh'owaliśmy.
    server: 10.150.200.22
    path: '/export/vol1'
EOF

PVC:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ''
  resources:
    requests:
      storage: 10Gi
EOF

Na tym kończy się historia tworzenia jednego klastra i zaczyna się historia jego cyklu życia. Jako bonus - dwie przydatne komendy CSE, które czasami mogą oszczędzić zasoby lub nie:

#Увеличиваем размер кластера до 8 воркер нод
>cse cluster resize MyCluster --network k8s_cluster_net --nodes 8

#Выводим ненужные ноды из кластера с их последующим удалением
>vcd cse node delete MyCluster node-1a2v node-6685 --yes

Dziękuję wszystkim za poświęcony czas, jeśli macie pytania - zadawajcie je w komentarzach.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster