Microconfig Server Beta
MicroConfig Server was built to simplify configuration delivery to microservices.
It provides a REST API (MicroConfig Server)
and binary CLI (microctl)
to
fetch different configuration types for your services.
MicroConfig Server handles all configuration repo GIT operations and templating, so you don't have to. Also it allows for 3rd party integrations like HashiCorp Vault Coming Soon and Spring Boot Coming Soon
You can see a schema below for a deployment of orders-service
pod using
MicroConfig Server
.
Your deploy task fetches Helm values.yaml
and uses them to deploy application pod.
At startup orders-service
pod fetches it's own application.yaml
.
Server Setup
MicroConfig Server
was designed to be Cloud Native from the start, so all you need is
Docker
This will start your server on port 8080
with microconfig-quickstart
as it's configuration repo.
docker run -p 8080:80 microconfig/server:latest
......
16-03-2021 18:45:37.909 [INFO] o.s.b.StartupInfoLogger - Started MicroconfigServerKt in 13.973 seconds (JVM running for 16.68)
Available Environment Variables:
Variable | Description | Default |
---|---|---|
REMOTE_URL |
your configuration repo git url | microconfig-quickstart repo |
USERNAME |
git repo username | open |
PASSWORD |
git repo password | source |
CONFIG_BRANCH |
main git branch | master |
LOG_LEVEL |
log level | DEBUG |
Cli Setup
Microctl
is a cli binary to fetch your configs from server. You can get it from GitHub releases
You can also use HomeBrew
brew tap microconfig/microctl
brew install microctl
Cli Usage
After you installed microctl
and started your server you can fetch configuration.
All examples assume that you have your server running on http://localhost:8080 with microconfig-quickstart
repo.
To use your own server url you can either use MC_ADDRESS
environment variable or
specify it with --server
flag. If you don't specify anything http://localhost:8080
is used.
Almost all flags are doubled with environment variables
microctl help
Use this command to show available commands and common flags
$ microctl help
Usage: microctl [command] [service] [flags]
Commands:
show: fetch config and show it in console (MC_CMD=show)
save: fetch config and save it to disk (MC_CMD=save)
version: show cli version
help: show this message
Service:
Generate configs for this service name (MC_SERVICE)
Common Flags:
--ref [master]: git branch or tag to use, by default master (MC_REF)
--timeout [10]: server calls timeout in seconds, by default 10 (MC_TIMEOUT)
--server [url]: server url, by default [http://localhost:8080] (MC_ADDRESS)
--skip-tls: skip server tls certificate verification (MC_SKIP_TLS=true)
--tls-root-ca [path]: expected Root CA certificate (MC_ROOT_CA)
Notice --skip-tls
and --tls-root-ca
flags. They allow to work with
self-signed certificates or private Certificate Authority.
microctl show
Use this command to fetch service config and show it in console
$ microctl show
Usage microctl show [service] [flags]
Generates configuration of specified type for service and outputs it to console
Flags:
-e, --env [name]: config environment (MC_ENV)
-t, --type [name]: config type, 'app' by default (MC_TYPE)
-s, --set [foo=bar]: override values for placeholders and vars
$ microctl show payment-backend -t deploy -e dev
image: "payment-backend:latest"
replicas: 1
ingress:
host: http://payment-backend.local
probes:
health: /monitoring/health
ready: /monitoring/ready
microctl save
Use this command to fetch service config and save it to disk
$ microctl save
Usage microctl save [service] [flags]
Generates configuration for service and saves it to disk
Flags:
-e, --env [name]: config environment (MC_ENV)
-t, --type [name]: config type, all types by default (MC_TYPE)
-d, --dir [path]: output directory, current dir by default (MC_DIR)
-s, --set [foo=bar]: override values for placeholders and vars
$ microctl save payment-backend -t app -e dev -d config
$ ls config
327 application.yaml
264 logback.xml
microctl version
Display microctl version
$ microctl version
Version 0.5.0
Kubernetes Usage
You can use microctl
in your init container to fetch configuration at pod's startup.
Example Deployment of payment-backend
pod
apiVersion: apps/v1
kind: Deployment
metadata:
name: payment-backend
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: payment-backend
template:
metadata:
labels:
app: payment-backend
spec:
volumes:
- name: config
emptyDir: { }
initContainers:
- name: microconfig
image: "microconfig/server-cli:latest"
imagePullPolicy: Always
env:
- name: MC_ADDRESS
value: http://microconfig-server.default.svc.cluster.local
- name: MC_CMD
value: save
- name: MC_SERVICE
value: payment-backend
- name: MC_ENV
value: dev
- name: MC_DIR
value: "/config"
volumeMounts:
- name: config
mountPath: "/config"
containers:
- name: payment-backend
image: "alpine:latest"
imagePullPolicy: Always
command: [ "sleep", "infinity" ]
volumeMounts:
- name: config
mountPath: "/config"
Feedback
Microconfig Server is in active development and currently in Beta. If you have any issues or suggestions you can contact us on Github or Join our Slack!