title: Fail safe container scheduling in Kubernetes
title: Ασφαλής διαχείριση εικονοκιβωτίων στο σύστημα Kubernetes
Creators: name: Χριστοδουλοπουλος Χρηστος
Publisher: name: Technical University of Crete
Year: 2017

description: Το Kubernetes είναι ένα εργαλείο το οποίο διευκολύνει τη διαχείριση πολλαπλών εφαρμογών σε εικονοποιημένα (σε επίπεδο λειτουργικού συστήματος) περιβάλλοντα χρησιμοποιώντας Containers. Είναι ικανό να διαχειριστεί πολλαπλές εφαρμογές και χρήστες ταυτόχρονα, διανέμοντας υπολογιστικούς πόρους στις εφαρμογές μέσω ενός μηχανισμού χρονοδρομολόγησης. Ο μηχανισμός αυτός είναι επίσης υπεύθυνος για την εκ νέου αναδιανομή των υπολογιστικών πόρων ανά εφαρμογή με βάση τις πραγματικές ανάγκες κατά το χρόνο εκτέλεσής τους. Ωστόσο, η κατανομή των πόρων σε ένα τυπικό περιβάλλον Kubernetes είναι στατική (δηλαδή είναι εκ των προτέρων προκαθορισμένο το μέγιστο ποσό των υπολογιστικών πόρων που μπορεί να χρησιμοποιήσει η κάθε εφαρμογή), πράγμα που σημαίνει ότι εάν η εφαρμογή απαιτεί περισσότερους πόρους, τότε το σύστημα δεν είναι σε θέση να το διαχειριστεί. Παρόλο που είναι γνωστό ότι υπάρχουν λύσεις στο πρόβλημα της αυτόματης επέκτασης των υπολογιστικών πόρων σε συστήματα Kubernetes και η αυτόματη κλιμάκωση υποστηρίζεται από παρόχους υπηρεσιών νέφους όπως Amazon και Google, οι λύσεις αυτές είναι πλήρως αποκλειστικές και όχι πάντα γενικές (δηλ. δεν ισχύουν για όλες τις διανομές του Kubernetes και δε μπορούν να εφαρμοστούν σε οποιοδήποτε περιβάλλον νέφους). Αυτό είναι ακριβώς το πρόβλημα που αντιμετωπίζει αυτή η εργασία. Προτείνουμε το σύστημα Commodore, ένα μηχανισμό που είναι ανεξάρτητος από την πλατφόρμα (δηλαδή μπορεί να λειτουργήσει με οποιαδήποτε διανομή Kubernetes, συμπεριλαμβανομένων και αυτών που δεν παρέχονται από υπηρεσίες νέφους). Το Commodore είναι ικανό να κατανείμει (ή να αποδεσμεύει) πόρους σε εφαρμογές με βάση τις πραγματικές απαιτήσεις τους. Το Commodore υλοποιήθηκε χρησιμοποιώντας την υπηρεσία νέφους FIWARE, η οποία βασίζεται στο OpenStack. Στο περιβάλλον αυτό, οι εφαρμογές εκτελούνται σε εικονικές μηχανές, οι οποίες ενεργούν ως κόμβοι του συστήματος. Με τον τρόπο αυτό, η εφαρμογή εκμεταλλεύεται τις δυνατότητες εικονικοποίησης του περιβάλλοντος νέφους (δηλ. επιτρέπει την παραμετροποίηση πόρων, συμπεριλαμβανομένων του δικτύου, της CPU και της μνήμης, που οδηγούν στην καλύτερη αξιοποίηση των φυσικών πόρων των μηχανημάτων, εξασφαλίζοντας παράλληλα ασφάλεια μέσω της απομόνωσης που προσφέρει το εικονικό αυτό περιβάλλον). Εκτελέσαμε διάφορα πειράματα με βάση ένα προσομοιωμένο (αλλά ρεαλιστικό) σενάριο χρήσης. Τα αποτελέσματα απέδειξαν ότι το Commodore ανταποκρίνεται στις αυξανόμενες (ή μειούμενες) απαιτήσεις πόρων της εφαρμογής που οδηγούν σε σημαντικά ταχύτερους χρόνους απόκρισης σε σύγκριση με μια μη κλιμακωτή υλοποίηση όπου όλος ο υπολογιστικός φόρτος αντιμετωπίζεται από τους στατικά προ-δεσμευμένους πόρους.
description: Kubernetes is a tool for facilitating deployment of multiple OS system-level virtualized applications using containers. It is capable for the management of several containerized applications and users at the same time allowing compute resources to be managed and distributed to the applications using a scheduling mechanism. The scheduling mechanism is also responsible for re-scheduling of compute resources per application based on the actual needs of each application at run-time. However, resource allocation in a typical Kubernetes environment is rather static (i.e. the maximum amount of compute resources that each application can use has to be known in advance) meaning that if the application requests more resources than the maximum, a failure scheduling event will be generated. Although solutions to the problem of automatic scaling of resources in Kubernetes are known to exist and auto scaling is supported by cloud providers such as Amazon and Google, these solutions are fully proprietary and not always generic (i.e. do not apply to all Kubernetes distributions). This is exactly the problem this work is dealing with. We propose Commodore, a mechanism that is platform independent (i.e. can work with any Kubernetes distribution including non-cloud based implementations). Commodore is capable of allocating (or de-allocating) resources to applications based on their actual demands. To show proof of concept, Commodore is implemented on a Fiware cloud platform running on Openstack. In this environment, application services are deployed on worker machines (nodes) which are realized as Virtual Machines (VMs). This way, the implementation takes advantage of the virtualization features of cloud computing (i.e. allows for definition of virtualized resources including network, cpu and memory leading to better utilization of physical resources while ensuring software security by isolating services and applications from each other). We run several experiments based on a simulated (but realistic) use case scenario. The experimental results demonstrated that Commodore responds to the increasing (or decreasing) resource demands of the application leading to significantly faster response times compared to a non-auto scaled implementation where all service requests are handled by the maximum statically pre-allocated resources.