Implantando MySQL no Kubernetes {Guia}
MySQL é um dos sistemas de gerenciamento de banco de dados relacional mais populares em uso atualmente, e executá-lo no Kubernetes pode fornecer uma solução altamente escalonável e flexível para gerenciar a carga de trabalho de seu banco de dados. Neste guia, orientaremos você no processo de implantação do MySQL no Kubernetes, desde a configuração de um cluster Kubernetes até a criação de uma implantação do MySQL, adição de armazenamento persistente e exposição da implantação com um serviço.
Usaremos arquivos YAML para definir nossos recursos do Kubernetes e também forneceremos explicações detalhadas e exemplos de cada etapa do caminho. Quer você seja novo no Kubernetes ou um usuário experiente, este guia fornecerá o conhecimento e as ferramentas necessárias para implantar e gerenciar o MySQL no Kubernetes.
Pré-requisitos para implantação do MySQL no Kubernetes:
Compreensão básica dos conceitos do Kubernetes, como pods, serviços, implantações e volumes persistentes.
Um cluster Kubernetes instalado e funcionando. Pode ser um serviço gerenciado do Kubernetes, como GKE, EKS ou AKS, ou um cluster auto-hospedado usando kubeadm ou kops.
Ferramenta de linha de comando kubectl instalada em sua máquina local para interagir com o servidor API Kubernetes.
-
Docker instalado em sua máquina local para criar e enviar imagens do Docker para um registro de contêiner.
Acesso a um registro de contêiner para armazenar suas imagens Docker.
Compreensão básica da sintaxe YAML para definir recursos do Kubernetes.
Um provedor de volume persistente instalado em seu cluster Kubernetes, como AWS Elastic Block Store (EBS), Google Cloud Persistent Disk (PD) ou Azure Disk.
Opcionalmente, uma regra de firewall configurada para permitir tráfego externo para o Serviço se você planeja acessar o servidor MySQL de fora do cluster Kubernetes.
Etapa 1: configurando o Kubernetes
Antes de podermos implantar o MySQL no Kubernetes, precisamos configurar um cluster Kubernetes. Isso pode ser feito usando um serviço Kubernetes gerenciado como Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS) ou Microsoft Azure Kubernetes Service (AKS). Alternativamente, você pode configurar seu próprio cluster Kubernetes usando uma ferramenta como kubeadm ou kops.
Depois de ter um cluster Kubernetes instalado e funcionando, você precisará instalar a ferramenta de linha de comando kubectl, que é usada para interagir com o servidor API Kubernetes.
Etapa 2: Criando uma implantação MySQL
Para implantar o MySQL no Kubernetes, usaremos um objeto Deployment, que é uma abstração de nível superior que gerencia um conjunto de réplicas de um pod. O pod contém o contêiner MySQL junto com qualquer configuração necessária.
Aqui está um exemplo de arquivo YAML para criar uma implantação MySQL -
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-deployment
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:8.0.23
env:
- name: MYSQL_ROOT_PASSWORD
value: yourpassword
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvc
Este arquivo YAML descreve uma implantação MySQL chamada "mysql-deployment" com uma única réplica. O contêiner MySQL usa a imagem oficial do MySQL Docker com versão 8.0.23. Ele também especifica uma variável de ambiente MYSQL_ROOT_PASSWORD, que define a senha root para o servidor MySQL. O contêiner escuta na porta 3306, que é a porta padrão do MySQL.
A implantação também especifica um volumeMount chamado "mysql-persistent-storage", que monta o volume persistente no diretório /var/lib/mysql do contêiner. O volume é definido na seção volumes, que faz referência a um PersistentVolumeClaim chamado "mysql-pvc".
Etapa 3: Criando um PersistentVolumeClaim
Por padrão, o pod MySQL não possui armazenamento persistente, o que significa que quaisquer dados armazenados no pod serão perdidos se o pod for excluído ou recriado. Para adicionar armazenamento persistente ao pod MySQL, precisamos criar um PersistentVolumeClaim (PVC) e anexá-lo ao pod.
Aqui está um exemplo de arquivo YAML para criar um PVC -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
Este arquivo YAML descreve um PVC denominado "mysql-pvc" que solicita 1 GB de armazenamento com modo de acesso ReadWriteOnce. Isso significa que o volume pode ser montado como leitura/gravação por um único nó no cluster.
Etapa 4: Expondo o MySQL com um serviço
Para acessar o servidor MySQL de fora do cluster Kubernetes, precisamos criar um objeto Service. O serviço expõe a implantação do MySQL criando um endereço IP estável e uma porta que pode ser usada para conectar-se ao servidor MySQL.
Aqui está um exemplo de arquivo YAML para criar um objeto de serviço para MySQL -
apiVersion: v1
kind: Service
metadata:
name: mysql-service
spec:
type: ClusterIP
selector:
app: mysql
ports:
- name: mysql
port: 3306
targetPort: 3306
Este arquivo YAML descreve um serviço chamado "mysql-service" que expõe a porta 3306 para MySQL. Ele usa um tipo ClusterIP, que fornece um endereço IP estável para o serviço dentro do cluster Kubernetes.
Depois de criar o serviço, você pode usar seu endereço IP e porta para conectar-se ao servidor MySQL de fora do cluster. Se você estiver executando o Kubernetes em uma plataforma de nuvem, talvez seja necessário criar uma regra de firewall para permitir tráfego externo para o Serviço.
Etapa 5: Testando a implantação do MySQL
Agora que implantamos o MySQL e o expusemos com um serviço, podemos testar a implantação para garantir que esteja funcionando corretamente. Podemos fazer isso conectando-nos ao servidor MySQL e criando um banco de dados de teste.
Para se conectar ao servidor MySQL, você pode usar o seguinte comando -
$ kubectl run -it --rm --image=mysql:5.7 --restart=Never mysql-client -- mysql -h mysql-service -p
Este comando cria um novo pod executando o cliente MySQL e o conecta ao servidor MySQL usando o endereço IP do serviço. Será solicitada a senha root do MySQL, que você pode encontrar no segredo que criamos anteriormente.
Depois de se conectar ao servidor MySQL, você pode criar um banco de dados e uma tabela de teste -
mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE messages (message VARCHAR(255));
Isto criará um novo banco de dados denominado "teste" e uma tabela denominada "mensagens" com uma única coluna denominada "mensagem".
Para verificar se a tabela foi criada, você pode executar o seguinte comando -
mysql> SHOW TABLES;
Isto irá mostrar uma lista de tabelas no banco de dados atual, que deve incluir a tabela "mensagens".
Etapa 6: Limpeza
Depois de terminar de testar a implantação do MySQL, você pode excluir a implantação, o serviço e o PVC executando os seguintes comandos -
$ kubectl delete deployment mysql
$ kubectl delete service mysql-service
$ kubectl delete pvc mysql-pvc
Isso excluirá todos os recursos associados à implantação do MySQL.
Conclusão
Implantar MySQL no Kubernetes pode ser uma tarefa complexa, mas com as ferramentas e o conhecimento certos, pode ser um processo simples. Seguindo as etapas descritas neste guia, você pode criar uma implantação MySQL confiável e escalonável no Kubernetes que possa atender às demandas de seus aplicativos.
Lembre-se de sempre testar minuciosamente sua implantação e monitorá-la quanto ao desempenho e à disponibilidade. Com o Kubernetes, você tem o poder de criar uma infraestrutura altamente disponível e escalável que pode se adaptar às necessidades dinâmicas de seus aplicativos.