73 karma · joined February 28, 2022
export SOME_VAR=$(cat /run/secrets/some_secret)
exec /original/entrypoint.sh
Can you explain the second one? I don't get the usecase.https://github.com/neuroforgede/swarmgate
What's Swarmgate? Swarmgate is our innovative Docker Socket Proxy designed to provide a tenant-specific view onto a Docker Swarm. It supports all necessary operations for deploying stacks, along with managing volumes, secrets, configs, networks, and more. This allows multiple teams to work collaboratively within the same cluster without interfering with each other, thanks to unique labels that filter requests based on resource ownership. It's about making Docker Swarm environments as efficient and user-friendly as possible.
Under the Hood:
We've built Swarmgate using Node.js and Express, with the dockerode (and docker-modem) library for Docker interaction. This technology stack ensures robust performance and seamless integration with Docker's API, providing a reliable and effective management tool.
What's New in 0.7.0?
Docker Registry Auth Verification: Enhanced security through Docker Registry authentication checks to prevent unauthorized access to images.
Security Enhancements: Removal of the :version/swarm endpoint to protect against potential security vulnerabilities by exposing swarm join tokens.
Simplified Proxying: Introduction of the proxyRequestToDocker function for straightforward proxying of requests without the need for filtering.
Resolved Log Issues: We've tackled service/tasks log parsing issues to ensure compatibility and ease of use with the Docker CLI.
A Gentle Reminder:As enthusiastic as we are about Swarmgate 0.7.0, it's important to remember that this is still ALPHA software. It's primarily a defense against accidental disruptions within clusters. While we're diligently enhancing security features, it's advisable to use Swarmgate in environments where there's a high level of trust among users.
What's up next:
A better tutorial on how to set this up
More ideas from https://github.com/neuroforgede/swarmgate/issues/1I love DRF for CRUD apis. It just gets the job done and you can Focus on data modelling.
We built our data hub/data Integration solution on top of it. [1] It was a good choice.
By far the most extensible and overridable library I have worked with so far. Even when you need to ressort to hacks, they never seem to break when upgrading a Version.
Sounded cool, but in practice it was really slow. The techniques that are usually employed by Data Vault to fix this issue seemed too complex. Over time we moved to an implementation that handles the historization dynamically at runtime by generating historizing SQL queries ourselves [1]. We now use transaction time to determine winners and use an autoincrementing column to determine who wins on ties. A lot of brainpower went into ensuring this design is concurrency safe. On a sidenote: Generating SQL in python sounds dangerous, but we spent a lot of time on making it secure. We even have a linter that checks that everything is escaped properly whenever we are in dev mode [2].
[0] https://github.com/neuroforgede/nfcompose/
[1] https://github.com/neuroforgede/nfcompose/blob/main/skipper/...
[2] https://github.com/neuroforgede/nfcompose/blob/main/skipper/...
Note that we build dashboards for customers that end up having some complex SQL directly in Superset.
Its not shiny but it works. We use it for most of our selfhosted stuff (which is a lot) and our customers.
I host a swarm fans hangout every 2 months over at devops.fan with Bret Fisher. Also we help each other on discord. Join us :)
Also the volume plugin spec is so simple that it is possible to maintain your own plugin (even without csi).
I recently fixed one of my biggest pet peeves with docker swarm - the inability to directly exec into a service without first SSHing to the host the task is running on.
https://github.com/neuroforgede/docker-swarm-proxy
Maybe your issue is in this ballpark? Happy to exchange notes on this. If you are looking for a community of Swarm users, check out https://devops.fan (that's a discord hosted by Bret Fisher)
CSI support for Swarm is in beta as well and already merged in the Hetzner CSI driver (https://github.com/hetznercloud/csi-driver/tree/main/deploy/...). There are some rough edges atm with Docker + CSI so I would stick with docker-volume-hetzner for now for prod usage.
Disclaimer: I contributed to both repos.
We have built some tooling around setting up and maintaining the swarm using ansible [0]. We also added some Hetzner flavour to that [1] which allows us to automatically spin up completely new clusters in a really short amount of time.
deploy from source repo:
- We use Azure DevOps pipelines that automate deployments based on environment configs living in an encrypted state in Git repos. We use [2] and [3] to make it easier to organize the deployments using `docker stack deploy` under the hood.
keep software up to date:
- We are currently looking into CVE scanners that export into prometheus to give us an idea of what we should update
load balancing:
- depending on the project, Hetzner LB or Cloudflare
handle scaling:
- manually, but i would love to build some autoscaler for swarm that interacts with our tooling [0] and [1]
automate backups:
- docker swarm cronjobs either via jobs with restart condition and a delay or [4]
maintain security:
- Hetzner LB is front facing. Communication is done via encrypted networks inside Hetzner private cloud networks
- [0] https://github.com/neuroforgede/swarmsible
- [1] https://github.com/neuroforgede/swarmsible-hetzner
- [2] https://github.com/neuroforgede/nothelm.py
- [3] https://github.com/neuroforgede/docker-stack-deploy
===================
EDIT - about storage:
We use cloud volumes.
For drivers:
We use https://github.com/costela/docker-volume-hetzner which is really stable.
CSI support for Swarm is in beta as well and already merged in the Hetzner CSI driver (https://github.com/hetznercloud/csi-driver/tree/main/deploy/...). There are some rough edges atm with Docker + CSI so I would stick with docker-volume-hetzner for now for prod usage.
Disclaimer: I contributed to both repos.
Docker compose is a developer tool for use on a single computer.
Docker Swarm is a container orchestrator like Kubernetes or Nomad
see https://docs.docker.com/engine/release-notes/23.0/
the community is working on adding Swarm support to CSI vendors:
The news about its death are just plain wrong. There are new features in the most recent release of moby/moby and development in general has been picking up again:
Swarm mode, which everyone usually is talking about is not being deprecated. Docker 23.0.0 shipped with new features for Docker Swarm.
YAML is the much better alternative with similar semantics to JSON. The numeric issues still hold true though.
From their page: kraud is bringing the cloud home. Docker and Kubernetes Hybrid cloud with confidentiality and carbon-negativity