Ésta semana y la anterior estoy con un curso de DevOPs. En él estamos viendo principalmente docker y los orquestadores swarm y kubernetes.
En éste post nos vamos a centrar de momento con swarm.
Swarm viene “instalado” cuando instalamos docker y no tendremos que instalar nada addicional, simplemente configurarlo que lo veremos mas adelante.
Primero de todo pues tendremos que instalar docker, pero no usaremos los paquetes del repositorio, sino que vamos a seguir la instalación de la página web de docker para debian.
El entorno donde vamos a instalar docker van a ser 3 máquinas virtuales con KVM, docker-master (172.31.0.201), docker-worker1 (172.31.0.202) y docker-worker2 (172.31.0.203). La instalación la repetimos en las 3 máquinas.
Instalar docker
Comprobamos que docker no esté instalado y si lo está, lo desinstalamos
root@docker-master:~# apt update && apt -y upgrade && apt -y dist-upgrade root@docker-master:~# apt-get remove docker docker-engine docker.io containerd runc
Instalamos las dependencias necesarias
root@docker-master:~# apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
Añadimos la clave GPG
root@docker-master:~# curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - root@docker-master:~# apt-key fingerprint 0EBFCD88
Configuramos el repositorio “stable”
root@docker-master:~# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
Instalamos docker
root@docker-master:~# apt update root@docker-master:~# apt-get install docker-ce docker-ce-cli containerd.io
A partir de aquí ya tenemos docker instalado y procederemos a montar el cluster swarm.
Activar cluster swarm
A continuación, montaremos 1 master y 2 workers. La recomendación es tener mínimo 3 master y 3 workers. En swarm, un master puede actuar como worker. De momento en el entorno que estamos montando nos limitaremos a 3 nodos, docker-master, docker-worker1 y docker-worker2.
En el master vamos a ejecutar lo siguiente:
root@docker-master:~# docker swarm init --advertise-addr 172.31.0.201 Swarm initialized: current node (gsfmiqxfi2kzw4u4yc9t2rexd) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-563paqeb74nfn8fyaef0hgfptycdp61e0xn2jnq0737i4c3nos-************************* 172.31.0.201:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
La ip que pondremos será la ip que será accesible desde los worker.
Si nos equivocamos, para eliminar la configuración de swarm, vamos a eleminar el directorio /var/lib/docker/swarm y reiniciamos docker
root@docker-master:~# rm -R /var/lib/docker/swarm root@docker-master:~# systemctl restart docker
Y ejecutamos lo siguiente en los dos worker
root@docker-worker1:~# docker swarm join --token SWMTKN-1-563paqeb74nfn8fyaef0hgfptycdp61e0xn2jnq0737i4c3nos-************************* 172.31.0.201:2377 This node joined a swarm as a worker. root@docker-worker2:~# docker swarm join --token SWMTKN-1-563paqeb74nfn8fyaef0hgfptycdp61e0xn2jnq0737i4c3nos-************************* 172.31.0.201:2377 This node joined a swarm as a worker.
Para comprobar que el cluster se ha montado correctamente hacemos usamos docker node ls
root@docker-master:~# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION gsfmiqxfi2kzw4u4yc9t2rexd * docker-master Ready Active Leader 19.03.13 m465hzbhhra0a9p82t03h8tjb docker-worker1 Ready Active 19.03.13 cxsxa45st0xhyra5gjf7oi52n docker-worker2 Ready Active 19.03.13
Desde aquí podemos administrar el cluster docker-swarm, pero nos podrá interesar instalar un entorno gui/web para gestionar el orquestador, en éste caso portainer.io.
TODO
https://www.portainer.io/installation/ (swarm != standalone)
120 cd / 121 mkdir portainer 122 curl -L https://downloads.portainer.io/portainer-agent-stack.yml -o portainer-agent-stack.yml 123 cat portainer-agent-stack.yml 124 docker stack deploy --compose-file=portainer-agent-stack.yml portainer 125 docker stack ls 126 docker stack ps portainer 127 docker service ps portainer_agent 128 docker service ps portainer_portainer
root@docker-master:~# cd root@docker-master:~# mkdir portainer root@docker-master:~# cd portainer/ root@docker-master:~/portainer# ls root@docker-master:~/portainer# curl -L https://downloads.portainer.io/portainer-agent-stack.yml -o portainer-agent-stack.yml % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 757 100 757 0 0 124 0 0:00:06 0:00:06 --:--:-- 156 root@docker-master:~/portainer# ls portainer-agent-stack.yml root@docker-master:~/portainer# vi portainer-agent-stack.yml root@docker-master:~/portainer# docker stack deploy --compose-file=portainer-agent-stack.yml portainer Creating network portainer_agent_network Creating service portainer_agent Creating service portainer_portainer root@docker-master:~/portainer# docker stack ls NAME SERVICES ORCHESTRATOR portainer 2 Swarm root@docker-master:~/portainer# docker stack ps portainer ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS ubu2un4081no portainer_agent.h8npmjp902itkgbc1o4h7rbbn portainer/agent:latest docker-worker2 Running Preparing 22 seconds ago vrmlh4cqggua portainer_agent.jqk9vb4dz5fk8o7e3uup9nxqw portainer/agent:latest docker-worker1 Running Preparing 22 seconds ago s16d83o5fylx portainer_agent.nty1ejqatx2fsgpb6veclsqi9 portainer/agent:latest docker-master Running Preparing 22 seconds ago v0btdrwwjhr7 portainer_portainer.1 portainer/portainer-ce:latest docker-master Running Preparing 21 seconds ago root@docker-master:~/portainer# docker service ps portainer_agent ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS ubu2un4081no portainer_agent.h8npmjp902itkgbc1o4h7rbbn portainer/agent:latest docker-worker2 Running Preparing 32 seconds ago vrmlh4cqggua portainer_agent.jqk9vb4dz5fk8o7e3uup9nxqw portainer/agent:latest docker-worker1 Running Preparing 32 seconds ago s16d83o5fylx portainer_agent.nty1ejqatx2fsgpb6veclsqi9 portainer/agent:latest docker-master Running Preparing 32 seconds ago root@docker-master:~/portainer# docker service ps portainer_portainer ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS q99tmtqpgxff portainer_portainer.1 portainer/portainer-ce:latest docker-master Ready Ready 3 seconds ago 0wwk8k45ju66 \_ portainer_portainer.1 portainer/portainer-ce:latest docker-master Shutdown Failed 4 seconds ago "task: non-zero exit (1)" v0btdrwwjhr7 \_ portainer_portainer.1 portainer/portainer-ce:latest docker-master Shutdown Failed 13 seconds ago "task: non-zero exit (1)"
Ésto nos va a levantar el servicio de portainer en el puerto 9000, al entrar nos va a pedir definir un nombre de usuario y contraseña, una vez realizado accederemos al panel web de portainer
Y de momento dejo éste post aquí ;) en próximos post explicaciones de como desplegar Dockerfile y docker-compose.
Gracias Alberto Garcia F. por el curso :)
Pingback: Comandos básicos de Docker – Blackhold
Pingback: Comandos básicos de Docker Blackhold - Blog de Informática