RedHat nos proporciona playbooks para que podamos crear un cluster de openshift en varias modalidades. Si quereis ir mas alla de minishift pero no llegaias a tener hierro para un openstack decente virtualbox es una solucion funcional.
Openshift ha demostrado su gran estabilidad en sistemas grandes de produccion pero tiene un coste muy alto de hierro por lo que en mi ulmilde i5 de 4 nucleos vamos a usar 4 maquinas virtuales. 1 sera el dns. El cluster de openshift se compondra de 3 maquinas con 6gigas de Ram y 2 cores cada 1, ademas le añadimos un disco duro para que configurar glusterfs en el.
Voy a subir videos en los cuales muestro todo el proceso empezando por crear una maquina centos actulizarla y clonar las demas maquinas a partir de esta para no tener que repetir la instalacion.
Crear un servidor DNS
yum install bind bind-utils -y vi /etc/named.conf options { listen-on port 53 { any; }; //listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; allow-query { any; }; forwarders { 8.8.8.8; }; /* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. - If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so will cause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatly reduce such attack surface */ recursion yes; dnssec-enable no; dnssec-validation no; /* Path to ISC DLV key */ bindkeys-file "/etc/named.root.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; zone "openshift.ak" IN { type master; file "openshift.ak.zone"; }; zone "1.168.192.IN-ADDR.ARPA" IN { type master; file "1.168.192.IN-ADDR.ARPA.zone"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
vi /var/named/openshift.ak.zone $ORIGIN openshift.ak. $TTL 3H @ IN SOA openshift.ak. root.openshift.ak. ( 2001062501 ; serial 21600 ; refresh after 6 hours 3600 ; retry after 1 hour 604800 ; expire after 1 week 86400 ) ; minimum TTL of 1 day @ NS serverdns.openshift.ak. @ IN A 192.168.1.39 serverdns IN A 192.168.1.39 opmaster IN A 192.168.1.70 opnode1 IN A 192.168.1.71 opnode2 IN A 192.168.1.72 ; This wildcard record is intended to allow OpenShift router to route applications by hostname *.apps.openshift.ak. 300 IN A 192.168.1.70
vi /var/named/1.168.192.IN-ADDR.ARPA.zone $TTL 2D 1.168.192.in-addr.arpa. IN SOA openshift.ak. root.openshift.ak. ( 2003072441 ; serial 1D ; refresh 2H ; retry 1W ; expiry 2D ) ; minimum IN NS serverdns.openshift.ak. 70 IN PTR opmaster.openshift.ak. 71 IN PTR opnode1.openshift.ak. 72 IN PTR opnode2.openshift.ak.
firewall-cmd --add-service=dns firewall-cmd --add-service=dns --permanent chown named:named /var/named/openshift.ak.zone chown named:named /var/named/1.168.192.IN-ADDR.ARPA.zone systemctl start named systemctl enable named
Ahora tenemos un servidor dns con una zona openshift.ak. Con esto todo los subdonios que creemos seran redirigidos al cluster y nos facilitara el acceso las aplicaciones que vayamos creando dentro del cluster.
dig -t axfr openshift.ak
Instalar dependencias
Ahora el ansible especifico se ha quedado anticuado por lo que tenemos que instalarlo en el master antes del update
curl -o ansible.rpm https://releases.ansible.com/ansible/rpm/release/epel-7-x86_64/ansible-2.7.1-1.el7.ans.noarch.rpm yum install -y epel-release yum -y --enablerepo=epel install ansible.rpm yum update -y; yum install wget git net-tools bind-utils yum-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct -y; reboot yum install -y epel-release sed -i -e 's/enabled=1/enabled=0/' /etc/yum.repos.d/epel.repo yum install -y --enablerepo=epel pyOpenSSL yum install -y docker-1.13.1 yum install -y glusterfs-fuse
Cuando terminemos la instalacion clonamos para tener 3 nodos iguales salvo por la ip que la configuramos a posteriori
Configurar los nodos
Dado que vamos a usar ansible tenemos que configurar la clave privada y añadir la clave publica en los nodos
ssh-keygen for NODE in opmaster.openshift.ak opnode1.openshift.ak opnode2.openshift.ak; do ssh-copy-id root@${NODE}; done
Iventario y Playbooks
Con los nodos ya listo clonamos el repo en el master y nos situamos en la rama 3.11
git clone https://github.com/openshift/openshift-ansible cd openshift-ansible git checkout release-3.11
Ahora preparamos el inventario. Es en este pundo donde realmente determinamos la estructura del clsuter openshift, donde determinamos cuandos nodos master cuando de infra cuantos de compute si queremos monitorizacion donde va a estar el repositorio de imagenes etc etc etc ….
En este ivnentario espeficiamos que vamos a usar glusterfs y que tambien nos incluya el repositorio docker de fomra interna es por esto ultimo por lo que tenemos que deshabilitar el dns del NetowrkManager pues queremos que el dns del cluster tenga prioridad
cd openshift-ansible vi inventory.ini
[OSEv3:children] masters nodes etcd glusterfs [masters] opmaster.openshift.ak openshift_ip=192.168.1.70 openshift_schedulable=true [etcd] opmaster.openshift.ak openshift_ip=192.168.1.70 [glusterfs] opmaster.openshift.ak openshift_ip=192.168.1.70 glusterfs_devices='[ "/dev/sdb" ]' opnode1.openshift.ak openshift_ip=192.168.1.71 glusterfs_devices='[ "/dev/sdb" ]' opnode2.openshift.ak openshift_ip=192.168.1.72 glusterfs_devices='[ "/dev/sdb" ]' [nodes] opmaster.openshift.ak openshift_ip=192.168.1.70 openshift_schedulable=true openshift_node_group_name="node-config-master-infra" opnode1.openshift.ak openshift_ip=192.168.1.71 openshift_schedulable=true openshift_node_group_name="node-config-compute" opnode2.openshift.ak openshift_ip=192.168.1.72 openshift_schedulable=true openshift_node_group_name="node-config-compute" [OSEv3:vars] openshift_additional_repos=[{'id': 'centos-paas', 'name': 'centos-paas', 'baseurl' :'https://buildlogs.centos.org/centos/7/paas/x86_64/openshift-origin311', 'gpgcheck' :'0', 'enabled' :'1'}] debug_level=4 ansible_ssh_user=root deployment_type=origin openshift_deployment_type=origin enable_excluders=False enable_docker_excluder=False ansible_service_broker_install=False openshift_metrics_install_metrics=False openshift_logging_install_logging=False containerized=True os_sdn_network_plugin_name='redhat/openshift-ovs-multitenant' openshift_docker_insecure_registries=172.30.0.0/16 openshift_hosted_registry_storage_kind=glusterfs openshift_hosted_registry_storage_volume_size=10Gi openshift_hosted_registry_selector='node-role.kubernetes.io/infra=true' openshift_hosted_registry_routehost=docker-registry-default.apps.openshift.ak openshift_storage_glusterfs_timeout=900 openshift_storage_glusterfs_namespace=app-storage openshift_storage_glusterfs_storageclass=true openshift_storage_glusterfs_storageclass_default=true openshift_storage_glusterfs_block_deploy=true openshift_storage_glusterfs_block_host_vol_size=100 openshift_storage_glusterfs_block_storageclass=true openshift_storage_glusterfs_block_storageclass_default=false openshift_storage_glusterfs_registry_namespace=infra-storage openshift_storage_glusterfs_registry_block_deploy=true openshift_storage_glusterfs_registry_block_host_vol_size=100 openshift_storage_glusterfs_registry_block_storageclass=true openshift_storage_glusterfs_registry_block_storageclass_default=true openshift_storage_glusterfs_image=akaronte/rhgs-server-rhel7:v3.11 openshift_storage_glusterfs_block_image=akaronte/rhgs-gluster-block-prov-rhel7:v3.11 openshift_storage_glusterfs_heketi_image=akaronte/rhgs-volmanager-rhel7:v3.11 openshift_master_identity_providers=[{'name': 'htpasswd_auth', 'login': 'true', 'challenge': 'true', 'kind': 'HTPasswdPasswordIdentityProvider'}] #admin:admin openshift_master_htpasswd_users={'admin': '$apr1$VjIAEND0$3QkF7b/azc.44qnOwu7/h0'} openshift_cockpit_deployer_image='docker.io/akaronte/cockpit-kubernetes:latest' openshift_public_hostname=opmaster.openshift.ak openshift_master_default_subdomain=apps.openshift.ak openshift_disable_check=disk_availability,docker_storage,memory_availability,docker_image_availability
Con el inventario creado vamos a ejecutar los playbooks.
Primero ejecutamos el de prequisitos, este no dura mas que un par de minutos.
El segundo playbook es el despliegue de todo el cluster, puede tardar casi una hora sin despeinarse pero nos va a instalar todos los contenedores que conforman el cluster de openshift.
ansible-playbook -i inventory.ini playbooks/prerequisites.yml ansible-playbook -i inventory.ini playbooks/deploy_cluster.yml
Acceder al cluster
Si os fijais bien el inventario se dejo seteado un usuario por defecto. Aunque hayamos creado este usuario no es administrador del cluster asi que vamos a configurarlo asi por consola.
oc login -u system:admin oc adm policy add-cluster-role-to-user cluster-admin admin
Ahora solo tenemos que loguearnos via web para poder entrar a la interfaz grafica del cluster.
https://opmaster.openshift.ak:8443/
Y con esto ya tenemos un cluster de openshift con el que poder trastear y romper.
PD: La mayor parte de las configuraciones de red no van a funcionar dado que estamos en modalidad container. Si queremos usar el 100% de las configuraciones de red del cluster tenemos que montarlo sobre openstack. (pude montar openshift sobre openstack sobre virtualbox pero su rendimiento era inviable)
2 comentarios
Jeri Ely Wind · 31 de julio de 2020 a las 11:30
Vale la pena leer tu artículo. Jeri Ely Wind
AdriAk · 4 de agosto de 2020 a las 21:27
Gracias, espero que os sea util.