OpenShift 4.5.1: instalación en vSphere IPI

Si ha tratado con OpenShift antes, entonces sabe lo laborioso que es instalar un clúster de OpenShift en vSphere desde cero. Principalmente porque la infraestructura circundante necesita estar preparada. Con el lanzamiento de OpenShift 4.5.1, esta tarea se ha vuelto mucho más sencilla.







Antes del lanzamiento de OpenShift 4.5.1, era posible instalar un clúster en la plataforma vSphere solo en la versión UPI (User Provider Infrastructure). El usuario tenía que preparar de forma independiente la infraestructura necesaria para la instalación, es decir, preparar:



  • equilibradores de red externos (uno para equilibrar el tráfico de clústeres y el otro para equilibrar el tráfico de aplicaciones);
  • varios registros DNS, incluido el registro SRV;
  • Servidor DHCP para emitir direcciones a los nodos del clúster (bueno, o decida un método para configurar el direccionamiento estático)
  • Servidor HTTP para transferir la configuración de encendido al instalar RHCOS.


Al mismo tiempo, cualquier error (y como saben - "errare humanum est") en la preparación del entorno conduce a un fallo en la instalación del clúster. Para facilitar de alguna manera esta tarea, comenzaron a aparecer proyectos de terceros para acelerar la preparación del entorno y reducir la influencia del "factor humano" en este proceso. Uno de los más famosos es el proyecto OCP Helper Node , que prepara toda la configuración necesaria para instalar OpenShift en un servidor a través de Ansible. También hubo opciones para instalar un clúster con la preparación de infraestructura a través de Terraform.



Pero estos proyectos no resolvieron todos los problemas de implementación de un clúster en vSphere. A menudo es necesario proporcionar un clúster de OpenShift como servicio ("kubernetes como servicio") y, en este caso, automatizar la instalación de OpenShift no fue una tarea fácil; se requirió intervención manual: observar el orden de instalación del sistema operativo en los nodos del clúster, confirmar certificados en el clúster, esperar la instalación de los operadores del clúster y etc. Si es necesario, puede automatizar este proceso, pero esto también requiere tiempo y recursos para crear y mantener dichas soluciones.



Desde la versión 4.5.1. lanzado el 13 de julio de 2020, OpenShift admite la instalación en vSphere mediante IPI (infraestructura proporcionada por el instalador). Esto significa que el programa de instalación ahora puede:



  • preparar de forma independiente todos los recursos necesarios en vSphere;
  • cree un clúster de OpenShift con un comando;
  • elimine el clúster de OpenShift creado anteriormente con un comando.


Además, después de dicha instalación, el administrador puede agregar o eliminar nodos de clúster con un comando en OpenShift. O habilite el ajuste de escala automático por completo, lo que le dará al clúster la capacidad de responder de forma independiente a los cambios de carga.



Pero el nuevo método de instalación tiene una limitación: todos los nodos del clúster, así como el servidor desde el que se realiza la instalación, deben tener acceso directo a Internet. Si el administrador está detrás de un servidor proxy corporativo o Internet no está disponible para el clúster, el clúster deberá instalarse como antes, en la versión UPI.



Preparando la infraestructura circundante



Al instalar OpenShift, no puede prescindir de preparar la infraestructura, pero la lista de tareas se ha vuelto más modesta:



  1. Se necesita un servidor DHCP (para emitir direcciones a los nodos OpenShift);
  2. Se requieren dos registros DNS (VIP para API de clúster y VIP para tráfico Ingress);
  3. Necesitará una cuenta en vSphere con un conjunto de privilegios descritos en la documentación para instalar OpenShift .


En nuestro caso, para instalar OpenShift y ejecutar todos los servicios requeridos, usamos el servidor shift-is01 que ejecuta CentOS 7.



Configuración DHCPD



No hay nada específico aquí, seleccionamos el grupo de direcciones (192.168.111.100 -192.168.111.150) para los 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;
        }
}


Configuración de DNS



Para nuestro clúster, se creó la zona ocp45.demo.local y se crearon los registros A y PTR para el rango DHCP. Cree las entradas de OpenShift necesarias para la API e Ingress:



un fragmento de la zona BIND ocp45.demo.local:



api             IN      A       192.168.111.190
*.apps          IN      A       192.168.111.191


Después de eso, descargamos los certificados de nuestro vCenter y los instalamos como confiables en nuestro servidor.



Instale certificados de 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


Instalación de un clúster de OpenShift



El procedimiento de instalación en sí es ahora lo más simple posible:



  1. obtenga el instalador y las claves (Pull Secret) del sitio web de Red Hat ;
  2. preparar un archivo yaml con install-config.yaml con la configuración de clúster planificada;
  3. instalar el clúster.


Obtenemos el instalador y las claves



Descargue el programa de instalación y PullSecret de RedHat, este procedimiento se describe en la Guía de instalación . En nuestro ejemplo, todos los binarios necesarios para el trabajo se encuentran en el directorio bin del directorio de inicio del usuario, 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'


Al preparar este archivo con una configuración de clúster futura, hay tres cosas a tener en cuenta.



Primero, el clúster recordará la configuración de los nodos trabajadores definidos en install-config. Y todos los nodos posteriores que creará al escalar el clúster tendrán exactamente la misma configuración. Por tanto, es necesario determinar inmediatamente la configuración óptima del nodo trabajador.



En segundo lugar, es deseable que el direccionamiento interno del clúster (red de clúster y red de servicio) no se interfiera con su direccionamiento interno. De lo contrario, existe la posibilidad de que el POD dentro del clúster no pueda abrir una conexión a recursos externos (por ejemplo, ir a una base de datos externa).



En tercer lugar, el nombre del clúster (campo de metadatos) debe coincidir con su dominio para ese clúster. En nuestro caso, el nombre del clúster es ocp45 y sus direcciones están en el dominio ocp45.demo.local.



También puede preparar install-config.yaml a través del instalador openshift-install, pero luego no podrá determinar la configuración del nodo trabajador y el direccionamiento interno. En cualquier caso, tiene sentido crear install-config.yaml a través del instalador y luego arreglarlo.



Instalación del clúster



El mismo procedimiento para instalar un clúster no ha cambiado fundamentalmente. Después de iniciar el programa de instalación:



  • el instalador crea un nodo de arranque con recursos para inicializar el nodo maestro;
  • el instalador crea tres nodos maestros;
  • el nodo de arranque y los tres nodos maestros forman un plano de control de clúster;
  • el instalador deshabilita y elimina el nodo de arranque;
  • El plano de control despliega nodos trabajadores y configura los servicios de clúster necesarios.




Proceso de configuración del clúster.



Comenzamos la instalación del clúster y esperamos. El proceso de instalación suele tardar entre 30 y 40 minutos:



Instalación de clúster



[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 arranque de RHCOS



Si la conexión a Internet es lenta, es posible que la instalación no funcione: el instalador no esperará a que se cargue la imagen de RHCOS. Puede descargar la imagen de RHCOS por adelantado desde el enlace que muestra el instalador. El archivo resultante debe colocarse en el directorio ~ / .cache / openshift-installer / image_cache con el nombre 5dad1f50634794b0e1ff8a830cad4b98 y reiniciar la instalación. Esta vez, openshift-install lo tomará del sistema de archivos:



INFO The file was found in cache: /home/ocp/.cache/openshift-installer/image_cache/5dad1f50634794b0e1ff8a830cad4b98. Reusing...



eso es todo, el clúster está listo:



[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




Escalar y eliminar un clúster de OpenShift



Las ventajas del nuevo método no son solo que la instalación ahora es más fácil y requiere menos esfuerzo de preparación. Un clúster de OpenShift instalado en vSphere a través de IPI percibe a vShpere como una plataforma de nube completa y puede aprovechar sus beneficios de "elasticidad".



Ahora, un clúster en la plataforma vSphere (como grandes plataformas en la nube como Amazon AWS o Google GCP) tiene un conjunto de máquinas que el instalador genera automáticamente:



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


Esto le permite reducir el escalado del clúster a ejecutar un solo comando. OpenShift creará un nodo de forma independiente y lo agregará al clúster o lo eliminará.



Agregar un nodo a un clúster



[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


Eliminar un nodo de un clúster



[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


La capacidad del clúster para auto-crear y eliminar nodos se puede utilizar para configurar el escalado automático de un clúster OpenShfit .



En general, con la instalación de vSphere IPI, toda la administración de la plataforma de orquestación de contenedores de OpenShift va al lado de Kubernetes:



  1. El administrador de OpenShift gestiona la creación y eliminación de recursos para el clúster a través del conjunto de máquinas;
  2. el administrador de OpenShift también gestiona la configuración del sistema operativo en los nodos del clúster a través de macheneconfig.


Esto encaja bien con el enfoque Zero Administration declarado de RedHat para la infraestructura subyacente del clúster.



Además de automatizar la creación de clústeres, el nuevo instalador puede eliminarlos por sí solo. "Bajo el capó" del instalador de Terraform y en el directorio con los archivos de configuración de instalación, permanece el archivo de estado de Terraform (terraform.tfstate). Esto le permite eliminar un clúster creado anteriormente sin temor a "tocar" accidentalmente los recursos de otras personas:



[ocp@shift-is01 ~]$./bin/openshift-install destroy cluster --dir=ocp45 --log-level=info


Si constantemente crea y elimina clústeres, por ejemplo, para pruebas o entornos de aprendizaje, esta función también ayuda a automatizar este proceso y evitar posibles errores humanos en el proceso.



Conclusión



La instalación de OpenShift en VMware vSphere es la opción de instalación más común. Y la capacidad de OpenShift para trabajar con vSphere como plataforma en la nube, que apareció en la versión 4.5.1, simplifica enormemente su administración, proporcionando una solución llave en mano para automatizar los procesos del ciclo de vida desde la creación, escalado y eliminación de la plataforma.



Ahora, el enfoque de Infraestructura como código para brindar soluciones locales basadas en Red Hat OpenShift y VMware vSphere se está volviendo mucho más asequible de implementar.



Autor: Sergey Artemov, arquitecto del departamento de soluciones DevOps , Jet Infosystems



PS Únase a la comunidad Telegram DevSecOps Talks .



All Articles