Nuvem privada para a Internet das Coisas



Saudações, Habr!

Nós, a equipe de arquitetos de TI da IBM, que atua na criação e marketing de soluções industriais para diversos setores. Em nosso tempo livre, pesquisamos novas tecnologias, experimentamos e experimentamos as melhores práticas.

Nos últimos anos, o tema da Internet das Coisas tem sido muito popular. Nossos clientes perguntam sobre soluções e plataformas de caixas universais que podem ser localizadas localmente em seus Data Center. Mais importante, espera-se que, com base nessas "caixas", todos os novos serviços e aplicativos sejam desenvolvidos e lançados muito rapidamente, ou melhor, instantaneamente ou "ontem".

Perguntamos a nós mesmos: "E se reunirmos algo semelhante em tecnologias abertas e públicas?"

Já falamos e mostramos muito sobre o uso de contêineres do Docker e suas ferramentas de gerenciamento baseadas no Kubernetes . No entanto, até agora não foi possível ver como todas essas tecnologias avançadas podem ser usadas em escala industrial para tarefas de negócios, especificamente na Internet das Coisas. Então, vamos preencher essa lacuna. O conceito de microsserviços, bem como abordagens modernas de desenvolvimento (DevOps), integração e implantação de aplicativos (CI / CD) será considerado uma tarefa um pouco diferente e deixada de lado para mais tarde.

Neste artigo, queremos falar sobre a preparação e instalação de um dos principais componentes - IBM Cloud Private (na verdade, a montagem industrial do Docker / Kubernetes e um pouco mais), que pode atuar como um núcleo de infraestrutura condicional ao criar uma plataforma local da Internet das Coisas. Pergunte por que ele?

Porque prometemos tecnologias abertas e públicas (versão gratuita para a comunidade e suporte da comunidade): hub.docker.com/r/ibmcom/icp-inception

Visão geral do IBM Cloud Private


O IBM Cloud Private (ICP) é uma plataforma de nuvem privada para implementação e operações locais. O ICP é um ambiente integrado que permite projetar, desenvolver, implantar e gerenciar aplicativos locais criados com a arquitetura de contêineres. A entrega do ICP inclui um orquestrador baseado em Kubernetes (K8s), uma loja de imagens local, além de um console de gerenciamento e ferramentas de monitoramento de suporte.

O que é uma nuvem privada ou privada?


Uma nuvem privada é um modelo de computação em nuvem executado exclusivamente para uma organização, geralmente em seu território e recursos. Essa nuvem pode ser gerenciada e mantida por seus próprios especialistas e funcionários terceirizados. Uma plataforma semelhante pode ser hospedada atrás do firewall da empresa e fora dele. Uma nuvem privada oferece os benefícios de uma nuvem pública, incluindo rápida implantação e escalabilidade, além de facilidade de uso, gerenciamento e flexibilidade. Ao mesmo tempo, a versão local fornece maior controle sobre o sistema, maior produtividade, custos precisamente previsíveis, maiores requisitos de segurança e recursos flexíveis de gerenciamento, dependendo das necessidades da organização. Uma nuvem privada permite que você a configure diretamente para tarefas comerciais específicas e requisitos de segurança do cliente.

Antes de prosseguir com a instalação do ICP, definiremos a terminologia:

Nó mestre
  • Monitora e controla o cluster K8s.
  • kubectl: uma ferramenta de linha de comando para gerenciar um cluster.
  • API REST: interface para interagir com nós de trabalho.
  • etcd: é um keystore persistente e acessível, usado como o armazenamento de backup do K8s para todos os dados do cluster.
  • kube-scheduler: esse componente supervisiona os contêineres (pods) recém-criados que não possuem um nó designado e seleciona um nó para executá-los.
  • Geralmente, são necessários 3 ou mais nós principais para uma operação estável e para garantir a tolerância a falhas. No nosso caso, para economizar recursos, instalaremos todos os componentes ICP necessários em um único servidor dedicado (Nó Único).

Nó de trabalho
  • A máquina de trabalho nos K8s anteriormente conhecida como Minion. Esse nó pode ser qualquer um dos hosts que recebe tarefas do nó principal e também controla o processo de iniciar contêineres. Dependendo das configurações do cluster, o nó de trabalho pode ser uma máquina virtual ou um servidor físico.
  • Os seguintes componentes podem ser executados em cada nó:
  • kubelet: é o principal serviço do nó de trabalho. Ele monitora os contêineres atribuídos ao seu nó (apirusver para uma conexão segura ou através de um arquivo de configuração local).
  • kube-proxy: exibe os serviços definidos na API do K8s em cada nó, suportando regras de rede nas conexões de host e encaminhamento.
  • docker: ambiente de lançamento e gerenciamento de contêineres.
  • supervisord: Este é um processo leve de monitoramento e sistema de controle que você pode usar para manter o kubelet e o docker em execução.
  • fluentd: este é um serviço que ajuda a garantir o registro em nível de cluster.

Contentores
  • Um aplicativo em execução em um ambiente isolado.
  • O conjunto de processos executáveis ​​e a imagem lançada do programa.

Casulos (vagens)
  • Um pod é um grupo de um ou mais contêineres do Docker, com um armazenamento / rede comum e uma especificação de como executar contêineres em um nó de trabalho.
  • Cada Pod tem seu próprio IP.
  • O pod compartilha o espaço para nome, a rede e o nome do host do PID.

Controlador de replicação
  • Fornece acessibilidade e escalabilidade.
  • Responsável por controlar o número de Pods implantados.
  • Usa um modelo que descreve o que cada Pod deve conter.

Etiquetas
  • Metadados atribuídos aos recursos do K8s, por exemplo: contêineres, serviços.
  • Pares de valores-chave anexados a objetos para identificação.
  • Esses parâmetros são críticos porque são baseados em uma solicitação de cluster para recursos com rótulos específicos.

Serviços
  • Uma coleção de contêineres expostos como um terminal.
  • Informações sobre o status do cluster K8s e das configurações de rede, que se aplicam a todos os nós em funcionamento.
  • Com a configuração correta, os pods criados pelo controlador de replicação serão registrados automaticamente como o serviço correspondente.

Informação secreta (segredos)
  • Informações confidenciais para serem lidas ou usadas por contêineres.
  • Volumes especiais da unidade de disco são montados automaticamente para que os contêineres possam ler o conteúdo.
  • Cada entrada tem seu próprio caminho.

Arquitetura


Abaixo está uma arquitetura ICP de alto nível que lista os principais componentes por nós principais, de trabalho e proxy. Vale ressaltar que, neste artigo, a ênfase principal é colocada em uma combinação de contêineres do Docker e do ambiente de gerenciamento Kubernetes. Esses componentes de código aberto são fundamentais e fundamentais para a plataforma ICP. No entanto, para trabalhar totalmente com o ICP, você também precisará do conhecimento de Helm, o gerente de gerenciamento de pacotes de software. O K8s é usado para implantar e hospedar instâncias de aplicativos incorporadas aos esquemas do Helm, que, por sua vez, se referem às imagens do Docker. Os esquemas de capacete contêm informações sobre os detalhes do seu aplicativo e as imagens do Docker contêm todos os pacotes de software necessários para executar o aplicativo.



Para uma introdução detalhada à arquitetura e aos componentes da plataforma ICP, você pode usar o link da documentação no IBM Knowledge Center .

Preparação


Para concluir confortavelmente a instalação do ICP em 20 a 30 minutos, são necessários os seguintes recursos mínimos de hardware e acesso à Internet:
• Um host (físico ou virtual)
• CPU = 8 núcleos (ou núcleos virtuais)
• RAM = 10 GB (de fato, podem ser necessários até 14 GB)
• Disco = 40 GB (no SSD como sempre mais rápido)
Nota: se você tiver um pouco mais de tempo livre e um pouco menos de recursos de hardware, em algum momento de 40 a 60 minutos poderá instalar o ICP em 1 núcleo virtual i5 e 10 GB de RAM.

Instalação


Faça o download do Ubuntu


Faça o download da versão de distribuição do Ubuntu Server 16.04.05 . Execute uma instalação padrão do sistema operacional em uma máquina virtual ou física com as características acima.

Obtendo o endereço IP


Depois de concluir o processo de instalação do SO, na linha de comandos, descubra o endereço IP da sua máquina virtual usando o seguinte comando:

ifconfig 

Você precisa escrever / lembrar o endereço IP Ethernet (inet addr), bem como Bcast e Mask. Estes parâmetros serão exibidos após a execução do comando correspondente:

Figura 1. Um exemplo do comando ifconfig

Conexão SSH


Se você usou a função “Instalação Fácil” ao configurar a máquina virtual, após a instalação completa do Ubuntu Server, você precisará instalar o servidor OpenSSH. Você pode fazer isso com os seguintes comandos:

 apt install openssh-server sudo systemctl enable sshd 

Após executar os comandos apropriados, você poderá se conectar à máquina virtual usando SSH. Dependendo do sistema operacional, você pode usar diferentes métodos de conexão. No Windows, você pode usar a popular ferramenta PuTTY ; no MacOS, o comando ssh no terminal.


Figura 2. Exemplo de conexão via PuTTY para Windows

O próximo passo é definir uma senha para o super usuário (root):

 sudo -i passwd 


Figura 3. Definindo uma nova senha para o usuário root

Atualização da interface de rede


Depois de configurar a capacidade de conexão via SSH e atualizar a senha do superusuário, precisamos configurar a interface de rede para determinar os parâmetros estáticos da rede. Isso é feito com o seguinte comando:

 nano /etc/network/interfaces 

Atualizamos as configurações da interface de rede (interface de rede primária) com base nas informações obtidas durante o comando ifconfig, nosso exemplo é o seguinte:

 auto ens33 iface ens33 inet static address 192.168.175.7 netmask 255.255.255.0 network 192.168.175.0 broadcast 192.168.175.255 gateway 192.168.175.2 dns-nameservers 192.168.175.2 8.8.8.8 

Nota: É importante especificar corretamente o servidor DNS, pois o acesso à Internet é necessário para a instalação subsequente dos componentes do ICP.


Figura 4. Configurando a interface de rede

Salve o arquivo atualizado usando as seguintes etapas: Ctrl + X, Sim, Enter.

Para simplificar o logon em uma máquina virtual com privilégios de superusuário (raiz), é necessário fazer alterações na configuração do serviço SSH. Para fazer isso, execute o seguinte comando:

 nano /etc/ssh/sshd_config 

Em seguida, encontre a linha de permissão de acesso e edite-a de acordo:

 PermitRootLogin yes 


Figura 5. Atualizando a configuração SSH

Salve o arquivo como na etapa anterior: Ctrl + X, Sim, Enter.

Depois de fazer todas as alterações, para aplicar os novos parâmetros, faz sentido reiniciar completamente a máquina virtual ou os serviços correspondentes (rede e ssh), por exemplo, com os seguintes comandos:

 shutdown -r 0 

ou

 service <service_name> restart 

Após reiniciar a máquina, você deve efetuar login novamente através do SSH.

Atualização de componentes


Atualize o Ubuntu Server com o seguinte comando (o comando deve ser executado como root):

 apt update 

Nota: se ocorrer um erro durante a atualização: "O repositório 'cdrom: // Ubuntu-Server 16.04.5 LTS _Xenial Xerus_ - Release amd64 (20180731) xenial Release' não possui um arquivo de Release.". Você deve executar o seguinte comando:

 sudo nano /etc/apt/sources.list 

E comente a linha:

 deb cdrom:[Ubuntu-Server 16.04.5 LTS … 


Figura 6. Correção de um possível erro

Em seguida, salve o arquivo, conforme feito anteriormente: Ctrl + X, Sim, Enter

Depois de corrigir um possível erro, execute o comando update novamente e, como resultado, você verá algo assim:


Figura 7. Atualização do Ubuntu

Instale o IBM Cloud Private


Antes de instalar o ICP, você precisa editar o arquivo hosts:

 nano /etc/hosts 

Substitua a string 127.0.1.1 ubuntu pelo seu endereço IP e qualquer nome de host adequado.

Verifique se o nome do host e o alias na linha estão separados por uma guia ou espaço:

Figura 8. Alterando o arquivo hosts

Salve o arquivo: Ctrl + X, Sim, Enter

Os 2 comandos a seguir permitem atualizar o sistema e instalar módulos adicionais.

 apt update apt-get install apt-transport-https ca-certificates curl software-properties-common python-minimal jq 

Verifique se há erros no terminal:


Figura 9. Instalando componentes adicionais

Aumente a memória virtual máxima com o comando:

 sysctl -w vm.max_map_count=262144 

Os K8s não serão iniciados com a troca ativada. Você pode desativá-lo com o comando:

 swapoff –a 

Nota: os dois comandos anteriores funcionarão na sessão atual. Quando você reinicia, esses parâmetros serão perdidos e você precisará registrá-los novamente.

A aplicação desses parâmetros ao carregar o sistema operacional pode ser ativada pelos seguintes comandos:

 sed -i '/ swap / s/^/#/' /etc/fstab echo "vm.max_map_count=262144" >> /etc/sysctl.conf 

Adicionando uma chave GPG


Nós usamos o seguinte comando:

 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - 

Adicionando um repositório para instalar o Docker


Para concluir a instalação do repositório, você deve executar os 2 comandos a seguir:

 add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" apt-get update 

Instalar o Docker


Use o seguinte comando para instalar o Docker (o Docker versão 17.12.1 é a versão máxima suportada para o IBM Cloud Private 2.1.0.3):

 apt-get install docker-ce=17.12.1~ce-0~ubuntu 


Figura 10. Processo de instalação do Docker

Você pode verificar a funcionalidade do Docker com o seguinte comando:

 docker version 


Figura 11. Verificando o Docker

Faça o download do IBM Cloud Private


Para baixar a imagem do ICP-ce (Community Edition) do recurso dockerHub, é necessário usar o kit de ferramentas do Docker. Você pode fazer isso com o seguinte comando:

 docker pull ibmcom/icp-inception:2.1.0.3 


Figura 12. Faça o download do ICP

A IBM empacotou todos os componentes essenciais necessários para instalação em um pacote (observe que você pode alterar a versão para uma versão mais nova, se necessário). O comando pull fará o upload da imagem no sistema de arquivos local (a imagem será iniciada para instalar o ICP).

Crie um diretório e navegue até ele:

 mkdir /opt/icp cd /opt/icp 

Copie o pacote ICP para este diretório:

 docker run -e LICENSE=accept -v "$(pwd)":/data ibmcom/icp-inception:2.1.0.3 cp -r cluster /data 

Nota: este comando do Docker toolkit executa o comando Linux copy (cp) no diretório especificado (opção -v). O diretório do cluster será criado em / opt / icp com todos os arquivos necessários.

Configurar chaves SSH


Crie novas chaves ssh no diretório / opt / icp / cluster:

 ssh-keygen -b 4096 -f ~/.ssh/id_rsa -N "" cat ~/.ssh/id_rsa.pub | sudo tee -a ~/.ssh/authorized_keys systemctl restart sshd cp ~/.ssh/id_rsa ./cluster/ssh_key 

Verifique se a chave foi criada e localizada na pasta / opt / icp / cluster:

 ls /opt/icp/cluster 


Figura 13. O conteúdo da pasta cluster

Configuração ICP


Adicione o endereço IP de cada nó no cluster ao arquivo / opt / icp / cluster / hosts (no nosso caso, usamos o mesmo endereço IP para cada componente especificado em / etc / hosts). Fazemos isso com o seguinte comando:

 nano /opt/icp/cluster/hosts 


Figura 14. O conteúdo do arquivo hosts

Salve o arquivo: Ctrl + X, Sim, Enter

Informações detalhadas sobre as opções de instalação podem ser encontradas no arquivo de configuração:

 more /opt/icp/cluster/config.yaml 

Não recomendamos alterar as configurações de instalação padrão.
Nota: Os 2 arquivos de instalação mais importantes são hosts e config.yaml, que descrevem as opções de instalação do ICP. Em uma configuração de vários trabalhadores, você deve especificar uma lista de endereços IP na seção de trabalhadores. Ao instalar a versão atual do ICP no modo de nó único, os endereços IP no arquivo hosts são alterados apenas.

Instalação do ICP


Vá para o diretório do cluster e execute a instalação:

 cd /opt/icp/cluster docker run -e LICENSE=accept --net=host -t -v "$(pwd)":/installer/cluster ibmcom/icp-inception:2.1.0.3 install 

Dependendo dos recursos disponíveis, a instalação pode durar de 20 a 60 minutos. Se ocorrerem erros (mensagens vermelhas), faça as alterações apropriadas nos arquivos de configuração. Às vezes, a instalação pode ficar um pouco mais lenta devido a tentativas de se reconectar aos componentes que ainda não foram iniciados (por exemplo, ao iniciar o Cloudant ou o IAM).

A instalação deve ficar assim:

Figura 15. Resultado da instalação do ICP

Em caso de erros, a desinstalação do ICP pode ser necessária:

 docker run -e LICENSE=accept --net=host -t -v "$(pwd)":/installer/cluster ibmcom/icp-inception:2.1.0.3 uninstall 

Antes de prosseguir para a próxima etapa, aguarde cerca de 5 minutos para que todos os componentes do ICP sejam iniciados com êxito.

Siga o link fornecido após a conclusão da instalação, entre no console do ICP (admin / admin):

 https://<ip_address>:8443 


Figura 16. A página de login do painel de controle

Página de boas-vindas do ICP:

Figura 17. Interface da Web do painel de controle

No canto superior direito, selecione o menu Catálogo, uma lista de aplicativos disponíveis é exibida:

Figura 18. Catálogo de componentes

Este diretório contém uma lista de aplicativos e software, cuja descrição você pode estudar à vontade, mas até agora não se apressa em implementá-los.
Ainda precisamos aprender a lidar adequadamente com o ICP recém-instalado (não apenas através da interface da Web, mas também do console na forma da CLI - Command Line Interface), conectar o armazenamento persistente e fazer pequenas configurações.

Em conclusão


Para resumir.

Implementamos com sucesso a edição da comunidade IBM Cloud Private (versão 2.1.0.3) em um host em uma máquina virtual executando o Ubuntu Server OS 16/04/05. No momento, verificamos pessoalmente a instalação nos hipervisores VMware e Hyper-V, ela definitivamente funciona no XenServer e não deve haver dificuldades para o VirtualBox e o KVM.

Quem realmente está ansioso para aprofundar o estudo do ICP, ou seja, uma excelente seleção do trabalho de laboratório de nosso colega aqui: github.com/phthom/IBMCloudPrivate

Das próximas etapas - após uma nova instalação, precisamos apenas configurar um pouco o ICP e começar a preenchê-lo com algo útil e próximo a tarefas práticas.

Se a comunidade Habr apoiar positivamente essa iniciativa, à medida que nossas pesquisas e experimentos progredirem, preencheremos o núcleo da plataforma com os componentes necessários para coleta de telemetria, armazenamento de dados, processamento, análise, previsão, formação de interfaces de programa externas e criação de aplicativos do usuário. Por conseguinte, desenvolvendo uma série de tais artigos.

À espera de seus comentários e sugestões!

Além disso, nosso pessoal do AIXportal.ru preparou um maravilhoso videoclipe sobre a instalação do IBM Cloud Private em seu canal no Youtube; alguém ficará mais à vontade assim: youtu.be/eQwOOTzjM24

Links e materiais úteis


Página do produto em russo
• Quem quer praticar inglês, o livro - “ ICP for Dummies ” 2018. (40 páginas)
Artigos técnicos sobre o ICP 2.1.0.3 no IBM Knowledge Center
• Comunidade ICP aberta no IBM developerWorks
Receitas ICP para desenvolvedores

Source: https://habr.com/ru/post/pt426135/


All Articles