CSE: Kubernetes dla osób korzystających z vCloud

CSE: Kubernetes dla osób korzystających z vCloud
Witam wszystkich!

Tak się złożyło, że nasz mały zespół, żeby nie powiedzieć, że ostatnio, a na pewno nie nagle, powiększył się, aby przenieść część (a w przyszłości wszystkie) produkty na Kubernetes.

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

Nie mieliśmy dużego wyboru jeśli chodzi o bazę infrastrukturalną. Dyrektor vCloud i dyrektor vCloud. Wybraliśmy nowszy i postanowiliśmy zacząć.

Po raz kolejny przeglądając „The Hard Way” bardzo szybko doszedłem do wniosku, że na wczoraj potrzebne było narzędzie umożliwiające automatyzację choćby podstawowych procesów, takich jak wdrażanie i wymiarowanie. Głębokie zagłębienie się w Google ujawniło taki produkt jak VMware Container Service Extension (CSE) - produkt typu open source, który pozwala zautomatyzować tworzenie i rozmiar klastrów k8s dla klastrów w vCloud.

Zastrzeżenie: CSE ma swoje ograniczenia, ale dla naszych celów było idealne. Rozwiązanie musi być również wspierane przez dostawcę chmury, ale ponieważ część serwerowa również jest typu open source, poproś najbliższego menedżera, aby ją udostępnił :)

Aby zacząć z niego korzystać potrzebne jest konto administratora w organizacji vCloud oraz wcześniej utworzona sieć routowana dla klastra (w procesie wdrażania niezbędny jest dostęp do Internetu z tej sieci, nie zapomnij skonfigurować Firewall/NAT). Adresowanie nie ma znaczenia. W tym przykładzie weźmy 10.0.240.0/24

CSE: Kubernetes dla osób korzystających z vCloud

Ponieważ po utworzeniu klaster będzie musiał być w jakiś sposób zarządzany, zaleca się posiadanie VPN z routingiem do utworzonej sieci. Korzystamy ze standardowego protokołu SSL VPN skonfigurowanego na urządzeniu Edge Gateway naszej organizacji.

Następnie musisz zainstalować klienta CSE, w którym będą zarządzane klastry k8s. W moim przypadku jest to działający laptop i kilka dobrze ukrytych kontenerów napędzających automatyzację.

Klient wymaga zainstalowanego języka Python w wersji 3.7.3 i wyższej oraz zainstalowanego modułu vcd-cli, więc zainstalujmy oba.

pip3 install vcd-cli

pip3 install container-service-extension

Po instalacji sprawdzamy wersję CSE i otrzymujemy:

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

Nieoczekiwane, ale do naprawienia. Jak się okazało, CSE trzeba dołączyć jako moduł do vcd-cli.
Aby to zrobić, musisz najpierw zalogować się vcd-cli do 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 koniec musisz dodać:

extensions:
  - container_service_extension.client.cse

Następnie sprawdzamy ponownie:

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

Faza instalacji klienta została zakończona. Spróbujmy wdrożyć pierwszy klaster.
CSE ma kilka zestawów parametrów użytkowania, wszystkie z nich można przeglądać tutaj.

Najpierw utwórzmy klucze umożliwiające dostęp do przyszłego klastra bez hasła. Ten punkt jest ważny, ponieważ domyślnie logowanie hasłem do węzłów będzie wyłączone, a jeśli nie ustawisz kluczy, możesz uzyskać dużo pracy za pośrednictwem konsol maszyny wirtualnej, co nie jest 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 rozpocząć tworzenie klastra:

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

Jeśli otrzymamy błąd Błąd: Sesja wygasła lub użytkownik nie jest zalogowany. Zaloguj się ponownie. — ponownie zaloguj się vcd-cli do vCloud zgodnie z powyższym opisem i spróbuj ponownie.

Tym razem wszystko jest w porządku i rozpoczęło się zadanie tworzenia klastra.

cluster operation: Creating cluster vApp 'MyCluster' (38959587-54f4-4a49-8f2e-61c3a3e879e0) from template 'photon-v2_k8-1.12_weave-2.3.0' (revision 1)

Wykonanie zadania zajmie około 20 minut, w międzyczasie przyjrzyjmy się podstawowym parametrom startowym.

—network — sieć, którą stworzyliśmy wcześniej.
—ssh-key — utworzone przez nas klucze, które zostaną zapisane w węzłach klastra
—nodes n — Liczba węzłów roboczych w klastrze. Zawsze będzie jeden mistrz, jest to ograniczenie CSE
—enable-nfs — utwórz dodatkowy węzeł dla udziałów NFS w woluminach stałych. To trochę opcja pedałowania; do dostrajania tego, co robi, wrócimy nieco później.

Tymczasem w vCloud możesz wizualnie monitorować tworzenie klastra
CSE: Kubernetes dla osób korzystających z vCloud

Po zakończeniu zadania tworzenia klastra jest on gotowy do użycia.

Sprawdźmy poprawność wdrożenia za pomocą polecenia Informacje o klastrze vcd cse Mój klaster

CSE: Kubernetes dla osób korzystających z vCloud

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

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

Za jego pomocą możesz sprawdzić status klastra:

CSE: Kubernetes dla osób korzystających z vCloud

W tym momencie klaster można uznać za działający warunkowo, jeśli nie dla historii z trwałymi woluminami. Ponieważ jesteśmy w vCloud, nie będziemy mogli korzystać z dostawcy vSphere. Opcja --włącz-nfs zaprojektowany, aby złagodzić tę niedogodność, ale nie zadziałał całkowicie. Wymagana ręczna regulacja.

Na początek nasz węzeł musi utworzyć osobny dysk niezależny w vCloud. Daje to gwarancję, że nasze dane nie znikną wraz z klastrem w przypadku jego usunięcia. Podłącz także dysk do NFS

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

Następnie przechodzimy przez ssh (naprawdę utworzyłeś klucze?) do naszego węzła NFS i na koniec podłączamy dysk:

root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes
(parted) unit GB
(parted) mkpart primary 0 100
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 100GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name     Flags
 1      0.00GB  100GB  100GB               primary

(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Creating filesystem with 24413696 4k blocks and 6111232 inodes
Filesystem UUID: 8622c0f5-4044-4ebf-95a5-0372256b34f0
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Utwórz katalog na dane i zamontuj tam nową partycję:

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

Utwórzmy pięć partycji testowych i udostępnijmy je klastrze:

>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Добавим это в конец файла
/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! ;)
#Далее - экспортируем разделы
>exportfs -r

Po całej tej magii możemy stworzyć w naszym klastrze fotowoltaikę i PCV mniej więcej tak:
Reporter:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-vol1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    # Same IP as the NFS host we ssh'ed to earlier.
    server: 10.150.200.22
    path: "/export/vol1"
EOF

PCV:

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

W tym miejscu kończy się historia powstania jednego klastra, a zaczyna historia jego cyklu życia. Jako bonus, istnieją jeszcze dwa przydatne polecenia CSE, które pozwalają czasami oszczędzać 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 jakieś pytania, pytajcie w komentarzach.

Źródło: www.habr.com

Dodaj komentarz