Neste repositório é descrito o projeto de migração e implementação dos serviços para uma infraestrutura com contêineres “orquestrados” pelo Kubernetes. Está sendo implementado uma nuvem privada em cima do projeto cticsjeifsc/coreos.
A implementação da estrutura Kubernetes seguiu a
documentação oficial.
As configurações do kubernetes em si estão no projeto
cticsjeifsc/coreos em cada pasta no arquivo
cloud-config
para cada nó, como por exemplo
coreos0.
O coreos0
, cabe ressaltar, é o servidor API e os todos os demais são workers.
- Fluxo natural da tecnologia.
- Economia de recurso/hardware.
- Facilidade de agregar e manter novos serviços.
- Centralização de gerência, monitoramento, administração etc.
- Serviços encapsulados podem ser movidos mais facilmente local <=> nuvem privada <=> nuvem pública.
- Controle de versão + moderação + automação de testes = CI/CD.
- Alta disponibilidade, fácil, fácil.
- Auto escalonamento, fácil, fácil.
- Google usa há 15 anos em todos os seus serviços, bilhões de contêineres por semana. Se eles podem, nós também pode(re)mos.
Nesse repositório estamos colocando cada implementação desenvolvida. Estamos utilizando a seguinte estratégia de atuação:
- Migrar/instalar serviços já implementados em
docker compose
ou Kubernetes. - Migrar serviços não críticos para testar a tecnologia.
- Implementações novas importantes e críticas como fase de testes/migração.
- Implementar serviços internos para testes de estabilidade e desempenho da tecnologia.
Utilizamos uma abordagem para armazenamento de estados e dados onde esses não são salvos na mesma estrutura onde roda o Kubernetes, e sim em uma estrutura de armazenamento centralizada. Os pods montam um armazenamento NFS e utilizam. A implementação do storage pode ser encontrada em cticsjeifsc/storage.
Podemos ver um exemplo a seguir de um volume persistente (PV):
apiVersion: v1
kind: PersistentVolume
metadata:
name: netbox-postgresql-base
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
nfs:
server: storage1
path: /mnt/storage/storage/kubernetes/ifsc/sje/a/saas/srv/netbox/postgresql/base
A proposta básica é oferecer os serviços preferencialmente na modalidade SaaS com:
- Disponibilidade: uso de vários servidores físicos e/ou virtuais para manter os serviços operando sem sobressaltos.
- Segurança: uso exclusivo de transmissão criptografada, como HTTPS, WebSocket sobre TLS, SSH e outros.
- Desempenho: HTTP/2, balanceamento de carga, cache HTTP etc.
A grande maioria dos serviços aqui listados são baseados em HTTP. Para garantir que todos esses atenderão aos requisitos anteriores (independente de serem projetados para tal), existe um front-end distribuído (e escalável), o srv/nginx, de forma a padronizar o acesso.
O primeiro serviço migrado foi o netbox, que já estava rodando em container em uma VM. Pode ser encontrado em srv/netbox.
Implementamos o sharelatex. A implementação está em srv/sharelatex.
Finalizamos a implementação do Rocket.chat e utilizaremos ele em substituição do Slack, assim poderemos estar testando a estabilidade do kubernetes. O acesso é feito com o usuário do LDAP, tanto para alunos quando para Servidores. Implementação srv/rocketchat.
O Nextcloud é um serviço Open Source de armazenamento e sincronização de arquivos privados, similar ao Dropbox (proprietário). O acesso é feito com o usuário do LDAP, tanto para alunos quando para Servidores. Implementação do Nextcloud srv/nextcloud.
O Onlyoffice Document Server é uma suíte de escritório on-line composta de visualizadores e editores de textos, planilhas e apresentações, totalmente compatível com os formatos Office Open XML: .docx, .xlsx, .pptx e habilitando a edição colaborativa em tempo real. O acesso ao Onlyoffice Document Server é feito pelo Nextcloud. Implementação do OnlyofficeDocumentServer srv/onlyoffice.
WordPress é um aplicativo de sistema de gerenciamento de conteúdo para web, escrito em PHP com banco de dados MySQL, voltado principalmente para a criação de sites e blogs via web. Implementação do Wordpress srv/wordpress.
Utilizada a imagem openldap para base de usuários.
MATLAB trata-se de um software interativo de alta performance voltado para o cálculo numérico. Utilizada a imagem matlab para execução remota da aplicação via SSH.
ssh -XC [email protected] -p 2222
GNU Octave é uma linguagem de alto nível, principalmente destinada a computação numérica. Ele fornece uma conveniente interface de linha de comando para resolver problemas numericamente lineares e não-lineares. Utilizada a imagem octave para execução remota da aplicação via SSH.
ssh -XC [email protected] -p 2223
NyqLab é um software educacional que visa ajudar os alunos a aprender e praticar conceitos básicos em sistemas de comunicação analógicos e digitais. Utilizada a imagem nyqlab para execução remota da aplicação via SSH.
ssh -XC [email protected] -p 2225
Utilizada a implementação Mosquitto para MQTT Broker.
Para o serviço, que por enquanto opera apenas com protocolos MQTT v3.1 e v3.1.1, foi criada uma imagem mosquitto.