Não perca as novas postagens! Inscrever-se! Além disso, visite os Fóruns VHT!
![Shift Robotics lança sapatos robóticos Moonwalkers X](https://optimuscloud.com.br/wp-content/uploads/2024/01/Shift-Robotics-lanca-sapatos-roboticos-Moonwalkers-X.jpg)
Shift Robotics lança sapatos robóticos Moonwalkers X
18 de janeiro de 2024![UBS projeta taxa composta de crescimento anual de 61% para a demanda de IA entre 2022 e 2027](https://optimuscloud.com.br/wp-content/uploads/2024/01/UBS-projeta-taxa-composta-de-crescimento-anual-de-61-para.png)
UBS projeta taxa composta de crescimento anual de 61% para a demanda de IA entre 2022 e 2027
18 de janeiro de 2024O gerenciamento de volume persistente do Kubernetes é a base da orquestração moderna de contêineres. A utilização de armazenamento persistente pode levar a aplicativos mais resilientes e escaláveis. Este guia analisa um experimento usando Microk8s, Ceph e Rook para criar uma solução de armazenamento robusta para seu cluster Kubernetes.
O que é um volume persistente do Kubernetes?
Os volumes persistentes (PVs) do Kubernetes são um ativo de armazenamento crítico na arquitetura de volume do Kubernetes, fornecendo uma maneira de gerenciar recursos de armazenamento dentro do cluster. Esta seção explora os principais conceitos, componentes e vantagens dos volumes persistentes do Kubernetes.
Compreendendo os volumes persistentes
Os volumes persistentes são projetados para fornecer capacidade de armazenamento que sobrevive à vida útil de contêineres individuais. Ao contrário dos volumes normais, estes ativos de armazenamento não são eliminados quando um pod é encerrado, garantindo que o armazenamento de dados permanece intacto.
Componentes de volumes persistentes do Kubernetes
Um volume persistente do Kubernetes consiste em vários elementos:
Classe de armazenamento
Define o tipo e a natureza do armazenamento fornecido, incluindo o provedor de armazenamento subjacente, o método de provisionamento (estático ou dinâmico) e outros parâmetros, como modos de acesso.
Reivindicação de volume persistente (PVC)
Uma solicitação de armazenamento feita por um usuário especificando o tamanho de armazenamento solicitado e o modo de acesso.
Modos de acesso
Define como o volume de armazenamento pode ser acessado. Os modos de acesso comuns incluem ReadWriteOnce, onde um único nó pode montar o volume como leitura-gravação.
Modos de volume
Estas são configurações específicas que descrevem a natureza do armazenamento, como volume de blocos brutos ou sistema de arquivos.
Ciclo de vida de volume persistente
Compreender o ciclo de vida de um volume persistente do Kubernetes ajuda a gerenciar o uso do armazenamento de maneira eficaz. Os principais estágios incluem:
-
Criando um volume persistente: A tarefa PV começa com a criação de um objeto PV, definindo o armazenamento subjacente, a capacidade e outros parâmetros, como classe de armazenamento e modos de acesso.
-
Ligação PV e PVC: O plano de controle do Kubernetes combina objetos PVC com um PV apropriado, criando um relacionamento de volume vinculado entre o PV e o PVC.
-
Usando e acessando armazenamento persistente: Uma vez vinculado, o armazenamento pode ser usado por pods. Se necessário, a expansão do volume pode ser feita.
-
Recuperando e Excluindo: Depois que o PVC for excluído, dependendo da política de recuperação, o PV poderá ser retido ou excluído. É importante observar que os dados do reclamante anterior permanecem intactos, a menos que sejam explicitamente excluídos.
Integração com infraestrutura externa
Os volumes persistentes do Kubernetes podem ser vinculados a vários sistemas de armazenamento, incluindo armazenamento em nuvem, armazenamento conectado à rede e ofertas específicas como Azure Disk ou armazenamento em bloco OpenStack. Essa flexibilidade permite que os administradores escolham a melhor solução para suas necessidades.
Alta disponibilidade e desempenho
Com a configuração correta, os volumes persistentes no Kubernetes podem fornecer alta disponibilidade e desempenho. Ao utilizar recursos como volumes provisionados dinamicamente e classes de armazenamento, os administradores de cluster podem personalizar os recursos de armazenamento para atender a necessidades específicas.
Lidando com vários pods e nós
O armazenamento persistente permite configurar o armazenamento para vários nós e pods, com a capacidade de apresentar um volume de armazenamento, modos de volume, PV e declarações de volume persistente em seu cluster.
Experiência de armazenamento no laboratório doméstico
Recentemente, tenho experimentado muitas arquiteturas e tecnologias de armazenamento diferentes no laboratório doméstico. Usando Microk8s, eu queria experimentar o armazenamento Rook e Ceph para volumes persistentes do Kubernetes para cargas de trabalho.
Implantando Microk8s
Microk8s é uma implantação Kubernetes leve e de nó único, adequada para desenvolvedores e ambientes de pequena escala. Vamos ver como podemos implantar facilmente um ambiente de cluster Microk8s.
Abaixo estamos instalando o Microk8s com o seguinte comando. Observe que, na captura de tela, estou usando o release candidate 1.28, pois o 128 ainda não foi lançado quando escrevi o blog. De acordo com a documentação da Canonica, o microceph precisa de 1,28.
snap install microk8s --channel=1.28/stable --classic
##Get the status of the cluster
microk8s status --wait-ready
![Iniciando a instalação do Microk8s](https://optimuscloud.com.br/wp-content/uploads/2024/01/Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
A seguir, adicionaremos nossos nós adicionais ao microk8s. Para fazer isso, use o comando:
microk8s add-node
![Criando o token de junção para adicionar nós ao cluster](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612976_437_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
![Criando o token de junção para adicionar nós ao cluster](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612976_437_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
Agora, precisamos instalar o Microk8s nos nós adicionais, usando o mesmo comando:
snap install microk8s --channel=1.28/stable --classic
![Instale Microk8s em seus nós adicionais](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612976_603_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
![Instale Microk8s em seus nós adicionais](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612976_603_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
Agora, pegamos o token de junção gerado no nó mestre e o usamos para unir os nós adicionais.
microk8s join <your master node and token string>
![Unindo os nós adicionais ao cluster](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_666_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
![Unindo os nós adicionais ao cluster](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_666_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
Depois de instalar e ingressar nos nós adicionais, estou verificando os nós no cluster:
microk8s kubectl get nodes
![Depois de juntar dois nós adicionais ao cluster Microk8s](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_75_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
![Depois de juntar dois nós adicionais ao cluster Microk8s](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_75_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
Integrando Ceph e Rook
Juntos, Ceph e Rook fornecem alta disponibilidade e escalabilidade para volumes persistentes do Kubernetes. Entenda como esses dois interagem e facilitam o uso do armazenamento.
Sistema de armazenamento Ceph
Ceph é uma plataforma de armazenamento de código aberto que oferece armazenamento conectado à rede e oferece suporte ao provisionamento dinâmico.
Não é apenas para Kubernetes. Você também pode usá-lo para armazenamento HCI no Proxmox. Confira meu vídeo aqui:
Você pode instalar uma variante chamada microceph para uso com Microk8s. Para fazer isso, execute o seguinte em todos os nós do Microk8s:
sudo snap install microceph --channel=latest/edge
![Instalando o armazenamento Microceph no nó Ubuntu Microk8s](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_548_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
![Instalando o armazenamento Microceph no nó Ubuntu Microk8s](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_548_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
A seguir, executamos o comando microceph bootstrap (esqueça também o “sudo” no comando com root, é hábito):
microceph cluster bootstrap
![Inicializando o cluster microceph](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_336_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
![Inicializando o cluster microceph](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_336_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
Para gerar o token de junção, use o comando:
microceph cluster add <your node name>
microceph cluster add <your other node name>
Depois de obter o token de junção, você executará o comando em cada nó adicional para unir os nós ao cluster do Ceph:
microceph cluster join <join token>
![Unindo um nó adicional ao cluster microceph](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_743_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
![Unindo um nó adicional ao cluster microceph](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_743_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
Em cada um dos meus hosts de cluster Microk8s (máquinas virtuais Ubuntu 22.04), adicionei um disco adicional de 20 GB a cada VM. Você pode verificar seus discos usando o seguinte:
lsblk
![Adicione um disco físico adicional aos nós do cluster microceph](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_36_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
![Adicione um disco físico adicional aos nós do cluster microceph](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_36_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
Adicione os discos como OSDs usando o comando:
microceph disk add /dev/sdb --wipe
Agora, devemos ser capazes de executar o comando ceph status e ver o status do cluster ceph. Observe que vemos que a saúde está OK após adicionar os OSDs.
ceph status
![Visualizando o status do ceph](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_515_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
![Visualizando o status do ceph](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_515_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
Rook: orquestrando armazenamento
Rook é um loop de controle dentro do Kubernetes para gerenciar recursos de armazenamento como o Ceph. Ele permite que o plano de controle do Kubernetes lide com classes de armazenamento e volumes provisionados dinamicamente.
Vamos habilitar a torre no Microk8s. Você pode fazer isso com o comando:
microk8s enable rook-ceph
##After you enable rook-ceph, connect to your ceph storage using the command:
microk8s connect-external-ceph
![Habilite rook ceph nos nós Microk8s Kubernetes](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_16_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
![Habilite rook ceph nos nós Microk8s Kubernetes](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_16_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
Criando um pod configurado com armazenamento persistente
Agora que configuramos nosso armazenamento e temos o ceph-rbd classe de armazenamento disponível, vamos criar um novo pod que pode usar o armazenamento persistente.
# pod-with-pvc.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nginx-pvc
spec:
storageClassName: ceph-rbd
accessModes: (ReadWriteOnce)
resources: { requests: { storage: 5Gi } }
---
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
volumes:
- name: pvc
persistentVolumeClaim:
claimName: pod-pvc
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: pvc
mountPath: /usr/share/nginx/html
Em seguida, você aplica o arquivo acima usando este comando:
microk8s kubectl create -f pod-with-pvc.yaml
Então podemos visualizar a declaração de volume persistente usando o comando:
microk8s kubectl get pvc -A
Nós vemos o vinculado status para a declaração de volume persistente do pod Nginx.
![Depois de criar um novo pod conectado a um PVC no armazenamento ceph rbd](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_472_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
![Depois de criar um novo pod conectado a um PVC no armazenamento ceph rbd](https://optimuscloud.com.br/wp-content/uploads/2024/01/1705612977_472_Configuracao-de-volume-persistente-do-Kubernetes-com-Microk8s-Rook-e.png)
Perguntas frequentes
Como a integração de Microk8s, Ceph e Rook melhora o armazenamento persistente em um cluster Kubernetes?
A integração leva a um gerenciamento de armazenamento mais eficiente e flexível, permitindo volumes provisionados de forma estática e dinâmica.
Posso expandir um volume vinculado em um cluster Kubernetes?
Sim, a expansão do volume pode ser gerenciada por meio do plano de controle do Kubernetes.
Quais são as práticas recomendadas para gerenciar ativos de armazenamento no Kubernetes?
Siga as diretrizes dos administradores do seu cluster e conte com plug-ins robustos de volume de armazenamento, considerando os requisitos de armazenamento subjacentes e as necessidades de alta disponibilidade.
Qual é a diferença entre volumes provisionados estaticamente e volumes provisionados dinamicamente no Kubernetes?
Os volumes provisionados estaticamente são pré-criados pelos administradores de cluster e ficam disponíveis para uso, enquanto os volumes provisionados dinamicamente são criados dinamicamente conforme necessário. O provisionamento dinâmico permite uma abordagem mais flexível, alocando volumes de armazenamento com base em solicitações específicas de objetos PVC. Isso pode ser alcançado por meio de determinadas classes de armazenamento que suportam essa funcionalidade.
Como as solicitações de recursos ReadWriteOnce diferem de outros modos de acesso em declarações de volume persistente?
As solicitações de recursos ReadWriteOnce especificam que um único nó pode montar o volume como leitura-gravação. Outros modos de acesso, como ReadWriteMany, permitem que o volume seja montado por vários nós. A escolha dos modos de acesso dependerá do fornecedor de armazenamento subjacente e dos requisitos da aplicação. A correspondência adequada dos modos de acesso às necessidades da sua carga de trabalho pode aumentar a eficiência e o desempenho.
Os dados do reclamante anterior podem permanecer após a liberação de um PV vinculado e como isso é gerenciado?
Sim, os dados do reclamante anterior permanecem dependendo da política de recuperação definida para o volume persistente. Se a política for definida como “Reter”, os dados permanecerão intactos e um administrador de cluster poderá recuperar manualmente o volume. Se definido como “Excluir”, os dados e o volume serão removidos automaticamente quando o PVC for excluído.
Existe alguma diferença entre os modos de vinculação de volume e qual é a importância de escolher o modo certo?
Os modos de ligação de volume determinam quando um PV deve ser vinculado a um PVC. A vinculação imediata ocorre quando um PVC é criado, enquanto a vinculação atrasada (ou WaitForFirstConsumer) garante que o PV seja vinculado apenas quando um pod de PVC for agendado. Selecionar o modo de vinculação de volume correto é vital para o uso ideal do armazenamento. Ele pode evitar problemas relacionados a pods não programáveis devido à indisponibilidade de armazenamento adequado na zona necessária.
Empacotando
Este guia sobre experimentos de volume persistente do Kubernetes com Microk8s, Ceph e Rook oferece uma visão abrangente do armazenamento no Kubernetes. Seu objetivo é ajudar os usuários a criar, gerenciar e compreender classes de armazenamento, volumes persistentes, declarações de volumes persistentes e outros conceitos relacionados. Ao aproveitar este guia, é possível desenvolver um sistema de gerenciamento de volumes Kubernetes mais eficiente e resiliente.