Package: cleandev-py-docker
py-docker-shellCon esta librerias podras consultar el estado del de tu enjambre de docker de una forma facil y efectiva,
se alimenta del propioSDK docker en python.Quick StartPosee una claseSummaryInfocon tres potentes metodos para mostrar el estado de cada elementos.Status ClusterPara el caso de la información sobre el cluster retorna en un diccionario los siguientes datos:-total_nodes: El numero de nodos del que se compone el cluster, aqui se cuenta aquellos nodos que estan
en ejecución, apagados o con algun tipo de error.-total_reades: Represeta el número de nodos que está activo ostate=running-workers['total']: Representa el número total de tipo de nodo worker que posee el cluster-workers['ready']: Representa el número total de workers que están activos-managers['total']: Representa el número total de tipo de nodo manager que posee el cluster-managers['ready']: Representa el número total de managers que están activos-status: Representa el estado del cluster[OK|WARNING|KO], a continuación explicaremos que se considero
para evaluar dicho estadoNotaUn cluster como bien sabemos es un grupo de máquinas que actuan como una sola con el fin de ocultar el hecho de ser
varias máquinas para obtener la ventaja de que gracias a sus mecanismos de cluster las maquinas individualmente puedan
ser tolerante a fallos ya que otra maquina del grupo se ocupara del trabajo de dicha máquina que sufre la falla.Sabiendo esta primisa en docker existen dos roles de maquinas diferentesManagers y Workerssin entrar mucho en detalle
los manager son los jefes del cluster y por ese motivo docker recomienda que un al menos existan 3 máquinas de este tipo.En primer lugar cuando una maquina manager del nodo se cae dicha gestion que hacia dicha maquina ha de reorganizarce y
para ellos se necesita como minimo otra maquina, ademas de esto existe un proceso interno en el cual,
siempre una máquina es laLeadery existe otra preparada para tomar el relevo para que esto ocurra internamente hay
un proceso de votación que ha de ser impar y dado que 1 maquina no es valido ya que si se cae no hay reemplazo lo minimo
fiable son 3 maquinasmanager.Los workers suele ejecutar tareas. Existen tareas que unicamente se ejecutan en los workers por lo que logico pensar
que de nada vale tener una única máquina de este tipo, por lo tanto consideramos que como minimo deben existir 2 para
tomar el relevo.Status Cluster - OKSe entiende por un cluster saludable aquel que por razones antes mencionadas posee al menos 3Managersy 2Workersy todas las máquinas están en el estado dereadyStatus Cluster - WARNINGEn pocas palabras este estado significa que el cluster está comprometido que es diferente a estar inoperativo.Cuando el cluster deja de ser tolerante a fallos se consideraComprometido - WARNINGEjemplos 1:Para un cluster de3 Manager y 2 Workerssi alguna de los dos tipos de máquinas cae el cluster
seguira funcionando pero ya otro fallo puede compremeter el cluster.Se nos cae unManagery tendriamos2 Manager y 2 Workersen el caso de que fallara otroManagerel cluster pese a tener aun una maquinaManagerseria par y no puede llegar a un conceso no se asignaria
un lider y el cluster entra en estado inconsistente. No obstante podria caerse un nodoWorkery seguiria
estando operativo pero debido a que no sabemos cual es la maquina que fallara levantamos la alerta.Ejemplos 2:
Para un cluster de1 Manager y 1 Workersautomaticamente entra en estado de alerta ya que cualquier caida
de alguna de las maquina el cluster estaría comprometido.Ejemplos 3:
Para un cluster mayores de3 Manager y 2 Workersdesde el momento que el todas las maquinas no esten operativas
entra en estado de alerta pese a que de no estar todas operativas puedan aun ser tolerante a fallos con el fin
de revisarlas y dejarlas en estado optimo.Status Cluster - ERRORCualquier cluster que no tenga al menos un tipo de cada máquina directamente lo catalogamos como
inconsistente.importjsonfrompy_dockerimportSummaryInfoif__name__=='__main__':data:dict=SummaryInfo.cluster_status()print(json.dumps(data,indent=3)){"status_cluster":{"total_nodes":5,"total_readys":5,"workers":{"total":2,"ready":2},"managers":{"total":3,"ready":3},"status":"OK"}}Status ServiceExisten dos conceptos rc = running containers o "contenedores en ejecución" y dc = desired container o "contenedores
deseados".Status Services - OKUn servicio se considera saludable cuando rc == dcStatus Services - WARNINGUn servicio se considera comprometido cuando rc > 1 Y dc < rc. Es decir que aun existe algun contenedor
dando el servicio pero por alguna razón en algún nodo no se puede ejecutar dicho servicio por lo que
se podría estar comprometido en caso de dichos servicios restantes caigan en la maquina que no puede ejecutar dicho
servicioStatus Services - KOUn servicio se considera Fallido cuando rc == 0. Dado que un servicio al menos debe tener un contenedor sirviendo
dicho servicio no se contempla que un servicio con 0 contenedores esté operando correctamente.importjsonfrompy_dockerimportSummaryInfoif__name__=='__main__':data:dict=SummaryInfo.services_status()print(json.dumps(data,indent=3)){"services":[{"id_service":"01d21zx1sme1xhdijsw948mpo","replicas":15,"running":15,"status":"OK"},{"id_service":"1z1nlvwth223o3mhk7r9k2t0q","replicas":5,"running":5,"status":"OK"}],"status":"OK"}Nodes InfoObtiene información sobre los nodos, no evalua ningun tipo de estado unicamente da información sobre cada nodo.importjsonfrompy_dockerimportSummaryInfoif__name__=='__main__':data:dict=SummaryInfo.nodes_info()print(json.dumps(data,indent=3)){"nodes":[{"id":"ixjkfsxuk4wfidyyb2ntlav1q","hostname":"worker-01","engine_version":"19.03.12","status":"ready"},{"id":"l5e3ei2c4t6q344774njpmrhl","hostname":"manager-02","engine_version":"19.03.12","status":"ready","manager_status":"reachable","manager_addr":"192.168.56.120:2377"},{"id":"mn587vd6x7og5fdu8qb7b8ecq","hostname":"manager-03","engine_version":"19.03.12","status":"ready","manager_status":"reachable","manager_addr":"192.168.56.121:2377"},{"id":"pvnw1fwejkknzokxl8i4e7vhe","hostname":"worker-02","engine_version":"19.03.12","status":"ready"},{"id":"w3ut3mx7ad32keuu7yav5hw45","hostname":"manager-01","engine_version":"19.03.12","status":"ready","manager_status":"reachable","manager_addr":"192.168.56.119:2377"}]}Full StatusAgrupa las opciones anteriores en un solo casoimportjsonfrompy_dockerimportSummaryInfoif__name__=='__main__':data:dict=SummaryInfo.generic_status()print(json.dumps(data,indent=3)){"status_cluster":{"total_nodes":5,"total_readys":5,"workers":{"total":2,"ready":2},"managers":{"total":3,"ready":3},"status":"OK"},"nodes":[{"id":"ixjkfsxuk4wfidyyb2ntlav1q","hostname":"worker-01","engine_version":"19.03.12","status":"ready"},{"id":"l5e3ei2c4t6q344774njpmrhl","hostname":"manager-02","engine_version":"19.03.12","status":"ready","manager_status":"reachable","manager_addr":"192.168.56.120:2377"},{"id":"mn587vd6x7og5fdu8qb7b8ecq","hostname":"manager-03","engine_version":"19.03.12","status":"ready","manager_status":"reachable","manager_addr":"192.168.56.121:2377"},{"id":"pvnw1fwejkknzokxl8i4e7vhe","hostname":"worker-02","engine_version":"19.03.12","status":"ready"},{"id":"w3ut3mx7ad32keuu7yav5hw45","hostname":"manager-01","engine_version":"19.03.12","status":"ready","manager_status":"reachable","manager_addr":"192.168.56.119:2377"}],"services":[{"id_service":"01d21zx1sme1xhdijsw948mpo","replicas":15,"running":15,"status":"OK"},{"id_service":"1z1nlvwth223o3mhk7r9k2t0q","replicas":5,"running":5,"status":"OK"}],"status":"OK"}Processfinishedwithexitcode0