
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?
é um software escrito em Go ( 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 ), 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 () com um cluster RADOS simples;
- criação de pods para monitoramento do Ceph (с , 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 () para ele mesmo , , (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 ;
- 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 , 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.

Lugar e função dos componentes Rook no esquema geral do cluster Kubernetes
Rook oferece três tipos de armazenamento:
- (Bloquear,
StorageClass) — monta o armazenamento em uma única lareira; - (objeto,
ObjectStore) – disponível dentro e fora do cluster Kubernetes (via API S3); - (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 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.

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. 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 в Parece que este:
cd cluster/examples/kubernetes
kubectl create -f rook-operator.yaml
kubectl create -f rook-cluster.yamlAlém disso, o operador Rook está preparado , 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 (por exemplo, você pode desativar o suporte , 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: 1024Nota: 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 5mUpgrade 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 .
Novembro passado no blog Rook comparação desempenho com EBS. Seus resultados merecem atenção e, resumidamente, são os seguintes:


Perspectivas
O status atual de Rook é alfa, e o último grande lançamento até o momento é , lançado em novembro de 2017 (correção atual - – 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 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 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 (até agora numa fase muito inicial - “nível inicial” - a par и ) é 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
