{"id":21565231,"url":"https://github.com/mastercloudapps-projects/mongo-stateful-continuousdeployment-kubernetes","last_synced_at":"2025-08-31T11:46:30.786Z","repository":{"id":104936231,"uuid":"279317122","full_name":"MasterCloudApps-Projects/Mongo-Stateful-ContinuousDeployment-Kubernetes","owner":"MasterCloudApps-Projects","description":null,"archived":false,"fork":false,"pushed_at":"2020-12-03T19:34:06.000Z","size":3434,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-18T05:17:40.369Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MasterCloudApps-Projects.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-07-13T13:55:32.000Z","updated_at":"2020-12-03T19:34:08.000Z","dependencies_parsed_at":"2024-07-09T15:33:20.442Z","dependency_job_id":null,"html_url":"https://github.com/MasterCloudApps-Projects/Mongo-Stateful-ContinuousDeployment-Kubernetes","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MasterCloudApps-Projects/Mongo-Stateful-ContinuousDeployment-Kubernetes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterCloudApps-Projects%2FMongo-Stateful-ContinuousDeployment-Kubernetes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterCloudApps-Projects%2FMongo-Stateful-ContinuousDeployment-Kubernetes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterCloudApps-Projects%2FMongo-Stateful-ContinuousDeployment-Kubernetes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterCloudApps-Projects%2FMongo-Stateful-ContinuousDeployment-Kubernetes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MasterCloudApps-Projects","download_url":"https://codeload.github.com/MasterCloudApps-Projects/Mongo-Stateful-ContinuousDeployment-Kubernetes/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterCloudApps-Projects%2FMongo-Stateful-ContinuousDeployment-Kubernetes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272976632,"owners_count":25025041,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-31T02:00:09.071Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-24T10:18:56.931Z","updated_at":"2025-08-31T11:46:30.713Z","avatar_url":"https://github.com/MasterCloudApps-Projects.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MongoDB replicaset en Kubernetes\n\nEste repositorio analiza las diferentes opciones que podemos usar en Kubernetes para desplegar aplicaciones con estado. Usaremos MongoDB para crear un cluster en modo [ReplicaSet](https://docs.mongodb.com/manual/replication/).\n\n## Asunciones\n\nPartimos de la base de que disponemos de un cluster Kubernetes en cualquiera de sus variantes. Se puede usar Minikube o Microk8s para trabajar en local o bien cualquier servicio Kubernetes que ofrecen proveedores cloud como Amazon Web Services o Google Platform.\n\nEl sistema de monitorización compuesto por Grafana y Prometheus y su instalación quedan fuera del ámbito de este proyecto.\n\nVaya a [Infra](infra/README.md) para los detalles de la infraestructura usada para estas pruebas.\n\n## Servicios\n\n### Dummy Service\n\nSe pretende observar el comportamiento del cluster de MongoDB en un entorno de simulación con carga de trabajo.\n\nPara ello se desarrolla una aplicación en NodeJs que expone una simple API REST con un solo endpoint `POST /` que almacena en la base de datos cualquier objeto JSON que se incluya en el *body* de la petición.\n\nEl servicio expone métricas en formato Prometheus en `/metrics` para poder obtener información sobre el rendimiendo de la aplicación.\n\n```bash\n# HELP dummy_service_concurrent_requests Incoming requests\n# TYPE dummy_service_concurrent_requests gauge\ndummy_service_concurrent_requests 0\n\n# HELP dummy_service_requests_total Incoming requests\n# TYPE dummy_service_requests_total counter\ndummy_service_requests_total 0\n\n# HELP dummy_service_requests_stored_total Incoming stored requests\n# TYPE dummy_service_requests_stored_total counter\ndummy_service_requests_stored_total 0\n\n# HELP dummy_service_requests_error_storing_total Incoming not stored requests\n# TYPE dummy_service_requests_error_storing_total counter\ndummy_service_requests_error_storing_total 0\n\n# HELP dummy_service_request_duration_seconds request duration summary\n# TYPE dummy_service_request_duration_seconds summary\ndummy_service_request_duration_seconds{quantile=\"0.01\"} 0\ndummy_service_request_duration_seconds{quantile=\"0.05\"} 0\ndummy_service_request_duration_seconds{quantile=\"0.5\"} 0\ndummy_service_request_duration_seconds{quantile=\"0.9\"} 0\ndummy_service_request_duration_seconds{quantile=\"0.95\"} 0\ndummy_service_request_duration_seconds{quantile=\"0.99\"} 0\ndummy_service_request_duration_seconds{quantile=\"0.999\"} 0\ndummy_service_request_duration_seconds_sum 0\ndummy_service_request_duration_seconds_count 0\n```\n\n### Replicaset Exporter\n\nReplicaset Exporter es un *Exporter* de Prometheus que se encarga de monitorizar el cluster de MongoDB y exponer métricas sobre su estado.\n\n```bash\n# HELP mongodb_replset_member_health MongoDB replicaSet Member Health\n# TYPE mongodb_replset_member_health gauge\nmongodb_replset_member_health{name=\"mongo-0.mongo-svc.tfm.svc.cluster.local:27017\"} 1\nmongodb_replset_member_health{name=\"mongo-1.mongo-svc.tfm.svc.cluster.local:27017\"} 1\nmongodb_replset_member_health{name=\"mongo-2.mongo-svc.tfm.svc.cluster.local:27017\"} 1\n\n# HELP mongodb_replset_member_state MongoDB replicaSet Member state\n# TYPE mongodb_replset_member_state gauge\nmongodb_replset_member_state{name=\"mongo-0.mongo-svc.tfm.svc.cluster.local:27017\"} 2\nmongodb_replset_member_state{name=\"mongo-1.mongo-svc.tfm.svc.cluster.local:27017\"} 2\nmongodb_replset_member_state{name=\"mongo-2.mongo-svc.tfm.svc.cluster.local:27017\"} 1\n\n# HELP mongodb_replset_member_downtime_total MongoDB replicaSet Member total down time\n# TYPE mongodb_replset_member_downtime_total gauge\nmongodb_replset_member_downtime_total{name=\"mongo-0.mongo-svc.tfm.svc.cluster.local:27017\"} 0\nmongodb_replset_member_downtime_total{name=\"mongo-1.mongo-svc.tfm.svc.cluster.local:27017\"} 0\nmongodb_replset_member_downtime_total{name=\"mongo-2.mongo-svc.tfm.svc.cluster.local:27017\"} 0\n```\n\n## Análisis del despliegue de MongoDB\n\n### Despliegue con Statefulset\n\nEn el directorio [k8s-mongo-statefulset](k8s-mongo-statefulset) se encuentran los recursos para crear un cluster de MongoDB en modo *ReplicaSet* haciendo uso del recurso **StatefulSet** de Kubernetes de forma totalmente manual.\n\n[Análisis del despliegue con Statefulset](k8s-mongo-statefulset/README.md)\n\n### Despliegue con Mongo Operator\n\nEn el directorio [k8s-mongo-operator](k8s-mongo-operator) se encuentran los recursos para crear un cluster haciendo uso del operador de MongoDB para Kubernetes [MongoDB Community Kubernetes Operator](https://github.com/mongodb/mongodb-kubernetes-operator)\n\n[Análisis del despliegue con Operator](k8s-mongo-operator/README.md)\n## Referencias\n\n* https://kubernetes.io/es/docs/concepts/workloads/controllers/statefulset/#estrategias-de-actualizaci%C3%B3n\n* https://github.com/mongodb/mongodb-kubernetes-operator","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmastercloudapps-projects%2Fmongo-stateful-continuousdeployment-kubernetes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmastercloudapps-projects%2Fmongo-stateful-continuousdeployment-kubernetes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmastercloudapps-projects%2Fmongo-stateful-continuousdeployment-kubernetes/lists"}