18 декабря 2025 Linux
Для тестирования докер-сварн-клустера создадим небольшой микросервис и разместим его в клустере
sysinfo/Dockerfile
# Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY app.py .
# Устанавливаем flask
RUN pip install flask psutil
EXPOSE 5000
CMD ["python", "app.py"]
sysinfo/app.py
from flask import Flask, jsonify
import socket
import os
import psutil # для более удобного uptime и нагрузки
app = Flask(__name__)
@app.route('/info')
def info():
uptime_seconds = psutil.boot_time()
# Или просто через /proc/uptime
with open('/proc/uptime', 'r') as f:
uptime_sec = float(f.readline().split()[0])
return jsonify({
"hostname": socket.gethostname(),
"ip_addresses": [
addr[4][0] for addr in socket.getaddrinfo(socket.gethostname(), None)
if addr[0] == socket.AF_INET
],
"uptime_seconds": uptime_sec,
"uptime_human": str(__import__('datetime').timedelta(seconds=int(uptime_sec))),
"cpu_load": psutil.getloadavg(),
"memory_percent": psutil.virtual_memory().percent
})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Это обычный сервис, отдающий свои имена, адрес и время работы. Затем его нужно разметить в докер-регистре так чтобы он был доступен всем нодам клустера
docker build -t registry.breys.com:443/ffsdmad/node-info:latest .
docker push registry.breys.com:443/ffsdmad/node-info:latest
Теперь нужно заставить сварн создать новый сервис (опция --with-registry-auth позволит испольвать авторизацию в частном регистре)
docker service create --name node-info --mode global --publish \
mode=host,target=5000,published=5000 --with-registry-auth \
registry.breys.com:443/ffsdmad/node-info:latest















