Mudanças entre as edições de "Laboratório de Baixo Custo com Contêineres"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(Uma revisão intermediária pelo mesmo usuário não está sendo mostrada)
Linha 7: Linha 7:
 
=Servidores=
 
=Servidores=
 
[[File:IMG 20190215 111651038.jpg|200px|thumb|Servidor físico]]
 
[[File:IMG 20190215 111651038.jpg|200px|thumb|Servidor físico]]
*'''Local:''' Laboratório de Alunos
+
*'''Local:''' CTIC (Coordenadoria de Tecnologia da Informação e Comunicação);
 +
*'''Atende:''' Laboratório de Alunos, Monitoria de Alunos, Laboratório Interativo;
 
*'''Máquina física (HP Z220 Workstation):'''
 
*'''Máquina física (HP Z220 Workstation):'''
 
**'''Memória RAM:''' 32 GB;
 
**'''Memória RAM:''' 32 GB;
 +
**'''Área de troca:''' 0 B;
 
**'''CPU:''' Intel(R) Xeon(R) CPU E3-1225 V2 @ 3.20GHz, 4 núcleos;
 
**'''CPU:''' Intel(R) Xeon(R) CPU E3-1225 V2 @ 3.20GHz, 4 núcleos;
 
**'''Armazenamento:''' Disco rígido Samsung de 7200 RPM com capacidade para 320 GB;
 
**'''Armazenamento:''' Disco rígido Samsung de 7200 RPM com capacidade para 320 GB;
Linha 38: Linha 40:
 
**Contêiner ''labint-cli12-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 
**Contêiner ''labint-cli12-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 
*Contêineres do System-Docker executando os seguintes serviços:
 
*Contêineres do System-Docker executando os seguintes serviços:
**Console Debian do RancherOS;
+
**Console Debian do RancherOS → Imagem jpmsb/os-debian-extrasconsole:v1.5.1;
 
**Crontab do RancherOS;
 
**Crontab do RancherOS;
 
**Configuração de rede do RancherOS;
 
**Configuração de rede do RancherOS;
Linha 320: Linha 322:
  
 
==O sistema operacional==
 
==O sistema operacional==
Necessita de documentação!!!!!
+
O sistema operacional escolhido foi o Debian, sendo a versão atual usada a 9 (Stretch), que necessita ser atualizado para a versão mais recente, a 10 (Buster).
  
 
=Repositórios=
 
=Repositórios=

Edição atual tal como às 10h29min de 5 de agosto de 2019

Objetivo

O objetivo é prover uma estrutura que fornece um ambiente de trabalho remoto completo afim de permitir a utilização de dispositivos de baixo custo na ponta, diminuindo os custos com equipamentos, no caso, computadores, além de flexibilizar a gerência de toda a estrutura tirando vantagem do uso de contêineres. Dessa forma, tendo o Docker como gestor, permite-se a replicação dos ambientes de trabalho para cada dispositivo, além de cada cliente ter um ambiente isolado.
Este projeto visa eliminar algumas limitações do modelo anterior cuja impelementação foi o ponta pé inicial para o desenvolvimento dessa segunda versão. Uma das limitações a serem diminuídas é o uso de dispositivos USB, como SDR, FPGAs, Arduíno, Pen Drives, etc.
Este projeto é um segmento do projeto Nuvem Computacional para a Área de Telecomunicações, o qual foi utilizada a estrutura em contêineres para gestão dos ambientes acessados pelos alunos. Neste segmento de projeto, está sendo utilizando como sistema operacional de gerência o RancherOS, que é um sistema operacional extremamente leve e toda sua estrutura é feita em contêineres, o que o torna muito modular e de tamanho diminuto, pois possui apenas Docker como o gestor do sistema operacional.

Servidores

Servidor físico
  • Local: CTIC (Coordenadoria de Tecnologia da Informação e Comunicação);
  • Atende: Laboratório de Alunos, Monitoria de Alunos, Laboratório Interativo;
  • Máquina física (HP Z220 Workstation):
    • Memória RAM: 32 GB;
    • Área de troca: 0 B;
    • CPU: Intel(R) Xeon(R) CPU E3-1225 V2 @ 3.20GHz, 4 núcleos;
    • Armazenamento: Disco rígido Samsung de 7200 RPM com capacidade para 320 GB;
  • Sistema Operacional de gerência (instalado em baremetal): RancherOS v1.5.1;
    • Versão da distribuição: v1.5.1;
    • Nome da distribuição: RancherOS;
    • Versão do kernel Linux: 4.14.85-rancher
  • Contêineres Docker virtualizando as seguintes aplicações:
    • Contêiner labalu-cli0-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labalu-cli1-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labalu-cli2-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labalu-cli3-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labalu-cli4-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labalu-cli5-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 6.5 GB de memória RAM.
    • Contêiner labalu-cli6-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 6.5 GB de memória RAM.
    • Contêiner labint-cli0-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli1-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli2-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli3-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli4-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli5-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli6-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli7-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli8-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli9-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli10-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli11-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli12-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
  • Contêineres do System-Docker executando os seguintes serviços:
    • Console Debian do RancherOS → Imagem jpmsb/os-debian-extrasconsole:v1.5.1;
    • Crontab do RancherOS;
    • Configuração de rede do RancherOS;
    • Configuração de dispositivos do RancherOS;
    • Configuração de horário do RancherOS;
    • Contêiner contendo o Docker a nível de usuário;

Preparação do servidor

O RancherOS

Logomarca do RancherOS

Para a execução deste projeto, foi escolhido como sistema operacional de gerência o RancherOS, que possui foco na execução de contêineres. O sistema operacional é constituído basicamente do kernel Linux e o Docker, fazendo com que sua iso de instalação tenha cerca de 60 Mb.
O sistema conteineriza serviços do sistema, como configuração de rede, configuração de dispositivos, crontab, o console que o usuário interage, módulos extras para o kernel Linux, até mesmo o próprio sistema operacional que final em execução. Há apenas uma base bem mínima para o Docker funcionar. Há dois serviços do Docker em execução: um chamado de system-docker e o outro o Docker que usuário executa suas aplicações de forma tradicional.
Digitando system-docker ps no console é dada uma saída semelhante à abaixo:

root@JPMSB:~# system-docker ps
CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS                         PORTS               NAMES
100081d26178        rancher/os-base:v1.1.1                "/usr/bin/ros entrypo"   21 minutes ago      Up 9 minutes                                       ntp
a770926deb8c        rancher/os-base:v1.1.1                "/usr/bin/ros entrypo"   21 minutes ago      Up 9 minutes                                       network
556d5ccd846e        rancher/os-base:v1.1.1                "/usr/bin/ros entrypo"   21 minutes ago      Up 9 minutes                                       udev
d1d76fe3a1d0        rancher/os-acpid:v1.1.1               "/usr/bin/ros entrypo"   21 minutes ago      Up 9 minutes                                       acpid
0f2f113fc887        rancher/os-syslog:v1.1.1              "/usr/bin/entrypoint."   21 minutes ago      Up 8 minutes                                       syslog
921b11ef5571        rancher/container-crontab:v0.1.0      "container-crontab"      11 days ago         Restarting (1) 9 minutes ago                       container-cron
7125a15e074d        rancher/os-debianconsole:v1.1.0-rc3   "/usr/bin/ros entrypo"   11 days ago         Up 9 minutes                                       console
27849052b566        rancher/os-docker:17.03.2             "ros user-docker"        11 days ago         Up 9 minutes                                       docker
ee264f634dbe        rancher/container-crontab:v0.1.0      "container-crontab"      11 days ago         Up 9 minutes                                       system-cron

Há os seguintes contêineres listados acima:

  • ntp → cuida da sincronização do relógio;
  • network → faz a configuração de rede;
  • udev → faz a gerência dos dispositivos;
  • acpid → controla os recursos de energia da máquina;
  • syslog → cuida dos logs do sistema;
  • container-cron → é o temporizador dos contêineres;
  • console → console o qual o usuário interage, tanto diretamente quanto via SSH;
  • docker → contém o Docker que é utilizado a nível de usuário;
  • system-cron → é o temporizador do sistema operacional.

O comando de gerência do sistema é o ros. Com ele, é possível configurar o sistema operacional. É o responsável por validar o arquivo cloud-config.yml, localizado em /var/lib/rancher/conf, que contém as configurações do sistema. A utilização de um único arquivo para a configuração torna o uso deste sistema operacional mais eficiente em ambientes de produção. O Container Linux também pode ser configurado desta maneira, no entanto, no RancherOS, este é o método de configuração padrão, enquanto que no CoreOS, não.
Devido à sua estrutura, é possível escolher tanto a versão do Docker, quanto a versão do sistema operacional que se deseja utilizar, sendo possíveis realizar atualizações e desatualizações.


Instalação do RancherOS

Para a instalação do RancherOS, baixe a ISO do sistema aqui. Se a instalação for em máquina virtual, basta verificar como dar o boot a partir da ISO baixada. O RancherOS possui um detector de hypervisor para melhor desempenho em máquina virtual. Se a instalação for em uma máquina física, basta gravar a ISO em um pen drive e configurar a placa-mãe para dar o boot a partir do mesmo. Para a gravação, basta utlizar o comando dd:

dd if=rancheros.iso of=/dev/sdX

Neste caso, sdX é o dispositivo alvo e X é a letra que identifica o mesmo. Para achar a identificação do dispositivo, basta utilizar o comando fdisk -l.
Após o boot, chegar-se-á uma tela semelhante à imagem abaixo:

Rancheros1-1.png

Selecione a segunda opção para, ao completar o boot, o sistema já vir com um login pronto para uso. O sistema começará a ser carregado, como mostrado na imagem abaixo:

Rancheros2.png

O sistema completará o boot em uma tela semelhante à imagem abaixo:

Rancheros3-1.png

Neste momento, o sistema está sendo executado em memória RAM, e tudo que for feito nele será perdido após o reinício da máquina. No entanto, é possível utilizar o sistema sempre a partir da ISO e ainda assim salvar os dados. Para que as alterações feitas não se percam, basta criar uma partição em um armazenamento local com o rótulo RANCHER_STATE, que salvará todas as modificações feitas no sistema. Isso pode ser interessante para salvar um pouco mais de espaço em disco e também útil em casos de atualizações.
Digite sudo su para virar root:

Rancheros4-1.png

No caso de se desejar instalar o sistema no armazenamento local, basta utilizar o seguinte comando:

ros install -d /dev/sdX

Para localizar a identificação do dispositivo, basta utilizar o comando fdisk -l, como mostrado na imagem abaixo:

Rancheros5-1.png

Rancheros6.png

No caso da imagem acima, o dispositivo é /dev/sda. Digite ros install -d /dev/sda:

Rancheros7.png

O instalador perguntará se o usuário deseja prosseguir com a instalação:

Rancheros8.png

Digite "y" para prosseguir com a instalação:

Rancheros9.png

Após cerca de 30 segundos, a instalação está concluída e o instalador perguntará se o usuário deseja continuar com o reinício da máquina:

Rancheros10.png

Digite "y" para continuar com o reinício da máquina:

Rancheros11.png

Os serviços e contêineres do sistema começarão a ser parados e, por fim, o RancherOS é reiniciado:

Rancheros12.png

Após o reinício do sistema, o menu SYSLINUX aparecerá, sendo este o mesmo presente na mídia de instalação.

Rancheros13.png

Como não há nada configurado ainda, deve-se selecionar a segunda para ter o autologin com o usuário rancher. O sistema operacional começará a ser iniciado:

Rancheros14.png

Após o término da inicialização do sistema, deve aparecer uma tela semelhante à imagem abaixo:

Rancheros15.png

Neste momento, o sistema está completamente pronto para uso. Ao usar o comando "fdisk -l", é possível verificar que o armazenamento o qual o RancherOS foi instalado foi modificado.

Rancheros17.png

Configuração

A configuração do sistema dá-se através de um arquivo do tipo "yml". Neste tipo de arquivo, os espaços são importantes e definem blocos de configurações.

Configuração da Rede

A configuração da rede é feita via arquivo "cloud-config". O arquivo localiza-se em "/var/lib/rancher/conf". Para editar o arquivo "cloud-config.yml", basta usar o "vi":

vi /var/lib/rancher/conf/cloud-config.yml
Configuração de interface de rede

Abaixo, um exemplo de configuração de rede:

rancher:
  network:
    interfaces:
      eth0:
        address: 191.36.9.253/24
        gateway: 191.36.9.254
        dhcp: false

O contéudo acima define o endereço IP "191.36.9.253" na interface "eth0". Define também o endereço IP do roteador, "191.36.9.254". O parâmetro "dhcp: false", desabilita o cliente DHCP.

Configuração de pontes

É possível também configurar pontes, por exemplo:

rancher:
  network:
    interfaces:
      eth0:
        bridge: faixa191
      faixa191:
        address: 191.36.9.253/24
        bridge: true
        dhcp: false
        gateway: 191.36.9.254


Configuração de servidores DNS

Para a configuração dos servidores de nomes, basta adicionar um conteúdo parecido com o exemplo abaixo:

rancher
  network:
    dns:
      nameservers:
      - 8.8.8.8
      - 8.8.4.4
Configuração de interface pelo endereço MAC do dispositivo

É possível configurar a interface de rede pelo endereço MAC da mesma, assim, caso haja mais de uma placa de rede, evita-se que uma eventual troca de nomes cause problemas. Abaixo um exemplo de configuração do dispositivo de rede através do endereço MAC da mesma:

rancher:
  network:
    interfaces:
      "mac=ea:34:71:66:90:12:01":
         dhcp: true
Configuração de agregações de link

É possível configurar agregações de link. O exemplo abaixo ilustra isso:

rancher:
  network:
    interfaces:
      bond0:
        addresses:
        - 191.36.9.253/24
        - 172.18.19.20/24
        gateway: 191.36.9.254
        bond_opts:
          downdelay: "200"
          lacp_rate: "1"
          miimon: "100"
          mode: "4"
          updelay: "200"
          xmit_hash_policy: layer3+4
        post_up:
        - ip route add 10.0.0.0/8 via 10.88.23.128
      mac=0c:c4:d7:b2:14:d2:
        bond: bond0
      mac=0c:c4:d7:b2:14:d3:
        bond: bond0

Habilitar módulos extras do kernel

Uma das vantagens do RancherOS é que o mesmo possui um vasto conjunto de drivers e módulos prontos para serem ativos. Todo este conjunto fica dentro de um contêiner. Para habilitar os módulos extras, basta digitar os comandos abaixo:

# ros service enable kernel-extras

Notar-se-á que uma imagem de contêiner será baixada. Para pô-la em execução basta executar o seguinte comando:

# ros service up kernel-extras

O serviço é ativo. Basta reiniciar o sistema que todos os módulos já estarão pronto para uso. É possível utilizar recursos como USBIP, por exemplo, além de outros dispositivos presentes na máquina que antes não funcionavam por causa da falta de drivers.

Instalação do GRUB 2

Por padrão, o RancherOS utiliza o SYSLINUX como gerenciador de inicilização. Optou-se por utilizar o GRUB 2 devido à sua flexibilidade e possibilidades de proteção com usuário e senha, impedindo, assim, vandalismos por parte dos usuários, bem como o acesso ao sistema através do autologin.
A instalação do GRUB 2 é feita através da aplicação grub-install, geralmente presente nos sistemas operacionais com o referido gerenciador de inicialização.
Para realizar a instalação a partir do próprio RancherOS, basta criar um contêiner usando o system-docker:

# system-docker run -it --name boot --privileged -v /boot:/boot -v /dev:/dev debian:stretch

Dentro do contêiner, basta instalar o pacote grub-pc e um editor de texto (nano, vim, pico):

root@iddoconteiner# apt update && apt -y -q install grub-pc nano

Preparação do cliente

O sistema operacional

O sistema operacional escolhido foi o Debian, sendo a versão atual usada a 9 (Stretch), que necessita ser atualizado para a versão mais recente, a 10 (Buster).

Repositórios

Docker Hub

  • Aqui encontra-se o repositório principal com a imagem para a criação do contêiner. A interface gráfica é o Mate.
  • Aqui encontra-se o repositório com a imagem de interface gráfica LXDE com o tema do Raspberry Pi.

GitHub

  • Aqui encontra-se o repositório principal com a maioria dos arquivos utilizados. A interface gráfica é o Mate.
  • Aqui encontra-se o repositório referente a imagem de interface gráfica LXDE com o tema do Raspberry Pi.

Últimas atualizações

  • 29/11/2018 → Geração e início dos testes da imagem que usa o LibreOffice do repositório "backports" do Debian. Foi instalado também o KColor Chooser que permite selecionar cores e verificar suas combinações de vermelho, verde e azul. Além disso, foi adicionada a fonte "Open Sans".
  • 27/11/2018 → Melhoramento no script "rede", adicionando "-oStrictHostKeyChecking=no" para facilitar a troca de imagens uma vez que não é mais necessário confirmar que a chave mudou.
  • 23/10/2018 → Adição de terminal remoto no TTY 6, o que pode facilitar o encerramento de processos que travem a interface gráfica.
  • 05/10/2018 → Navegação e respostas à nomes extremamente lenta.
    • A solução foi remover um dos endereços DNS, que havia sido desativado.
  • 03/10/2018 → Interrupção inesperada do sistema, todos os contêineres foram afetados.
    • Um erro na leitura do arquivo cloud-config.yml fez com o que o sistema ficasse desconfigurado.
    • RancherOS passou a armazenar os dados do Docker do usuário em /var/lib/user-docker ao invés de /var/lib/docker, resultando na perda aparente do todos os contêineres.
    • A ação tomada foi copiar o conteúdo remanescente em /var/lib/docker para /var/lib/user-docker. Em princípio foi bem sucedido, no entanto, houve problemas no permissionamento, já que cp -ra não foi usado.
    • A ação tomada foi apagar todo o conteúdo copiado para /var/lib/user-docker e recriar todas as pastas mantendo-as vazias. Após a recriação dos contêineres, o problema foi resolvido.
    • Período fora do ar: das 7:00 às 19:47.
    • Versão do RancherOS atualizada, de 1.4.0 para 1.4.1, com Docker 18.03.1-ce e System-docker 17.06-ros4.
  • Habilitação da extensão BIG-REQUESTS que resolveu o erro (imagem jpmsb/gui:2018.8.31 e jpmsb/gui-lxde:2018.8.31):
    • Gdk-Message: vlc: Fatal IO error 2 (No such file or directory) on X server :X
    • Gdk-Message: python: Fatal IO error 2 (No such file or directory) on X server :X

Melhorias Desejadas

  • Boot pela rede (via PXE) para não necessitar de um disco rígido. A execução é em modo fat client. No entanto tal mudança pode implicar na limitação de algumas implementações, como aviso de conexões de rede e outras possíveis orientações ao usuário.