DevOps Definition

DevOps

Ursprung der Devops Definition kann unter anderem durch folgende Synonyme abgeleitet bzw. Begrifflich definiert sein:

– DEV (plan, code, build, test)
– OPS (release, deploy, operate, monitor)

Mit DevOps fällt ein großer Teil der klassischen Operations-Arbeit schon an, bevor der Code die Produktivumgebung erreicht. Zu jedem Release gehören Monitoring, Logging und A/B-Tests. CI/CD-Pipelines führen bei jedem Commit automatisch Unit-Tests, Security-Scans und Policy-Checks
aus. Deployments sind automatisiert. Prüfroutinen, Aufgaben und nichtfunktionale Anforderungen werden nun vor dem Release implementiert und nicht erst während oder nach einem kritischen Ausfall.
– Jordan Bach (AppDynamics, https://blog.appdynamics.com/engineering/is-noops-the-end-of-devops-think-again)

Geschwindigkeit, Agilität, Zusammenarbeit, Automatisierung und Software-Qualität sind die zentralen Ziele von DevOps und für viele Unternehmen bedeutet das eine deutliche Veränderung in der Denkweise.

Eine Rolle

  1. Entwicklung
  2. Systemadministration
  3. Site Reliability Engineer
  4. Cloud Architect
  5. Platform Engineer

Tätigkeitsbeschreibung

  1. Automatisierung der Systemadministration
  2. Sicherstellung des Betriebs von Anwendungen
  3. Bereitstellung der Methodiken für Software Deployment
  4. Sicherstellung des Softwareforlaufs
  5. Entwurf von technischen Architekturen

Best-Practice-Model

  1. Automatisierung an allen Enden
  2. Umfangreicher Einsatz von Tools
  3. Hoher Grad an Virtualisierung
  4. Strukturierte Arbeitsweise
  5. Freie Selbstbestimmungs- und Kommunikationswege

DevOps, die nächste Generation eines Systemadministrators

  1. Rollenwahrnehmung
  2. Hohe Erwartungen

DevOps Toolstack

https://hostadvice.com/blog/devops-toolbox-jenkins-ansible-chef-puppet-vagrant-saltstack/

Cloud-Anbieter (AWS, Azure, GCP etc.)

  1. Automatisierung von Cloud-Bereitstellungsprozessen
  2. Integration hybrider Cloud-Systeme (On-Pemise)
  3. Kenntnisse verschiedener PaaS Lösungen:
    – spezifische Datenbanken
    – Application Hosting
    – Lambda Funktionen (AWS oder Goolge Cloud Functions)

Betriebsysteme

  1. Administration & Orchestrierung von Linux & Windows Systemen
  2. Shell / PowerShell
  3. Konfigurationsmanagement
  4. Virtualisierung von Betriebssystemen
  5. Container für Windows und Linux
  6. Performance- & Problemanalyse

CD & Applications

  1. Versions Kontrollsysteme (GIT, SV etc.)
  2. Sicherstellung von Software-Qualität (SonarQube etc.)
  3. Aufbau und Nutzung von CI-Systemen (Jenkins etc)
  4. Orchestrierung von Systemumgebungen (Terraform, OpenStack etc.)
  5. Automatisieren von Prozessen

Agile Scrum etc.)

  • Agiles Mindset
  • SCRUM-Methodologie
    • 2 Wochen Sprints
    • Entwicklung in Inkrementen
    • Aufwandsschätzung
  • KANBAN Methodologie
  • Umgang mit Jira

Schwieriges Selbststudium & Gefährliche Situationen in der Unternehmensstruktur

Gefahren

  1. Einzige Person für den Anwendungsbetrieb
  2. Permanentes „Feuer löschen“
  3. Destruktive Kultur
  4. Keine Möglichkeit zu Gestaltung
  5. Kein Budget für operative Notwendigkeiten
  6. Einsatz ohne Erfahrung (Junior DevOps etc.)

Überprüfungen des Betriebes / Bereichs

  1. Kulturelle Voraussetzungen gegeben
  2. Existieren Mitglieder des Bereichs
  3. Offen über Strukturen und technische Gegebenheiten
  4. Frage nach praktischen Erfahrungen und Stand der Dinge
  5. Außerhalb des Experimentier Stadiums?
  6. Klare Vorstellungen

Fragestellung

  1. Seit wann wird Automatisierung praktiziert?
  2. Wie viele DevOps Ingenieure gibt es ?
  3. Ist der betriebene Toolstack bereits in Benutzung?
  4. Wie viel Entscheidungsspielraum besteht im Toolstack?
  5. Gibt es Legacy Anwendungen?
  6. Wie ist die Software-Release-Mentalität?
  7. Wie ist sichergestellt, dass operative Notwendigkeiten Priorität gegeben wird?
  8. Für Junioren: Gibt es bereits Senior DevOps Kollegen?

Vorteile des DevOps

  1. Agile Transition
  2. Kompetives (Wettbewerbsfähig) Umfeld
  3. Technische Anforderungen
  4. Zunehmende Komplexibilität
  5. Sicherstellung eines Qualitätsniveaus
  6. Fokus auf Wertschöpfung

DevOps Wiedersprüche / Vorwände identifizieren

  1. Einzigartigkeit (Branche / Technologie / ..)
  2. Security & Compliance Anforderungen
    • Trennung von Entwicklung und Betrieb
    • Security muss von Anfang an Berücksichtigt werden
    • Automatisierung von Sicherheit
    • Keine Ad-hoc-Zugriffe
    • „Least-Privilege“ – Prinzip
    • Audit-Logs als Basis aller automatisierten Änderungen
    • Schneller Code in Production: Schneller Fix
  3. Organisationsstrukturen unpassend
    • Globale Verteilung von Teams
    • Kommunikation fördern
    • Regelmäßig persönlicher Austausch
    • Kommunikationstools (Slack, Confluence etc.)
  4. Legacy-Ressourcen und Systeme
    • Alte Systeme (Cobol etc.)
    • Jedes System hat manuelle Vorgänge
    • Manuelle Vorgänge automatisieren
    • Fähigkeiten ausbauen
    • Kulturaspekte unabhängig von Technologien

Rezept für eine Devops Kultur

  1. Eigenverantwortung
    • Verantwortung eines Teams für das gesamte Ergebnis
    • Fähigkeit „Nein“ zu sagen –
    • Ende des „Shame Game“ – Entwickler behalten Ihre Verantwortungen bei
    • Eigentum von Ressourcen: Systemumgebungen und Tools etc.
  2. Zusammenarbeit
    • Interdisziplinäre Kollaboration: Business, Development, DevOps etc.
    • Leiter / Manager teil des Teams
    • Präsentationen und Aufzeigen von neuem Möglichkeiten
    • Räumliche Möglichkeiten für Kollaborationen
  3. Vertrauen
  4. Kontinuierliches Lernen
    • Lernen mit Anreizen versehen
    • Teilen von Wissen mit Anreizen versehen
    • Möglichkeiten für Selbststudium: zB Linkedin etc..
    • Brown Bag Sessions (auch interdisziplinär)
    • Basis für Prove of Concept POC / Minimum of Environment Product MVP…

Team Strukturen

  • Größe der Organisation
    • Zentralisierung von wiederverwendbaren Funktionen
    • Aufbau zentraler Service-Stacks oder PaaS-Services
    • Das „DevOps“ Team
      • Automatisierung
      • Infrastruktur Provisionierung
      • Architekturentwicklung
  • Größe des Projektes bzw. der Applikation
    • Minimierung der Teamgröße
    • Kommunikationsaufwand
    • Microservice-Strukturen
    • Auslagerung an zentralen Funktionen
  • Entwicklungs Methodologie
    • SCRUM Verfahren
      • Koordinator: SCRUM-Master
      • Retroperspektiven
      • Arbeit in Inkrementen (2 Wochen Sprints)
    • KANBAN Methode
      • Unkomplexe Methode
      • Aufteilung: ToDo, Aktiv, Fertig etc.
      • Projekte ohne Abhängigkeiten

Ziele einer Pipeline

  1. 100% Automatisierung
  2. 100% Transparenz
  3. Einheitliches Vorgehen
  4. Sicherstellen von Qualität
  5. Jeder „Commit“ erreicht „Produktion“

Delivery Pipeline / Deployment Pipeline

Der gesamte Prozess und zeitliche Ablauf vom Einchecken des Sourcecodes in das Versionskontrollsystem bis zur Inbetriebnahme in Produktion wird als Delivery Pipeline oder Deployment Pipeline bezeichnet. Die einzelnen mehr oder weniger automatisiert nacheinander ausgeführten Schritte in der Pipeline können beispielsweise sein:

  1. Der Softwareentwickler checkt neuen oder geänderten Sourcecode in das Versionskontrollsystem ein (Check-in / Commit / Push, z.B. mit Git).
  2. Der Continuous Integration Server (z.B. Jenkins) bemerkt die Sourcecode-Änderung.
  3. Der Continuous Integration Server führt die Modultests aus, erzeugt einen Build, assembliert eine Auslieferung und deployt in eine Testumgebung.
  4. Der Continuous Integration Server führt in der Testumgebung die Integrationstests aus.
  5. Der Continuous Integration Server startet eine statische Software Qualitätsanalyse (z.B. mit SonarQube).
  6. In einer weiteren Testumgebung werden Akzeptanztests durchgeführt (z.B. GUI-Tests, z.B. mit HtmlUnit und Selenium).
  7. In weiteren Testumgebungen werden Last-, Kapazitäts-, Performance- und Skalierbarkeits Tests durchgeführt.
  8. Oft gibt es anschließend manuell ausgeführte explorative Tests, insbesondere bei speziellen neuen Features. Dies kann mit einer Freigabe für Produktion verbunden werden.
  9. Die Software wird in Produktion deployt.

Planung des Software-Lifecycle

  1. Jedes Inkrement ist ein Release-Kandidat
  2. Entwicklung Methodologie
    1. Waterfall !
    2. SCRUM oder KANBAN
  3. Architekturdokumentation
    1. Automatisierung von „Discovery“
    2. Monitoring-Lösung
    3. Gemeinsames Medium und Darstellungsmedium zB. Confluence
    4. Definition von Regeln und Konsequenzen
  4. Change Management
    1. Feature Flags
    2. Hinweise für den Endbenutzer
    3. integrierte Feedback-Mechanismen
    4. A/B Tests für spezielle Benutzergruppen
(C) by https://technologyconversations.com -> Continuous Delivery Pipeline

Code

  1. Software-Code
    1. Versionskontrolle
      1. Basis der Kollaboration
      2. Basis jeglicher Nachvollziehbarkeit
      3. Dokumentation von Automatisierungen (Commit-ID)
      4. Kleine Inkremente
      5. Tools: GitLab, Bitbucket, etc…
  2. Aufbau von Code-Quality-Gates
    1. Kommentar Abdeckung / Dokumentation
    2. CodeStyle / Komplexität/ …
    3. Standard Fehler zB. Memory Leak
    4. Linting: findbugs, Jslint, Tslint etc…
    5. Lokale Git-Hooks
    6. Zentrale Statistiken: SonarQube & Dashboards etc.
    7. Code-Reviews!
  3. „Early Feedback“
  4. Kommunikation von Fehlern: Bug Tracking
    1. Fehler in der Produktion
    2. Sicherstellen der Behebung von Fehlern
    3. Issue Tracker: Jira, Bugzilla, TeamCity etc…
    4. Automatisierung aus den Monitoring-Tools
  5. Automatisierung Code
    1. Gleiche Qualität
    2. Beschreibungsdateien (Puppet/Chef/Ansible/Saltstack)
  6. Build Server
    1. Zentrale Sicherstellung von Metriken
    2. Bereitstellung von Artefakten
    3. Tools: Jenkins, Bambo, etc
    4. Bereitstellung von Artefakten
      1. Verfügbarkeit
      2. Archivierung
      3. Tools: Artifactory, HTTP-Server, Build-Server etc…
      4. Bereitstellung und das bauen von Artefakten möglichst trennen!
Continuous Delivery
(c) puppet.com

Test

  1. Automatisierung von Tests
    1. Ausführung im Build-Server
      Testing-Stages:
      1. Unit-Test / Regressionstest
        1. Automatisierte Code-Analyse
        2. Aufführung auf Build Server automatisch getriggert durch Versionskontrollsystem
        3. Erzeugte Pakete in einem lokalen Repository Server für weitere Tests speichern.
        4. Sicherstellung von Metriken (Line-Coverage etc)
        5. Dokumentation von Ergebnissen zB Jira oder Build-Server
      2. Integrationstest
        1. Test von Wirkungen zwischen Applikationen und Abhängigkeiten
        2. Test in dedizierten Umgebungen
        3. Aufbau virtueller Umgebungen
        4. Gesamter Softwarestack (Services, DB‘s, Bussysteme etc.)
        5. Aufbau mit Service-Stacks (Container, Cloud etc)
        6. Tools: Docker, Terraform, Vagrant etc.
      3. User-Acceptance-Test
        1. Test in dedizierten Umgebungen die Produktiv identisch wird
        2. Aufbau virtueller Umgebungen
        3. Aufbau von Trainings Umgebungen
        4. Aufbau von User-Acceptance-Tests
        5. User-Acceptance: Auch operationstechnische Aspekte
          1. Security- / Penetration verfahren
          2. Performance
          3. Konfiguration (zB. Feature flags)
  2. Bereitstellung aller Technologien für lokale Tests beim Entwickler
    1. Sicherstellen aller Qualitätsaspekte vor Code-Push
    2. Virtuelle Maschinen oder Container
    3. Reproduktion der der Build-Umgebung auf lokalen Systemen
    4. Tools: Vagrant, Docker etc.
  3. Test von Automatisierungen
    1. Konfigurationsdateien müssen getestet werden
    2. Test in unterschiedlichen Umgebungen
    3. Test mit virtuellen Maschinen oder Containern
    4. Cloud: test mit temporären Ressourcen
    5. Sicherstellung des Aufbaus von Stand Null

Release

Dokumentation und Kollaboration

  1. Dokumentation der vorherigen Ergebnisse (Code, Metriken, Tests)
  2. Versionskonzept (zB. Commit-ID)
  3. Quality Gates mit Freigabe (Release Freigabe manuell)

Deployment

  1. Bereitstellen von Software
    1. Platform / Technologie / …
    2. Konfigurationsmanagement-Tools (Puppet, Ansible, Saltstack)
    3. Scripts durch CI-Server (Jenkins, GoCD, …)
    4. Push von Images (Container, VM‘s)
    5. Zero-Dependency-Deployment
    6. Definition von Smoke-Tests und Health-Checks
  2. Nutzung von Container
    1. Images eines Betriebssystems
    2. Alle Abhängigkeiten im Image
    3. Generische Server für Deploament
    4. Konsistentes Artefakt als Deployment

Operation

  1. Automatisierung
  2. Wiederkehrende Aufgaben
  3. Stabilisierung von Prozessen
  4. Scripte / Makros / Selenium etc…

Monitoring

  1. Application Performance Management APM
    1. Instrumentalisierung von Applikationen Messen von:
      1. Antwortzeiten
      2. Datenbankzugriffe
      3. Last-Hotspots
      4. Service-Kommunikation
      5. Fehler
      6. Tools: AppDynamics, Dynatrace, NewRelic
  2. End-User-Monitoring
    1. Wargenommende Störungen
    2. Einbindung in Frontend der Anwendung
    3. Meldung von Fehlern
    4. Absprungrate, Performance etc…
  3. Syntetic-Monitoring (Prozessüberwachung)
    1. Überprüfung kritischer Geschäftsprozesse
    2. Bot Systeme testen Verfügbarkeit
    3. Automatisierung von GUI / Web
    4. Wiederverwendung von UI-Tests
    5. Sicherstellen der Transparenz
    6. Tools: Selenium, CI-Server etc.
  4. Log-Monitoring (Graylog, Syslog)
    1. Identifizieren von Fehlermeldungen
    2. Erhebung von Metriken anhand von Inhalt
    3. Applications-Logs, Webserver-Logs, OS-Logs etc.
    4. Identifikatoren / Labels nutzen (Server A, Application, B Instanz 1)
    5. Tools: Elk, Splunk, Kibana, Graphite, Graphana
  5. OS-Monitoring
    1. Hardware Metriken
    2. Baseline definieren
    3. Visualisierung der Metriken
    4. Dashboards definieren
    5. Tools: Grafana, Prometheus, Nagios, Zabbix etc.

DevSecOps

  1. Automatisierung von projekten/Code Schwachstellen-Prüfung
    1. Speicherlecks
    2. Codefehler (Escaping etc)
    3. Sicherheitslecks in Abhängigkeiten
  2. Automatisierung von Security/Penetration-Tests
    1. OWASP
    2. OpenVas
    3. SSL-Zertifikate + Prüfung
    4. Lasttests
  3. Definition von Quality-Gates
  4. Kryptographische Absicherung/ Secret-Orchestrierung
    1. Applikation Passwörter, Private Keys etc.
    2. Im Versionskontrollsystem
    3. Im CI-Tools (Jenkins)
    4. Temporäre freigaben
    5. Multi-Passwort-Lösungen (Vault)
  5. Auditing/Logging
    1. Dokumentationen von Manipulationen / Abweichungen
    2. Dokumentationen von Änderungen
    3. Änderungen mit definierten Jobs
    4. Dokumentation von Versionen und Zeitpunkte
    5. Zentrale Sammlung von Applikationen
    6. Datenverknüpfung sicherstellen
    7. Beispiel: Elasticsearch, Splunk
  6. Network Access Control
    1. Ad-hoc Änderungen
    2. Automatisierungen:
      1. Dokumentation
      2. Dauer
      3. Abhängigkeiten
  7. Weitere Absicherungsmaßnahmen für Container
    1. Applikationen innerhalb des Containers möglichst nicht als root laufen lassen
    2. CAP(Capabilities)-Limitierung / einschränken
    3. cgroups
    4. User-Namespaces aktiv
    5. seccomp/SELinux/Apparmor einsetzen
    6. keine SUID Binaries im Container
    7. Kernel up to date halten
    8. Host härten, aktuelle Patchlevel
    9. Hostzugriff nur explizit authentifiziert und autorisiert
    10. Netzwerksicherheit
  8. Software Defined Networking (SDN)

Cloud-Applikationsübersicht

https://landscape.cncf.io/

https://landscape.cncf.io/