Antes do lançamento do OpenShift 4.5.1, era possível instalar um cluster na plataforma vSphere apenas na versão UPI (User Provider Infrastructure). O usuário teve que preparar de forma independente a infraestrutura necessária para a instalação, ou seja, preparar:
- balanceadores de rede externos (um para balancear o tráfego do cluster, o outro para balancear o tráfego do aplicativo);
- vários registros DNS, incluindo registro SRV;
- Servidor DHCP para emitir endereços para nós de cluster (bem, ou decidir sobre um método para definir o endereçamento estático);
- Servidor HTTP para transferência de configuração de inicialização ao instalar RHCOS.
Ao mesmo tempo, qualquer erro (e como você sabe - "errare humanum est") na preparação do ambiente leva ao fracasso com a instalação do cluster. Para facilitar de alguma forma essa tarefa, começaram a surgir projetos de terceiros para acelerar a preparação do ambiente e diminuir a influência do "fator humano" nesse processo. Um dos mais famosos é o projeto OCP Helper Node , que prepara todas as configurações necessárias para instalar o OpenShift em um servidor via Ansible. Também havia opções de instalação de cluster com preparação de infraestrutura via Terraform.
Mas esses projetos não resolveram todos os problemas com a implantação de um cluster no vSphere. Freqüentemente, é necessário fornecer um cluster OpenShift como serviço ("kubernetes as service") e, neste caso, automatizar a instalação do OpenShift não foi uma tarefa fácil - intervenção manual foi necessária: observar a ordem de instalação do SO nos nós do cluster, confirmar os certificados no cluster, aguardar a instalação dos operadores do cluster e etc. Se necessário, você pode automatizar esse processo, mas isso também leva tempo e recursos para criar e manter essas soluções.
Desde a versão 4.5.1. lançado em 13 de julho de 2020, o OpenShift oferece suporte à instalação no vSphere usando IPI (Infraestrutura fornecida pelo instalador). Isso significa que o programa de instalação agora pode:
- preparar independentemente todos os recursos necessários no vSphere;
- crie um cluster OpenShift com um comando;
- exclua o cluster OpenShift criado anteriormente com um comando.
Além disso, após essa instalação, o administrador pode adicionar ou remover nós do cluster com um comando no OpenShift. Ou habilite o escalonamento automático completamente, dando ao cluster a capacidade de responder independentemente às mudanças de carga.
Mas o novo método de instalação tem uma limitação - todos os nós do cluster, bem como o servidor a partir do qual a instalação é realizada, devem ter acesso direto à Internet. Se o administrador estiver atrás de um servidor proxy corporativo ou a Internet não estiver disponível para o cluster, o cluster deverá ser instalado como antes, na versão UPI.
Preparar a infraestrutura envolvente
Ao instalar o OpenShift, você não pode fazer sem preparar a infraestrutura, mas a lista de tarefas tornou-se mais modesta:
- É necessário um servidor DHCP (para emitir endereços para nós OpenShift);
- São necessários dois registros DNS (VIP para API de cluster e VIP para tráfego de entrada);
- Você precisará de uma conta no vSphere com um conjunto de privilégios descritos na documentação para instalar o OpenShift .
No nosso caso, para instalar o OpenShift e executar todos os serviços necessários, usamos o servidor shift-is01 executando o CentOS 7.
Configuração DHCPD
Não há nada específico aqui, alocamos o conjunto de endereços (192.168.111.100 -192.168.111.150) para servidores OpenShift:
[ocp@shift-is01 ~]$ sudo cat /etc/dhcp/dhcpd.conf
authoritative;
ddns-update-style interim;
default-lease-time 14400;
max-lease-time 14400;
option routers 192.168.111.1;
option broadcast-address 192.168.111.255;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.111.10;
option domain-name «ocp45.demo.local»;
subnet 192.168.111.0 netmask 255.255.255.0 {
interface ens192;
pool {
range 192.168.111.100 192.168.111.150;
# this is PXE specific
filename «pxelinux.0»;
next-server 192.168.111.10;
}
}
Configuração DNS
Para nosso cluster, a zona ocp45.demo.local foi criada e os registros A e PTR para o intervalo DHCP foram criados. Crie as entradas OpenShift necessárias para a API e Ingress:
um pedaço da zona BIND ocp45.demo.local:
api IN A 192.168.111.190
*.apps IN A 192.168.111.191
Depois disso, baixamos os certificados de nosso vCenter e os instalamos como confiáveis em nosso servidor.
Instale os certificados vCenter:
[ocp@shift-is01 ~]$ mkdir certs; cd certs; curl -kO https://vc01.demo.local/certs/download.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 5795 100 5795 0 0 15500 0 --:--:-- --:--:-- --:--:-- 15536
[ocp@shift-is01 certs]$ unzip ./download.zip
Archive: ./download.zip
inflating: certs/lin/e01a85a3.r1
inflating: certs/mac/e01a85a3.r1
inflating: certs/win/e01a85a3.r1.crl
inflating: certs/lin/e01a85a3.0
inflating: certs/mac/e01a85a3.0
inflating: certs/win/e01a85a3.0.crt
[ocp@shift-is01 certs]$ sudo cp ./certs/lin/e01a85a3.* /etc/pki/ca-trust/source/anchors
[ocp@shift-is01 certs]$ sudo update-ca-trust extract
Instalando um cluster OpenShift
O procedimento de instalação em si agora é o mais simples possível:
- obtenha o instalador e as chaves (Pull Secret) no site da Red Hat ;
- preparar um arquivo yaml com install-config.yaml com a configuração de cluster planejada;
- instale o cluster.
Pegamos o instalador e as chaves
Baixe o programa de instalação e PullSecret da RedHat, este procedimento é descrito no Guia de Instalação . Em nosso exemplo, todos os binários necessários para o trabalho estão localizados no diretório bin do diretório inicial do usuário ocp.
[ocp@shift-is01 bin]$ ll
total 499036
-rwxr-xr-x 1 ocp ocp 78599208 Jul 16 11:53 kubectl
-rwxr-xr-x 1 ocp ocp 78599208 Jul 16 11:53 oc
-rwxr-xr-x 1 ocp ocp 353804288 Jul 16 11:53 openshift-install
-rw-r--r-- 1 ocp ocp 954 Jul 16 11:53 README.md
Preparando install-config.yaml
[ocp@shift-is01 ~]$ cat ./install-config.yaml
apiVersion: v1
baseDomain: demo.local
compute:
- hyperthreading: Enabled
architecture: amd64
name: worker
replicas: 3
platform:
vsphere:
cpus: 2
coresPerSocket: 1
memoryMB: 8192
osDisk:
diskSizeGB: 120
controlPlane:
hyperthreading: Enabled
architecture: amd64
name: master
replicas: 3
platform:
vsphere:
cpus: 4
coresPerSocket: 1
memoryMB: 16384
osDisk:
diskSizeGB: 120
metadata:
name: ocp45
networking:
networkType: OpenShiftSDN
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
serviceNetwork:
- 172.30.0.0/16
platform:
vsphere:
vcenter: _vCenter
username: __vCenter
password: _
datacenter: _Datacenter
defaultDatastore: _Datastre
network: _Network
cluster: _Cluster
apiVIP: 192.168.111.190
ingressVIP: 192.168.111.191
fips: false
pullSecret: '_PullSecret'
sshKey: '_SSH_Public_Key'
Ao preparar este arquivo com a configuração futura do cluster, há três coisas a serem observadas.
Primeiro, o cluster se lembrará da configuração dos nós de trabalho do cluster definido em install-config. E todos os nós subsequentes que você criará ao dimensionar o cluster terão exatamente a mesma configuração. Portanto, é necessário determinar imediatamente a configuração ideal do nó trabalhador.
Em segundo lugar, é desejável que o endereçamento interno do cluster (Rede de Cluster e Rede de Serviço) não tenha interferência em seu endereçamento interno. Caso contrário, existe a possibilidade de que o POD dentro do cluster não consiga abrir uma conexão com recursos externos (por exemplo, ir para um banco de dados externo).
Terceiro, o nome do cluster (campo de metadados) deve corresponder ao seu domínio para esse cluster. Em nosso caso, o nome do cluster é ocp45 e seus endereços estão no domínio ocp45.demo.local.
Você também pode preparar install-config.yaml por meio do instalador openshift-install, mas não será capaz de determinar a configuração do nó de trabalho e o endereçamento interno. Em qualquer caso, faz sentido criar install-config.yaml por meio do instalador e depois corrigi-lo.
Instalando o cluster
O próprio procedimento para instalar um cluster não mudou fundamentalmente. Depois de iniciar o programa de instalação:
- o instalador cria um nó de bootstrap com recursos para inicializar o nó mestre;
- o instalador cria três nós principais;
- o nó bootstrap e três nós principais formam um plano de controle do cluster;
- o instalador desativa e remove o nó de bootstrap;
- O plano de controle implanta nós de trabalho e configura os serviços de cluster necessários.
Processo de configuração do cluster.
Começamos a instalação do cluster e esperamos. O processo de instalação geralmente leva de 30 a 40 minutos:
Instalação de cluster
[ocp@shift-is01 ~]$ mkdir ocp45; cp ./install-config.yaml ./ocp45
[ocp@shift-is01 ~]$ ./bin/openshift-install create cluster --dir=ocp45 --log-level=info
INFO Consuming Install Config from target directory
INFO Obtaining RHCOS image file from 'https://releases-art-rhcos.svc.ci.openshift.org/art/storage/releases/rhcos-4.5/45.82.202007062333-0/x86_64/rhcos-45.82.202007062333-0-vmware.x86_64.ova?sha256=4189881eadb0b0cfd85c2f2ab1c32f6a320b71713cac3bd4179dba746ad4070a'
INFO Creating infrastructure resources...
INFO Waiting up to 20m0s for the Kubernetes API at https://api.ocp45.demo.local:6443...
INFO API v1.18.3+8b0a82f up
INFO Waiting up to 40m0s for bootstrapping to complete...
INFO Destroying the bootstrap resources...
INFO Waiting up to 30m0s for the cluster at https://api.ocp45.demo.local:6443 to initialize...
INFO Waiting up to 10m0s for the openshift-console route to be created...
INFO Install complete!
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/home/ocp/ocp45/auth/kubeconfig'
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocp45.demo.local
INFO Login to the console with user: «kubeadmin», and password: «xxxxxxxxxxxxxxx»
INFO Time elapsed: 41m56s
Problemas de inicialização RHCOS
Se a conexão com a Internet for lenta, a instalação pode não funcionar: o instalador não esperará que a imagem RHCOS carregue. Você pode baixar a imagem RHCOS com antecedência no link mostrado pelo instalador. O arquivo resultante deve ser colocado no diretório ~ / .cache / openshift-installer / image_cache com o nome 5dad1f50634794b0e1ff8a830cad4b98 e reinicie a instalação. Desta vez, o openshift-install irá retirá-lo do sistema de arquivos:
INFO The file was found in cache: /home/ocp/.cache/openshift-installer/image_cache/5dad1f50634794b0e1ff8a830cad4b98. Reusing...
É isso, o cluster está pronto:
[ocp@shift-is01 ~]$ export KUBECONFIG=/home/ocp/ocp45/auth/kubeconfig
[ocp@shift-is01 ~]$ ./bin/oc get nodes
NAME STATUS ROLES AGE VERSION
ocp45-64clc-master-0 Ready master 33m v1.18.3+6025c28
ocp45-64clc-master-1 Ready master 33m v1.18.3+6025c28
ocp45-64clc-master-2 Ready master 33m v1.18.3+6025c28
ocp45-64clc-worker-f7bw2 Ready worker 15m v1.18.3+6025c28
ocp45-64clc-worker-m277w Ready worker 15m v1.18.3+6025c28
ocp45-64clc-worker-wcjj7 Ready worker 15m v1.18.3+6025c28
Escalonar e excluir um cluster OpenShift
As vantagens do novo método não são apenas que a instalação agora é mais fácil e requer menos esforço de preparação. Um cluster OpenShift instalado no vSphere via IPI percebe o vShpere como uma plataforma de nuvem completa e pode tirar proveito de seus benefícios de "elasticidade".
Agora, um cluster na plataforma vSphere (como grandes plataformas de nuvem, como Amazon AWS ou Google GCP) tem um conjunto de máquinas que é gerado automaticamente pelo instalador:
OpenShift machineset
[ocp@shift-is01 ~]$ ./bin/oc get machinesets -n openshift-machine-api
NAME DESIRED CURRENT READY AVAILABLE AGE
ocp45-64clc-worker 3 3 3 3 50m
Isso permite reduzir o dimensionamento do cluster para executar um único comando. O OpenShift criará um nó próprio e o adicionará ao cluster ou o excluirá.
Adicionar um nó a um cluster
[ocp@shift-is01 ~]$ ./bin/oc scale --replicas=4 machineset ocp45-64clc-worker -n openshift-machine-api
machineset.machine.openshift.io/ocp45-64clc-worker scaled
[ocp@shift-is01 ~]$ ./bin/oc get machinesets -n openshift-machine-api
NAME DESIRED CURRENT READY AVAILABLE AGE
ocp45-64clc-worker 4 4 3 3 61m
[ocp@shift-is01 ~]$ ./bin/oc get nodes
NAME STATUS ROLES AGE VERSION
ocp45-64clc-master-0 Ready master 75m v1.18.3+6025c28
ocp45-64clc-master-1 Ready master 75m v1.18.3+6025c28
ocp45-64clc-master-2 Ready master 75m v1.18.3+6025c28
ocp45-64clc-worker-f7bw2 Ready worker 57m v1.18.3+6025c28
ocp45-64clc-worker-hvjmn Ready worker 9m27s v1.18.3+6025c28
ocp45-64clc-worker-m277w Ready worker 57m v1.18.3+6025c28
ocp45-64clc-worker-wcjj7 Ready worker 57m v1.18.3+6025c28
Remover um nó de um cluster
[ocp@shift-is01 ~]$ ./bin/oc scale --replicas=3 machineset ocp45-64clc-worker -n openshift-machine-api
machineset.machine.openshift.io/ocp45-64clc-worker scaled
[ocp@shift-is01 ~]$ ./bin/oc get nodes
NAME STATUS ROLES AGE VERSION
ocp45-64clc-master-0 Ready master 97m v1.18.3+6025c28
ocp45-64clc-master-1 Ready master 98m v1.18.3+6025c28
ocp45-64clc-master-2 Ready master 98m v1.18.3+6025c28
ocp45-64clc-worker-hvjmn Ready worker 32m v1.18.3+6025c28
ocp45-64clc-worker-m277w Ready worker 79m v1.18.3+6025c28
ocp45-64clc-worker-wcjj7 Ready worker 79m v1.18.3+6025c28
A capacidade do cluster de auto-criar e descartar nós pode ser usada para configurar o dimensionamento automático de um cluster OpenShfit .
Em geral, com a instalação do vSphere IPI, todo o gerenciamento da plataforma de orquestração de contêiner OpenShift é transferido para o lado do kubernetes:
- a criação e exclusão de recursos para o cluster são gerenciadas pelo administrador OpenShift por meio do conjunto de máquinas;
- a configuração das configurações do sistema operacional nos nós do cluster também é gerenciada pelo administrador do OpenShift via macheneconfig.
Isso se encaixa bem com a abordagem de administração zero declarada da RedHat para a infraestrutura subjacente no cluster.
Além de automatizar a criação de clusters, o novo instalador pode removê-los por conta própria. "Sob o capô" do instalador do Terraform e no diretório com os arquivos de configuração de instalação, o arquivo de estado do Terraform (terraform.tfstate) permanece. Isso permite que você exclua um cluster criado anteriormente sem medo de "tocar" acidentalmente os recursos de outras pessoas:
[ocp@shift-is01 ~]$./bin/openshift-install destroy cluster --dir=ocp45 --log-level=info
Se você está constantemente criando e eliminando clusters, por exemplo, para ambientes de teste ou treinamento, então esse recurso também ajuda a automatizar esse processo e prevenir possíveis erros humanos no processo.
Conclusão
Instalar o OpenShift no VMware vSphere é a opção de instalação mais comum. E a capacidade do OpenShift de trabalhar com o vSphere como uma plataforma em nuvem, que apareceu na versão 4.5.1, simplifica muito sua administração, fornecendo uma solução pronta para automatizar os processos de ciclo de vida desde a criação, dimensionamento e remoção da plataforma.
Agora, a abordagem de infraestrutura como código para servir soluções no local com base em Red Hat OpenShift e VMware vSphere está se tornando muito mais acessível para implementação.
Autor: Sergey Artemov, arquiteto do departamento de soluções DevOps da Jet Infosystems
PS Junte-se à comunidade do Telegram DevSecOps Talks .