Como construír unha nube híbrida usando Kubernetes que pode substituír DBaaS

Chámome Petr Zaitsev, son o CEO, o fundador percona e quero dicirche:

  • como vimos das solucións de código aberto a Database as a Service;
  • que enfoques existen para despregar bases de datos na nube;
  • como Kubernetes pode substituír DBaaS, eliminando a dependencia dos provedores e mantendo a sinxeleza do DBMS como servizo.

O artigo preparouse a partir dun informe en @Databases Meetup de Mail.ru Cloud Solutions & Tarantool. Se non queres ler, podes ver:


Como pasamos do código aberto a Database as a Service na nube

Levo traballando en código aberto desde finais dos 90. Hai vinte anos, usar código aberto, como as bases de datos, non era tan sinxelo. Foi necesario descargar o código fonte, parchealo, compilalo e só despois utilizalo.

O código aberto pasou por unha serie de simplificacións:

  • fontes Tar.gz e INSTALL que precisaban ser compiladas;
  • paquetes con dependencias como .deb e .rpm, onde só precisa instalar un conxunto de paquetes;
  • repositorios de paquetes como APT e YUM, cos que a instalación é automática;
  • solucións como Docker e Snap, que permiten recibir paquetes por instalación sen dependencias externas.

Como resultado, faise máis fácil usar software de código aberto e tamén reduce a barreira de entrada no desenvolvemento deste tipo de aplicacións.

Ao mesmo tempo, a diferenza da situación de hai 20 anos, cando todos eran expertos en montaxe, agora a maioría dos desenvolvedores non poden construír desde a orixe as ferramentas que usan.

De feito, isto non é malo, porque:

  1. Podemos utilizar software máis complexo pero máis fácil de usar. Por exemplo, un navegador é cómodo de usar, pero inclúe moitos compoñentes de código aberto e é inconveniente construír desde cero.
  2. Máis persoas poden converterse en desenvolvedores de software de código aberto e doutro tipo, as empresas usan máis software e a necesidade é maior.

A desvantaxe é que o seguinte paso na simplificación está asociado co uso de solucións na nube, e isto leva a un determinado bloqueo de provedores, é dicir, vinculación a un provedor. Usamos solucións sinxelas e os provedores usan compoñentes de código aberto, pero de feito están cravados nunha das grandes nubes. É dicir, a forma máis sinxela e rápida de implantar código aberto (e software compatible con el) é nas nubes, utilizando unha API propietaria.

Cando se trata de bases de datos na nube, hai dous enfoques:

  1. Monta a infraestrutura de base de datos, como nun centro de datos normal. É dicir, toma bloques de construción estándar: computación, almacenamento, etc., instala Linux e unha base de datos neles e configúraos.
  2. Use Database as a Service, onde o provedor ofrece unha base de datos preparada dentro da nube.

DBaaS é un mercado en rápido crecemento agora mesmo porque permite aos desenvolvedores traballar directamente con bases de datos e minimiza o traballo rutineiro. O provedor comprométese a garantir unha alta dispoñibilidade e un fácil escalado, parcheo de bases de datos, copias de seguridade e axuste do rendemento.

Dous tipos de Database as a Service baseado en código aberto e unha alternativa en forma de Kubernetes

Existen dous tipos de Database as a Service para bases de datos abertas:

  1. Un produto estándar de código aberto embalado nun backend de administración para facilitar a súa implantación e xestión.
  2. Unha solución comercial avanzada con varios complementos, compatible con código aberto.

Ambas opcións reducen a posibilidade de migración entre nubes e reducen a portabilidade de datos e aplicacións. Por exemplo, a pesar de que os diferentes tipos de nubes admiten esencialmente o mesmo MySQL estándar, hai diferenzas significativas entre elas: no funcionamento, o rendemento, a copia de seguridade, etc. Migrar dunha nube a outra pode ser un reto, especialmente para aplicacións complexas.

E aquí xorde a pregunta: é posible obter a comodidade da base de datos como servizo, pero como unha simple solución de código aberto?

A mala noticia é que, por desgraza, aínda non hai tales solucións no mercado. A boa noticia é que existe Kubernetes, que permite implementar este tipo de solucións.

Kubernetes é un sistema operativo para a nube ou o centro de datos que che permite implementar e xestionar unha aplicación en varios servidores nun clúster en lugar de nun único host.

Agora Kubernetes é o líder na categoría deste tipo de software. Había moitas solucións diferentes para tales problemas, pero converteuse no estándar. Moitas empresas que adoitaban centrarse en solucións alternativas agora céntranse en adaptar os seus produtos para soportar Kubernetes.

Ademais, Kubernetes é unha solución universal que é compatible con nubes privadas, públicas e híbridas de moitos provedores, por exemplo: AWS, Google Cloud, Microsoft Azure, Solucións na nube Mail.ru.

Como funciona Kubernetes coas bases de datos

Kubernetes foi deseñado orixinalmente para aplicacións sen estado que procesan datos pero non almacenan nada, como microservizos ou aplicacións web. As bases de datos están no outro extremo do espectro, é dicir, son aplicacións con estado. E Kubernetes non estaba pensado orixinalmente para tales aplicacións.

Non obstante, hai funcións que apareceron recentemente en Kubernetes que permiten o uso de bases de datos e outras aplicacións con estado:

  1. O concepto StatefulSet é toda unha serie de primitivos para procesar eventos sobre parar o traballo dos pods e implementar Graceful Shutdown (apagamento previsible da aplicación).
  2. Os volumes persistentes son almacéns de datos asociados a pods, obxectos de xestión de Kubernetes.
  3. Operator Framework - é dicir, a capacidade de crear compoñentes para xestionar bases de datos e outras aplicacións con estado distribuídas en moitos nodos.

Xa agora nas nubes públicas existen grandes bases de datos como servizo, cuxo backend é Kubernetes, por exemplo: CockroachCloud, InfluxDB, PlanetScale. É dicir, unha base de datos en Kubernetes non só é algo teoricamente posible, senón tamén algo que funciona na práctica.

Percona ten dúas solucións de código aberto para Kubernetes:

  1. Operador de Kubernetes para Percona Server para MongoDB.
  2. Kubernetes Operator for XtraDB CLUSTER é un servizo compatible con MySQL e ofrece alta dispoñibilidade e coherencia. Tamén pode usar un só nodo se non se precisa alta dispoñibilidade, por exemplo para unha base de datos de desenvolvemento.

Os usuarios de Kubernetes pódense dividir en dous grupos. Algunhas persoas usan os operadores de Kubernetes directamente; estes son principalmente usuarios avanzados que entenden ben como funciona a tecnoloxía. Outros execútano no backend: estes usuarios están interesados ​​en algo como Database as a Service, non queren afondar nos matices de Kubernetes. Para o segundo grupo de usuarios, temos outra solución de código aberto: Percona DBaaS CLI Tool. Esta é unha solución experimental para aqueles que queren obter un DBaaS de código aberto baseado en Kubernetes sen un coñecemento profundo da tecnoloxía.

Como executar o DBaaS de Percona en Google Kubernetes Engine

Google Kubernetes Engine, na miña opinión, é unha das implementacións máis funcionais da tecnoloxía Kubernetes. Está dispoñible en moitas rexións do mundo e ten unha ferramenta de liña de comandos (SDK) sinxela e cómoda, que che permite crear scripts en lugar de xestionar manualmente a plataforma.

Para que o noso DBaaS funcione, necesitamos os seguintes compoñentes:

  1. Kubectl.
  2. SDK de Google Cloud.
  3. Percona DBaaS CLI.

Instalar kubectl

Instalamos o paquete para o teu sistema operativo, miraremos o exemplo de Ubuntu. Máis detalles aquí.

sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

Instalando Google Cloud SDK

Instalamos o paquete de software do mesmo xeito. Máis detalles aquí.

# Add the Cloud SDK distribution URI as a package source
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] 
http://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

# Import the Google Cloud Platform public key
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -

# Update the package list and install the Cloud SDK
sudo apt-get update && sudo apt-get install google-cloud-sdk

Instalación de Percona DBaaS CLI

Instala desde os repositorios de Percona. A ferramenta CLI DBaaS de Percona aínda é un produto experimental, polo que está situada no repositorio experimental, que debe activarse por separado, aínda que xa teña instalados os repositorios de Percona.

Máis aquí.

Algoritmo de instalación:

  1. Configure os repositorios de Percona usando a ferramenta percona-release. Primeiro debes descargar e instalar o paquete oficial de percona-release de Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Active o compoñente do repositorio de ferramentas experimentais do seguinte xeito:
    sudo percona-release enable tools experimental
    
  3. Instalar o paquete percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Configurar o funcionamento dos compoñentes

Máis información sobre a configuración aquí.

Primeiro debes iniciar sesión na túa conta de Google. Ademais, Google Cloud permite que un usuario teña moitos proxectos independentes, polo que debes especificar un proxecto de traballo usando o código deste proxecto:

gcloud auth login
gcloud config set project hidden-brace-236921

A continuación, creamos un clúster. Para a demostración, creei un clúster de Kubernetes de só tres nodos; este é o mínimo necesario para a alta dispoñibilidade:

gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3

O seguinte comando kubectl dá os privilexios desexados ao noso usuario actual:

kubectl create clusterrolebinding cluster-admin-binding-$USER 
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)

Despois creamos un espazo de nomes e facémolo activo. O espazo de nomes é, grosso modo, tamén como un proxecto ou ambiente, pero xa dentro dun clúster de Kubernetes. É independente dos proxectos de Google Cloud:

kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace

Iniciando o clúster

Unha vez que teñamos pasado por estes poucos pasos, podemos iniciar un clúster de tres nodos con este simple comando:

# percona-dbaas mysql create-db example
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     example
Resource Endpoint: example-proxysql.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              Nt9YZquajW7nfVXTTrP
Status:            ready

Como conectarse a un clúster

Por defecto, só está dispoñible dentro de Kubernetes. É dicir, non é accesible desde este servidor desde o que executou o comando "Crear". Para facelo dispoñible, por exemplo, para probas cun cliente, cómpre reenviar o porto mediante Port Mapping:

kubectl port-forward svc/example-proxysql 3306:3306 $

Despois conectamos o teu cliente MySQL:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Comandos avanzados de xestión de clústeres

Base de datos sobre IP pública

Se queres unha solución máis permanente para a dispoñibilidade do clúster, podes obter un enderezo IP externo. Neste caso, a base de datos será accesible desde calquera lugar. Isto é menos seguro, pero moitas veces máis cómodo. Para a IP externa usamos o seguinte comando:

# percona-dbaas mysql create-db exposed 
--options="proxysql.serviceType=LoadBalancer"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     exposed
Resource Endpoint: 104.154.133.197
Port:              3306
User:              root
Pass:              k0QVxTr8EVfgyCLYse
Status:            ready

To access database please run the following command:
mysql -h 104.154.133.197 -P 3306 -uroot -pk0QVxTr8EVfgyCLYse

Establece o contrasinal de forma explícita

En lugar de que o sistema xere un contrasinal aleatoriamente, podes establecer o contrasinal de forma explícita:

# percona-dbaas mysql create-db withpw --password=mypassword
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     withpw
Resource Endpoint: withpw-proxysql.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              mypassword
Status:            ready

Estou mostrando a saída dos scripts en formato lexible por humanos, pero tamén se admite o formato JSON.

Desactivando a alta dispoñibilidade

Co seguinte comando pode desactivar a alta dispoñibilidade para implementar un só nodo:

# percona-dbaas mysql create-db singlenode 
--options="proxysql.enabled=false, allowUnsafeConfigurations=true,pxc.size=1"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     singlenode
Resource Endpoint: singlenode-pxc.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              22VqFD96mvRnmPMGg
Status:            ready

Esta é unha solución para probar tarefas para poñer MySQL en funcionamento o máis rápido e sinxelo posible, probalo e despois apágalo ou utilízao para o desenvolvemento.

A ferramenta CLI DBaaS de Percona axúdache a conseguir unha solución similar a DBaaS en Kubernetes. Ao mesmo tempo, seguimos traballando na súa funcionalidade e usabilidade.

Este informe presentouse por primeira vez en @Databases Meetup por Mail.ru Cloud Solutions&Tarantool. Mirar video outras actuacións e subscríbete aos anuncios de eventos en Telegram En torno a Kubernetes en Mail.ru Group.

Que máis ler sobre o tema:

  1. Bases de datos nunha plataforma IIoT moderna.
  2. Como elixir unha base de datos para un proxecto para non ter que escoller de novo.

Fonte: www.habr.com

Engadir un comentario