CSE: Kubernetes para os que están en vCloud

CSE: Kubernetes para os que están en vCloud
Ola a todos!

Aconteceu que o noso pequeno equipo, por non dicir que recentemente, e seguramente non de súpeto, creceu para mover algúns (e no futuro todos) produtos a Kubernetes.

Houbo moitas razóns para iso, pero a nosa historia non é sobre holivar.

Tivemos pouca elección en canto á base de infraestruturas. vCloud Director e vCloud Director. Escollemos o máis novo e decidimos comezar.

Unha vez máis, mirando por "The Hard Way", cheguei moi rapidamente á conclusión de que onte se necesitaba unha ferramenta para automatizar polo menos procesos básicos, como a implantación e o dimensionamento. Un mergullo profundo en Google sacou á luz un produto como VMware Container Service Extension (CSE), un produto de código aberto que che permite automatizar a creación e dimensionamento de clústeres k8s para os que están en vCloud.

Descargo de responsabilidade: CSE ten as súas limitacións, pero para os nosos propósitos foi perfecto. Ademais, a solución debe ser compatible co provedor da nube, pero como a parte do servidor tamén é de código aberto, pídelle ao teu xestor máis próximo que a teña dispoñible :)

Para comezar a usalo, necesitas unha conta de administrador na organización vCloud e unha rede enrutada previamente creada para o clúster (durante o proceso de implantación, necesitas acceso a Internet desde esta rede, non esquezas configurar Firewall/NAT). O enderezo non importa. Neste exemplo, tomemos 10.0.240.0/24

CSE: Kubernetes para os que están en vCloud

Dado que despois da creación, o clúster terá que ser xestionado dalgún xeito, recoméndase ter unha VPN con enrutamento á rede creada. Usamos unha VPN SSL estándar configurada na pasarela Edge da nosa organización.

A continuación, cómpre instalar o cliente CSE onde se xestionarán os clústeres k8s. No meu caso, trátase dun portátil que funciona e un par de contedores ben escondidos que impulsan a automatización.

O cliente require a versión de Python 3.7.3 ou superior instalada e o módulo instalado vcd-cli, entón imos instalar os dous.

pip3 install vcd-cli

pip3 install container-service-extension

Despois da instalación, comprobamos a versión CSE e obtemos o seguinte:

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

Inesperado, pero arranxable. Como se viu, CSE debe anexarse ​​como módulo a vcd-cli.
Para facelo, primeiro debes iniciar sesión en vcd-cli na nosa organización:

# vcd login MyCloud.provider.com org-dev admin
Password: 
admin logged in, org: 'org-dev', vdc: 'org-dev_vDC01'

Despois diso, vcd-cli creará un ficheiro de configuración ~/.vcd-cli/profiles.yaml
Ao final, cómpre engadir o seguinte:

extensions:
  - container_service_extension.client.cse

Despois comprobamos de novo:

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

A fase de instalación do cliente rematou. Tentemos implementar o primeiro clúster.
CSE ten varios conxuntos de parámetros de uso, todos poden verse здесь.

Primeiro, imos crear claves para o acceso sen contrasinal ao futuro clúster. Este punto é importante, xa que de forma predeterminada, o inicio de sesión con contrasinal nos nodos estará desactivado e, se non estableces as claves, podes traballar moito a través das consolas da máquina virtual, o que non é conveniente.

# 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.

Imos tentar comezar a crear un clúster:

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

Se recibimos un erro Erro: a sesión caducou ou o usuario non iniciou sesión. Volve iniciar sesión. — de novo inicie sesión vcd-cli en vCloud como se describe anteriormente e ténteo de novo.

Esta vez todo está ben e comezou a tarefa de crear un clúster.

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

Levará uns 20 minutos completar a tarefa; mentres tanto, vexamos os parámetros básicos de inicio.

—network — a rede que creamos anteriormente.
—ssh-key — as claves que creamos, que se escribirán nos nodos do clúster
—nodes n — Número de nodos de traballo no clúster. Sempre haberá un mestre, esta é unha limitación de CSE
—enable-nfs — crea un nodo adicional para compartir NFS en volumes persistentes. É un pouco unha opción de pedal; volveremos a afinar o que fai un pouco máis tarde.

Mentres tanto, en vCloud pode supervisar visualmente a creación dun clúster
CSE: Kubernetes para os que están en vCloud

Unha vez rematada a tarefa de crear un clúster, xa está listo para o seu uso.

Comprobamos a corrección do despregue co comando vcd cse información do clúster MyCluster

CSE: Kubernetes para os que están en vCloud

A continuación, necesitamos obter a configuración do clúster para usar kubectl

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

E podes comprobar o estado do clúster usándoo:

CSE: Kubernetes para os que están en vCloud

Neste punto, o clúster pódese considerar que funciona condicionalmente, se non é pola historia con volumes persistentes. Xa que estamos en vCloud, non poderemos usar vSphere Provider. Opción --enable-nfs deseñado para suavizar esta molestia, pero non funcionou completamente. Requírese axuste manual.

Para comezar, o noso nodo debe crear un disco independente independente en vCloud. Isto garante que os nosos datos non desaparecerán xunto co clúster se se elimina. Ademais, conecte o disco a NFS

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

Despois diso, imos a través de ssh (realmente creaches as claves?) ao noso nodo NFS e, finalmente, conectamos o disco:

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

Cree un directorio para os datos e monte alí unha nova partición:

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

Imos crear cinco particións de proba e compartilas para o clúster:

>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

Despois de toda esta maxia, podemos crear PV e PVC no noso clúster algo así:
Reporteiro:

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

Aquí é onde remata a historia da creación dun cluster e comeza a historia do seu ciclo de vida. Como extra, hai dous comandos CSE máis útiles que che permiten ás veces aforrar recursos ou non:

#Увеличиваем размер кластера до 8 воркер нод
>cse cluster resize MyCluster --network k8s_cluster_net --nodes 8

#Выводим ненужные ноды из кластера с их последующим удалением
>vcd cse node delete MyCluster node-1a2v node-6685 --yes

Grazas a todos polo teu tempo, se tes algunha dúbida, pregunta nos comentarios.

Fonte: www.habr.com

Engadir un comentario