Επιστροφή στο blog

Πώς να εγκαταστήσετε και να χρησιμοποιήσετε το Kubernetes στο Ubuntu 20.04

Πώς να εγκαταστήσετε και να χρησιμοποιήσετε το Kubernetes στο Ubuntu 20.04

Εισαγωγή

Kubernetes είναι ένα εργαλείο ανοιχτού κώδικα που είναι κρίσιμο στην ενορχήστρωση κοντέινερ. Το Kubernetes λειτουργεί ενορχηστρώνοντας και διαχειριζόμενο συμπλέγματα σε κλίμακα σε διάφορα περιβάλλοντα cloud ή ακόμα και σε τοπικούς διακομιστές. Ένα σύμπλεγμα είναι ένα σύνολο κεντρικών υπολογιστών που προορίζονται για την εκτέλεση εφαρμογών και υπηρεσιών σε κοντέινερ. Ένα σύμπλεγμα χρειάζεται τουλάχιστον δύο κόμβους για να λειτουργήσει – έναν master κόμβο και έναν worker κόμβο. Έχοντας κατά νου την επεκτασιμότητα, έχετε την επιλογή να επεκτείνετε το σύμπλεγμα με όσους κόμβους worker απαιτείται.

Ένας κόμβος στο Kubernetes αναφέρεται σε έναν διακομιστή. Ένας master κόμβος είναι ένας διακομιστής που διαχειρίζεται την κατάσταση του συμπλέγματος. Οι worker κόμβοι είναι διακομιστές που εκτελούν τα φορτία εργασίας – αυτά είναι συνήθως εφαρμογές και υπηρεσίες σε κοντέινερ.

Αυτός ο οδηγός θα σας καθοδηγήσει στα βήματα εγκατάστασης και ανάπτυξης ενός συμπλέγματος Kubernetes που αποτελείται από δύο κόμβους σε Ubuntu 20.04. Όπως αναφέρθηκε, η ύπαρξη δύο κόμβων είναι η πιο βασική διαμόρφωση κατά την εργασία με το Kubernetes. Έχετε επίσης την επιλογή να προσθέσετε περισσότερους κόμβους worker μόλις κατανοήσετε τα βασικά. Θα σας δείξουμε επίσης πώς να συνδέσετε τους δύο διακομιστές για να επιτρέψετε στον master κόμβο να ελέγχει τον worker κόμβο.

Για να δοκιμάσουμε τη διαμόρφωσή μας, θα αναπτύξουμε ένα Docker κοντέινερ που εκτελεί τον Nginx webserver στο σύμπλεγμα. Αυτή είναι μια τυπική πραγματική εφαρμογή του Kubernetes. Θα μάθετε περισσότερα για ορισμένα καθοριστικά στοιχεία του Kubernetes, όπως kubectl και kubeadm καθώς προχωράμε. Συνιστάται επίσης να εξοικειωθείτε πρώτα με τον οδηγό μας σχετικά με το γνωριμία με τα βασικά του πακέτου εργαλείων του Kubernetes για να εξοικειωθείτε με τα βασικά της πλατφόρμας Kubernetes.

Τώρα, ας ξεκινήσουμε!

Προαπαιτούμενα

Θα χρειαστεί να προετοιμάσετε δύο διακομιστές, που εκτελούνται σε Ubuntu 20.04. Για βέλτιστη απόδοση, οι ελάχιστες απαιτήσεις συστήματος για το Kubernetes είναι 2GB RAM και 2 CPU. Μπορείτε να ακολουθήσετε τα βήματα 1 έως 4 αυτού του οδηγού βήμα προς βήμα για να σας βοηθήσει να ρυθμίσετε τον Ubuntu διακομιστή σας στο CloudSigma. Ο ένας διακομιστής θα είναι ο master κόμβος, ο άλλος θα είναι ο worker κόμβος. Έχουμε ονομάσει κατάλληλα τους δύο διακομιστές μας ως kubernetes-master και kubernetes-worker. Αυτό καθιστά ευκολότερη την παρακολούθηση του οδηγού. Ωστόσο, είστε ελεύθεροι να επιλέξετε τα hostnames που προτιμάτε.

  • Βεβαιωθείτε ότι έχετε προσθέσει έναν χρήστη με sudo προνόμια και στους δύο κόμβους, τον οποίο θα χρησιμοποιήσουμε για να εκτελέσουμε τις εντολές όπως περιγράφεται στον παραπάνω οδηγό. Ακολουθήστε αυτόν τον οδηγό σχετικά με τη διαμόρφωση του αρχείου Linux sudoers για οδηγίες.

  • Συνδεσιμότητα δικτύου – οι διακομιστές στο σύμπλεγμα θα πρέπει να μπορούν να επικοινωνούν. Όταν αναπτύσσετε τις εικονικές σας μηχανές (VMs) από το CloudSigma, θα είναι συνδεδεμένες στο διαδίκτυο με μια δημόσια IP από προεπιλογή. Εάν εργάζεστε από ένα τοπικό δίκτυο, ίσως χρειαστεί να επεξεργαστείτε το αρχείο /etc/hosts σε κάθε διακομιστή και να τους συνδέσετε κατάλληλα.

  • Θα χρειαστεί να εγκαταστήσετε και να ενεργοποιήσετε το Docker on each of the nodes. Kubernetes relies on a container runtime to run containers in pods. While there are other container platforms to choose from, we will be using Docker in this tutorial. Docker will provide the runtime environment needed by Ubuntu. You may follow steps 1, 2, and 3 of our οδηγού για την εγκατάσταση και λειτουργία του Docker.

Βήμα 1: Εγκατάσταση του Kubernetes

Σε αυτό το βήμα, θα εγκαταστήσουμε το Kubernetes. Ακριβώς όπως κάνατε με το Docker στα προαπαιτούμενα, πρέπει να εκτελέσετε τις εντολές και στους δύο κόμβους για να εγκαταστήσετε το Kubernetes. Χρησιμοποιήστε το ssh για να συνδεθείτε και στους δύο κόμβους και να προχωρήσετε. Θα ξεκινήσετε εγκαθιστώντας το πακέτο apt-transport-https το οποίο επιτρέπει την εργασία με http και https στα αποθετήρια του Ubuntu’s. Also, install curl καθώς θα είναι απαραίτητο για τα επόμενα βήματα. Εκτελέστε την ακόλουθη εντολή:

Στη συνέχεια, προσθέστε το Kubernetes υπογραφής κλειδί και στους δύο κόμβους εκτελώντας την εντολή:

Στη συνέχεια, προσθέτουμε το Kubernetes αποθετήριο ως πηγή πακέτων και στους δύο κόμβους χρησιμοποιώντας την ακόλουθη εντολή:

Μετά από αυτό, ενημερώστε τους κόμβους:

  • Εγκατάσταση εργαλείων Kubernetes

Μόλις ολοκληρωθεί η ενημέρωση, θα εγκαταστήσουμε το Kubernetes. Αυτό περιλαμβάνει την εγκατάσταση των διαφόρων εργαλείων που αποτελούν το Kubernetes: kubeadm, kubelet, kubectl, και kubernetes-cni. Αυτά τα εργαλεία είναι εγκατεστημένα και στους δύο κόμβους. Ορίζουμε κάθε εργαλείο παρακάτω:

  • kubelet – ένας πράκτορας που εκτελείται σε κάθε κόμβο και χειρίζεται την επικοινωνία με τον κύριο κόμβο για την έναρξη φόρτων εργασίας στο περιβάλλον εκτέλεσης κοντέινερ. Εισαγάγετε την ακόλουθη εντολή για να εγκαταστήσετε το kubelet:

  • kubeadm – μέρος του έργου Kubernetes και βοηθά στην προετοιμασία ενός συμπλέγματος Kubernetes. Εισαγάγετε την ακόλουθη εντολή για να εγκαταστήσετε το kubeadm:

  • kubectl – το εργαλείο γραμμής εντολών του Kubernetes που σας επιτρέπει να εκτελείτε εντολές μέσα στα συμπλέγματα Kubernetes. Εκτελέστε την ακόλουθη εντολή για να εγκαταστήσετε το kubectl:

  • kubernetes-cni – επιτρέπει τη δικτύωση εντός των κοντέινερ, διασφαλίζοντας ότι τα κοντέινερ μπορούν να επικοινωνούν και να ανταλλάσσουν δεδομένα. Εκτελέστε την ακόλουθη εντολή για εγκατάσταση:

Προαιρετικά, μπορείτε να εγκαταστήσετε και τα τέσσερα με μία μόνο εντολή:

Βήμα 2: Απενεργοποίηση της μνήμης Swap

Το Kubernetes αποτυγχάνει να λειτουργήσει σε ένα σύστημα που χρησιμοποιεί swap μνήμη. Επομένως, πρέπει να απενεργοποιηθεί στον κύριο κόμβο και σε όλους τους κόμβους εργασίας. Εκτελέστε την ακόλουθη εντολή για να απενεργοποιήσετε τη μνήμη swap:

Αυτή η εντολή απενεργοποιεί τη μνήμη swap μέχρι να γίνει επανεκκίνηση του συστήματος. Πρέπει να διασφαλίσουμε ότι παραμένει απενεργοποιημένη ακόμη και μετά από επανεκκινήσεις. Αυτό πρέπει να γίνει στον κύριο κόμβο και σε όλους τους κόμβους εργασίας. Μπορούμε να το κάνουμε αυτό επεξεργαζόμενοι το αρχείο fstab αρχείο και σχολιάζοντας τη γραμμή /swapfile με ένα #. Ανοίξτε το αρχείο με τον επεξεργαστή κειμένου nano εισάγοντας την ακόλουθη εντολή:

Μέσα στο αρχείο, σχολιάστε τη γραμμή swapfile όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης:

install Kubernetes fstab swap disable

Αν δεν βλέπετε τη γραμμή swapfile, απλώς αγνοήστε την. Αποθηκεύστε και κλείστε το αρχείο όταν ολοκληρώσετε την επεξεργασία. Ακολουθήστε την ίδια διαδικασία και για τους δύο κόμβους. Τώρα, οι ρυθμίσεις της μνήμης swap θα παραμείνουν απενεργοποιημένες, ακόμη και μετά την επανεκκίνηση του διακομιστή σας.

Βήμα 3: Ορισμός μοναδικών ονομάτων κεντρικού υπολογιστή

Οι κόμβοι σας πρέπει να έχουν μοναδικά ονόματα κεντρικού υπολογιστή για ευκολότερη αναγνώριση. Εάν αναπτύσσετε ένα σύμπλεγμα με πολλούς κόμβους, μπορείτε να το ρυθμίσετε ώστε να αναγνωρίζει ονόματα για τους κόμβους εργασίας σας, όπως node-1, node-2, κ.λπ. Όπως είχαμε αναφέρει νωρίτερα, έχουμε ονομάσει τους κόμβους μας ως kubernetes-master και kubernetes-worker. Τα έχουμε ορίσει κατά τη δημιουργία του διακομιστή. Ωστόσο, μπορείτε να προσαρμόσετε ή να ορίσετε τα δικά σας εάν δεν το έχετε κάνει ήδη από τη γραμμή εντολών. Για να προσαρμόσετε το όνομα κεντρικού υπολογιστή στον κύριο κόμβο, εκτελέστε την ακόλουθη εντολή:

Στον κόμβο εργασίας, εκτελέστε την ακόλουθη εντολή:

Μπορείτε να κλείσετε την τρέχουσα περίοδο λειτουργίας τερματικού και να συνδεθείτε ξανά μέσω ssh στον διακομιστή για να δείτε τις αλλαγές.

Βήμα 4: Επιτρέποντας στο Iptables να βλέπει τη γεφυρωμένη κίνηση

Για να βλέπουν σωστά οι κύριοι κόμβοι και οι κόμβοι εργασίας τη γεφυρωμένη κίνηση, θα πρέπει να βεβαιωθείτε ότι το net.bridge.bridge-nf-call-iptables έχει οριστεί σε 1 στις ρυθμίσεις σας. Αρχικά, βεβαιωθείτε ότι η ενότητα br_netfilter έχει φορτωθεί. Μπορείτε να το επιβεβαιώσετε εκτελώντας την εντολή:

Προαιρετικά, μπορείτε να το φορτώσετε ρητά με την εντολή:

Τώρα, μπορείτε να εκτελέσετε αυτήν την εντολή για να ορίσετε την τιμή σε 1:

Βήμα 5: Αλλαγή του Docker Cgroup Driver

Από προεπιλογή, το Docker εγκαθίσταται με cgroupfs ως cgroup driver. Το Kubernetes συνιστά ότι το Docker θα πρέπει να εκτελείται με systemd ως driver. Εάν παραλείψετε αυτό το βήμα και προσπαθήσετε να αρχικοποιήσετε το kubeadm στο επόμενο βήμα, θα λάβετε την ακόλουθη προειδοποίηση στο τερματικό σας:

Τόσο στον master όσο και στους worker κόμβους, ενημερώστε το cgroupdriver με τις ακόλουθες εντολές:

Στη συνέχεια, εκτελέστε τις ακόλουθες εντολές για να επανεκκινήσετε και να ενεργοποιήσετε το Docker κατά την εκκίνηση του συστήματος:

Μόλις ρυθμιστεί αυτό, μπορούμε να προχωρήσουμε στο διασκεδαστικό κομμάτι, την ανάπτυξη του Kubernetes cluster!

Βήμα 6: Αρχικοποίηση του Kubernetes Master Node

Το πρώτο βήμα για την ανάπτυξη ενός Kubernetes cluster είναι η εκκίνηση του master node. Ενώ βρίσκεστε στο τερματικό του master node σας, εκτελέστε την ακόλουθη εντολή για να αρχικοποιήσετε το kubernetes-master:

Εάν εκτελέσετε την παραπάνω εντολή και το σύστημά σας δεν πληροί τις αναμενόμενες απαιτήσεις, όπως η ελάχιστη RAM ή CPU όπως εξηγείται στην ενότητα Προαπαιτούμενα, θα λάβετε μια προειδοποίηση και το cluster δεν θα ξεκινήσει:

install Kubernetes InitError

Σημείωση: Εάν κάνετε την εγκατάσταση για περιβάλλον παραγωγής, είναι καλή ιδέα να πληροίτε πάντα τις ελάχιστες απαιτήσεις για την ομαλή λειτουργία του Kubernetes. Ωστόσο, εάν παρακολουθείτε αυτόν τον οδηγό για εκπαιδευτικούς σκοπούς, τότε μπορείτε να προσθέσετε την ακόλουθη παράμετρο στην εντολή kubeadm init για να αγνοήσετε τις προειδοποιήσεις σφαλμάτων:
sudo kubeadm init --ignore-preflight-errors=NumCPU,Mem --pod-network-cidr=10.244.0.0/16

Το παρακάτω στιγμιότυπο οθόνης δείχνει ότι η αρχικοποίηση ήταν επιτυχής. Έχουμε επίσης προσθέσει μια παράμετρο για να καθορίσουμε το δίκτυο pod με την IP 10.244.0.0. Είναι η προεπιλεγμένη IP που χρησιμοποιεί το kube-flannel. Θα συζητήσουμε περισσότερα για το δίκτυο pod στο επόμενο βήμα.

install Kubernetes Kubeadm Init

Στο αποτέλεσμα, μπορείτε να δείτε την εντολή kubeadm join (έχουμε αποκρύψει τη διεύθυνση IP μας) και ένα μοναδικό token που θα εκτελέσετε στον worker node και σε όλους τους άλλους worker nodes που θέλετε να συνδεθούν σε αυτό το cluster. Στη συνέχεια, αντιγράψτε και επικολλήστε αυτήν την εντολή καθώς θα τη χρησιμοποιήσετε αργότερα στον worker node.

Στο αποτέλεσμα, το Kubernetes εμφανίζει επίσης ορισμένες πρόσθετες εντολές που πρέπει να εκτελέσετε ως απλός χρήστης στον master node προτού αρχίσετε να χρησιμοποιείτε το cluster. Ας εκτελέσουμε αυτές τις εντολές:

Έχουμε πλέον αρχικοποιήσει τον master node. Ωστόσο, πρέπει επίσης να ρυθμίσουμε το δίκτυο pod στον master node προτού συνδέσουμε τους worker nodes.

Βήμα 7: Ανάπτυξη ενός Δικτύου Pod

Ένα δίκτυο pod διευκολύνει την επικοινωνία μεταξύ των διακομιστών και είναι απαραίτητο για τη σωστή λειτουργία του Kubernetes cluster. Μπορείτε να διαβάσετε περισσότερα για το Kubernetes Cluster Networking από τα επίσημα έγγραφα. Θα χρησιμοποιήσουμε το δίκτυο pod Flannel για αυτόν τον οδηγό. Το Flannel είναι ένα απλό δίκτυο επικάλυψης (overlay network) που ικανοποιεί τις απαιτήσεις του Kubernetes.

Πριν αναπτύξουμε το δίκτυο pod, πρέπει να ελέγξουμε την κατάσταση του τείχους προστασίας. Εάν έχετε ενεργοποιήσει το τείχος προστασίας αφού ακολουθήσατε το βήμα 5 του οδηγού για τη ρύθμιση του διακομιστή σας Ubuntu, πρέπει πρώτα να προσθέσετε έναν κανόνα τείχους προστασίας για να δημιουργήσετε εξαιρέσεις για τη θύρα 6443 (την προεπιλεγμένη θύρα για το Kubernetes). Εκτελέστε τις ακόλουθες ufw εντολές τόσο στον master όσο και στους worker κόμβους:

Μετά από αυτό, μπορείτε να εκτελέσετε τις ακόλουθες δύο εντολές για να αναπτύξετε το δίκτυο pod στον master κόμβο:

Αυτό μπορεί να διαρκέσει από μερικά δευτερόλεπτα έως ένα λεπτό, ανάλογα με το περιβάλλον σας, για να φορτωθεί το δίκτυο flannel. Εκτελέστε την ακόλουθη εντολή για να επιβεβαιώσετε ότι όλα έχουν ξεκινήσει:

Το αποτέλεσμα της εντολής θα πρέπει να δείχνει την κατάσταση όλων των υπηρεσιών ως running εάν όλα ήταν επιτυχή:

install Kubernetes Pod Status

Μπορείτε επίσης να δείτε την υγεία των στοιχείων χρησιμοποιώντας την εντολή get component status:

install Kubernetes Component Status

Αυτή η εντολή έχει μια σύντομη μορφή cs:

Component Status Short

Εάν δείτε την κατάσταση unhealthy, τροποποιήστε τα ακόλουθα αρχεία και διαγράψτε τη γραμμή στο (spec->containers->command) που περιέχει αυτή τη φράση - --port=0 :

Κάντε το ίδιο για αυτό το αρχείο:

Τέλος, επανεκκινήστε την υπηρεσία Kubernetes:

Βήμα 8: Σύνδεση των Worker Nodes στο Kubernetes Cluster

Με τον kubernetes-master κόμβο σε λειτουργία και το δίκτυο pod έτοιμο, μπορούμε να συνδέσουμε τους worker κόμβους μας στο cluster. Σε αυτόν τον οδηγό, έχουμε μόνο έναν worker κόμβο, οπότε θα εργαστούμε με αυτόν. Εάν έχετε περισσότερους worker κόμβους, μπορείτε πάντα να ακολουθήσετε τα ίδια βήματα που θα εξηγήσουμε παρακάτω για να συνδεθείτε στο cluster.

Αρχικά, συνδεθείτε στον worker κόμβο σας σε μια ξεχωριστή συνεδρία τερματικού. Θα χρησιμοποιήσετε την εντολή kubeadm join που εμφανίστηκε στο τερματικό σας όταν αρχικοποιήσαμε τον master κόμβο στο Βήμα 6. Εκτελέστε την εντολή:

Θα πρέπει να δείτε παρόμοιο αποτέλεσμα όπως το παρακάτω στιγμιότυπο οθόνης όταν ολοκληρωθεί η σύνδεση στο cluster:

Worker Join

Μόλις ολοκληρωθεί η διαδικασία σύνδεσης, μεταβείτε στο τερματικό του master κόμβου και εκτελέστε την ακόλουθη εντολή για να επιβεβαιώσετε ότι ο worker κόμβος σας έχει συνδεθεί στο cluster:

Στο στιγμιότυπο οθόνης από το αποτέλεσμα της παραπάνω εντολής, μπορούμε να δούμε ότι ο worker κόμβος έχει συνδεθεί στο cluster:

install Kubernetes K8S Node Status

Βήμα 9: Ανάπτυξη μιας εφαρμογής στο Kubernetes Cluster

Σε αυτό το σημείο, έχετε εγκαταστήσει με επιτυχία ένα Kubernetes cluster. Ας κάνουμε το cluster χρήσιμο αναπτύσσοντας μια υπηρεσία σε αυτό. Το Nginx είναι ένας δημοφιλής διακομιστής ιστού που μπορεί να υπερηφανεύεται για απίστευτες ταχύτητες ακόμη και με χιλιάδες συνδέσεις. Θα αναπτύξουμε τον Nginx webserver στο cluster για να αποδείξουμε ότι μπορείτε να χρησιμοποιήσετε αυτήν τη ρύθμιση σε μια πραγματική εφαρμογή.

Εκτελέστε την ακόλουθη εντολή στον master κόμβο για να δημιουργήσετε μια ανάπτυξη Kubernetes για το Nginx:

Μπορείτε να δείτε τη δημιουργημένη ανάπτυξη χρησιμοποιώντας την εντολή describe deployment :

Nginx Deployment

Για να κάνετε το nginx υπηρεσία προσβάσιμη μέσω του διαδικτύου, εκτελέστε την ακόλουθη εντολή:

NodePort Svc Create

Η παραπάνω εντολή θα δημιουργήσει μια δημόσια προσβάσιμη υπηρεσία για το Nginx deployment. Καθώς αυτό είναι ένα nodeport deployment, το Kubernetes εκχωρεί στην υπηρεσία μια θύρα στο εύρος των 32000+.

Μπορείτε να δείτε τις τρέχουσες υπηρεσίες εκτελώντας την εντολή:

NodePort Svc Status

Μπορείτε να δείτε ότι η εκχωρημένη θύρα μας είναι 32264. Σημειώστε τη θύρα που εμφανίζεται στο τερματικό σας για να τη χρησιμοποιήσετε στο επόμενο βήμα.

Για να επαληθεύσετε ότι η ανάπτυξη της υπηρεσίας Nginx είναι επιτυχής, εκτελέστε μια κλήση curl στο worker node από το master. Αντικαταστήστε την IP του δικού σας worker node και τη θύρα που λάβατε από την παραπάνω εντολή:

Θα πρέπει να δείτε το αποτέλεσμα του προεπιλεγμένου Nginx index.html:

Curl Nginx Svc

Προαιρετικά, μπορείτε να επισκεφθείτε τον συνδυασμό διεύθυνσης IP και θύρας του worker node στο πρόγραμμα περιήγησής σας και να δείτε την προεπιλεγμένη σελίδα index του Nginx:

install Kubernetes Nginx Webpage

Μπορείτε να διαγράψετε ένα deployment καθορίζοντας το όνομα του deployment. Για παράδειγμα, αυτή η εντολή θα διαγράψει το deployment μας:

Έχουμε πλέον δοκιμάσει με επιτυχία το cluster μας!

Συμπέρασμα

Σε αυτόν τον οδηγό, μάθατε πώς να εγκαταστήσετε ένα Kubernetes cluster σε Ubuntu 20.04. Ρυθμίσατε ένα cluster που αποτελείται από ένα master και ένα worker node. Μπορέσατε να εγκαταστήσετε το σύνολο εργαλείων του Kubernetes, δημιουργήσατε ένα δίκτυο pod και συνδέσατε το worker node στο master node. Δοκιμάσαμε επίσης τη θεωρία μας κάνοντας μια βασική ανάπτυξη ενός Nginx webserver στο cluster. Αυτό θα πρέπει να λειτουργήσει ως βάση για την εργασία με Kubernetes clusters σε Ubuntu.

Αν και χρησιμοποιήσαμε μόνο ένα worker node, μπορείτε να επεκτείνετε το cluster σας με όσα nodes επιθυμείτε. Αν θέλετε να εμβαθύνετε στο DevOps με εργαλεία αυτοματοποίησης όπως το Ansible, έχουμε έναν οδηγό που εμβαθύνει στην υλοποίηση αναπτύξεων Kubernetes cluster με το Ansible και το Kubeadm, ρίξτε του μια ματιά. Αν θέλετε να μάθετε πώς να αναπτύξετε μια εφαρμογή PHP σε ένα Kubernetes cluster, δείτε αυτόν τον οδηγό.

Καλή υπολογιστική!

author

Pranay Kapgate

Συγγραφέας · CloudSigma

Ο Preslav Dobrev είναι Δημιουργικός Σχεδιαστής στην CloudSigma, με εστίαση στη συνεπή επιχειρηματική ταυτότητα μέσω παραδοσιακών και καινοτόμων καναλιών μάρκετινγκ. Διαθέτει την ικανότητα να συνδυάζει το καλλιτεχνικό όραμα με το στρατηγικό μάρκετινγκ για τη δημιουργία εντυπωσιακών αφηγήσεων επωνυμίας.

Σχόλια

Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.