D10.4 Rolling Updates & Scaling 🔄
Rolling Update με Ansible
tasks:
# ── Rolling update ─────────────────────────
- name: "🔄 Rolling update myapp service"
community.docker.docker_swarm_service:
name: myapp
image: "myapp:{{ new_version }}"
state: present
replicas: 4
update_config:
parallelism: 1 # ← 1 container κάθε φορά
delay: 15s # ← περίμενε 15s μεταξύ
failure_action: rollback # ← αυτόματο rollback αν fail!
monitor: 30s # ← παρατήρηση 30s
max_failure_ratio: 0
order: start-first # ← νέο πριν σκοτωθεί παλιό
rollback_config:
parallelism: 0 # ← rollback όλα ταυτόχρονα
delay: 0s
failure_action: pause
# ── Verify update ─────────────────────────
- name: Wait for update
ansible.builtin.command:
cmd: >
docker service inspect myapp
--format "{{ '{{' }}.UpdateStatus.State{{ '}}' }}"
register: update_status
changed_when: false
until: update_status.stdout in ['completed', 'paused', '']
retries: 30
delay: 10
delegate_to: manager-01
- name: Αποτέλεσμα update
ansible.builtin.debug:
msg: "Update status: {{ update_status.stdout }}"
Scaling
tasks:
# ── Scale up ──────────────────────────────
- name: "📈 Scale myapp to {{ replicas }}"
community.docker.docker_swarm_service:
name: myapp
state: present
replicas: "{{ replicas | int }}"
# ── Scale via command (γρηγορότερο) ───────
- name: Scale service
ansible.builtin.command:
cmd: "docker service scale myapp={{ replicas }}"
delegate_to: manager-01
changed_when: true
when: scale_immediate | default(false)
# ── Service status μετά scale ─────────────
- name: Service status
ansible.builtin.command:
cmd: docker service ps myapp --format "table {{ '{{' }}.Name{{ '}}' }}\t{{ '{{' }}.CurrentState{{ '}}' }}\t{{ '{{' }}.Node{{ '}}' }}"
register: service_status
changed_when: false
delegate_to: manager-01
- name: "📊 Service Status"
ansible.builtin.debug:
msg: "{{ service_status.stdout_lines }}"
Manual Rollback
tasks:
# ── Rollback αν κάτι πήγε στραβά ──────────
- name: "⏪ Rollback myapp service"
ansible.builtin.command:
cmd: docker service rollback myapp
delegate_to: manager-01
changed_when: true
when: trigger_rollback | default(false)
Σύνοψη D10.4
Rolling Updates & Scaling
│
├── update_config:
│ ├── parallelism: 1 → 1 container κάθε φορά
│ ├── delay: 15s → αναμονή μεταξύ
│ ├── failure_action: rollback → αυτόματο rollback
│ └── order: start-first → zero-downtime
│
├── Scaling:
│ └── replicas: N → scale up/down
│
└── Rollback:
└── docker service rollback <service>