Aufrufe
vor 5 Monaten

Netzwoche 05/2018

  • Text
  • Unternehmen
  • Schweizer
  • Schweiz
  • Swiss
  • Netzmedien
  • Zuschlag
  • Dsgvo
  • Zusammenarbeit
  • Entwicklung
  • Webcode

36 Focus Entwicklung

36 Focus Entwicklung Docker Software Container – aus Sicht von Softwareentwickler und -betreiber DevOps benötigt drei Dinge: Menschen mit der richtigen Einstellung, gemeinsame Prozesse und die richtigen Tools. Docker Software Container helfen uns bei Liip und VSHN.ch, diese Herausforderungen zu meistern und bieten eine standardisierte Plattform für Entwicklung und Betrieb. DIE AUTOREN Pascal Thormeier Senior Software Developer, Liip Aarno Aukia CTO, VSHN.ch – The DevOps Company Container aus Sicht des Entwicklers Als Webagentur setzen wir bei Liip individuelle Projekte um. Jedes Projekt setzt andere Anforderungen an das Zielsystem, beispielsweise verschiedene Versionen von Programmiersprachen und Frameworks. Diese Kombinationen müssen während der Entwicklung mittels Continuous Integration (CI) gründlich getestet werden, was mit traditionellen Systemen aufwändig und fehleranfällig ist. Container-Virtualisierung, zum Beispiel mit Docker, schafft da Abhilfe. Docker benutzt sogenannte Images, das sind Zusammenstellungen von Software, um einzelne Instanzen einer App zu starten, sogenannte Container. Diese Images beinhalten, anders als traditionelle virtuelle Maschinen, kein Betriebssystem und sind dadurch leichter und schneller. Ideal für CI. Aus Sicht des Softwareentwicklers ist es einfach, die Pipelines mit Docker, beispielsweise innerhalb von GitLab CI, zu konfigurieren. Das Image wird spezifiziert, und der Runner kümmert sich um alles Weitere. Die Applikation wird somit enkapsuliert getestet und benötigt keine weitere Software auf dem Server. Docker ist, gegenüber traditionellen Systemen im CI- Umfeld, ressourcensparender und bietet einfachere Konfiguration und damit echte Zeitersparnis. Container aus Sicht des Betreibers Docker-Container sind eine standardisierte und effiziente Art, Software mit allem, was sie zum Laufen benötigt, zu paketieren. Dies hilft einerseits, externe Abhängigkeiten zur Laufzeit zu minimieren, also die eingesetzten Versionen von PHP, Java etc. in der korrekten Version mit allen benötigten Modulen, Erweiterungen und Plug-ins nicht noch separat auf dem Server verwalten zu müssen. Andererseits verläuft eine Änderung des Applikationscodes genau gleich wie eine Änderung des Applikationsservers: eine neue Version des Container-Images wird automatisch gebaut und in der Testumgebung «deployed», danach kann dasselbe geprüfte Image auch in der Produktionsumgebung ausgerollt werden. Für uns als Softwarebetreiber sind die Vorteile der Standardisierung der Software-Container analog zu den Containern in der Logistik: ·· Container standardisieren den Umgang mit dem Inhalt: In der Logistik sind die Aufnahmepunkte in den Ecken genau gleich, egal ob der Inhalt flüssig, fest oder gasförmig ist. In der Software sind Entrypoint, Listenport und Storage-Volumes genau gleich definiert, egal ob PHP, Java oder .NET Core ausgeführt werden soll. ·· Die Container-Technologie ist portabel, funktioniert also auf allen Infrastrukturen und bei allen Anbietern genau wie auf beliebigen Verkehrsmitteln. ·· Standardisierung macht Container effizienter: So wie ein Containerschiff 21 000 unterschiedliche Container mit derselben Mannschaft transportiert, betreiben wir bei VSHN.ch hunderttausende Container auf verschiedenen Kundeninfrastrukturen und Cloud-Providern. Die Lösung der Softwarelogistik heisst darum «Container- Orchestrierung», die bekannteste Implementierung davon ist Kubernetes. Sie standardisiert und automatisiert die Software-Betriebsprozesse wie Deployment/Update, Skalierung, Load-Balancing, Service-Discovery, Storage- Volume-Management, Monitoring, Back-up, Verteilung der Container auf mehrere Server und Isolation von mehreren Applikationen, Testumgebungen, Teams und/oder Kunden. 05 / 2018 www.netzwoche.ch © netzmedien ag

Focus Entwicklung 37 Wie die Einführung von DevOps gelingt Das zentrale Element von DevOps ist die Zusammenarbeit von Entwicklungs- und Betriebsteams. Es gilt, ein Umfeld zu schaffen, das die Zusammenarbeit erleichtert und fördert. Der Einsatz der richtigen Software-Tools ist ein Erfolgsfaktor. DevOps stösst auf immer grösseres Interesse bei Unternehmen. Softwareentwicklung und Betrieb sollen näher zusammenrücken und gemeinsam das Produkt weiterentwickeln und betreiben. Dieser Ansatz knüpft an die agilen Prinzipien an. Durch den vermehrten Einsatz von agilen Entwicklungsmethoden in Unternehmen, haben sich die Entwicklungszyklen verkürzt. Die Neuentwicklungen sollen so rasch wie möglich zum Kunden. Das Bedürfnis, häufig und in kurzen Zyklen «zu deployen», nimmt stetig zu. Wo früher Entwicklungsteams alle drei Monate eine Version erstellten, wird heute alle zwei Wochen eine Lieferung durchgeführt. Dies steht im Konflikt mit dem Betrieb, wo man danach strebt, Stabilität und Sicherheit der IT-Systeme im Unternehmen zu gewährleisten. Die «neuen» Methoden mit ihren hohen Frequenzen führen bei den Betriebsteams zu Engpässen und Frustration. Die Prozesse und Hilfsmittel sind nicht auf so kurze Zyklen ausgelegt. Im Laufe der Zeit bilden sich auf dem Nährboden von gegenseitigem Misstrauen und Unverständnis Mauern. Allzu oft wurden diese Mauern durch eine organisatorische Trennung der Entwicklungs- und Betriebsteams noch erhöht. Das Ziel von DevOps ist, diese Mauern zu zerschlagen und die Performance des gesamten Unternehmens zu steigern. Eine Unternehmenskultur, die auf Zusammenarbeit basiert DevOps ist in erster Linie ein Kulturwandel. Eine der ersten Aufgaben besteht darin, das verlorene Vertrauen wiederherzustellen und ein gegenseitiges Verständnis zwischen Entwicklungs- und Betriebsteam zu schaffen. Dev- Ops-Workshops bilden eine Plattform für Kooperation und Annährung. In diesen werden gemeinsame Ziele und Abläufe definiert. Ansätzen wie etwa «Continues Delivery» können diskutiert werden, und es kann eine gemeinsame Roadmap dazu erstellt werden. Geeignete Toos bereitstellen Entwicklungs- und Betriebsteams arbeiten typischerweise mit unterschiedlichen Tools. Eine Integration zwischen diesen Tools gibt es meistens nicht. Das führt oft zu einem Mangel an Kommunikation und Transparenz zwischen den einzelnen Teams. Die Betriebsmannschaft weiss nicht, was nächstens von der Entwicklung kommt, und die Entwickler sehen nicht, was die «wahren» Probleme im Betrieb sind. Die Bereitstellung von Applikationen, die eine Zusammenarbeit begünstigen und gleichzeitig die Anforderungen hinsichtlich Qualität, Standards und Abläufe der Teams erfüllen, ist eine wichtige Komponente zu DevOps. Statt einerseits ein Tool für die agile Planung und andererseits ein Tool für das Incident-Management zu verwenden, können beispielsweise beide Teams dasselbe Tool verwenden. Ein Kunde erstellt etwa ein Ticket beim Service Desk. Ein Support-Mitarbeiter des Betriebsteams analysiert den Störfall. Er kommt zu dem Schluss, dass es sich wahrscheinlich um einen Softwarefehler handelt. Zur Bestätigung seiner Diagnose sendet er über das Tool eine Anfrage an das Entwicklungsteam. Ein Entwickler wird benachrichtigt und kann seinerseits mit der Analyse beginnen. Das Ticket enthält alle benötigten Informationen, wodurch die Zeit bis zur Behebung des Fehlers erheblich verkürzt wird. Kein Log-in in ein anderes Tool, keine zusätzlichen E-Mails, alles ist zentral an einem Ort abgelegt. In unserem Beispiel bestätigt der Entwickler die Diagnose des Supports: Es handelt sich um einen Softwarefehler. Der Support-Mitarbeiter informiert den Kunden, dass der Störfall identifiziert ist und der Fehler an das Entwicklungsteam übergeben wird. Dank der gemeinsamen Plattform kann der Support- Mitarbeiter im Entwicklungsprojekt direkt ein Fehler-Ticket erstellen und alle Informationen zum Störfall in das Ticket übernehmen. Die Entwickler können den Bug in ihren nächsten Sprint übernehmen und beheben. Sollten sie bei der Planung und Behebung mehr Informationen benötigen, ist der gesamte Verlauf über den Link zwischen Störfall und Fehler-Ticket im Tool einsehbar. Zugleich wird das Betriebsteam über den Fortschritt der Fehlerbehebung informiert. Sprint, Status, Priorität und andere relevante Informationen sind nur ein Mausklick entfernt und können bei Bedarf an den Kunden weitergegeben werden. Die Vorteile einer gemeinsamen Plattform liegen auf der Hand. Sie unterstützt die Zusammenarbeit zwischen beiden Teams, fördert die Transparenz und es entwickelt sich eine gemeinsame Sprache. Dabei muss die Plattform aber unbedingt die unterschiedlichen Arbeitsweisen und Bedürfnisse der Teams berücksichtigen. Derartige Tools sind bereits auf dem Markt. Sie stammen häufig aus der Softwareentwicklung. Ihre Vorreiterrolle verdanken sie den agilen Methoden und den damit verbunden erhöhten Kollaborationsanforderungen. Der erfolgreiche Übergang zu DevOps ist eine grosse Herausforderung für alle Teams und Unternehmen. In erster Linie muss ein kultureller Wandel stattfinden. Die richtigen Tools können die Kultur nicht verändern, aber sie können den Wandel unterstützen. DER AUTOR Reto Gehring Leiter Client Services, Valiantys DevOps ist in erster Linie ein Kulturwandel. www.netzwoche.ch © netzmedien ag 05 / 2018