CSE: Kubernetes за тези, които са в vCloud

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

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

Причин для этого было много, но наша история не о холиварах.

У нас был небольшой выбор инфраструктурных решений: vCloud Director и vCloud Director. Мы выбрали более новое решение и решили начать с него.

Просматривая «The Hard Way», я быстро пришел к выводу, что инструмент для автоматизации хотя бы базовых процессов, таких как деплой и сайзинг, нужен нам уже вчера. Глубокое изучение Google привело к продукту, известному как VMware Container Service Extension (CSE) — опенсорсный продукт, позволяющий автоматизировать создание и сайзинг кластеров k8s для пользователей vCloud.

Примечание: CSE имеет свои ограничения, но для наших целей он подошел идеально. Также решение должно поддерживаться облачным провайдером, но поскольку серверная часть также является открытым исходным кодом, требуйте его наличия у ближайшего менеджера 🙂

Для первоначального использования нужен аккаунт администратора в организации vCloud и заранее созданная routed-сеть для кластера (в процессе деплоя необходим интернет-доступ из этой сети, не забудьте настроить Firewall/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

Ако получим грешка Error: Session has expired or user not logged in. Please re-login. — отново влизаме в 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 минути, а междувременно ще разгледаме основните параметри на стартиране.

—network — мрежата, която създадохме по-рано.
—ssh-key — създадените от нас ключове, които ще бъдат записани на нодовете на клъстера.
—nodes n — Броят на Worker нодовете на клъстера. Мастърът винаги ще бъде един, това е ограничението на CSE.
—enable-nfs — създаване на допълнителен нод за NFS споделени под постоянни обеми. Малко специфична опция, за настройката на това, което прави, ще се върнем по-късно.

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

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

Нека проверим коректността на деплоя с команда: vcd cse cluster info MyCluster

CSE: Kubernetes за тези, които са в vCloud

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

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

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

CSE: Kubernetes за тези, които са в vCloud

На този етап кластерът може да се счита условно работещ, ако не беше историята с постоянните обеми. Тъй като сме в vCloud, не можем да използваме vSphere Provider. Опцията —enable-nfs е предназначена да смекчи тази неприятност, но не стана напълно. Изисква се ръчна настройка.

Първо, нашият нод трябва да създаде отделен Independent диск в 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 в нашия клъстер по следния начин:
PV:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-vol1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    # Същият IP адрес като този на NFS хоста, до който ssh се присъединихме по-рано.
    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

Благодаря на всички за отделеното време, ако имате въпроси — задавайте ги в коментарите.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster