HomePtNotíciaComo executar o MySQL no Kubernetes com o operador Oracle

Como executar o MySQL no Kubernetes com o operador Oracle

- Advertisement -
- Advertisement -
- Advertisement -
- Advertisement -

[ad_1]

O suporte do Kubernetes para aplicativos com estado amadureceu consideravelmente nos últimos anos. Agora é viável localizar seu banco de dados em seu cluster, permitindo que você se beneficie da mesma escalabilidade que suas outras cargas de trabalho.

O MySQL é um dos mecanismos de banco de dados relacionais mais populares e agora é aprimorado por um operador oficial do Kubernetes. O projeto de código aberto liderado pela Oracle fornece uma maneira fácil de criar clusters MySQL gerenciados no Kubernetes.

Neste artigo, você aprenderá como instalar o operador e como iniciar o provisionamento de um banco de dados. O operador cria serviços automaticamente para que os aplicativos em seus outros contêineres possam se conectar ao MySQL.

O que é o operador MySQL?

O operador MySQL da Oracle é um componente executado em seu cluster para automatizar a inicialização do banco de dados. Você não precisa do operador para usar o MySQL no Kubernetes; você mesmo pode implantar a imagem de contêiner oficial usando um StatefulSet. No entanto, essa abordagem é complicada e exige que você crie e mantenha arquivos de manifesto longos para criar um ambiente confiável.

O operador fornece um conjunto de recursos personalizados que você pode usar para criar seus bancos de dados. adicionar um InnoDBCluster object para seu cluster Kubernetes solicita que o operador configure StatefulSets, armazenamento e rede para você. Ele também automatiza atualizações e backups, reduzindo bastante a carga dos administradores.

Instalação do operador MySQL

O gráfico Helm incluído é a maneira mais fácil de instalar o operador em seu cluster. Os arquivos de manifesto estão disponíveis como alternativa se você não tiver o Helm em seu ambiente.

Primeiro adicione o operador à sua lista de repositórios do Helm:

$ helm repo add mysql-operator https://mysql.github.io/mysql-operator/

Em seguida, atualize o banco de dados do repositório Helm para que ele descubra os gráficos disponíveis:

$ helm repo update

Agora use o seguinte comando para instalar o operador em um novo namespace chamado mysql-operator:

$ helm install mysql-operator mysql-operator/mysql-operator 
    --namespace mysql-operator 
    --create-namespace
NAME: mysql-operator
LAST DEPLOYED: Sat Oct 29 15:00:26 2022
NAMESPACE: mysql-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None

O processo pode demorar alguns segundos para ser concluído.

Criar um segredo de credencial de usuário root

Cada cluster de banco de dados que você cria deve ser acompanhado por um segredo do Kubernetes que contém as credenciais do usuário root do MySQL. O operador criará a conta com privilégios de root usando o nome de usuário e a senha fornecidos no segredo.

Copie o seguinte manifesto YAML e altere o valor do rootPassword campo para algo seguro. Modifique também o nome de usuário do usuário e as configurações de host, se aplicável à sua situação. Lembre-se que a conta nomeada aqui terá controle total sobre o MySQL; você deve configurar usuários separados para seus aplicativos posteriormente, usando o shell MySQL normal.

apiVersion: v1
kind: Secret
metadata:
  name: mysql-root-user
stringData:
  rootHost: "%"
  rootUser: "root"
  rootPassword: "[email protected]$$w0rd"

salvar arquivo como secret.yaml. Agora use o Kubectl para adicionar o segredo ao seu cluster:

$ kubectl apply -f secret.yaml
secret/mysql-root-user created

Criar um cluster básico

Em seguida, crie um novo arquivo YAML chamado mysql.yaml e copie o seguinte conteúdo:

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: mysql-cluster
spec:
  secretName: mysql-root-user
  instances: 3
  tlsUseSelfSigned: true
  router:
    instances: 1

Isso define um objeto usando o InnoDBCluster recurso personalizado oferecido pelo operador MySQL. A aplicação do manifesto ao seu cluster criará um novo banco de dados MySQL com a replicação configurada automaticamente. Revise e altere as seguintes propriedades no manifesto antes de continuar:

  • spec.secretName – Deve corresponder ao metadata.name do segredo que você criou antes. O segredo referenciado será lido para configurar a conta de usuário root do MySQL.
  • spec.instances – Isso define quantas réplicas do MySQL (Pods) serão executadas. Até 10 réplicas são atualmente suportadas.
  • spec.tlsUseSelfSigned – O campo está definido para true neste exemplo, para usar o certificado TLS autoassinado incluído. Opcionalmente, você pode fornecer seu próprio certificado por meio de um segredo do Kubernetes configurando o spec.tlsSecretName/spec.tlsCASecretName Campos.
  • spec.router.instances – O componente MySQL Router é responsável por direcionar o tráfego de serviço entre as réplicas MySQL disponíveis. Este campo define quantas instâncias do roteador serão executadas. Várias instâncias melhorarão o desempenho e a resiliência em situações de alto tráfego.

Use Kubectl para aplicar o manifesto e criar seu cluster de banco de dados:

$ kubectl apply -f mysql.yaml
innodbcluster.mysql.oracle.com/mysql-cluster created

O processo de inicialização do MySQL pode levar alguns minutos para ser concluído. O operador usa vários contêineres de inicialização para configurar contas de usuário e configurar o diretório de dados do MySQL. Aguarde alguns instantes antes de executar kubectl get pods para verificar o que está sendo executado:

$ kubectl get pods
NAME                                    READY   STATUS    RESTARTS   AGE
mysql-cluster-0                         2/2     Running   0          2m
mysql-cluster-1                         2/2     Running   0          2m
mysql-cluster-2                         2/2     Running   0          2m
mysql-cluster-router-6b68f9b5cb-wbqm5   1/1     Running   0          2m

As três réplicas do MySQL e a instância do roteador único estão todas no Running doença. O banco de dados agora está pronto para uso.

Conecte-se ao seu cluster

O operador MySQL cria um serviço Kubernetes que roteia o tráfego de seus pods de aplicativo para seu banco de dados. O serviço recebe um nome de host no seguinte formato:

<cluster-name>.<namespace-name>.svc.cluster.local

O nome de host correto para o cluster de exemplo mostrado acima é mysql-cluster.default.svc.cluster.local. Configure seus aplicativos para se conectarem ao MySQL neste endereço usando a porta 3306 e as credenciais do usuário que você definiu em seu segredo.

Acesse seu banco de dados externamente

Você pode acessar o MySQL de fora do cluster usando os recursos de encaminhamento de porta do Kubectl. Execute o seguinte comando para abrir uma nova sessão de encaminhamento de porta:

$ kubectl port-forward service/mysql-cluster 3306

Substituir mysql-cluster com o nome de InnoDBCluster você deseja conectar. Agora você pode usar suas ferramentas locais para interagir com seu banco de dados:

$ mysql -h127.0.0.1 -u root -p

Pressionando Ctrl + C na janela do terminal executando o kubectl port-forward O comando fechará a conexão.

Personalizando as configurações do servidor MySQL

Você pode fornecer qualquer opção de arquivo de configuração do MySQL que seu aplicativo requer definindo o spec.mycnf campo em seu InnoDBCluster manifesto do objeto:

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
spec:
  # ...
  mycnf: |
    [mysqld]
    max_connections=500
    innodb_ft_min_token_size=5

O operador usará o valor deste campo para escrever o my.cnf arquivo no sistema de arquivos do seu banco de dados Pods.

Configuração da capacidade de armazenamento

O operador cria automaticamente um volume persistente (PV) e uma solicitação de volume persistente (PVC) para armazenar seus dados de banco de dados. Por padrão, fornece 2Gi de armazenamento.

Isso pode ser alterado usando o datadirVolumeClaimTemplate campo manifest que permite substituir as propriedades do recurso PVC produzido pelo operador. Selecione os resources.requests.storage propriedade para a capacidade que você precisa.

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
spec:
  # ...
  datadirVolumeClaimTemplate:
    resources:
      requests:
        storage: 10Gi

Você deve defini-lo alto o suficiente para que haja bastante espaço para que seus dados cresçam no futuro. A operadora não oferece suporte a alterações de tamanho de volume no local, portanto, você verá um erro se tentar aumentar a capacidade no futuro. Mudar para um volume maior exigiria etapas de migração manual.

Definir a versão do MySQL

Você pode fixar em uma versão específica do MySQL com o spec.version S spec.router.version Campos. Isso evitará atualizações automáticas não intencionais. Selecione a mesma versão para seus pods MySQL e instâncias de roteador para garantir a compatibilidade.

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
spec:
  # ...
  version: 8.0.31
  router:
    instances: 1
    version: 8.0.31

Resumo

O operador MySQL da Oracle fornece um mecanismo conveniente para executar bancos de dados MySQL em um cluster Kubernetes. Você pode provisionar novos bancos de dados replicados criando InnoDBCluster objetos. Isso é muito mais simples do que criar manualmente StatefulSets e serviços que expõem contêineres MySQL regulares.

O uso do operador não impede sua capacidade de controlar o MySQL ou seu ambiente Kubernetes. Você pode personalizar seus pods fornecendo suas próprias propriedades de manifesto no spec.podSpec e use seu próprio arquivo de configuração MySQL com os passos mostrados acima. A operadora também oferece suporte de backup integrado, permitindo que você copie seu banco de dados para armazenamento externo em uma programação recorrente.

[ad_2]

- Advertisement -
- Advertisement -
Must Read
- Advertisement -
Related News
- Advertisement -