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)

https://youtu.be/SPqA1pvZV90
https://youtu.be/HVuh-imkMWU
https://youtu.be/asmVhG3S1gs
https://youtu.be/EeveQaZLRuY
https://youtu.be/b_DdsjFPDUg
https://youtu.be/_PgBH4epbFI
https://youtu.be/4bvUfLkMEA0
https://youtu.be/nnKuN4skm-Q

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.

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *