194 lines
7.8 KiB
YAML
194 lines
7.8 KiB
YAML
---
|
|
- name: Docker Swarm Migration Plan for ash3c
|
|
hosts: ash3c
|
|
become: yes
|
|
gather_facts: yes
|
|
|
|
vars:
|
|
# 定义服务迁移计划
|
|
swarm_services:
|
|
high_priority:
|
|
- name: ghproxy
|
|
image: wjqserver/ghproxy:latest
|
|
ports: "8046:8080"
|
|
replicas: 2
|
|
networks: ["app-network"]
|
|
|
|
- name: redis
|
|
image: redis:latest
|
|
ports: "63789:6379"
|
|
replicas: 1
|
|
networks: ["app-network"]
|
|
volumes: ["redis-data:/data"]
|
|
|
|
medium_priority:
|
|
- name: consul
|
|
image: bitnami/consul:latest
|
|
ports:
|
|
- "8310:8300"
|
|
- "8311:8301"
|
|
- "8312:8302"
|
|
- "8501:8500"
|
|
- "8601:8600/udp"
|
|
replicas: 1
|
|
networks: ["consul-network"]
|
|
|
|
- name: discourse-app
|
|
image: bitnami/discourse:3.4.1
|
|
ports: "31080:3000"
|
|
replicas: 1
|
|
networks: ["app-network"]
|
|
depends_on: ["postgres", "redis"]
|
|
|
|
- name: discourse-sidekiq
|
|
image: bitnami/discourse:3.4.1
|
|
replicas: 1
|
|
networks: ["app-network"]
|
|
depends_on: ["postgres", "redis"]
|
|
|
|
low_priority:
|
|
- name: elasticsearch
|
|
image: bitnami/elasticsearch:8.17.2
|
|
ports: "59200:9200"
|
|
replicas: 1
|
|
networks: ["elastic-network"]
|
|
volumes: ["elastic-data:/bitnami/elasticsearch/data"]
|
|
constraints: ["node.role==manager"]
|
|
|
|
- name: postgres
|
|
image: postgres:17.2
|
|
ports: "54322:5432"
|
|
replicas: 1
|
|
networks: ["db-network"]
|
|
volumes: ["postgres-data:/var/lib/postgresql/data"]
|
|
constraints: ["node.role==manager"]
|
|
secrets: ["postgres_password"]
|
|
|
|
tasks:
|
|
- name: Display migration plan
|
|
debug:
|
|
msg: |
|
|
🚀 DOCKER SWARM MIGRATION PLAN FOR {{ inventory_hostname }}
|
|
=========================================================
|
|
|
|
📋 PHASE 1 - HIGH PRIORITY (Low Risk)
|
|
{% for service in swarm_services.high_priority %}
|
|
✅ {{ service.name }}:
|
|
- Image: {{ service.image }}
|
|
- Replicas: {{ service.replicas }}
|
|
- Networks: {{ service.networks | join(', ') }}
|
|
- Migration: Safe, stateless service
|
|
{% endfor %}
|
|
|
|
📋 PHASE 2 - MEDIUM PRIORITY (Medium Risk)
|
|
{% for service in swarm_services.medium_priority %}
|
|
⚠️ {{ service.name }}:
|
|
- Image: {{ service.image }}
|
|
- Replicas: {{ service.replicas }}
|
|
- Networks: {{ service.networks | join(', ') }}
|
|
- Migration: Requires coordination
|
|
{% endfor %}
|
|
|
|
📋 PHASE 3 - LOW PRIORITY (High Risk)
|
|
{% for service in swarm_services.low_priority %}
|
|
🔴 {{ service.name }}:
|
|
- Image: {{ service.image }}
|
|
- Replicas: {{ service.replicas }}
|
|
- Networks: {{ service.networks | join(', ') }}
|
|
- Migration: Requires careful planning
|
|
{% endfor %}
|
|
|
|
- name: Create migration script
|
|
copy:
|
|
content: |
|
|
#!/bin/bash
|
|
# Docker Swarm Migration Script for {{ inventory_hostname }}
|
|
# Generated: {{ ansible_date_time.iso8601 }}
|
|
|
|
set -e
|
|
|
|
echo "🚀 Starting Docker Swarm Migration..."
|
|
|
|
# Create networks
|
|
echo "📡 Creating overlay networks..."
|
|
docker network create -d overlay --attachable app-network || true
|
|
docker network create -d overlay --attachable db-network || true
|
|
docker network create -d overlay --attachable consul-network || true
|
|
docker network create -d overlay --attachable elastic-network || true
|
|
|
|
# Create volumes
|
|
echo "💾 Creating volumes..."
|
|
docker volume create redis-data || true
|
|
docker volume create postgres-data || true
|
|
docker volume create elastic-data || true
|
|
|
|
# Create secrets (example)
|
|
echo "🔐 Creating secrets..."
|
|
echo "your_postgres_password" | docker secret create postgres_password - || true
|
|
|
|
echo "✅ Infrastructure setup complete!"
|
|
echo ""
|
|
echo "🔄 PHASE 1 - Migrate high priority services:"
|
|
echo "docker service create --name ghproxy-svc --replicas 2 --network app-network -p 8046:8080 wjqserver/ghproxy:latest"
|
|
echo "docker service create --name redis-svc --replicas 1 --network app-network -p 63789:6379 --mount type=volume,source=redis-data,target=/data redis:latest"
|
|
echo ""
|
|
echo "🔄 PHASE 2 - Migrate medium priority services:"
|
|
echo "docker service create --name consul-svc --replicas 1 --network consul-network -p 8310:8300 -p 8311:8301 -p 8312:8302 -p 8501:8500 -p 8601:8600/udp bitnami/consul:latest"
|
|
echo "docker service create --name discourse-app-svc --replicas 1 --network app-network -p 31080:3000 bitnami/discourse:3.4.1"
|
|
echo "docker service create --name discourse-sidekiq-svc --replicas 1 --network app-network bitnami/discourse:3.4.1"
|
|
echo ""
|
|
echo "🔄 PHASE 3 - Migrate low priority services (CAREFUL!):"
|
|
echo "docker service create --name postgres-svc --replicas 1 --network db-network -p 54322:5432 --mount type=volume,source=postgres-data,target=/var/lib/postgresql/data --secret postgres_password --constraint 'node.role==manager' postgres:17.2"
|
|
echo "docker service create --name elasticsearch-svc --replicas 1 --network elastic-network -p 59200:9200 --mount type=volume,source=elastic-data,target=/bitnami/elasticsearch/data --constraint 'node.role==manager' bitnami/elasticsearch:8.17.2"
|
|
echo ""
|
|
echo "📊 Monitor services:"
|
|
echo "docker service ls"
|
|
echo "docker service ps <service-name>"
|
|
echo ""
|
|
echo "⚠️ IMPORTANT NOTES:"
|
|
echo "1. Stop original containers before creating services"
|
|
echo "2. Backup data before migrating databases"
|
|
echo "3. Test each phase before proceeding"
|
|
echo "4. Monitor logs: docker service logs <service-name>"
|
|
dest: "/tmp/swarm-migration-{{ inventory_hostname }}.sh"
|
|
mode: '0755'
|
|
|
|
- name: Create rollback script
|
|
copy:
|
|
content: |
|
|
#!/bin/bash
|
|
# Docker Swarm Rollback Script for {{ inventory_hostname }}
|
|
|
|
echo "🔄 Rolling back Swarm services..."
|
|
|
|
# Remove services
|
|
docker service rm ghproxy-svc redis-svc consul-svc discourse-app-svc discourse-sidekiq-svc postgres-svc elasticsearch-svc 2>/dev/null || true
|
|
|
|
# Remove networks (optional)
|
|
# docker network rm app-network db-network consul-network elastic-network 2>/dev/null || true
|
|
|
|
echo "✅ Rollback complete. Original containers should be restarted manually."
|
|
dest: "/tmp/swarm-rollback-{{ inventory_hostname }}.sh"
|
|
mode: '0755'
|
|
|
|
- name: Migration plan complete
|
|
debug:
|
|
msg: |
|
|
🎉 MIGRATION PLAN GENERATED!
|
|
|
|
📄 Files created:
|
|
- /tmp/swarm-migration-{{ inventory_hostname }}.sh (Migration script)
|
|
- /tmp/swarm-rollback-{{ inventory_hostname }}.sh (Rollback script)
|
|
|
|
🚀 RECOMMENDED APPROACH:
|
|
1. Backup all data first
|
|
2. Test migration in phases
|
|
3. Start with Phase 1 (low risk services)
|
|
4. Monitor each service before proceeding
|
|
5. Keep rollback script ready
|
|
|
|
💡 NEXT STEPS:
|
|
1. Review and customize the migration script
|
|
2. Plan maintenance window
|
|
3. Execute phase by phase
|
|
4. Monitor and validate each service |