CSE: Kubernetes за тези във vCloud

CSE: Kubernetes за тези във vCloud
Здравейте на всички!

Случи се така, че нашият малък екип, да не кажа, че наскоро, и със сигурност не внезапно, нарасна, за да премести някои (и в бъдеще всички) продукти в Kubernetes.

Имаше много причини за това, но нашата история не е за holivar.

Имахме малък избор по отношение на инфраструктурната база. vCloud Director и vCloud Director. Избрахме по-новата и решихме да започнем.

Още веднъж, преглеждайки „Трудният начин“, много бързо стигнах до заключението, че вчера беше необходим инструмент за автоматизиране на поне основни процеси, като внедряване и оразмеряване. Дълбокото гмуркане в Google извади на бял свят такъв продукт като VMware Container Service Extension (CSE) – продукт с отворен код, който ви позволява да автоматизирате създаването и оразмеряването на k8s клъстери за тези във vCloud.

Отказ от отговорност: CSE има своите ограничения, но за нашите цели беше перфектен. Освен това решението трябва да се поддържа от облачния доставчик, но тъй като сървърната част също е с отворен код, помолете най-близкия мениджър да го предостави :)

За да започнете да го използвате, имате нужда от администраторски акаунт в организацията vCloud и предварително създадена маршрутизирана мрежа за клъстера (по време на процеса на внедряване ви е необходим достъп до интернет от тази мрежа, не забравяйте да конфигурирате защитната стена/NAT). Адресирането няма значение. В този пример нека вземем 10.0.240.0/24

CSE: Kubernetes за тези във vCloud

Тъй като след създаването, клъстерът ще трябва да се управлява по някакъв начин, препоръчително е да имате VPN с маршрутизиране към създадената мрежа. Използваме стандартен SSL VPN, конфигуриран на Edge Gateway на нашата организация.

След това трябва да инсталирате CSE клиента, където ще се управляват k8s клъстерите. В моя случай това е работещ лаптоп и няколко добре скрити контейнера, които управляват автоматизацията.

Клиентът изисква инсталиран Python версия 3.7.3 и по-висока и инсталиран модул vcd-cli, така че нека инсталираме и двете.

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 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 — ключовете, които създадохме, които ще бъдат записани в клъстерните възли
— възли n — Брой работни възли в клъстера. Винаги ще има един главен, това е ограничение на CSE
—enable-nfs — създаване на допълнителен възел за NFS споделяния под постоянни томове. Това е малко опция за педали; ще се върнем към настройката на това, което прави малко по-късно.

Междувременно във vCloud можете визуално да наблюдавате създаването на клъстер
CSE: Kubernetes за тези във vCloud

След като задачата за създаване на клъстер е изпълнена, той е готов за употреба.

Нека проверим правилността на разгръщането с командата vcd cse информация за клъстер MyCluster

CSE: Kubernetes за тези във vCloud

След това трябва да получим конфигурацията на клъстера, която да използваме kubectl

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

И можете да проверите състоянието на клъстера, като го използвате:

CSE: Kubernetes за тези във vCloud

В този момент клъстерът може да се счита за условно работещ, ако не и историята с постоянни обеми. Тъй като сме във 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

Добавяне на нов коментар