Blueforce-Linux/docs/10-UPDATE-AND-ROLLBACK-POLICY.md

9.5 KiB
Raw Blame History

10 — Update ve Rollback Politikası

Kısa özet: Sahaya onaysız update yasaktır: unattended-upgrades kapalıdır, her değişiklik LAB(2) → P1(5) → P2(20) → W1(50) → W2(100) → PROD dalgalarından ve merkezi onaydan geçer. Her dalganın geri alma planı yayından önce tanımlıdır.

  • Dosya: docs/10-UPDATE-AND-ROLLBACK-POLICY.md
  • İlgili kararlar: 24-DECISION-LOG.md#K-11 (otomatik update yasağı + dalgalar), K-10 (latest/Watchtower yasakları), K-09 (imaj bağı)
  • Durum: [ ] Taslak

1. Amaç

700 cihazda "kendiliğinden değişen hiçbir şey olmasın" ilkesini teknik ve prosedürel kilitlerle garanti etmek: otomatik updater'ların kapatılması, onay zinciri, dalga planı ve rollback sözleşmesi.

2. Kapsam

  • Kapsam içi: onaysız update yasağı, unattended-upgrades kapatma, dalga tanımı ve geçiş kriterleri, onay rolleri, rollback zinciri.
  • Kapsam dışı: playbook yazım detayları (09), imaj üretim adımları (04), Docker tag disiplini detayı (12).

3. Kararlar

KARAR:    Golden image'da `unattended-upgrades` kapatılır (`/etc/apt/apt.conf.d/20auto-upgrades` değerleri `0` + `apt-daily*.timer` maskeleme); tüm güncellemeler LAB→PİLOT→WAVE→PROD onay zincirinden geçer (dalgalar: LAB(2)/P1(5)/P2(20)/W1(50)/W2(100)/PROD).
GEREKÇE:  `unattended-upgrades` Ubuntu Server'da varsayılan kurulu ve etkindir, günde bir kez çalışır; kapatılmazsa 700 cihaz ilk açılışta güncellemeye kalkar ("onaysız update yasak" ilkesi delinir). Kaçan timer makine açılışında hemen tetiklenir (`Persistent=true` davranışı) — saha PC'leri sık kapanan makinelerdir.
ALTERNATİF: Otomatik security update'e izin verme — 700 cihazda eşzamanlı indirme + onaysız değişim riski nedeniyle elendi; security update'ler öncelik işaretli onaylı dalga ile çıkar.
RİSK:     Kapatma adımı imajda atlanırsa filo kendiliğinden güncellenir; azaltma: `blueforce-install.sh` final-check + monitoring'de `Unattended-Upgrade` durumu metriği.
MALİYET:  Ücretsiz.
LİSANS:   Yok (işletim sistemi yapılandırması) — https://ubuntu.com/server/docs/how-to/software/automatic-updates/ + https://manpages.ubuntu.com/manpages/resolute/en/man8/unattended-upgrade.8.html (doğrulanma: 2026-09-15).
KARAR:    Onaysız update yasaktır: sahaya inen her değişiklik (OS paketi, Docker imajı, config, agent sürümü) değişiklik kaydı + merkezi admin onayı + dalga planı olmadan uygulanmaz; `latest` etiketi ve Watchtower gibi otomatik updater'lar yasaktır.
GEREKÇE:  700 ölçeğinde her "küçük varsayılan" (günlük otomatik update, hareketli etiket, otomatik imaj çekme) filo-çapı arızaya dönüşür; determinizm yalnızca sabit sürüm + onaylı yayılımla korunur.
ALTERNATİF: Güvenlik güncellemelerine otomatik izin — eşzamanlı indirme fırtınası + onaysız değişim riski nedeniyle elendi; acil güvenlik yaması "hızlandırılmış dalga" prosedürüyle (aynı zincir, kısaltılmış bekleme) çıkar.
RİSK:     Onay kuyruğu kritik yamayı geciktirir; azaltma: security dalgasına öncelik SLA'sı (§9).
MALİYET:  Ücretsiz.
LİSANS:   Yok (politika) — Docker yasak dayanağı için 12-DOCKER ve K-10'a bakılır.
KARAR:    Rollback her yayının parçasıdır: dalgaya çıkmadan önce geri alma adımı (önceki paket sürümü / önceki imaj tag'i / önceki config) tanımlanır ve LAB'da geri dönüş testi yapılır; başarısız dalga bir sonrakine geçmez, etkilenmiş dalga geri alınır.
GEREKÇE:  Geri alması test edilmemiş yayın, 700 cihazda tek yönlü kapıdır; LAB'da kanıtlanan rollback, PROD'da gece yarısı kurtarma prosedürüne dönüşür.
ALTERNATİF: "Gerekirse bakarız" yaklaşımı — arıza anında doğaçlama riski nedeniyle elendi.
RİSK:     Geri alma adımı da bozuk çıkabilir; azaltma: son çare 17-RECOVERY yeniden-imaj prosedürü.
MALİYET:  Ücretsiz.
LİSANS:   Yok (operasyon standardı).

4. Neden Bu Karar?

Üç yasak tek ilkeden doğar: unattended-upgrades (işletim sistemi kendi kendine değişmesin), latest (hangi sürümün koştuğu her cihazda aynı bilinsin), Watchtower (hiçbir daemon izinsiz imaj çekmesin). Dalgalar (2 → 5 → 20 → 50 → 100 → ~523) hatanın blast-radius'unu geometrik olarak sınırlar: LAB'da yakalanan hata 2 cihazı etkiler, PROD'a sızan hata ancak 5 dalga kapısından geçmiş demektir.

5. Alternatifler

Alternatif Artı Eksi Sonuç
Otomatik security update Hızlı yama Eşzamanlı indirme + onaysız değişim Elendi (hızlandırılmış dalga ile karşılanır)
Doğrudan tüm-filo yayın Hızlı Tek hatanın 700 katı Elendi
Watchtower ile oto-imaj Eforsuz güncellik Politika ihlali + upstream arşivli Elendi (K-10)
latest etiketi Kolay Determinizm kaybı Elendi (K-10)

6. Avantajlar

  • Filo sürüm determinizmi: her cihazın ne koşturduğu envanterde bilinir.
  • Hata erken dalgada yakalanır; PROD'a ulaşan değişiklik 5 kez kanıtlanmıştır.
  • Acil yama da aynı zincirden geçer — hız, disiplinsizlikle değil kısaltılmış beklemeyle kazanılır.

7. Dezavantajlar

  • Yayın döngüsü yavaştır (özellikle PROD'a tam yayılım günler sürebilir).
  • Onay kuyruğu ve dalga beklemeleri operasyonel disiplin ister.
  • Her yayın için rollback testi yazma maliyeti.

8. Riskler

Risk Olasılık Etki Azaltma
unattended-upgrades imajda açık unutulur Orta Yüksek install.sh final-check + monitoring metriği (K-11)
Onay kuyruğu kritik yamayı geciktirir Orta Yüksek Security dalgasına öncelik SLA'sı (§9)
Dalga atlama ("acil" bahanesiyle) Orta Yüksek Semaphore onay kapısı + değişiklik kaydı zorunluluğu
Rollback adımı da bozuk Düşük Yüksek LAB geri-dönüş testi + 17-RECOVERY son çare

9. Uygulama Planı

  1. Golden image: 20auto-upgrades değerleri 0, apt-daily*.timer maskeli, final-check'te doğrulamalı (04).
  2. Değişiklik kaydı açılır: kapsam (paket/imaj/config), etkilenen sürümler, geri alma adımı, dalga takvimi.
  3. Merkezi admin onaylar; yayın Semaphore pipeline ile dalga sırasına girer (09).
  4. Her dalgada sağlık kapısı: monitoring (14) + bf-status örneklemesi temizse sonraki dalga açılır.
  5. Başarısız dalga: yayılım durdurulur, etkilenmiş dalga rollback zinciriyle geri alınır, kök neden kayda işlenir.
# örnek: otomatik update kilit denetimi (saha cihazında)
cat /etc/apt/apt.conf.d/20auto-upgrades   # iki değer de 0 olmalı
systemctl status apt-daily.timer apt-daily-upgrade.timer  # maskeli/inactive

Dalga tanımı ve geçiş kriterleri

Dalga Büyüklük Geçiş kriteri (sonraki dalgaya)
LAB 2 cihaz Fonksiyonel test + rollback testi geçti
P1 (PİLOT-1) 5 cihaz 24–48 saat sorunsuz + metrikler temiz
P2 (PİLOT-2) 20 cihaz 48–72 saat sorunsuz + saha geri bildirimi
W1 (WAVE-1) 50 cihaz Sağlık kapısı + onay yenileme
W2 (WAVE-2) 100 cihaz Sağlık kapısı + onay yenileme
PROD kalan ~523 cihaz W2 temizliği + final onay

Security yaması öncelik SLA'sı

Kritik güvenlik bülteninde aynı zincir kısaltılmış beklemeyle koşar (LAB saatler içinde, P1 aynı gün); bekleme kısaltılır, kapılar kaldırılmaz — onay ve rollback testi security dalgasında da zorunludur.

10. Test Planı

Test Beklenen sonuç Ortam
20auto-upgrades değerleri + timer durumu 0 / maskeli, 24 saatte otomatik apt yok LAB(2) imaj denetimi
Kuru yayın (tüm dalgalar --check) Değişim öngörüsü kayıtla eşleşir LAB(2)
LAB rollback testi Önceki sürüme dönüş + servis ayakta LAB(2)
P1 48 saat gözlem Metrik anomalisi yok P1(5)
Dalga-durdurma tatbikatı Yayılım durur, P1 geri alınır P1(5)

11. Rollback

  1. Etkilenmiş dalga, değişiklik kaydındaki geri alma adımıyla önceki sürüme döndürülür (paket downgrade / önceki imaj tag'i / önceki config).
  2. Geri alma sonrası sağlık kapısı (monitoring + bf-status) doğrulanır, kayda işlenir.
  3. Geri alma da başarısızsa: cihaz 17-RECOVERY prosedürüyle önceki golden image'a döndürülür (LEVEL 9 son çare).
  4. Kök neden bulunmadan yayına devam edilmez; zincir başa (LAB) sarar.

12. Kontrol Listesi

  • unattended-upgrades tüm sahada kapalı (monitoring metriğiyle sürekli denetim).
  • latest/Watchtower hiçbir saha cihazında yok (12 ile birlikte denetim).
  • Her yayının değişiklik kaydı + onayı + rollback adımı var.
  • Dalga kapıları atlanmadan işletildi (Semaphore log'uyla kanıtlı).
  • Security SLA'sı runbook'ta yazılı, sorumlusu belli.

13. Açık Sorular

  • Dalga bekleme sürelerinin (24–72 saat) PİLOT verisine göre kalibrasyonu (sahibi: 10 yazarı, P2 sonrası).
  • Paket/imaj aynası (yerel mirror) gerekip gerekmediği — 700 cihazın eşzamanlı indirme yükü (sahibi: 25-ROADMAP).

Ek: Mermaid — update onay akışı

flowchart LR
    F["Bulundu<br/>(bülten / MEG sürümü)"] --> R["Kayıt<br/>(etki + rollback planı)"]
    R --> O{"Onay<br/>(merkezi admin)"}
    O -->|Red| F
    O -->|Onay| LAB["LAB 2"]
    LAB -->|Başarılı| P1["P1 5"]
    P1 -->|Başarılı| P2["P2 20"]
    P2 -->|Başarılı| W1["W1 50"]
    W1 -->|Başarılı| W2["W2 100"]
    W2 -->|Başarılı| PROD["PROD ~523"]
    LAB -->|Başarısız| RB["Rollback +<br/>kök neden"]
    P1 -->|Başarısız| RB
    P2 -->|Başarısız| RB
    W1 -->|Başarısız| RB
    W2 -->|Başarısız| RB