Υπολογισμός χωρίς διακομιστή με OpenWhisk, Μέρος 4
Αυτό το άρθρο τελειώνει τη σειρά μεταφρασμένων σημειώσεων σχετικά με το OpenWhisk από τον συγγραφέα Πρίτι Ντεσάι. Σήμερα θα εξετάσουμε τη διαδικασία ανάπτυξης του OpenWhisk μέσω του Kubernetes με διορθωμένες εντολές για εργασία με τρέχουσες εκδόσεις εφαρμογών. Θα καλύψει επίσης τη διαδικασία εκτέλεσης των λειτουργιών OpenWhisk χρησιμοποιώντας Knative και TektonCD στο Kubernetes χρησιμοποιώντας το χρόνο εκτέλεσης Nodejs.
Ανάπτυξη OpenWhisk στο Kubernetes
Κατά τη διάρκεια λίγων ημερών, πειραματίστηκα με την ανάπτυξη του OpenWhisk στο Kubernetes για να δημιουργήσω ένα απλό και γρήγορο πεδίο δοκιμών. Και επειδή είμαι νέος στο Kubernetes, πιστεύω ότι δαπανήθηκε μιάμιση μέρα για επιτυχημένη ανάπτυξη. ΣΕ Αυτό Τα αποθετήρια έχουν πολύ σαφείς οδηγίες για την ανάπτυξη του OpenWhisk στο Kubernetes. Ακολουθούν οι οδηγίες ανάπτυξης που έγιναν για Mac (Επίσης θα κάνω τα πάντα σε Linux γιατί προτιμώ το Linux. — περίπου. μεταφράστης).
Εγκατάσταση του διαχειριστή πακέτων asdf, μετά την οποία διορθώνουμε αυτόματα ~/.bash_profile ή το αντίστοιχο του όπως αυτό:
[Και πάλι, παραλείψτε αυτό το βήμα στο Linux. — περίπου. μεταφράστης]
Εγκαταστήστε το minikube και το kubelet:
$ asdf install kubectl 1.9.0
$ asdf global kubectl 1.9.0
$ asdf install minikube 0.25.2
$ asdf global minikube 0.25.2
[έχουν εγκατασταθεί συγκεκριμένες εκδόσεις, αλλά έλεγξα τα πάντα στις πιο πρόσφατες διαθέσιμες εκδόσεις για Linux. Υποψιάζομαι ότι μπορείτε να εγκαταστήσετε με ασφάλεια το τελευταίο. — περίπου. μεταφράστης]
Στο Linux, αυτό το βήμα γίνεται κάπως έτσι (όλα μπαίνουν στο ~/bin, το οποίο παρατίθεται στη σημείωση του μεταφραστή PATH μου):
Εγκαταστήστε το Helm και αναπτύξτε το χρησιμοποιώντας το:
$ brew install kubernetes-helm
$ helm init # init Helm Tiller, не нужно на Helm v3+
$ kubectl get pods -n kube-system # verify that tiller-deploy is in the running state, не нужно на helm v3+
$ kubectl create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
$ helm install ./openwhisk/helm/ --namespace=openwhisk -f mycluster.yaml
[Στο Linux με τις πιο πρόσφατες εκδόσεις (η έκδοση 3.0.1 ήταν διαθέσιμη) θα είναι λίγο διαφορετικά. — περίπου. μεταφράστης]
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
Ελέγχουμε:
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rules
Προβλήματα και Λύσεις
getsockopt: η σύνδεση απορρίφθηκε
$ wsk -i list
error: Unable to obtain the list of entities for namespace 'default': Get http://192.168.99.100:31001/api/v1/namespaces/_/actions?limit=0&skip=0: dial tcp 192.168.99.100:31001: getsockopt: connection refused
Έλεγχος ότι τα κοντέινερ βρίσκονται στον χώρο ονομάτων openwhisk σε κατάσταση Running, επειδή μερικές φορές κολλάει με λάθη CreateContainerConfigError.
Ο Invoker εξακολουθεί να προετοιμάζεται — Init:1/2
Η διαδικασία λήψης διαφόρων περιβαλλόντων χρόνου εκτέλεσης μπορεί να διαρκέσει πολύ. Για να επιταχύνετε τα πράγματα, μπορείτε να καθορίσετε μια συντομευμένη ελάχιστη λίστα στο αρχείο mycluster.yaml:
whisk:
runtimes: "runtimes-minimal-travis.json"
Δοχείο με όνομα -εγκατάσταση-πακέτα- κολλάει στο Σφάλμα
Απλώς αυξήστε τα χρονικά διαστήματα για τεστ ζωντάνιας.
Εγκατάσταση του OpenWhisk μέσω Knative
Η Priti Desai πραγματοποίησε την εγκατάσταση πάνω από ένα σύμπλεγμα στο cloud της IBM, καθώς και σε ένα κανονικό minikube, χρησιμοποιώντας Knative Build και BuildTemplates. Θα εγκαταστήσω επίσης πάνω από το minukube, με βάση τον τρόπο περιγράφηκε στο ιστολόγιό μας νωρίτερα - χρησιμοποιώντας τις πιο πρόσφατες εκδόσεις λογισμικού. Εφόσον τα Knative Build και BuildTemplates έχουν καταργηθεί επίσημα, θα χρησιμοποιήσω την προτεινόμενη αντικατάσταση με τη μορφή Tekton Pipelines. Το υπόλοιπο άρθρο γράφτηκε μετά την ανάγνωση της τεκμηρίωσης για την Tekton Pipelines, αλλά βασίζεται στις ιδέες του Priti. Για να εργαστείτε, θα χρειαστείτε πρόσβαση σε κάποιο Docker Registry - εγώ, όπως ο αρχικός συγγραφέας, θα χρησιμοποιήσω το DockerHub.
Εφαρμόζουμε τα τρέχοντα δεδομένα για αυτό το αρχείο:
$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yaml
Εφαρμόζουμε:
$ kubectl apply -f taskrun.yaml
pipelineresource.tekton.dev/openwhisk-nodejs-runtime-git created
pipelineresource.tekton.dev/openwhisk-nodejs-helloworld-image created
taskrun.tekton.dev/openwhisk-nodejs-helloworld created
Ο έλεγχος της εργασίας συνίσταται στη λήψη του ονόματος του pod και στην προβολή της κατάστασής του. Μπορείτε επίσης να προβάλετε το αρχείο καταγραφής εκτέλεσης κάθε βήματος, για παράδειγμα:
$ kubectl get taskrun
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME
openwhisk-nodejs-helloworld True Succeeded 5m15s 44s
$ kubectl get pod openwhisk-nodejs-helloworld-pod-4640d3
NAME READY STATUS RESTARTS AGE
openwhisk-nodejs-helloworld-pod-4640d3 0/6 Completed 0 5m20s
$ kubectl logs openwhisk-nodejs-helloworld-pod-4640d3 -c step-git-source-openwhisk-nodejs-runtime-git-r8vhr
{"level":"info","ts":1576532931.5880227,"logger":"fallback-logger","caller":"logging/config.go:69","msg":"Fetch GitHub commit ID from kodata failed: open /var/run/ko/refs/heads/master: no such file or directory"}
{"level":"info","ts":1576532936.538926,"logger":"fallback-logger","caller":"git/git.go:81","msg":"Successfully cloned https://github.com/apache/openwhisk-runtime-nodejs.git @ master in path /workspace/runtime-git"}
{"level":"warn","ts":1576532936.5395331,"logger":"fallback-logger","caller":"git/git.go:128","msg":"Unexpected error: creating symlink: symlink /tekton/home/.ssh /root/.ssh: file exists"}
{"level":"info","ts":1576532936.8202565,"logger":"fallback-logger","caller":"git/git.go:109","msg":"Successfully initialized and updated submodules in path /workspace/runtime-git"}
Μετά την εκτέλεση, θα έχουμε μια εικόνα στο Μητρώο που μπορεί να αναπτυχθεί χρησιμοποιώντας το βοηθητικό πρόγραμμα kn, σχεδιασμένο να λειτουργεί με υπηρεσίες Knative, για παράδειγμα:
kn service create nodejs-helloworld --image docker.io/${DOCKER_USERNAME}/openwhisk-nodejs-helloworld
Service 'nodejs-helloworld' successfully created in namespace 'default'.
Waiting for service 'nodejs-helloworld' to become ready ... OK
Service URL:
http://nodejs-helloworld.default.example.com
Εάν χρησιμοποιείτε το Gloo, μπορείτε να ελέγξετε τη λειτουργικότητά του ως εξής: