CSE: Kubernetes для тых хто ў vCloud-е

CSE: Kubernetes для тых хто ў vCloud-е
Усім прывітанне!

Так склалася, што наша невялікая каманда, не сказаць, каб нядаўна, і ўжо сапраўды не раптоўна, дарасла да пераносу некаторых (а ў даляглядзе і ўсіх) прадуктаў у Kubernetes.

Прычын таму было мноства, але наша гісторыя не пра халівар.

З інфраструктурнай асновы выбар у нас быў невялікі. vCloud Director і vCloud Director. Выбралі той, што навейшы і вырашылі пачаць.

У чарговы раз пагартаўшы «The Hard Way», я вельмі хутка прыйшоў да высновы, што прылада для аўтаматызацыі хаця б базавых працэсаў, такіх як дэплой і сайзінг, патрэбен яшчэ ўчора. Глыбокае апусканне ў гугл выявіла на святло такі прадукт як VMware Container Service Extension (CSE) – апенсорсны прадукт, які дазваляе аўтаматызаваць стварэнне і сайзінг k8s кластараў для тых, хто ў vCloud-е.

Disclaimer: CSE мае свае абмежаванні, але для нашых мэт ён падышоў ідэальна. Таксама рашэнне павінна падтрымлівацца хмарным правайдэрам, але бо серверная частка таксама open-source, патрабуйце яго наяўнасці ў найблізкага мэнэджара 🙂

Для пачатку выкарыстання неабходны рахунак адміністратара ў арганізацыі 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: Сесія не раскрываецца або не ўваходзіць у сістэму. 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 шары пад persistent volumes. Трохі педальная опцыя, да даналадкі таго, што яна робіць, мы вернемся крыху пазней.

Тым часам, у vCloud можна візуальна назіраць за стварэннем кластара
CSE: Kubernetes для тых хто ў vCloud-е

Як толькі задача стварэння кластара завяршылася, ён готаў да працы.

Праверым карэктнасць дэплоя камандай vcd cse cluster info MyCluster

CSE: Kubernetes для тых хто ў vCloud-е

Далей нам неабходна атрымаць канфігурацыю кластара для выкарыстання кубектль

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

І можна праверыць стан кластара ўжо з дапамогай яе:

CSE: Kubernetes для тых хто ў vCloud-е

На гэтым моманце кластар можна лічыць умоўна працоўным, калі б не гісторыя з persistent volumes. Так як мы ў 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 у нашым кластары прыкладна так:
ПВ:

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

ПВХ:

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

Дадаць каментар