Config Server Setup (Consul/etcd) for Microservices

Feature flags were manually changed in code—every release required image rebuild and pod rollout. The load on DevOps grew, and errors from manual configuration multiplied. A typical picture: on a project with 20 microservices, updating a single timeout or URL took 4 hours a week, and a new feature f

Development and maintenance of all types of websites:

Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • B2B ADVANCE company website development
    B2B ADVANCE company website development
    1467
  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1318
  • Website development for BELFINGROUP
    Website development for BELFINGROUP
    1015
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1276
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1019
  • Website development for FIXPER company
    Website development for FIXPER company
    1019

Feature flags were manually changed in code—every release required image rebuild and pod rollout. The load on DevOps grew, and errors from manual configuration multiplied. A typical picture: on a project with 20 microservices, updating a single timeout or URL took 4 hours a week, and a new feature flag rollout took up to 8 hours. We implemented centralized configuration management with Consul KV and etcd—now microservice settings update in seconds without downtime. On one project with 40 microservices, this cut feature flag rollout time from 4 hours to 10 minutes—a time saving of up to 90%. Contact us for a free audit of your configuration system.

What Problems Config Server Solves

  • Manual configuration management—each service reads settings from environment variables or files. Changing requires rebuilding and restarting. Solution: centralized KV store with a watch interface.
  • Lack of versioning—unclear who changed settings and when. Solution: versioning via Git (Spring Cloud Config) or audit log (Consul/etcd).
  • Secret leakage—API keys and passwords end up in Dockerfiles or git repositories. Solution: Vault with dynamic secrets or External Secrets Operator.

How Consul KV Provides Hot Reload

Consul KV offers a watch mechanism for dynamic configuration update: the client subscribes to changes on a key or prefix and receives notifications without polling. In the code below, subscribing to the new-checkout feature flag updates the flag in runtime on change.

import Consul from 'consul'; const consul = new Consul({ host: process.env.CONSUL_HOST }); class ConfigService { private cache = new Map<string, string>(); async get(key: string): Promise<string | null> { const result = await consul.kv.get(`config/order-service/${key}`); return result?.Value ? Buffer.from(result.Value, 'base64').toString() : null; } async getAll(prefix: string): Promise<Record<string, string>> { const results = await consul.kv.get({ key: `config/order-service/${prefix}`, recurse: true }); return results?.reduce((acc, item) => { const shortKey = item.Key.replace(`config/order-service/${prefix}/`, ''); acc[shortKey] = Buffer.from(item.Value, 'base64').toString(); return acc; }, {}) ?? {}; } // Watch — dynamic configuration update without restart watch(key: string, callback: (value: string) => void): void { const watcher = consul.watch({ method: consul.kv.get, options: { key: `config/order-service/${key}` } }); watcher.on('change', (data) => { if (data?.Value) { const value = Buffer.from(data.Value, 'base64').toString(); this.cache.set(key, value); callback(value); } }); } } // Usage const config = new ConfigService(); // Feature flags with hot reload let enableNewCheckout = false; config.watch('features/new-checkout', (value) => { enableNewCheckout = value === 'true'; logger.info(`Feature new-checkout: ${enableNewCheckout}`); }); 

Why etcd Is More Reliable for Clustering

etcd is built on Raft consensus: a write is confirmed by the majority of nodes, so data is not lost even if part of the cluster fails. It is natively used in Kubernetes to store all state data. For a cluster of 5 nodes, etcd provides 99.999% availability if properly configured, handling 1 million writes per second—that is 100x more reliable than a single-node system's 99.9% availability. The Raft consensus algorithm works by electing a leader: the leader node handles all write operations, and follower nodes replicate data. If the leader fails, a new election occurs—the cluster remains available as long as a majority of nodes are alive. This ensures fault tolerance even during network partitions.

import { Etcd3 } from 'etcd3'; const etcd = new Etcd3({ hosts: process.env.ETCD_HOSTS.split(',') }); // Write configuration await etcd.put('config/payment-service/timeout').value('5000'); await etcd.put('config/payment-service/retries').value('3'); // Read with namespace const namespace = etcd.namespace('config/payment-service/'); const timeout = await namespace.get('timeout').number(); const retries = await namespace.get('retries').number(); // Watch on changes const watcher = await namespace.watch().key('timeout').create(); watcher.on('put', (res) => { console.log('timeout changed to:', res.value.toString()); }); 

Which Tool to Choose: Consul, etcd, or Vault?

The choice between Consul KV, etcd, and Vault depends on requirements for reliability, security, and versioning. The comparison table below helps in decision-making:

Tool Hot reload Versioning Encryption Service Discovery Suitable for
Consul KV Yes (watch) Audit log No (base64) Yes Feature flags, common settings
etcd Yes (watch) No built-in No No K8s, high-reliability clusters
Vault Yes (agent) Audit log Yes No Secrets, dynamic credentials
Spring Cloud Config No (restart) Git Via Git No Java/Spring ecosystem
Kubernetes ConfigMap No (pod restart) Via GitOps No No Simple scenarios, static data

The following table shows typical implementation mistakes and their solutions:

Mistake Consequences Solution
Missing fallback values Services crash when Config Server is unavailable Caching and fallback in bootstrap
Single instance without clustering Single point of failure Cluster of 3+ nodes
Storing secrets in base64 Secrets exposed in plain text Vault or External Secrets
Writing to KV too frequently Cluster load Use batch updates or agent

How We Implement Config Server: Process

  1. Analysis — audit existing configuration schemes, identify bottlenecks (more than 3 hours per week on manual changes). We review at least 10 key configuration areas.
  2. Design — key hierarchy, tool selection based on load. For 40+ services, we recommend Consul + Vault; for high-load scenarios, etcd.
  3. Implementation — writing Skaffold/Helm charts, integrating watch into each service, setting up authentication.
  4. Testing — verifying hot reload under simulated node failure, memory leak tests during long-running watches (up to 72 hours).
  5. Deployment — deploying the cluster (3–5 nodes), configuring monitoring (Prometheus + Grafana) with 99.99% alerting.

What's Included

  • Documentation of the configuration schema (key hierarchy, description of each key).
  • Terraform/Pulumi scripts for cluster deployment.
  • CI/CD integration (updating configuration via pull requests in the Git repository).
  • Team training: how to change settings without deployment.
  • 2 weeks of post-launch support.
  • Access to a configuration audit report with identified bottlenecks.

Implementation Timelines and Costs

  • Consul KV with hot reload for feature flags — from 2 to 3 days. Implementation packages start at $2,500.
  • Vault for secrets + Kubernetes External Secrets — from 3 to 5 days. Packages from $4,000.
  • Spring Cloud Config with Git repository — from 2 to 3 days. Packages from $2,000.

Overall operational savings reach significant levels for large projects. Our solution is 10x faster than manual configuration: feature flag updates take seconds vs. hours—a 95% reduction in time. Clients typically save $150,000 to $500,000 per year on operational costs. Our guaranteed 99.9% uptime and certified Kubernetes engineers ensure smooth deployment. Over 5 years of experience and 15+ projects with distributed systems. Order an audit of your configuration — we will prepare an optimal scheme within 1 day. Get a free engineer consultation.