Mudanças entre as edições de "Laboratório de Baixo Custo com Contêineres"
Linha 70: | Linha 70: | ||
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 /> | 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: | Após o boot, chegar-se-á uma tela semelhante à imagem abaixo: | ||
− | [[File:Rancheros1-1.png|600px| | + | [[File:Rancheros1-1.png|600px|] |
=Objetivo= | =Objetivo= |
Edição das 08h52min 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:
[[File:Rancheros1-1.png|600px|]
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.