Rook – um armazenamento de dados de autoatendimento para Kubernetes

Rook – um armazenamento de dados de autoatendimento para Kubernetes

No dia 29 de janeiro, o comitê técnico da CNCF (Cloud Native Computing Foundation), organização por trás do Kubernetes, Prometheus e outros produtos Open Source do mundo dos containers e nativos da nuvem, объявил sobre aceitação do projeto Torre em suas fileiras. Uma excelente oportunidade para conhecer este “orquestrador de armazenamento distribuído em Kubernetes”.

Que tipo de Torre?

Torre é um software escrito em Go (distribuído por sob a licença Apache 2.0 gratuita), projetado para fornecer aos data warehouses funções automatizadas que os tornam autogerenciamento, autoescalonamento e autocura. Para fazer isso, Rook automatiza (para armazenamentos de dados usados ​​em um ambiente Kubernetes): implantação, inicialização, configuração, provisionamento, escalonamento, atualizações, migrações, recuperação de desastres, monitoramento e gerenciamento de recursos.

O projeto está em fase alfa e é especializado em orquestrar o sistema de armazenamento distribuído Ceph em clusters Kubernetes. Os autores também anunciam planos de suporte a outros sistemas de armazenamento, mas isso não acontecerá nos próximos lançamentos.

Componentes e dispositivo técnico

O trabalho de Rook dentro do Kubernetes é baseado em um operador especial (escrevemos mais sobre operadores Kubernetes em Este artigo), que automatiza a configuração do armazenamento e implementa seu monitoramento.

Assim, Operador de torre parece ser um contêiner que contém tudo o que é necessário para implantação e posterior manutenção do repositório. As responsabilidades do operador incluem:

  • criando um DaemonSet para daemons de armazenamento Ceph (ceph-osd) com um cluster RADOS simples;
  • criação de pods para monitoramento do Ceph ceph-mon, verificando o status do cluster; para quorum, na maioria dos casos são implantadas três vias, e se alguma delas cair, uma nova sobe);
  • gestão de CRDs (Definições de recursos personalizados) para ele mesmo conjunto, conjuntos de armazenamento, armazenamentos de objetos (conjuntos de recursos e serviços para atender solicitações HTTP que executam PUT/GET em objetos - são compatíveis com S3 e Swift API)E sistemas de arquivos;
  • inicializando pods para lançar todos os serviços necessários;
  • criação de agentes Rook.

Agentes da Torre são representados por pods separados implantados em cada nó do Kubernetes. O objetivo do agente é a configuração do plugin FlexVolume, que fornece suporte para volumes de armazenamento no Kubernetes. O agente implementa a operação do armazenamento: conecta dispositivos de armazenamento em rede, monta volumes, formata o sistema de arquivos, etc.

Rook – um armazenamento de dados de autoatendimento para Kubernetes
Lugar e função dos componentes Rook no esquema geral do cluster Kubernetes

Rook oferece três tipos de armazenamento:

  1. quadra (Bloquear, StorageClass) — monta o armazenamento em uma única lareira;
  2. objeto (objeto, ObjectStore) – disponível dentro e fora do cluster Kubernetes (via API S3);
  3. sistema de arquivos compartilhado (Sistema de arquivos compartilhados, Filesystem) é um sistema de arquivos que pode ser montado para leitura e gravação de vários pods.

Os internos da Torre incluem:

  • Mons — pods para monitoramento Ceph (com o já mencionado ceph-mon);
  • OSD — pods com daemons ceph-osd (Object Storage Daemons);
  • MGR - vagens com um demônio ceph-mgr (Ceph Manager), que fornece recursos e interfaces adicionais de monitoramento para sistemas externos (monitoramento/controle);
  • extensão RG (opcional) - pods com armazenamento de objetos;
  • MDS (opcional) - pods com sistema de arquivos compartilhado.

Rook – um armazenamento de dados de autoatendimento para Kubernetes

Todos os daemons Rook (Mons, OSDs, MGR, RGW, MDS) são compilados em um único binário (rook) rodando em um contêiner.

Para uma breve introdução ao projeto Rook, este breve resumo (12 slides) também pode ser útil. apresentação de Bassam Tabbara (CTO da Quantum Corp).

Operando a Torre

O operador Rook oferece suporte total ao Kubernetes versão 1.6 e superior (e, parcialmente, a versão mais antiga do K8s - 1.5.2)... Ele instalação в cenário mais simples Parece que este:

cd cluster/examples/kubernetes
kubectl create -f rook-operator.yaml
kubectl create -f rook-cluster.yaml

Além disso, o operador Rook está preparado gráfico de leme, graças ao qual a instalação pode ser realizada assim:

helm repo add rook-alpha https://charts.rook.io/alpha
helm install rook-alpha/rook

Pequena quantidade disponível opções de configuração (por exemplo, você pode desativar o suporte RBAC, se esse recurso não for usado em seu cluster), que são passados ​​para helm install via parâmetro --set key=value[,key=value] (ou armazene em um arquivo YAML separado e transmita via -f values.yaml).

Depois de instalar o operador Rook e lançar pods com seus agentes, resta apenas criar o próprio cluster Rook, cuja configuração mais simples se parece com esta (rook-cluster.yaml):

apiVersion: v1
kind: Namespace
metadata:
  name: rook
---
apiVersion: rook.io/v1alpha1
kind: Cluster
metadata:
  name: rook
  namespace: rook
spec:
  dataDirHostPath: /var/lib/rook
  storage:
    useAllNodes: true
    useAllDevices: false
    storeConfig:
      storeType: bluestore
      databaseSizeMB: 1024
      journalSizeMB: 1024

Nota: atenção especial deve ser dada ao atributo dataDirHostPath, cujo valor correto é necessário para salvar o cluster após reinicializações. Para os casos em que é usado como local de armazenamento permanente para dados Rook em hosts Kubernetes, os autores recomendam ter pelo menos 5 GB de espaço livre em disco neste diretório.

Tudo o que resta é realmente criar o cluster a partir da configuração e certificar-se de que os pods foram criados no cluster (no namespace rook):

kubectl create -f rook-cluster.yaml
kubectl -n rook get pod
NAME                              READY     STATUS    RESTARTS   AGE
rook-api-1511082791-7qs0m         1/1       Running   0          5m
rook-ceph-mgr0-1279756402-wc4vt   1/1       Running   0          5m
rook-ceph-mon0-jflt5              1/1       Running   0          6m
rook-ceph-mon1-wkc8p              1/1       Running   0          6m
rook-ceph-mon2-p31dj              1/1       Running   0          6m
rook-ceph-osd-0h6nb               1/1       Running   0          5m

Upgrade Cluster Rook (até uma nova versão) é um procedimento que neste estágio requer atualização sequencial de todos os seus componentes em uma determinada sequência, e você pode iniciá-lo somente depois de garantir que a instalação atual do Rook esteja completamente “saudável”. estado. Instruções detalhadas passo a passo usando o exemplo de atualização do Rook versão 0.5.0 para 0.5.1 podem ser encontradas em Documentação do projeto.

Novembro passado no blog Rook foi publicado comparação desempenho com EBS. Seus resultados merecem atenção e, resumidamente, são os seguintes:

Rook – um armazenamento de dados de autoatendimento para Kubernetes
Rook – um armazenamento de dados de autoatendimento para Kubernetes

Perspectivas

O status atual de Rook é alfa, e o último grande lançamento até o momento é Versão 0.6, lançado em novembro de 2017 (correção atual - v0.6.2 – lançado em 14 de dezembro). Já no primeiro semestre de 2018, são esperados lançamentos de versões mais maduras: beta e estável (oficialmente prontas para uso em produção).

Conforme roadmap projeto, os desenvolvedores têm uma visão detalhada para o desenvolvimento do Rook pelo menos nas próximas duas versões: 0.7 (sua prontidão está no rastreador GitHub estimado como 60%) e 0.8. Entre as mudanças esperadas estão a transferência do suporte para Ceph Block e Ceph Object para o status de versão beta, provisionamento dinâmico de volumes para CephFS, um sistema de log avançado, atualizações automatizadas de cluster, suporte para snapshots de volumes.

Levando Rook para o número Projetos CNCF (até agora numa fase muito inicial - “nível inicial” - a par vinculador и CoreDNS) é uma espécie de garantia de interesse crescente pelo produto. Como ele ganhará uma posição no mundo dos aplicativos em nuvem ficará mais claro quando as versões estáveis ​​forem lançadas, o que certamente trará novos testadores e usuários para o Rook.

PS

Leia também em nosso blog:

Fonte: habr.com

Compre hospedagem confiável para sites com proteção DDoS, servidores VPS VDS 🔥 Compre hospedagem de sites confiável com proteção contra DDoS, servidores VPS/VDS | ProHoster