Openshift – Instalando com Openshift-Ansible

Openshift é uma maravilhosa ferramenta que auxilia o deploy de aplicações conteinerizadas através de uma interface web fácil de gerenciar. Essa é mais uma de uma série de ferramentas que escolhemos para fazer o deploy de nossas aplicações internas, na qual estamos migrando para o modelo de microserviços. Porém a instalação dela não é nenhum pouco simples, mesmo com um script de Ansible feito justamente para essa atividade. No post de hoje irei explicar como instalar o Openshift, explicando meu passo a passo, desde como preenchi o arquivo a até qual a versão que baixei da playbook para instalação.

Preparando o Ambiente

A instalação do Openshift via script foi feita usando o ambiente Single Server quanto em Cluster, todos em CentOS 7 pois a ferramenta só é compatível com distros baseadas no Red Hat. Abaixo segue as configurações das máquinas para a instalação:

Single Server

  • vCPU: 2
  • Memória: 8GB
  • Disco: 50GB

Multi Server

  • vCPU: 2
  • Memória: 8GB (Master) e 4GB (Node Infra e Node Primary)
  • Disco: 40GB em LVM e 10GB para o /

Primeiro passo é atualizar todas as máquinas para a ultima versão do CentOS, para garantir que não teremos nenhum problema durante a instalação.

# yum update -y

Feito a atualização da distro, iremos instalar também as dependências do Openshift:

# yum install wget git net-tools bind-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct vim deltarpm docker-1.12.6 NetworkManager -y

Os passos agora devem ser replicados somente na máquina que for eleita como controladora do seu cluster. Instale o Ansible através do repositório EPEL do Fedora e o módulo pyOpenSSL.

# sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# sudo yum -y --enablerepo=epel install ansible pyOpenSSL

Com as dependências resolvidas, vamos configurar agora os serviços em todas as maquinas. Se você escolheu colocar um disco extra nas máquinas do Openshift, vamos configurar para o Docker poder usar elas como lvm, já que o mesmo recomenda dessa forma. Abra o arquivo /etc/sysconfig/docker-storage-setup e inclua as linhas abaixo. Depois execute docker-storage-setup para que o mesmo crie as lvms que serão usadas pelo Openshift.

# vim /etc/sysconfig/docker-storage-setup
DEVS=/dev/vdc
VG=docker-vg
# docker-storage-setup

Garanta agora que o serviço do docker e do NetworkManager estejam rodando em todas as maquinas do ambiente. O OpenShift utiliza o openvswitch para criar suas redes, e infelizmente o mesmo só tem suporte ao NetworkManager, sendo uma de suas dependências. O não garantimento do serviço rodando fará com que a instalação não crie os roteadores para os containers, assim resultando em falha na metade do procedimento.

# systemctl enable docker NetworkManager
# systemctl restart docker NetworkManager

Agora entre no diretório /etc/ansible/roles e baixe a playbook openshift-ansible via wget. Vale lembrar que a versão deve ser a 3.7.38-1, já que não garantimos que esse procedimento será válido para as demais versões, pois a cada release a playbook vem com um procedimento de instalação e um bug diferente.

# cd /etc/ansible/roles
# wget https://github.com/openshift/openshift-ansible/archive/openshift-ansible-3.7.38-1.tar.gz

Descompacte o arquivo e renomeie o diretório que ele extraiu para openshift-ansible.

# tar -xvzf openshift-ansible-3.7.38-1.tar.gz
# mv openshift-ansible-openshift-ansible-3.7.38-1 openshift-ansible

Abra os dois arquivos abaixo e altere as linhas do comando curl para que faça na porta 8443, e não na 443 como o script solicita:

# vim /etc/ansible/roles/openshift-ansible/playbooks/byo/roles/openshift_service_catalog/tasks/start_api_server.yml
...
curl -k https://apiserver.kube-service-catalog.svc:8443/healthz
...
# vim /etc/ansible/roles/openshift-ansible/playbooks/byo/roles/template_service_broker/tasks/install.yml
...
curl -k https://apiserver.openshift-template-service-broker.svc:8443/healthz
...

Inclua os endereços abaixo dentro do /etc/hosts. Esses endereços são do catálogo interno do seu Openshift, e ele consulta eles durante a instalação, porém esses endereços existem realmente na internet, e não são acessíveis para as consultas da playbook.

# vim /etc/hosts
...
127.0.0.1 apiserver.kube-service-catalog.svc apiserver.openshift-template-service-broker.svc apiserver-kube-service-catalog.router.default.svc.cluster.local

Agora vamos configurar o arquivo /etc/ansible/hosts para informar ao Openshift quais máquinas farão parte do meu cluster, quais serão parte da infra (responsável pelo roteadores, registries, e outros containers que fazem o Openshift funcionar), quais serão primary (responsáveis por manter sua aplicação rodando), e qual será a controladora de todo o ambiente.

# vim /etc/ansible/hosts
# Create an OSEv3 group that contains the masters, nodes, and etcd groups
[OSEv3:children]
masters
nodes 
etcd

# Set variables common for all OSEv3 hosts
[OSEv3:vars]
openshift_release=v3.7
openshift_enable_service_catalog=false
openshift_disable_check=docker_storage,docker_image_availability,memory_availability,disk_availability
# SSH user, this user should allow ssh based auth without requiring a password
ansible_ssh_user=root

openshift_deployment_type=origin
openshift_docker_options="--selinux-enabled --log-driver=journald --insecure-registry 0.0.0.0/0"

# uncomment the following to enable htpasswd authentication;
openshift_master_identity_providers=[{'name': 'htpasswd_auth', 'login': 'true', 'challenge': 'true', 'kind': 'HTPasswdPasswordIdentityProvider', 'filename': '/etc/origin/master/htpasswd'}]

# host group for masters
[masters]
controladora.batata.com.br

# host group for etcd
[etcd]
controladora.batata.com.br

[nodes]
controladora.batata.com.br
node1.batata.com.br openshift_node_labels="{'region': 'infra', 'zone': 'default'}"
node2.batata.com.br openshift_node_labels="{'region': 'primary', 'zone': 'east'}"

No arquivo acima, informamos que os serviços responsáveis pelo master e o etcd seriam instalados na maquina controladora.batata.com.br, que ela seria também um nó do nosso cluster. Por ser a controladora, por padrão, será configurada como “Not Schedulable” (coloque a opção openshift_schedulable=true na sua frente caso queira que containers sejam criados também nessa máquina). Criamos o node1 como node de infra e o node2 como node para nossos containers. Também desativamos diversas checagens, na qual o Openshift faz e que são desnecessárias visto que a aplicação roda em ambientes mais escarços em recursos, porém a playbook não deixa se essas checagens estiverem ativas.

Por ultimo, troque sua chave de SSH do usuário root com todos os usuários roots de todos os servidores e então execute a playbook de instalação do Openshift. Levará em torno de 30~40 minutos toda a instalação.

# ssh-keygen
# ssh-copy-id root@controladora.batata.com.br
# ssh-copy-id root@node1.batata.com.br
# ssh-copy-id root@node2.batata.com.br
# ansible-playbook /etc/ansible/roles/openshift-ansible/playbooks/byo/openshift-cluster/config.yml

Ao término, basta abrir o navegador no endereço https://<ip_da_controladora>:8443 e você estará com o OpenShift instalado e funcionando.

Criando Usuário e Senha

Por padrão o Openshift não possui sistema de autenticação, porém nessa instalação colocamos através do serviço do htpasswd. Para utilizarmos o Openshift teremos que criar um usuário no htpasswd e depois com o comando oc. Primeiramente, para criar o usuário no htpasswd, execute o comando abaixo. Ele irá te pedir uma senha para esse usuário, digite ela e depois repita para que o mesmo seja criado:

# htpasswd /etc/origin/master/htpasswd <username>

Por ultimo, crie o usuário dentro do Openshift com o comando oc create user conforme abaixo. Não será questionado nada sobre esse usuário, porém se consultar com o comando oc get users notará que o mesmo possui identidade dentro do htpasswd por conta do comando executado anteriormente.

# oc create user <username>

Agora basta se logar na interface web com o usuário criado e começar a subir seus projetos. Abaixo segue o link da doc usado para esse post caso desejam consultar ele.

  • https://docs.openshift.com/enterprise/3.0/install_config/install/prerequisites.html#configuring-docker-storage

 

2 comentários

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *