Middleware
Deploying Ceph in Containers
· ☕ 3 min read
This article covers single-node validation and three-node production deployment with cephadm. For architecture, operations, and functional testing, see Ceph Architecture and Operations. 1. Disk Preparation An OSD can only use a block device (/dev/sdX, a partition, /dev/loopN). 1.1 Inspecting Available Devices 1 2 3 4 5 6 7 lsblk -o

Ceph Architecture and Operations
· ☕ 11 min read
Ceph is a unified distributed storage system that supports block storage (RBD), object storage (RGW), and file storage (CephFS). The official cephadm can orchestrate each daemon as a container (Docker, or Podman + Containerd); see Deploying Ceph in Containers for details. 1. Architecture 1.1 Topology and Data Paths The diagram below shows a common five-node topology (3 MON + 2 MGR + 5 OSD): MONs only need to come in odd numbers, and in a five-node deployment 3 is enough (tolerating one MON failure); 5 MONs tolerate 2 failures, but the metadata overhead is larger, so there is generally no need to run a MON on every machine.

Deploying VictoriaMetrics in Containers
· ☕ 8 min read
VictoriaMetrics (VM for short) is a time-series database compatible with the Prometheus ecosystem. It uses fewer resources than Prometheus and comes in both single-node and cluster editions. The single-node edition can directly replace Prometheus storage; the cluster edition splits reads, writes, and storage across vmstorage / vminsert / vmselect, giving it stronger horizontal scaling.

Deploying ClickHouse in Containers
· ☕ 7 min read
1. ClickHouse Single Node 1.1 Configure Environment Variables 1 2 3 4 5 6 7 8 export CONTAINER_CLI=nerdctl export IMAGE=clickhouse/clickhouse-server:24 export CLICKHOUSE_INSTANCE_NAME=clickhouse export CH_DATA=/data/ops/clickhouse/$CLICKHOUSE_INSTANCE_NAME export CLICKHOUSE_PORT=9000 export CLICKHOUSE_PROMETHEUS_PORT=9363 export CLICKHOUSE_USER=default export CLICKHOUSE_PASSWORD=xxxxxx 1.2 Generate the Configuration Files 1 2 3 4 5 6 7 8 9 10 11 12 13

Deploying Redis in Containers
· ☕ 3 min read
1. Redis Single Instance Configure environment variables 1 2 3 4 5 6 7 8 9 export CONTAINER_CLI=nerdctl export IMAGE=redis:7 export REDIS_INSTANCE_NAME=redis-instance export REDIS_PASSWORD=xxxxxx export REDIS_PORT=6379 export REDIS_DATA=/data/ops/redis/$REDIS_INSTANCE_NAME mkdir -p $REDIS_DATA/data $REDIS_DATA/log Start the service 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 $CONTAINER_CLI run -d \ --name $REDIS_INSTANCE_NAME \ --restart always \ --security-opt apparmor=unconfined \ --security-opt seccomp=unconfined \ --network host \ --ulimit memlock=-1 \ --ulimit stack=67108864 \ --ulimit nofile=1048576:1048576 \ --memory-swappiness=0 \ -v $REDIS_DATA/data:/data \ -v $REDIS_DATA/log:/var/log/redis \ $IMAGE redis-server --port $REDIS_PORT --requirepass $REDIS_PASSWORD \ --maxmemory 64gb \ --maxmemory-policy noeviction \ --appendonly yes \ --appendfsync everysec Test the connection A PONG response means the connection succeeded