Mudanças entre as edições de "Laboratório de Baixo Custo com Contêineres"
Linha 152: | Linha 152: | ||
Abaixo, um exemplo de configuração de rede: | Abaixo, um exemplo de configuração de rede: | ||
− | <syntaxhighlight lang= | + | <syntaxhighlight lang=bash> |
rancher: | rancher: |
Edição das 10h44min de 14 de dezembro de 2017
Estrutura
- Máquina física (Dell Optiplex 755):
- Memória RAM: 8 GB;
- CPU: Intel Dual Core, 2,66 GHz, 2 núcleos;
- Armazenamento: Disco rígido Samsung de 7200 RPM com capacidade para 250 GB;
- Sistema Operacional de gerência (instalado em baremetal): RancherOS v1.1.1;
- Versão da distribuição: v1.1.1;
- Nome da distribuição: RancherOS;
- Versão do kernel Linux: 4.9.67-rancher
- Contêineres Docker virtualizando as seguintes aplicações:
- Interface web de gerência Rancher Server
- Interface web de gerência para o Docker
- Contêiner baseado em Debian Stretch que provê uma interface de área de trabalho completa a fim de promover a criação de um laboratório de informática de baixo custo com o auxílio de contêineres.
- Contêineres relacionados ao Rancher Server;
- Contêineres do System-Docker executando os seguintes serviços:
- Console Debian do RancherOS;
- 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;
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 validade 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 é 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 como o nome de 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 LILO 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 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
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
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 ou o Kubernetes para o caso de estrutura em cluster, permite a replicação dos ambientes de trabalho para dispositivo.
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.
Script para o Cliente
Atenção: O script abaixo está sujeito à mudanças.
Copie e cole o script abaixo em um arquivo. Devem ser providas 6 informações. A sintaxe de uso é:
./script-cliente "nomedeusuario" "Nome Completo" "senhatemporária" "curso" "ip_do_servidor" "porta_do_contêiner"
Por exemplo:
./script-cliente "jose.mf" "José Marfino Ferreira" "minhasenhatemporaria" "Engenharia de Telecomunicações" "191.36.9.253" "700"
#!/bin/bash
nomedeusuario=$1
nomecompleto=$2
senha=$3
curso=$4
servidor=$5
porta=$6
# Cria o usuário no arquivo passwd
echo "Criando usuario $nomedeusuario para o aluno $nomecompleto"
useradd -m -d /home/$nomedeusuario -s /bin/bash -c "$nomecompleto,$curso" $nomedeusuario
# Define a senha temporária
echo "Usando a matricula $matricula como senha do usuario $nomedeusuario."
echo "$nomedeusuario:$senha" |chpasswd
echo "Conta $nomedeusuario do usuario $nomecompleto criada"
# Cria o arquivo .xinitrc com o seguinte conteúdo:
echo "Criando arquvo .xinitrc..."
echo 'exec x2goclient --hide --sessionid=20170929183410524' > /home/$nomedeusuario/.xinitrc
# Muda a permissão do arquivo .xinitrc
echo "Mudando permissão do arquivo .xinitrc..."
chown root:root /home/$nomedeusuario/.xinitrc
chmod 444 /home/$nomedeusuario/.xinitrc
# Faz o ponto de montagem do diretório /media/nomedeusuario
# Adiciona o comando startx no arquivo .profile para que o comando que invoca
# o X2Go seja executado assim que o usuário fizer login
echo "Adicionando o comando startx ao arquivo .profile..."
echo "startx" >> /home/$nomedeusuario/.profile
# Cria a pasta .x2goclient
mkdir /home/$nomedeusuario/.x2goclient
# Cria pasta .ssh
mkdir /home/$nomedeusuario/.ssh
# Copia um arquivo modelo de sessão do X2Go para .x2goclient
cp -r /opt/sessions /home/$nomedeusuario/.x2goclient/
# Adiciona as informações faltantes ao arquivo sessions
echo "Adicionando o servidor..."
echo "host=$servidor" >> /home/$nomedeusuario/.x2goclient/sessions
echo "Adicionando usuário..."
echo "key=/home/$nomedeusuario/.ssh/$nomedeusuario" >> /home/$nomedeusuario/.x2goclient/sessions
echo "Adicionando a porta SSH..."
echo "sshport=$porta" >> /home/$nomedeusuario/.x2goclient/sessions
# Gera as chaves públicas e privadas
echo "Gerando chaves SSH..."
ssh-keygen -t rsa -N "" -f /home/$nomedeusuario/.ssh/$nomedeusuario
echo "Chaves SSH geradas! Agora copie o conteúdo de $nomedeusuario.pub, EXPOSTO ABAIXO, para a pasta .ssh dentro do contêiner do usuário, com o nome de authorized_keys!!!"
chave=$(cat /home/$nomedeusuario/.ssh/$nomedeusuario.pub)
echo ""
echo "$chave"
echo ""
Rpositório no Docker Hub
Aqui encontra-se o repositório com a imagem para a criação do contêiner.