Seite wählen

NETWAYS Blog

Application Management in Kubernetes

Working with Kubernetes means working with YAML. A lot of YAML. Some might say too much YAML. Your standard deployment usually consists of a workload resource, such as a Deployment or DaemonSet, in order to get some nice little Pods running. Remember, a Pod consists of one or more Containers and a Container is just a Linux process with some glitter. In addition, we might need a ConfigMap in order to store some configuration for our workload.

Now that our Pods are running we need some infrastructure around them. A Service resource will give us a stable name resolution for the IPs of our Containers (called Endpoints). We should also add some Network Policies, which control traffic flow (think Firewall).

Finally, we might have a Secret containing a TLS key/certificate and an Ingress resource, so that the IngressController knows where to find our workload. Remember, an IngressController is a Reverse Proxy.

So that is a lot of YAML we just wrote. a minimal example can easily have more than 200 lines [No citation needed]. Now multiply the environments we are running (i.e. development, staging, production) et voilà even more YAML. In order to reduce this repetition some tools have emerged in the Kubernetes ecosystem.

This article will give an overview of some of these tools. The focus will be on tools that use templates, overlays or functions to generate YAML. Tooling that leverages Custom Resources and Controllers are outside the scope of this article, but will be briefly mentioned in the conclusion. Remember, Controllers are just applications that watch the state of the cluster and make changes if the desired state and the current state differ.

Kustomize

One of the quickest ways to minimize repetition is „Kustomize“, since it is built into kubectl. Kustomize does not use templates or a custom DSL, unlike other solutions, instead it merges and overlays YAML to produce an output we can send to the Kubernetes API. Meaning, it is YAML all the way down.

In this and all other examples we will create a Service resource with a custom port and a namespace, just to keep it simple. To get started with kustomize we need a base YAML manifest, overlays containing the changes that are to be applied on the base and a kustomization.yml in which we describe what will happen:

ls -l

base/  # Contains the YAML with the Kubernetes Resources
overlays/  # Contains the YAML with which we customize the base Resources
kustomization.yml  # Describes what we want to customize

cat base/service.yml
---
apiVersion: v1
kind: Service
metadata:
  name: foobar-service
spec:
  selector:
    app.kubernetes.io/name: Foobar
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 80

cat base/kustomization.yml
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
commonLabels:
  app: foobar
resources:
  - service.yml

In `overlays/` we now define what we want to change. The metadata/name of the resources are required so that kustomize knows where to customize. In this example we change the port from 8080 and add a namespace.

cat overlays/dev/kustomization.yml
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
  - ../../base
patchesStrategicMerge:
  - port.yml
namespace: foobar-prod

cat overlays/dev/port.yml
---
apiVersion: v1
kind: Service
metadata:
  name: foobar-service
spec:
  ports:
    - protocol: TCP
      port: 7777
      targetPort: 80

Using `kubectl kustomize` we can now generate the final full manifest with a specific overlay:

kubectl kustomize overlays/dev
...

kubectl kustomize overlays/prod

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: foobar
  name: foobar-service
  namespace: foobar-prod
spec:
  ports:
  - port: 9999
    protocol: TCP
    targetPort: 80
  selector:
    app: foobar
    app.kubernetes.io/name: Foobar

`patchesStrategicMerge` is one of many built-in generators and transformers that can be used to modify the base resources, an extensive list can be found in the documentation. Kustomize offers a quick and easy way to structure YAML manifests, being built into kubectl lowers the barrier of entry. You can ship the kustomize code directly with your application for example.
However, it can be somewhat cumbersome to work with larger codebases and is not really suited for distribution.

Helm

Helm uses a template language to generate YAML that can then be sent to the Kubernetes API. Either by Helm itself or kubectl. It is widely used in the Kubernetes ecosystem. In the CNCF Cloud Native Survey 2020 63% of the 1,324 respondents named Helm as their preferred method for packaging.

In order to use Helm we need its CLI and a Helm Chart, which we either create ourselves or use an existing one. A Helm Chart consists of one or more templates and a Chart.yaml (containing metadata) and can then be packaged and hosted for others to download or be used locally.

The templates use the Go Template Language in which we have various options to customize data, such as variables, pipelines and functions. For example, we can define variables that can be filled by the user, i.e. „{{ .Values.service.port }}“ can be filled in by the user. This is done by creating a YAML-like file for the template. A values.yaml file serves as a place for defaults.

cat templates/service.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: {{ include "foobar.fullname" . }}
  labels:
    {{- include "foobar.labels" . | nindent 4 }}
spec:
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.port }}
      type: ClusterIP
      targetPort: http
      protocol: TCP
      name: http
  selector:
    {{- include "foobar.selectorLabels" . | nindent 4 }}


cat values.yaml  # The defaults
---
service:
  port: 8080

Custom value files can now be created in order to change what is rendered:

cat prod.yaml  # A custom values file
---
service:
  port: 7777

The Helm CLI can then be used to either render the finale YAML manifest or directly talk to the Kubernetes API (creating the resources).

# helm template name-of-the-release path-to-helm-code -f path-to-values-file
helm template foobar-release foobar/ -f foobar/prod.yaml

# Now we can change the port depending on our value file
helm template foobar-release foobar/ -f foobar/prod.yaml | grep port:
   - port: 9999
helm template foobar-release foobar/ -f foobar/dev.yaml | grep port:
   - port: 7777

# Directly create the resources in the cluster
helm install foobar-release foobar/ -f foobar/prod.yaml

Getting started with Helm is usually quite simple and rewarding, it quickly reduces the amount of YAML and offers options for packaging ones applications. In my experience, things get tricky once the parameterized templates start growing. Trying to cover every option/edge-cases and maintaining sanity becomes a balancing act. Nonetheless working with Kubernetes you are likely to run into Helm, maybe even without knowing it.

Terraform

Terraform, a tool to write Infrastructure as Code, can also be used to deploy Kubernetes resources.

Terraform uses a DSL named HashiCorp Configuration Language (HCL) to describe the desired infrastructure, this code is then applied with the Terraform CLI. Storing the state of what is already deployed Terraform knows when to change what in a declarative way. It uses „Providers“ to bundle the logic to talk a specific API (such as Hetzner, AWS, or Kubernetes).

In this example we will use a very simple Terraform project structure, a more complex structure is possible however. In a central Terraform file we will describe the resource we want to create together with its variables:

provider "kubernetes" {
# Here we could specify how to connect to a cluster
}

# Default variables
variable "port" {
  type        = string
  description = "Port of the Service"
  default     = "8080"
}

# The resources template
resource "kubernetes_service" "foobar" {
  metadata {
    name = "foobar-example"
  }
  spec {
    selector = {
      app = "Foobar"
    }
    session_affinity = "ClientIP"
    port {
      port        = var.port
      target_port = 80
    }

    type = "ClusterIP"
  }
}

The previously defined variables can be used to change the values depending on our needs. Within tfvars file we can create different sets of variables for different deployments of the resource:

# tfvars contain the actual values that we want
cat terraform/prod.tfvars
port = "9999"

cat terraform/dev.tfvars
port = "7777"

We can now generate the YAML or talk to the Kubernetes API to directly create the resources.

terraform plan -var-file=dev.tfvars

  # kubernetes_service.foobar will be created
  + resource "kubernetes_service" "foobar" {

terraform plan -var-file=prod.tfvars

  # kubernetes_service.foobar will be created
  + resource "kubernetes_service" "foobar" {

Terraform offers a nice solution when you are already using Terraform to manage infrastructure. Having a one-stop-shop for deploying infrastructure and the applications on top. Introducing Terraform in the tool-chain might be a hurdle though, since tools like Helm might be more suited when it comes to working with Kubernetes.

kpt

kpt uses predefined functions to modify YAML manifests, instead of templates or YAML generators/overlays. These functions – i.e. setters and substitutions – are then applied in a declarative way to a base YAML manifest. All this is combined in a kpt Package, containing a Kptfile (Metadata and declaration of what functions are applied) and YAML manifests of Kubernetes resources.

Kptfiles are written in YAML and are similar to Kubernetes resources. Within the Kptfile we declare a pipeline that contains the functions to be applied, for example:

pipeline:
  mutators:
    - image: gcr.io/kpt-fn/set-labels:v0.1
      configMap:
        app: foobar
  validators:
    - image: gcr.io/kpt-fn/kubeval:v0.3

As we can see, the functions can have different types (mutators, validator, etc) and are inside an OCI Image. This OCI Image contains the code to execute the described function. For example, „set-label“ is a Golang tool which adds a set of labels to resources. You could also write your own.

ls foobar/

Kptfile  # Contains metadata and functions to apply
service.yaml # Kubernetes Manifest

cat Kptfile
---
apiVersion: kpt.dev/v1
kind: Kptfile
metadata:
  name: foobar-example
pipeline:
  mutators:
    - image: gcr.io/kpt-fn/apply-setters:v0.2.0
apiVersion: v1

cat service.yaml
---
apiVersion: v1
kind: Service
metadata:
  name: foobar-service
  labels:
    app: nginx
  annotations:
    internal.kpt.dev/upstream-identifier: '|Service|default|foobar-service'
spec:
  selector:
    app.kubernetes.io/name: Foobar
  ports:
    - protocol: TCP
      port: 8080 # kpt-set: ${foobar-service-port}
      targetPort: 80

Once we are done with our pipeline definition our kpt package is ready to deploy. We can directly talk to the Kubernetes API and deploy or just render the YAML.

kpt fn render --output unwrap

Packaging in kpt is based on Git forking. Once we are done with our package we can host it on a git server and users fork the package to use it. Users can then define their own pipelines to customize the manifests.

Note that kpt is still in development and subject to many major changes (the examples here are done with version 1.0.0-beta.24). This is currently my main issue with kpt, otherwise I think it is a very neat solution. Having the option to download and fully extend existing packages is very interesting, all while simply working with YAML manifests.

If you want to learn more about kpt, check out the „Kubernetes Podcast from Google“ Episode 99 (https://kubernetespodcast.com/episode/099-kpt/)

Conclusion

The shown Application Management tools are either templates, generators/overlays or functions to generate YAML. Another approach for managing applications is by using Custom Resources in Kubernetes that are managed by a custom Controller. Examples of such tools would be Acorn (https://acorn.io/) or Ketch (https://www.theketch.io/)

Personally, I do not think that these CRD based tools are an optimal solution.

The complexity they introduce might be fine if the benefit is worth it, however, my real issue is with adding an abstraction for the API. Meaning, you never learn to work with the API. While yes, developers might want to focus on the Application not the Infrastructure, it is still very likely that you will have to know how the API works (i.e. for monitoring or debugging). When learning how to write/render correct Kubernetes manifests for your application, you also learn how to work with Kubernetes resources.

Furthermore, some of the CRD based tools might have limitations when creating resources (i.e. the Ketch version at the time of writing requires you to create PVCs). Thus, depending on the solution you still need to learn how to write YAML.

That being said, it is true that template or DSL based tools have a similar downside. It can be quite tricky to cover all use-cases in a parameterized templates and thus be difficult to maintain. I recommend this design-proposal for further reading on the topic:

https://github.com/kubernetes/design-proposals-archive/blob/main/architecture/declarative-application-management.md#parameterization-pitfalls

The application management ecosystem is still a very active and changing part of Kubernetes. We will probably see a couple of solutions come and go until it stabilizes, if ever. Helm will probably stick around due to its current popularity and the momentum this carries.

I personally will keep an eye on kpt, which seems a very nice balance between complexity and modularity, while still working with YAML. Oh how I love YAML⸮

References

Markus Opolka
Markus Opolka
Senior Consultant

Markus war nach seiner Ausbildung als Fachinformatiker mehrere Jahre als Systemadministrator tätig und hat währenddessen ein Master-Studium Linguistik an der FAU absolviert. Seit 2022 ist er bei NETWAYS als Consultant tätig. Hier kümmert er sich um die Themen Container, Kubernetes, Puppet und Ansible. Privat findet man ihn auf dem Fahrrad, dem Sofa oder auf GitHub.

How To NWS: Managed Kubernetes

Nachdem sich im letzten Blog alles um OpenStack gedreht hat,  möchte ich heute die Gelegenheit nutzen, um  unser Managed Kubernetes Angebot vorzustellen.

Was ist Kubernetes überhaupt und wie lässt es sich einsetzen? Um diese Fragen zu beantworten, macht es Sinn zunächst kurz die Entwicklung der Ressourcennutzung auf einem Betriebssystem aufzuzeigen.

Entwicklung der Ressourcennutzung:

Früher gab es keine Möglichkeit auf einem physischen Server Ressourcengrenzen für eine Anwendung zu setzen. Beanspruchte eine App viele Ressourcen, blieb für die anderen entsprechend wenig zur Verfügung. Dieses Problem wurde durch die Virtualisierung gelöst. Nun konnte die CPU von einem physikalischen Server auf mehrere Virtuelle Maschinen aufgeteilt werden. Jede VM bekommt hierbei feste Ressourcengrenzen zugeteilt und somit können mehrere Apps nebeneinander auf einem Server laufen, ohne sich gegenseitig die notwendigen Ressourcen streitig zu machen. Durch die Virtualisierung war nun auch die Möglichkeit der Skalierbarkeit gegeben. Bei Bedarf lassen sich die Ressourcen einer VM leicht erhöhen und später genauso wieder herunterdrehen.  So lässt sich ein physischer Server wesentlich kosteneffizienter betreiben.

Jede VM bringt allerdings immer ihr eigenes, installiertes Betriebssystem mit. Abhängig von der Zahl der eingesetzten VMs auf einem Server werden so entsprechend viele Ressourcen mit dem Betriebssystemunterbau belegt. Mit der Containervirtualisierung konnte man diesen Umstand umgehen. In Containern werden zwar auch Anwendungen virtualisiert. Aber im Unterschied zu VMs besitzen Container kein eigenes Betriebssystem, sondern nutzen das des Hostsystems. Sie brauchen somit weniger Arbeitsspeicher, CPU- Leistung und Speicherplatz – sind also deutlich leichtgewichtiger. In einem Container wird die Anwendung mit all ihren Bibliotheken und Einstellungen in einem Installationspaket zusammengefasst und kann so leicht installiert und isoliert von anderen Anwendungen auf dem gleichen System betreiben werden. Diese Eigenschaft passt perfekt zu Anwendungen, die im Microservice-Architekturansatz entwickelt werden. Dabei wird die Anwendung in kleinere Einheiten (Microservices) aufgeteilt, die jeweils einen Teilaspekt der Anwendung bereitstellen. In einem Container verpackt, lässt sich ein fehlerhafter Microservice viel unkomplizierter austauschen, als bei einer Anwendung mit monolithischem Aufbau.

Kubernetes:

An dieser Stelle kommt nun Kubernetes ins Spiel. Denn irgendjemand muss bei den ganzen Microservices ja den Überblick und das Steuer in der Hand behalten. Das Kubernetes Projekt wurde 2014 von Google als OpenSource-Projekt veröffentlicht. Der Name kommt aus dem Griechischen und bedeutet so viel wie Steuermann/ Pilot.  In Kurzform wird es auch oft als „k8s“ bezeichnet.

Unser Managed Kubernetes Service kommt also typischerweise beim Hosting von Anwendungen zum Einsatz, die im Microservice-Architekturansatz entwickelt werden. Hier realisiert Kubernetes die Automatisierung der Bereitstellung, Skalierung und Verwaltung der containerisierten Anwendungen. Es orchestriert die Cluster virtueller Maschinen und plant wann Container auf diesen ausgeführt werden sollen. Kubernetes verteilt die Services automatisch so intelligent über dem gesamten Cluster, dass die vorhandenen Ressourcen optimal ausgenutzt werden. Es koordiniert also die Computer-, Netzwerk- und Speicherinfrastruktur im Namen der Benutzer-Workloads.

Für ein neues Kubernetes-Projekt musst du anfangs festlegen, ob Dein Cluster hochverfügbar sein soll und wie viele Knoten Du benötigst. Mittels kubectl gibst Du dann an, welche Container wie oft und auf wie vielen Worker Nodes gestartet werden sollen. Du definierst also lediglich das Ziel und der Rest geht automatisch. Die Controlplane startet selbstständig innerhalb von kürzester Zeit alle Container auf den entsprechenden Worker Nodes samt den dafür notwendigen Loadbalancern. In der Folge überwacht die Control Plane ständig, ob Ist- und Soll-Zustand auf den Nodes übereinstimmen. Fällt einer aus, wird automatisch ein neuer Worker Node mit dem entsprechendem Pod, in dem der Container liegt, hochgefahren. Genauso verhält es sich auch bei geupdateten Containern. Werden bei  der gehosteten Anwendung Bugs behoben oder neue Features hinzugefügt, wird diese in einem neuen Container bereitgestellt. Das erkennt Kubernetes und testet den neuen Container auf seine Funktionalität. Ist diese gegeben, werden automatisch alle alten Container durch die neuen ausgetauscht. So können Entwickler Kubernetes komplett in ihre Entwicklungs-, CI und Deployment-Umgebung integrieren und sich eine Menge manueller Handgriffe sparen. Weiterhin kann mittels Autoscaling sichergestellt werden, dass beim Erreichen einer bestimmten Lastgrenze weitere zusätzliche Instanzen hinzu- und nach der Unterschreitung wieder abgeschaltet werden. Kubernetes sorgt also für eine flexible Anpassbarkeit in Echtzeit. Das vereinbart eine stets stabile Performance mit einer möglichst effizienten Kostenstruktur.

Der Managed-Part:

Die größte Herausforderung bei Kubernetes liegt in der Komplexität des eigentlichen Erstellens, Betriebs und Instandhaltens des Kubernetes Clusters. Und hier kommt die gute Nachricht für Dich: diese Aufgaben liegen komplett bei uns. Wir sorgen im Hintergrund permanent für Updates, Backups und eine stabile zugrunde liegende Infrastruktur. Diese besteht auch hier aus unserer OpenStack Umgebung, mittels derer alle notwendigen VMs, Loadbalancer etc. gestartet werden. Unsere Kunden können also sämtliche Annehmlichkeiten von Kubernetes nutzen, ohne sich um den Aufbau des nötigen Fachwissens zum Betrieb eines K8s-Clusters kümmern zu müssen.

Du bist neugierig geworden?

Dann geht es hier zu unserer Kubernetes Seite: https://nws.netways.de/de/kubernetes/

Hier findest du unsere Preisliste: https://nws.netways.de/de/preise/

Und hier findest Du Tutorials und Webinare zu Kubernetes: https://nws.netways.de/de/

Stefan Schneider
Stefan Schneider
Account Manager

Vor seiner Zeit bei NETWAYS hat Stefan als Projektmanager in einer Nürnberger Agentur dabei geholfen, Werbeprojekte auf die Straße zu bringen. Seit Juni 2017 ist er nun stolzes Mitglied der NETWAYS-Crew. Hier war er zuerst der Ansprechpartner für unserer Schulungen und kümmert sich aktuell um alle Anfragen rund um unser Hostingangebot. Die Freizeit vertreibt sich Stefan am liebsten mit Sport. Vom Joggen über Slacklining bis zum PennyBoard fahren ist er für alles zu haben.

How To NWS: Software as a Service

Und weiter geht es mit der Blogserie „How To NWS“. Nachdem ich das letzte Mal darauf eingegangen bin, für wen unsere Dienstleistungen überhaupt interessant sind und aus welchen Beweggründen man sich auf die Suche nach uns macht, möchte ich nun dazu übergehen, einen Überblick über unser Portfolio geben.

Dieses setzt sich aus drei Bausteinen zusammen:

  1. SaaS / Open Source Apps
  2. IaaS
  3. MyEngineer

Im heutigen Blog erläutere ich, was es mit den Open Source Apps auf sich hat.

Open Source Apps – einfach starten!!

Wer direkt einsatzfähige Apps sucht, ist auf unserer Self-Service-Plattform genau richtig. Hier findet Ihr ein breites Spektrum an Tools, die je nach Unternehmensgröße in unterschiedlichen Paketen zu kostengünstigen Preisen gebucht werden können. Hierbei kann je nach Zahlungsform eine Vertragslaufzeit von einem Monat oder einem Jahr gewählt werden.

Der Grundgedanke dieser Plattform ist, dass alles einfach, schnell und stabil funktioniert. Und wie schaffen wir das? Mit Hilfe unserer Container-Lösung. Die Anwendungen werden von den Kunden:innen selbst gestartet. Alle  Apps sind in Container verpackt und werden dadurch innerhalb kürzester Zeit (ca. 3-4 Minuten) hochgefahren und sind dann direkt einsatzbereit.

Je nachdem für welche App Ihr Euch entscheidet, lassen sich nun auch noch individuelle Einstellungen hinterlegen (Domain, Branding oder 2-Faktor-Authorisierung etc.), um das Tool somit nach den eigenen Vorstellungen anzupassen.

Support

Für den Fall, dass man hier an seine Grenzen stößt oder dass es mal irgendwo klemmt, gibt es den NWS-Support. Für einen Hilferuf könnt Ihr Euch per Ticketsystem, LiveChat oder Telefon bei uns melden und wir kümmern uns darum, dass die Fragezeichen umgehend aus der Welt geschafft werden. Dieser Service ist bereits im Monatspreis inbegriffen. Gleiches gilt für die Betriebsführung. Alle Updates und Wartungen werden automatisch durch unsere Techniker durchgeführt. So bleiben die Apps sicher und sind stets auf dem neuesten Stand. Unsere Kunden müssen sich um nichts kümmern und können den Dienst einfach benutzen.

Kostenlos Testen!

Zu guter Letzt gibt es bei ALLEN Apps eine kostenlose Probezeit von 30 Tagen. Du bist nicht ganz sicher, ob das Tool mit all Deinen Anforderungen hundertprozentig übereinstimmt? Kein Problem: starte einfach die App und probiere alles einen Monat lang in Ruhe aus. Hierbei musst Du keine Angst vor einer Abo-Falle haben – Deine Kontodaten musst Du erst mit Ablauf der Probezeit hinterlegen (natürlich nur, wenn  Du die App über den Testzeitraum hinaus weiter nutzen möchtest).

App-Auswahl

Inhaltlich decken wir mit Apps aus den Bereichen Kommunikation, Organisationsverwaltung bis hin zur Überwachung der eigenen IT-Infrastruktur ein sehr breites Spektrum ab. Für fast alle Anforderungen, die das Arbeiten im (Home)Office so mit sich bringt, findet man hier den richtigen Dienst.

Kommunikation

Wer einen Instant-Messenger sucht, um sich mit den Kollegen:innen unkompliziert auszutauschen, kann sich bei uns zwischen RocketChat und Mattermost entscheiden. Als Videokonferenzsystem bieten wir mit Jitsi eine tolle, DSGVO-konforme Alternative zu den Datenkraken von Teams, Zoom u. Co. Für den sicheren Dokumentenaustausch zwischen Kolleg:innen oder mit Kund:innen haben wir Nextcloud im Programm. Hierbei kann man u.a. mit dem Textverarbeitungsprogramm OnlyOffice sogar zeitgleich gemeinsam Dokumente, Tabellen und Präsentationen bearbeiten. Außerdem bekommt Ihr vollen Zugriff auf den Nextcloud-Appstore, über den sich unzählige, weitere Tools an die eigene Nextcloud-Instanz anbinden lassen.

Organisation

Mit Suite CRM verwaltet Ihr Eure Kundendaten und behaltet stets die Übersicht über alle getätigten kundenspezifischen Aktionen. Perfekt ergänzt wird das Ganze durch den RequestTracker, mit dessen Hilfe jegliche Korrespondenz in verschiedene Queues einsortiert wird. Dabei können zusammengehörige Anliegen miteinander verknüpft und alle Aufgaben mit einem Bearbeitungsstatus versehen werden. So habt Ihr zu jeder Zeit alle Kundenanfragen im Blick und nichts kann mehr verloren gehen. Den Überblick zu behalten gilt es auch bei der Versionsverwaltung Eurer Softwareprojekte. Dies gelingt mittels GitLab. Hier können all Eure Entwickler gleichzeitig Quellcode programmieren, Änderungen vornehmen und deren Funktionalität testen. Alle Änderungen werden durch Commits gespeichert und sind für jeden Entwickler jederzeit sichtbar.

Monitoring

Für das Monitoring Eurer Infrastruktur haben wir den Icinga Master und den Icinga Satelliten im Programm. Mit dem Icinga Master kannst Du Dir Hosts mit vorkonfigurierten Prüfungen einrichten und hier dann beispielsweise Lastspitzen mittels grafischen Metriken sofort erkennen. Icinga 2 Satellite hilft Dir, Deine Dienste aus der Sicht Deiner Kunden (also aus externer Sicht) zu überprüfen. Den Abschluss bildet Cachet. Das ist ein benutzerfreundliches Statusseitensystem, mit dem all Deine Benutzer stets über die Verfügbarkeit Deiner Services im Bilde bleiben.

Neugierig geworden? Na dann auf zu unseren SaaS Apps: Alle Infos findest Du unter https://nws.netways.de/de/apps/

Im nächsten Blog geht es dann weiter mit Punkt 2 unseres Portfolios: Infrastructure as a Service mit OpenStack.

Stefan Schneider
Stefan Schneider
Account Manager

Vor seiner Zeit bei NETWAYS hat Stefan als Projektmanager in einer Nürnberger Agentur dabei geholfen, Werbeprojekte auf die Straße zu bringen. Seit Juni 2017 ist er nun stolzes Mitglied der NETWAYS-Crew. Hier war er zuerst der Ansprechpartner für unserer Schulungen und kümmert sich aktuell um alle Anfragen rund um unser Hostingangebot. Die Freizeit vertreibt sich Stefan am liebsten mit Sport. Vom Joggen über Slacklining bis zum PennyBoard fahren ist er für alles zu haben.

NETWAYS Managed Kubernetes. Auf in die Welt der Container!

Stolz können wir verkünden: Wir haben ab sofort Kubernetes (K8s) als “NETWAYS Managed Kubernetes” neu in unserem Managed und Web Services-Portfolio.

Kubernetes ist griechisch und bedeutet Steuermann. Der Name passt, denn das Open Source-System gibt wie ein Steuermann den Weg zur Bereitstellung, Skalierung und Verwaltung von Containern vor. Du definierst, was Du willst und Kubernetes steuert alles, was an Infrastruktur auf dem Weg dorthin nötig ist.

Ein ganz großer Vorteil von Kubernetes: Services werden in Containern automatisch auf den kompletten Kubernetes-Cluster verteilt. Die vorhandenen Ressourcen werden dabei optimal ausgenutzt. Die Herausforderung: K8s braucht die richtigen Ressourcen zur richtigen Zeit, der Kubernetes-Cluster muss hochverfügbar gebaut sein und bestens gepflegt werden, um skalieren zu können.

Ich könnte jetzt darüber witzeln, dass Sebastian, unser Head of Managed Services, Kopf der NWS-Mannschaft, Saemann heißt, also irgendwie ähnlich, und muss bei dem Gedanken daran wirklich ein bisschen schmunzeln. Weil das ja irgendwie gut passt. Der Saemann und seine Mannschaft bereiten den Boden, auf dem der Steuermann seine Container automatisch dirigieren kann. So ist das mit unserem Managed Kubernetes.

Also gut – damit ihr wisst, was ich meine, hier ein paar Fakten.

Das bietet NETWAYS Managed Kubernetes:

  • Cluster-Erstellung in Minuten | Cluster-Status definieren, die Anzahl der Nodes (früher Minions) festlegen, kubectl starten: Nach nur wenigen Schritten ist Dein Kubernetes bereit. Wir helfen Dir gern dabei!
  • Managed Control Plane | Auf Wunsch überwachen und betreiben wir die Control Plane für Dich, auch 24/7.
  • Object Storage | Du kannst lokalen Speicher oder Ceph-Speicher verwenden. Objekte werden über unsere zwei ISO 27001-zertifizierte Rechenzentren repliziert.
  • Offene Standards und APIs | Alle Kubernetes-Cluster sind kompatibel mit dem Upstream-Projekt. Ebenso die zugrunde liegende Infrastruktur, die auf OpenStack basiert. Eh klar. Wir lieben Open Source!
  • Persistente Volume Claims | Ermöglichen die Speicherung von Daten über den Lebenszyklus des Containers hinaus.
  • Load Balancer | Load Balancing und die DNS-Verwaltung erfolgen automatisch. Auf Wunsch stellen wir Dir Services und Ingress-Controller bereit.

Kubernetes unterstützt eine Reihe von Container-Runtime-Engines, einschließlich Docker. Es wird in vielen IT-Abteilungen häufig als eine Möglichkeit verwendet, eine auf Microservices basierende Anwendung zu betreiben. Das enorme Ökosystem und die verbreitete Integration in Drittanwendungen ist Garant für reibungslose Continuous Integration und Deployment-Prozesse.

Das Kubernetes-Projekt wurde von Google-Entwicklern initiiert und wird von der Cloud Native Computing Foundation (CNCF) betrieben. Die CNCF ist Teil der gemeinnützigen Linux Foundation.

Kubernetes – der De-facto-Standard im agilen Software-Entwicklungsumfeld

„Kubernetes ist der De-facto-Standard für moderne und zukunftsorientierte Anwendungen im agilen Software-Entwicklungsumfeld“, sagt Sebastian und zeigt sich stolz, diesen Service jetzt anbieten zu können.

Du willst mehr wissen? Oder direkt Deine ersten eigenen Container starten?

Dann schau doch mal auf nws.netways.de/kubernetes.

Docker – ein erster Eindruck!

Ich habe in den letzten Monaten meiner Ausbildung schon viel über verschiedene Software, Strukturen und Programiersprachen gelernt. Seit einigen Wochen arbeite ich in der Managed Services-Abteilung mit Docker und bin wirklich fasziniert, was Docker alles kann und wie es funktioniert.

Was genau ist Docker?

Docker ist eine Containerisierungstechnologie, die die Erstellung und den Betrieb von Linux-Containern ermöglicht, die man nicht mit virtuellen Maschinen verwechseln sollte.

Docker vereinfacht die Bereitstellung von Anwendungen, weil sich Container, die alle nötigen Pakete enthalten, leicht als Dateien transportieren und installieren lassen. Container gewährleisten die Trennung und Verwaltung der auf einem Rechner genutzten Ressourcen. Das beinhaltet laut Aussage der Entwickler: Code, Laufzeitmodul, Systemwerkzeuge, Systembibliotheken – alles was auf einem Rechner installiert werden kann.

Welche Vorteile bringt Docker?

Ein Vorteil ist, dass man diese Container sehr flexibel erstellen, einsetzen, kopieren und zwischen Umgebungen hin- und her verschieben kann. Sogar ein Betrieb in der Cloud ist dadurch möglich und eröffnet viele neue Möglichkeiten. Das Ausführen verschiedener Container bietet zusätzlich einige Sicherheitsvorteile. Wenn man Anwendungen in verschiedenen Containern ausführt, hat jeder Container nur Zugriff auf die Ports und Dateien, die der andere Container explizit freigibt.

Darüber hinaus bieten Container ein höheres Maß an Kontrolle darüber, welche Daten und Software auf dem Container installiert sind. Schadsoftware, die in einem Container ausgeführt wird, wirkt sich nicht auf andere Container aus.

Was ist der Unterschied zwischen Docker-Containern und virtuellen Maschinen?

Virtuelle Maschinen enthalten von der simulierten Hardware, über das Betriebssystem bis zu den installierten Programmen eine große Menge an Informationen. Die Folge: Sie verbrauchen viel Speicherplatz und Ressourcen.

Der große und schöne Unterschied zu herkömmlichen virtuellen Maschinen ist, dass die Container kein Betriebssystem beinhalten und booten müssen, sondern lediglich die wichtigen Daten der Anwendung enthalten. Wollten wir früher beispielsweise eine Datenbank und einen Webserver getrennt voneinander starten, benötigen wir zwei VMs. Mit Docker werden hier nur noch zwei Container benötigt, ohne dass man die VMs booten muss, die kaum Ressourcen verbrauchen – im Vergleich zu den virtuellen Maschinen.

Virtuelle Maschinen jedoch haben nach wie vor ihre Daseinsberechtigung: zum Beispiel wenn auf einem Host mehrere Maschinen mit jeweils unterschiedlichen Betriebssystemen oder Hardware-Spezifikationen simuliert werden müssen. Denn ein Docker-Container enthält kein eigenes Betriebssystem und keine simulierte Hardware. Hier wird auf das System des Hosts zugegriffen, so dass alle Container Betriebssystem und Hardware gemeinsam nutzen.

Fazit zum Thema Docker:

Den Einsatz von Docker betrachte ich als sinnvoll. Es ergeben sich viele Vorteile und so ist es inzwischen möglich, eine Softwareumgebung rascher aufzubauen, ohne viel Speicherplatz und Ressourcen zu verbrauchen.