Instalar Openshift, Kubernetes y Dockers en VMware Workstation
Os explicamos como generar un laboratorio de Openshift, Kubernetes y Dockers sobre Centos 7 y VMware Workstation. La idea es que una vez montado, ser capaz de levantar un servicio simple, como un WordPress con una base de datos MariaDB.
Antes de nada, explicaremos qué es Openshift y Kubernetes, ya que de Dockers ya hemos hablado alguna vez. Creo que esta imagen define muy bien lo que es cada cosa, pero vamos a las definiciones más genéricas ya que queremos realizar un manual de instalación:
¿Qué son Openshift y Kubernetes?
Desarrollado por RedHat con tecnología OpenSource, es una de las soluciones PAAS más importantes del mercado. Utiliza tanto Dockers como Kubernetes, actuando Openshift como integrador.
Kubernetes es la solución de orquestación que utiliza Openshift, un poderoso sistema de administración y desarrollo de clústeres de contenedores.
Si vais a la página oficial podréis curiosar de una forma gratuita con Openshift.
La evolución de la tecnología de contenedores sobre una infraestructura tradicional o virtual:
Instalación Openshift en Centos 7 sobre VMware Workstation
Esta vez no voy a utilizar mi laboratorio tradicional, sino que lo voy a crear sobre mi portátil MSI con 48GB de RAM e procesador i7.
A continuación, os coloco los requerimientos mínimos, así que no me queda otra que hacerlo así porque mis servidores no tienen más de 16GB cada uno:
Generaremos 3 máquinas Centos 7, una para el Master y dos Nodos.
Pasos previos a realizar en todos los nodos salvo que se indique:
- Deshabilitamos Selinux
- vi /etc/selinux/config
- Dejamos el valor SELINUX en Disabled y Targeted
- Deshabilitamos Iptables
- systemctl disable firewalld
- systemctl stop firewalld
- Lanzamos la instalación de los paquetes necesarios
- yum install centos-release-openshift-origin
- yum install wget git net-tools bind-utils iptables-services bridge-utils bash-completion origin-clients docker pyOpenSSL
- Modificamos el fichero /etc/hosts (sino tendréis que instalar BIND)
-
- Añadimos las IPs y nombres de los hosts. En mi caso:
- 192.168.28.133 node2 node2.openshift.maquinasvirtuales.eu
- 192.168.28.132 node1 node1.openshift.maquinasvirtuales.eu
- 192.168.28.134 master master.openshift.maquinasvirtuales.eu
- Añadimos las IPs y nombres de los hosts. En mi caso:
-
- Editamos el fichero en todos los nodos vi /etc/sysconfig/docker:
- OPTIONS=’ –selinux-enabled –log-driver=json-file –log-opt max-size=50m’
- Sólo en el master lanzamos esto:
- yum install -y origin-master origin-pod origin-sdn-ovs origin-dockerregistry
- Sólo en el master. Editamos el fichero vi /etc/origin/master/master-config.yaml:
-
- corsAllowedOrigins:
– //127\.0\.0\.1(:|$)
– //192\.168\.28\.134:8443$
– //localhost(:|$)
– kubernetes.default
– kubernetes.default.svc.cluster.local
– kubernetes
– openshift.default
– openshift.default.svc
– 172.30.0.1
– openshift.default.svc.cluster.local
– kubernetes.default.svc
– openshift - Agregamos schedulerConfigFile: “/etc/origin/master/scheduler.json”
- Agregamos networkPluginName: “redhat/openshift-ovs-multitenant”
- Agregamos routingConfig: subdomain: openshift.maquinasvirtuales.eu
- corsAllowedOrigins:
-
- Creamos fichero sólo en el master con vi /etc/origin/master/scheduler.json
- {
“apiVersion”: “v1”,
“kind”: “Policy”,
“predicates”: [
{
“name”: “MatchNodeSelector”
},
{
“name”: “PodFitsResources”
},
{
“name”: “PodFitsPorts”
},
{
“name”: “NoDiskConflict”
},
{
“name”: “NoVolumeZoneConflict”
},
{
“name”: “MaxEBSVolumeCount”
},
{
“name”: “MaxGCEPDVolumeCount”
},
{
“argument”: {
“serviceAffinity”: {
“labels”: [
“region”
] }
},
“name”: “Region”
}
],
“priorities”: [
{
“name”: “LeastRequestedPriority”,
“weight”: 1
},
{
“name”: “SelectorSpreadPriority”,
“weight”: 1
},
{
“argument”: {
“serviceAntiAffinity”: {
“label”: “zone”
}
},
“name”: “Zone”,
“weight”: 2
}
] }
- {
- Arrancamos el servicio del master:
- systemctl enable origin-master
- systemctl start origin-master
- Generamos en el master el fichero config:
- mkdir .kube
- ln -s /etc/origin/master/admin.kubeconfig .kube/config
- Comprobamos:
- [root@master ~]# oc login -u system:admin
Logged into “https://192.168.28.134:8443” as “system:admin” using existing credentials.You have access to the following projects and can switch between them with ‘oc project <projectname>’:* default
kube-public
kube-system
openshift
openshift-infra
openshift-nodeUsing project “default”.
- [root@master ~]# oc login -u system:admin
- Instalamos sólo en los nodos:
- yum install -y origin-node origin-pod origin-sdn-ovs origin-dockerregistry
- Creamos en el master los directorios y el enlace simbólico:
- mkdir /etc/origin/node1.openshift.maquinasvirtuales.eu
- mkdir /etc/origin/node2.openshift.maquinasvirtuales.eu
- ln -s /etc/origin/ openshift.local.config
- Lanzamos los comandos:
- oc adm create-node-config –node-dir=’/etc/origin/node2.openshift.maquinasvirtuales.eu/’ –dns-domain=’openshift.maquinasvirtuales.eu’ –dns-ip=’192.168.28.134′ –hostnames=’node2.openshift.maquinasvirtuales.eu’ –master=’https://192.168.28.134:8443′ –network-plugin=’redhat/openshift-ovs-multitenant’ –node=’node2.openshift.maquinasvirtuales.eu’
Generating node credentials …
Created node config for node2.openshift.maquinasvirtuales.eu in /etc/origin/node2.openshift.maquinasvirtuales.eu/ - oc adm create-node-config –node-dir=’/etc/origin/node1.openshift.maquinasvirtuales.eu/’ –dns-domain=’openshift.maquinasvirtuales.eu’ –dns-ip=’192.168.28.134′ –hostnames=’node1.openshift.maquinasvirtuales.eu’ –master=’https://192.168.28.134:8443′ –network-plugin=’redhat/openshift-ovs-multitenant’ –node=’node1.openshift.maquinasvirtuales.eu’
Generating node credentials …
Created node config for node1.openshift.maquinasvirtuales.eu in /etc/origin/node1.openshift.maquinasvirtuales.eu/
- oc adm create-node-config –node-dir=’/etc/origin/node2.openshift.maquinasvirtuales.eu/’ –dns-domain=’openshift.maquinasvirtuales.eu’ –dns-ip=’192.168.28.134′ –hostnames=’node2.openshift.maquinasvirtuales.eu’ –master=’https://192.168.28.134:8443′ –network-plugin=’redhat/openshift-ovs-multitenant’ –node=’node2.openshift.maquinasvirtuales.eu’
- scp /etc/origin/node1.openshift.maquinasvirtuales.eu/* root@192.168.28.132:/etc/origin/node/
- scp /etc/origin/node2.openshift.maquinasvirtuales.eu/* root@192.168.28.133:/etc/origin/node/
- Ahora en los nodos vi /etc/origin/node/node-config.yaml
- kubeletArguments:
node-labels:
– region=primary
– zone=west
- kubeletArguments:
- Arrancamos servicios en los nodos:
- systemctl enable docker
- systemctl start docker
- systemctl enable origin-node
- systemctl start origin-node
- Descargamos en los nodos las imágenes de los dockers que necesitamos:
- docker pull openshift/origin-sti-builder
- docker pull openshift/origin-deployer
- docker pull openshift/origin-docker-registry
- docker pull openshift/origin-haproxy-router
- docker pull openshift/origin-pod
- En el master creamos una cuenta de servicio:
- oc create serviceaccount registry -n default
- oadm policy add-scc-to-user privileged system:serviceaccount:default:registry
- oadm registry –service-account=registry –mount-host=/opt/openshift-registry (ignorar el error)
- oc create route passthrough –service docker-registry -n default
- [root@master ~]# oc get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
docker-registry 172.30.135.46 <none> 5000/TCP 1m
kubernetes 172.30.0.1 <none> 443/TCP,53/UDP,53/TCP 42m - [root@master ~]# oc get route
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
docker-registry docker-registry-default.openshift.maquinasvirtuales.eu docker-registry 5000-tcp passthrough None - oc adm ca create-server-cert –signer-cert=/etc/origin/master/ca.crt –signer-key=/etc/origin/master/ca.key –signer-serial=/etc/origin/master/ca.serial.txt –hostnames=”172.30.135.46,docker-registry-default.openshift.maquinasvirtuales.eu” –cert=/etc/origin/master/registry.crt –key=/etc/origin/master/registry.key
- oc secrets new registry-certificates /etc/origin/master/registry.crt /etc/origin/master/registry.key -n default
- oc secrets add registry registry-certificates -n default
- oc secrets add registry registry-certificates -n default
- oc env dc/docker-registry REGISTRY_HTTP_TLS_CERTIFICATE=/etc/secrets/registry.crt REGISTRY_HTTP_TLS_KEY=/etc/secrets/registry.key -n default
- oc patch dc/docker-registry –api-version=v1 -p ‘{“spec”:{“template”:{“spec”:{“containers”:[{“name”:”registry”,”livenessProbe”:{“httpGet”:{“scheme”:”HTTPS”}}}]}}}}’ -n default
- oc patch dc/docker-registry –api-version=v1 -p ‘{“spec”:{“template”:{“spec”:{“containers”:[{“name”:”registry”,”readinessProbe”:{“httpGet”:{“scheme”:”HTTPS”}}}]}}}}’ -n default
- oc volume dc/docker-registry –add –type=secret –secret-name=registry-certificates -m /etc/secrets -n default
- oc create serviceaccount router -n default
- oadm policy add-scc-to-user hostnetwork system:serviceaccount:default:router
- oadm policy add-cluster-role-to-user cluster-reader system:serviceaccount:default:router
- oadm router router –replicas=1 –service-account=router
- Bajamos algunos stream y los copiamos en la carpeta, y los cargamos:
1 2 3 |
for f in image-streams/image-streams-centos7.json; do cat $f | oc create -n openshift -f -; done for f in db-templates/*.json; do cat $f | oc create -n openshift -f -; done for f in quickstart-templates/*.json; do cat $f | oc create -n openshift -f -; done |
- Comprobamos en el master que todo funciona:
- [root@master ~]# oc get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE
docker-registry-1-77m5m 1/1 Running 0 13m 10.128.0.2 node1.openshift.maquinasvirtuales.eu
docker-registry-3-deploy 1/1 Running 0 4m 10.129.0.5 node2.openshift.maquinasvirtuales.eu
docker-registry-3-g4qk9 0/1 Running 6 4m 10.129.0.6 node2.openshift.maquinasvirtuales.eu
router-1-8g2nr 1/1 Running 0 2m 192.168.28.132 node1.openshift.maquinasvirtuales.eu
- [root@master ~]# oc get po -o wide
- Podemos entrar en la gestión web mediante la URL https://IP_MASTER:8443:
- Yo me logueo con root del master:
En otro momento utilizaremos Openshift y daremos unos cuantos comandos.
¿Te ha gustado la entrada SÍGUENOS EN TWITTER?
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?
Un comentario
Pingback: Instalar laboratorio Citrix XenApp 7.9 - VMware Blog