Mudanças entre as edições de "Laboratório de Baixo Custo com Contêineres"
(77 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
− | = | + | =Objetivo= |
− | *'''Máquina física ( | + | |
− | **'''Memória RAM:''' | + | 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.<br /> |
− | **'''CPU:''' Intel | + | Este projeto visa eliminar algumas limitações do [https://wiki.sj.ifsc.edu.br/index.php/Uso_de_thin_clients_e_LTSP_como_solu%C3%A7%C3%A3o_para_economia_de_recursos_e_reutiliza%C3%A7%C3%A3o_de_hardwares_obsoletos 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. <br /> |
− | **'''Armazenamento:''' Disco rígido Samsung de 7200 RPM com capacidade para | + | Este projeto é um segmento do projeto [https://wiki.sj.ifsc.edu.br/index.php/Nuvem_Computacional_para_a_%C3%81rea_de_Telecomunica%C3%A7%C3%B5es 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 [http://rancher.com/rancher-os/ 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. |
− | *'''Sistema Operacional de gerência (instalado em baremetal):''' RancherOS v1.1 | + | |
− | **'''Versão da distribuição:''' v1.1 | + | =Servidores= |
+ | [[File:IMG 20190215 111651038.jpg|200px|thumb|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; | **'''Nome da distribuição:''' RancherOS; | ||
+ | **'''Versão do kernel Linux:''' 4.14.85-rancher | ||
*Contêineres Docker virtualizando as seguintes aplicações: | *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 baseado em Debian Stretch que provê | + | **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: | *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 20: | Linha 47: | ||
**Contêiner contendo o Docker a nível de usuário; | **Contêiner contendo o Docker a nível de usuário; | ||
− | = | + | = Preparação do servidor= |
+ | == O RancherOS == | ||
+ | [[File:RancherOS.png|500px|thumb|Logomarca do RancherOS]] | ||
+ | Para a execução deste projeto, foi escolhido como sistema operacional de gerência o [http://rancher.com/rancher-os/ 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. <br /> | ||
+ | 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. <br /> | ||
+ | Digitando ''system-docker ps'' no console é dada uma saída semelhante à abaixo: | ||
+ | |||
+ | <syntaxhighlight lang=bash> | ||
+ | |||
+ | 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 | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | 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. <br /> | ||
+ | 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 [https://releases.rancher.com/os/latest/rancheros.iso 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'': | ||
+ | |||
+ | <syntaxhighlight lang=bash> | ||
+ | |||
+ | dd if=rancheros.iso of=/dev/sdX | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | 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''. <br /> | ||
+ | Após o boot, chegar-se-á uma tela semelhante à imagem abaixo: | ||
+ | |||
+ | [[File:Rancheros1-1.png|600px]] | ||
+ | |||
+ | 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: | ||
+ | |||
+ | [[File:Rancheros2.png|600px]] | ||
+ | |||
+ | O sistema completará o ''boot'' em uma tela semelhante à imagem abaixo: | ||
+ | |||
+ | [[File:Rancheros3-1.png|600px]] | ||
+ | |||
+ | 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. <br /> | ||
+ | Digite ''sudo su'' para virar ''root'': | ||
+ | |||
+ | [[File:Rancheros4-1.png|600px]] | ||
+ | |||
+ | No caso de se desejar instalar o sistema no armazenamento local, basta utilizar o seguinte comando: | ||
+ | |||
+ | <syntaxhighlight lang=bash> | ||
+ | |||
+ | ros install -d /dev/sdX | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | Para localizar a identificação do dispositivo, basta utilizar o comando ''fdisk -l'', como mostrado na imagem abaixo: | ||
+ | |||
+ | [[File:Rancheros5-1.png|600px]] | ||
+ | |||
+ | [[File:Rancheros6.png|600px]] | ||
+ | |||
+ | No caso da imagem acima, o dispositivo é ''/dev/sda''. Digite ''ros install -d /dev/sda'': | ||
+ | |||
+ | [[File:Rancheros7.png|600px]] | ||
+ | |||
+ | O instalador perguntará se o usuário deseja prosseguir com a instalação: | ||
+ | |||
+ | [[File:Rancheros8.png|600px]] | ||
+ | |||
+ | Digite "y" para prosseguir com a instalação: | ||
+ | |||
+ | [[File:Rancheros9.png|600px]] | ||
+ | |||
+ | 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: | ||
+ | |||
+ | [[File:Rancheros10.png|600px]] | ||
+ | |||
+ | Digite "y" para continuar com o reinício da máquina: | ||
+ | |||
+ | [[File:Rancheros11.png|600px]] | ||
+ | |||
+ | Os serviços e contêineres do sistema começarão a ser parados e, por fim, o RancherOS é reiniciado: | ||
+ | |||
+ | [[File:Rancheros12.png|600px]] | ||
+ | |||
+ | Após o reinício do sistema, o menu SYSLINUX aparecerá, sendo este o mesmo presente na mídia de instalação. | ||
+ | |||
+ | [[File:Rancheros13.png|600px]] | ||
+ | |||
+ | 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: | ||
+ | |||
+ | [[File:Rancheros14.png|600px]] | ||
+ | |||
+ | Após o término da inicialização do sistema, deve aparecer uma tela semelhante à imagem abaixo: | ||
+ | |||
+ | [[File:Rancheros15.png|600px]] | ||
+ | |||
+ | 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. | ||
+ | |||
+ | [[File:Rancheros17.png|600px]] | ||
+ | |||
+ | === 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": | ||
+ | |||
+ | <syntaxhighlight lang=bash> | ||
+ | |||
+ | vi /var/lib/rancher/conf/cloud-config.yml | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===== Configuração de interface de rede ===== | ||
+ | |||
+ | Abaixo, um exemplo de configuração de rede: | ||
+ | |||
+ | <syntaxhighlight lang=bash> | ||
+ | |||
+ | rancher: | ||
+ | network: | ||
+ | interfaces: | ||
+ | eth0: | ||
+ | address: 191.36.9.253/24 | ||
+ | gateway: 191.36.9.254 | ||
+ | dhcp: false | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | 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: | ||
+ | |||
+ | <syntaxhighlight lang=bash> | ||
+ | |||
+ | rancher: | ||
+ | network: | ||
+ | interfaces: | ||
+ | eth0: | ||
+ | bridge: faixa191 | ||
+ | faixa191: | ||
+ | address: 191.36.9.253/24 | ||
+ | bridge: true | ||
+ | dhcp: false | ||
+ | gateway: 191.36.9.254 | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | ===== Configuração de servidores DNS ===== | ||
+ | |||
+ | Para a configuração dos servidores de nomes, basta adicionar um conteúdo parecido com o exemplo abaixo: | ||
+ | |||
+ | <syntaxhighlight lang=bash> | ||
+ | |||
+ | rancher | ||
+ | network: | ||
+ | dns: | ||
+ | nameservers: | ||
+ | - 8.8.8.8 | ||
+ | - 8.8.4.4 | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===== 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: | |
− | |||
− | = | + | <syntaxhighlight lang=bash> |
− | + | rancher: | |
− | + | network: | |
+ | interfaces: | ||
+ | "mac=ea:34:71:66:90:12:01": | ||
+ | dhcp: true | ||
− | < | + | </syntaxhighlight> |
− | |||
− | |||
− | + | ===== Configuração de agregações de link ===== | |
− | + | É possível configurar agregações de link. O exemplo abaixo ilustra isso: | |
− | |||
− | |||
<syntaxhighlight lang=bash> | <syntaxhighlight lang=bash> | ||
− | + | 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 | ||
− | + | </syntaxhighlight> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ==== 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: | |
− | |||
− | |||
− | + | <syntaxhighlight lang=bash> | |
− | # | + | # ros service enable kernel-extras |
− | |||
− | |||
− | + | </syntaxhighlight> | |
− | |||
− | |||
− | |||
− | + | Notar-se-á que uma imagem de contêiner será baixada. Para pô-la em execução basta executar o seguinte comando: | |
− | + | <syntaxhighlight lang=bash> | |
− | |||
− | |||
− | |||
− | # | + | # ros service up kernel-extras |
− | |||
− | + | </syntaxhighlight> | |
− | |||
− | + | 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 [http://www.syslinux.org/wiki/index.php?title=The_Syslinux_Project SYSLINUX] como gerenciador de inicilização. Optou-se por utilizar o [https://pt.wikipedia.org/wiki/GNU_GRUB 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''. <br /> | |
− | + | 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. <br /> | |
− | + | Para realizar a instalação a partir do próprio RancherOS, basta criar um contêiner usando o ''system-docker'': | |
− | + | ||
− | + | <syntaxhighlight lang=bash> | |
− | + | ||
− | + | # system-docker run -it --name boot --privileged -v /boot:/boot -v /dev:/dev debian:stretch | |
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
− | = | + | Dentro do contêiner, basta instalar o pacote ''grub-pc'' e um editor de texto (nano, vim, pico): |
+ | |||
+ | <syntaxhighlight lang=bash> | ||
+ | |||
+ | root@iddoconteiner# apt update && apt -y -q install grub-pc nano | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | =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 == | ||
+ | |||
+ | * [https://hub.docker.com/r/jpmsb/gui/ Aqui] encontra-se o repositório principal com a imagem para a criação do contêiner. A interface gráfica é o Mate. | ||
+ | * [https://hub.docker.com/r/jpmsb/gui-lxde/ Aqui] encontra-se o repositório com a imagem de interface gráfica LXDE com o tema do Raspberry Pi. | ||
+ | |||
+ | == GitHub == | ||
+ | |||
+ | * [https://github.com/jpmsb/gui Aqui] encontra-se o repositório principal com a maioria dos arquivos utilizados. A interface gráfica é o Mate. | ||
+ | * [https://github.com/jpmsb/gui-lxde 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. |
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
- 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
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:
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:
O sistema completará o boot em uma tela semelhante à imagem abaixo:
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:
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:
No caso da imagem acima, o dispositivo é /dev/sda. Digite ros install -d /dev/sda:
O instalador perguntará se o usuário deseja prosseguir com a instalação:
Digite "y" para prosseguir com a instalação:
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:
Digite "y" para continuar com o reinício da máquina:
Os serviços e contêineres do sistema começarão a ser parados e, por fim, o RancherOS é reiniciado:
Após o reinício do sistema, o menu SYSLINUX aparecerá, sendo este o mesmo presente na mídia de instalação.
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:
Após o término da inicialização do sistema, deve aparecer uma tela semelhante à imagem abaixo:
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.
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.