Γεια σε όλους!
Έτυχε η μικρή μας ομάδα, για να μην πω ότι πρόσφατα, και σίγουρα όχι ξαφνικά, μεγάλωσε για να μεταφέρει ορισμένα (και στο μέλλον όλα) προϊόντα στην Kubernetes.
Υπήρχαν πολλοί λόγοι για αυτό, αλλά η ιστορία μας δεν αφορά το holivar.
Είχαμε λίγες επιλογές όσον αφορά τη βάση υποδομής. vCloud Director και vCloud Director. Διαλέξαμε το νεότερο και αποφασίσαμε να ξεκινήσουμε.
Για άλλη μια φορά, κοιτάζοντας το "The Hard Way", κατέληξα πολύ γρήγορα στο συμπέρασμα ότι χθες χρειαζόταν ένα εργαλείο για την αυτοματοποίηση τουλάχιστον βασικών διαδικασιών, όπως η ανάπτυξη και το μέγεθος. Μια βαθιά κατάδυση στην Google έφερε στο φως ένα τέτοιο προϊόν όπως το VMware Container Service Extension (CSE) - ένα προϊόν ανοιχτού κώδικα που σας επιτρέπει να αυτοματοποιήσετε τη δημιουργία και το μέγεθος των συμπλεγμάτων k8s για όσους βρίσκονται στο vCloud.
Αποποίηση ευθύνης: Το ΧΑΚ έχει τους περιορισμούς του, αλλά για τους σκοπούς μας ήταν τέλειο. Επίσης, η λύση πρέπει να υποστηρίζεται από τον πάροχο cloud, αλλά επειδή το τμήμα διακομιστή είναι επίσης ανοιχτού κώδικα, ζητήστε από τον πλησιέστερο διαχειριστή να το έχει διαθέσιμο :)
Για να ξεκινήσετε να το χρησιμοποιείτε, χρειάζεστε έναν λογαριασμό διαχειριστή στον οργανισμό vCloud και ένα προηγουμένως δρομολογημένο δίκτυο για το σύμπλεγμα (κατά τη διαδικασία ανάπτυξης, χρειάζεστε πρόσβαση στο Διαδίκτυο από αυτό το δίκτυο, μην ξεχάσετε να διαμορφώσετε το Τείχος προστασίας/NAT). Το να απευθύνεσαι δεν έχει σημασία. Σε αυτό το παράδειγμα, ας πάρουμε το 10.0.240.0/24
Δεδομένου ότι μετά τη δημιουργία, το σύμπλεγμα θα πρέπει να γίνει με κάποιο τρόπο διαχείριση, συνιστάται να έχετε ένα VPN με δρομολόγηση στο δημιουργημένο δίκτυο. Χρησιμοποιούμε ένα τυπικό SSL VPN που έχει ρυθμιστεί στην πύλη Edge του οργανισμού μας.
Στη συνέχεια, πρέπει να εγκαταστήσετε τον πελάτη CSE όπου θα γίνεται διαχείριση των συμπλεγμάτων k8s. Στην περίπτωσή μου, αυτός είναι ένας φορητός υπολογιστής που λειτουργεί και μερικά καλά κρυμμένα δοχεία που οδηγούν τον αυτοματισμό.
Ο υπολογιστής-πελάτης απαιτεί την έκδοση Python 3.7.3 και νεότερη εγκατεστημένη και τη λειτουργική μονάδα
pip3 install vcd-cli
pip3 install container-service-extension
Μετά την εγκατάσταση, ελέγχουμε την έκδοση CSE και λαμβάνουμε τα εξής:
# vcd cse version
Error: No such command "cse".
Απροσδόκητο, αλλά διορθώσιμο. Όπως αποδείχθηκε, το CSE πρέπει να συνδεθεί ως ενότητα στο vcd-cli.
Για να το κάνετε αυτό, πρέπει πρώτα να συνδεθείτε στο vcd-cli στον οργανισμό μας:
# vcd login MyCloud.provider.com org-dev admin
Password:
admin logged in, org: 'org-dev', vdc: 'org-dev_vDC01'
Μετά από αυτό, το vcd-cli θα δημιουργήσει ένα αρχείο ρυθμίσεων ~/.vcd-cli/profiles.yaml
Στο τέλος πρέπει να προσθέσετε τα εξής:
extensions:
- container_service_extension.client.cse
Στη συνέχεια ελέγχουμε ξανά:
# vcd cse version
CSE, Container Service Extension for VMware vCloud Director, version 2.5.0
Η φάση εγκατάστασης του πελάτη έχει ολοκληρωθεί. Ας προσπαθήσουμε να αναπτύξουμε το πρώτο σύμπλεγμα.
Το CSE έχει πολλά σύνολα παραμέτρων χρήσης, όλα αυτά μπορούν να προβληθούν
Αρχικά, ας δημιουργήσουμε κλειδιά για πρόσβαση χωρίς κωδικό πρόσβασης στο μελλοντικό σύμπλεγμα. Αυτό το σημείο είναι σημαντικό, καθώς από προεπιλογή, η σύνδεση με κωδικό πρόσβασης στους κόμβους θα είναι απενεργοποιημένη και αν δεν ορίσετε τα κλειδιά, μπορείτε να κάνετε πολλή δουλειά μέσω των κονσολών εικονικής μηχανής, κάτι που δεν είναι βολικό.
# 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.
Ας προσπαθήσουμε να ξεκινήσουμε τη δημιουργία ενός συμπλέγματος:
vcd cse cluster create MyCluster --network k8s_cluster_net --ssh-key ~/.ssh/id_rsa.pub --nodes 3 --enable-nfs
Αν λάβουμε σφάλμα Σφάλμα: Η περίοδος λειτουργίας έχει λήξει ή ο χρήστης δεν έχει συνδεθεί. Παρακαλούμε συνδεθείτε ξανά. — συνδεθείτε ξανά στο vcd-cli στο vCloud όπως περιγράφεται παραπάνω και δοκιμάστε ξανά.
Αυτή τη φορά όλα είναι καλά και το έργο της δημιουργίας ενός cluster έχει ξεκινήσει.
cluster operation: Creating cluster vApp 'MyCluster' (38959587-54f4-4a49-8f2e-61c3a3e879e0) from template 'photon-v2_k8-1.12_weave-2.3.0' (revision 1)
Θα χρειαστούν περίπου 20 λεπτά για να ολοκληρωθεί η εργασία. Στο μεταξύ, ας δούμε τις βασικές παραμέτρους εκκίνησης.
—δίκτυο — το δίκτυο που δημιουργήσαμε νωρίτερα.
—ssh-key — τα κλειδιά που δημιουργήσαμε, τα οποία θα γραφτούν στους κόμβους του συμπλέγματος
—nodes n — Αριθμός κόμβων Worker στο σύμπλεγμα. Θα υπάρχει πάντα ένας κύριος, αυτός είναι περιορισμός ΜΑΚ
—enable-nfs — δημιουργήστε έναν πρόσθετο κόμβο για κοινόχρηστα στοιχεία NFS κάτω από μόνιμους τόμους. Είναι μια επιλογή πεντάλ· θα επιστρέψουμε στη ρύθμιση του τι κάνει λίγο αργότερα.
Εν τω μεταξύ, στο vCloud μπορείτε να παρακολουθείτε οπτικά τη δημιουργία ενός συμπλέγματος
Μόλις ολοκληρωθεί η εργασία δημιουργίας ενός συμπλέγματος, είναι έτοιμο για χρήση.
Ας ελέγξουμε την ορθότητα της ανάπτυξης με την εντολή vcd cse πληροφορίες συμπλέγματος MyCluster
Στη συνέχεια, πρέπει να χρησιμοποιήσουμε τη διαμόρφωση συμπλέγματος kubectl
# vcd cse cluster config MyCluster > ./.kube/config
Και μπορείτε να ελέγξετε την κατάσταση του συμπλέγματος χρησιμοποιώντας το:
Σε αυτό το σημείο, το σύμπλεγμα μπορεί να θεωρηθεί ότι λειτουργεί υπό όρους, αν όχι για την ιστορία με επίμονους όγκους. Εφόσον βρισκόμαστε στο vCloud, η χρήση του vSphere Provider δεν θα λειτουργήσει. Επιλογή --enable-nfs σχεδιάστηκε για να εξομαλύνει αυτήν την ενόχληση, αλλά δεν λειτούργησε εντελώς. Απαιτείται χειροκίνητη ρύθμιση.
Αρχικά, ο κόμβος μας πρέπει να δημιουργήσει έναν ξεχωριστό Ανεξάρτητο δίσκο στο vCloud. Αυτό εγγυάται ότι τα δεδομένα μας δεν θα εξαφανιστούν μαζί με το σύμπλεγμα εάν διαγραφούν. Επίσης, συνδέστε το δίσκο στο NFS
# vcd disk create nfs-shares-1 100g --description 'Kubernetes NFS shares'
# vcd vapp attach mycluster nfsd-9604 nfs-shares-1
Μετά από αυτό, πηγαίνουμε μέσω ssh (πραγματικά δημιουργήσατε τα κλειδιά;) στον κόμβο NFS και τελικά συνδέουμε τον δίσκο:
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
Δημιουργήστε έναν κατάλογο για δεδομένα και προσαρτήστε ένα νέο διαμέρισμα εκεί:
mkdir /export
echo '/dev/sdb1 /export ext4 defaults 0 0' >> /etc/fstab
mount -a
Ας δημιουργήσουμε πέντε δοκιμαστικά διαμερίσματα και ας τα μοιραστούμε για το σύμπλεγμα:
>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
Μετά από όλη αυτή τη μαγεία, μπορούμε να δημιουργήσουμε PV και PVC στο σύμπλεγμα μας κάπως έτσι:
ΦΒ:
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
pvc:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: ""
resources:
requests:
storage: 10Gi
EOF
Εδώ τελειώνει η ιστορία της δημιουργίας ενός συμπλέγματος και ξεκινά η ιστορία του κύκλου ζωής του. Ως μπόνους, υπάρχουν δύο ακόμη χρήσιμες εντολές CSE που σας επιτρέπουν μερικές φορές να εξοικονομείτε πόρους ή όχι:
#Увеличиваем размер кластера до 8 воркер нод
>cse cluster resize MyCluster --network k8s_cluster_net --nodes 8
#Выводим ненужные ноды из кластера с их последующим удалением
>vcd cse node delete MyCluster node-1a2v node-6685 --yes
Σας ευχαριστώ όλους για τον χρόνο σας, αν έχετε οποιεσδήποτε ερωτήσεις, ρωτήστε στα σχόλια.
Πηγή: www.habr.com