{"id":54183,"date":"2019-12-20T00:00:00","date_gmt":"2019-12-19T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/besservernye-vychisleniya-na-osnove-openwhisk-chast-4"},"modified":"2020-02-18T14:02:10","modified_gmt":"2020-02-18T11:02:10","slug":"besservernye-vychisleniya-na-osnove-openwhisk-chast-4","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/besservernye-vychisleniya-na-osnove-openwhisk-chast-4","title":{"rendered":"Serverlose Berechnungen auf Basis von OpenWhisk, Teil 4","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\u0411\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 OpenWhisk, \u0447\u0430\u0441\u0442\u044c 4\" src=\"\/wp-content\/uploads\/2019\/12\/f76e5319c42a63090ab248c8abb89808.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442 \u0446\u0438\u043a\u043b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043d\u044b\u0445 \u0437\u0430\u043c\u0435\u0442\u043e\u043a \u043e\u0431 OpenWhisk \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@pdesai8\">Priti Desai<\/a><\/noindex>. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f OpenWhisk \u043f\u043e\u0432\u0435\u0440\u0445 Kubernetes \u0441 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0441 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0422\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 OpenWhisk \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Knative \u0438 TektonCD \u0432 Kubernetes \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f Nodejs.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"razvorachivaem-openwhisk-na-kubernetes\">\u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c OpenWhisk \u043d\u0430 Kubernetes<\/h2>\n<p><\/p>\n<p>\u0417\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439 \u044f \u043f\u0440\u043e\u0432\u0435\u043b\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u043f\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044e OpenWhisk \u0432 Kubernetes \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u0430 \u0434\u043b\u044f \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u0434\u0430\u0447. \u0410 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 Kubernetes \u2014 \u043f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0434\u043d\u044f \u0431\u044b\u043b\u043e \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043e \u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435. \u0412 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/apache\/incubator-openwhisk-deploy-kube\">\u044d\u0442\u043e\u043c<\/a><\/noindex> \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f OpenWhisk \u0432 Kubernetes. \u0417\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0443\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f Mac (<em>\u044f \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0443 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0430 Linux, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e Linux.<\/em> \u2014 \u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0430).<\/p>\n<p><\/p>\n<ol>\n<li>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 <code>asdf<\/code>, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c <code>~\/.bash_profile<\/code> \u0438\u043b\u0438 \u0435\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433 \u0442\u0430\u043a:<\/li>\n<\/ol>\n<p><\/p>\n<pre><code class=\"plaintext\">$ brew install asdf\n$ [ -s \"\/usr\/local\/opt\/asdf\/asdf.sh\" ] &amp;&amp; . \/usr\/local\/opt\/asdf\/asdf.sh\n$ source ~\/.bash_profile<\/code><\/pre>\n<p><\/p>\n<p>[<em>\u041d\u0430 Linux \u044d\u0442\u043e\u0442 \u0448\u0430\u0433 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u0445\u043e\u0442\u044f brew \u0435\u0441\u0442\u044c.<\/em> \u2014 \u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0430]<\/p>\n<p><\/p>\n<ol>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u044b <code>minikube<\/code> \u0438 <code>kubelet<\/code>:<\/li>\n<\/ol>\n<p><\/p>\n<pre><code class=\"plaintext\">$ asdf plugin-add kubectl\n$ asdf plugin-add minikube<\/code><\/pre>\n<p><\/p>\n<p>[<em>\u041e\u043f\u044f\u0442\u044c \u0436\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u0448\u0430\u0433 \u043d\u0430 Linux.<\/em> \u2014 \u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0430]<\/p>\n<p><\/p>\n<ol>\n<li>\u0421\u0442\u0430\u0432\u0438\u043c minikube \u0438 kubelet:<\/li>\n<\/ol>\n<p><\/p>\n<pre><code class=\"plaintext\">$ asdf install kubectl 1.9.0\n$ asdf global kubectl 1.9.0\n$ asdf install minikube 0.25.2\n$ asdf global minikube 0.25.2<\/code><\/pre>\n<p><\/p>\n<p>[<em>\u0441\u0442\u0430\u0432\u044f\u0442\u0441\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438, \u043d\u043e \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u0432\u0441\u0435 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0434\u043b\u044f Linux; \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u044e, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c latest.<\/em> \u2014 \u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0430]<\/p>\n<p><\/p>\n<p>\u041d\u0430 Linux \u044d\u0442\u043e\u0442 \u0448\u0430\u0433 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a (\u0432\u0441\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0432 ~\/bin, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443 \u043c\u0435\u043d\u044f \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d \u0432 PATH, \u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0430):<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl -L0 minikube https:\/\/storage.googleapis.com\/minikube\/releases\/latest\/minikube-linux-amd64 &amp;&amp; chmod +x minikube &amp;&amp; mv minikube ~\/bin\/\n$ curl -L0 https:\/\/storage.googleapis.com\/kubernetes-release\/release\/$(curl -s https:\/\/storage.googleapis.com\/kubernetes-release\/release\/stable.txt)\/bin\/linux\/amd64\/kubectl &amp;&amp; chmod +x kubectl &amp;&amp; mv kubectl ~\/bin\/<\/code><\/pre>\n<p><\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 minikube (\u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d VirtualBox):<\/li>\n<\/ol>\n<p><\/p>\n<pre><code class=\"plaintext\">$ minikube start --cpus 2 --memory 4096 --kubernetes-version=v1.9.0 --extra-config=apiserver.Authorization.Mode=RBAC<\/code><\/pre>\n<p><\/p>\n<p>[<em>\u0423 \u043c\u0435\u043d\u044f \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439<\/em> <code>minikube start<\/code> <em>, \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/em> \u2014 \u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0430]<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ minikube start\n  minikube v1.5.2 on Debian 8.11\n  Automatically selected the 'virtualbox' driver\n  Downloading VM boot image ...\n    &gt; minikube-v1.5.1.iso.sha256: 65 B \/ 65 B [--------------] 100.00% ? p\/s 0s\n    &gt; minikube-v1.5.1.iso: 143.76 MiB \/ 143.76 MiB [-] 100.00% 5.63 MiB p\/s 26s\n  Creating virtualbox VM (CPUs=2, Memory=4096MB, Disk=20000MB) ...\n  Preparing Kubernetes v1.16.2 on Docker '18.09.9' ...\n  Downloading kubelet v1.16.2\n  Downloading kubeadm v1.16.2\n  Pulling images ...\n  Launching Kubernetes ...  Waiting for: apiserver\n  Done! kubectl is now configured to use \"minikube\"<\/code><\/pre>\n<p><\/p>\n<ol>\n<li>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0435\u0442\u044c \u0432 Docker \u0432 \u043d\u0435\u0440\u0430\u0437\u0431\u043e\u0440\u0447\u0438\u0432\u044b\u0439 \u0440\u0435\u0436\u0438\u043c:<\/li>\n<\/ol>\n<p><\/p>\n<pre><code class=\"plaintext\">$ minikube ssh -- sudo ip link set docker0 promisc on<\/code><\/pre>\n<p><\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c namespace \u0438 \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0443\u0437\u0435\u043b:<\/li>\n<\/ol>\n<p><\/p>\n<pre><code class=\"plaintext\">$ kubectl create namespace openwhisk\n$ kubectl label nodes --all openwhisk-role=invoker<\/code><\/pre>\n<p><\/p>\n<ol>\n<li>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0442\u0438\u043f \u0434\u043b\u044f ingress \u0432 \u0444\u0430\u0439\u043b\u0435 mycluster.yaml:<\/li>\n<\/ol>\n<p><\/p>\n<pre><code class=\"plaintext\">$ git clone https:\/\/github.com\/apache\/incubator-openwhisk-deploy-kube.git\n$ cd incubator-openwhisk-deploy-kube\/\n$ cat &lt;&lt; \"EOF\" &gt; mycluster.yaml\nwhisk:\n    ingress:\n        type: NodePort\n            api_host_name: 192.168.99.100\n            api_host_port: 31001\nnginx:\n    httpsNodePort: 31001\nEOF<\/code><\/pre>\n<p><\/p>\n<ol>\n<li>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c Helm \u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e:<\/li>\n<\/ol>\n<p><\/p>\n<pre><code class=\"plaintext\">$ brew install kubernetes-helm\n$ helm init # init Helm Tiller, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0430 Helm v3+\n$ kubectl get pods -n kube-system # verify that tiller-deploy is in the running state, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0430 helm v3+\n$ kubectl create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default\n$ helm install .\/openwhisk\/helm\/ --namespace=openwhisk -f mycluster.yaml<\/code><\/pre>\n<p><\/p>\n<p>[<em>\u041d\u0430 Linux \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 (\u0431\u044b\u043b\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 v3.0.1) \u0431\u0443\u0434\u0435\u0442 \u0447\u0443\u0442\u044c \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443.<\/em> \u2014 \u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0430]<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl -L0 https:\/\/get.helm.sh\/helm-v3.0.1-linux-amd64.tar.gz | tar -xzvf - linux-amd64\/helm --strip-components=1; sudo mv helm \/usr\/local\/bin\n$ kubectl create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default\n$ helm install .\/openwhisk\/helm\/ --namespace=openwhisk --generate-name -f mycluster.yaml<\/code><\/pre>\n<p><\/p>\n<ol>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u043e\u0434\u043d\u044f\u043b\u043e\u0441\u044c (STATUS = Running \u0438\u043b\u0438 Completed):<\/li>\n<\/ol>\n<p><\/p>\n<pre><code class=\"plaintext\">$ kubectl get pods -n openwhisk\nNAME                                                              READY   STATUS      RESTARTS   AGE\nopenwhisk-1576070780-alarmprovider-6868dc694-plvpf                1\/1     Running     1          1d5h\nopenwhisk-1576070780-apigateway-8d56f4979-825hf                   1\/1     Running     1          1d5h\nopenwhisk-1576070780-cloudantprovider-544bb46596-9scph            1\/1     Running     1          1d5h\nopenwhisk-1576070780-controller-0                                 1\/1     Running     2          1d5h\nopenwhisk-1576070780-couchdb-7fd7f6c7cc-42tw6                     1\/1     Running     1          1d5h\nopenwhisk-1576070780-gen-certs-z9nsb                              0\/1     Completed   0          1d5h\nopenwhisk-1576070780-init-couchdb-r2vmt                           0\/1     Completed   0          1d5h\nopenwhisk-1576070780-install-packages-27dtr                       0\/1     Completed   0          1d4h\nopenwhisk-1576070780-invoker-0                                    1\/1     Running     1          1d5h\nopenwhisk-1576070780-kafka-0                                      1\/1     Running     1          1d5h\nopenwhisk-1576070780-kafkaprovider-f8b4cf4fc-7z4gt                1\/1     Running     1          1d5h\nopenwhisk-1576070780-nginx-6dbdbf69bc-5x76n                       1\/1     Running     1          1d5h\nopenwhisk-1576070780-redis-cfd8756f4-hkrt6                        1\/1     Running     1          1d5h\nopenwhisk-1576070780-wskadmin                                     1\/1     Running     1          1d5h\nopenwhisk-1576070780-zookeeper-0                                  1\/1     Running     1          1d5h\nwskopenwhisk-1576070780-invoker-00-1-prewarm-nodejs10             1\/1     Running     0          61s\nwskopenwhisk-1576070780-invoker-00-2-prewarm-nodejs10             1\/1     Running     0          61s\nwskopenwhisk-1576070780-invoker-00-3-whisksystem-invokerhealtht   1\/1     Running     0          59s<\/code><\/pre>\n<p><\/p>\n<ol>\n<li>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c wsk \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b:<\/li>\n<\/ol>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wsk property set --apihost 192.168.99.100:31001\n$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP<\/code><\/pre>\n<p><\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wsk -i list\nEntities in namespace: default\npackages\nactions\ntriggers\nrules<\/code><\/pre>\n<p><\/p>\n<h2 id=\"problemy-i-ih-resheniya\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h2>\n<p><\/p>\n<h3 id=\"getsockopt-connection-refused\">getsockopt: connection refused<\/h3>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wsk -i list\nerror: Unable to obtain the list of entities for namespace 'default': Get http:\/\/192.168.99.100:31001\/api\/v1\/namespaces\/_\/actions?limit=0&amp;skip=0: dial tcp 192.168.99.100:31001: getsockopt: connection refused<\/code><\/pre>\n<p><\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 namespace <code>openwhisk<\/code> \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 <code>Running<\/code>, \u0442.\u043a. \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u043d\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 <code>CreateContainerConfigError<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"invoker-still-initializing--init12\">Invoker still initializing \u2014 Init:1\/2<\/h3>\n<p><\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0441\u0440\u0435\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0414\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043d\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432 \u0444\u0430\u0439\u043b\u0435 <code>mycluster.yaml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">whisk:\n  runtimes: \"runtimes-minimal-travis.json\"<\/code><\/pre>\n<p><\/p>\n<h3 id=\"konteyner-s-imenem--install-packages--vyvalivaetsya-v-error\">\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <em>-install-packages-<\/em> \u0432\u044b\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 Error<\/h3>\n<p><\/p>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0440\u0430\u0441\u0442\u0438\u0442\u0435 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u044b \u0434\u043b\u044f liveness \u0442\u0435\u0441\u0442\u043e\u0432.<\/p>\n<p><\/p>\n<h2 id=\"ustanovka-openwhisk-poverh-knative\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 OpenWhisk \u043f\u043e\u0432\u0435\u0440\u0445 Knative<\/h2>\n<p><\/p>\n<p>Priti Desai \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u043e\u0432\u0435\u0440\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u043e\u0431\u043b\u0430\u043a\u0435 IBM, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u043c minikube, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Knative Build \u0438 BuildTemplates. \u042f \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0443 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0435\u0440\u0445 minukube, \u043f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u0442\u043e\u0433\u043e, \u043a\u0430\u043a <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/475630\/\">\u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e<\/a><\/noindex> \u0432 \u043d\u0430\u0448\u0435\u043c \u0431\u043b\u043e\u0433\u0435 \u0440\u0430\u043d\u0435\u0435 \u2014 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u041f\u041e. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 Knative Build \u0438 BuildTemplates \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c\u0438, \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u0443\u044e \u0437\u0430\u043c\u0435\u043d\u0443 \u0432 \u0432\u0438\u0434\u0435 Tekton Pipelines. \u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a Tekton Pipelines, \u043d\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0438\u0434\u0435\u044f\u0445 Priti. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 Docker Registry \u2014 \u044f, \u043a\u0430\u043a \u0438 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0430\u0432\u0442\u043e\u0440, \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c DockerHub.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl -L0 https:\/\/github.com\/solo-io\/gloo\/releases\/download\/v1.2.10\/glooctl-linux-amd64; chmod +x glooctl-linux-amd64; mv glooctl-linux-amd64 ~\/bin\n$ glooctl install knative\n$ kubectl get pods -n knative-serving\nNAME                              READY   STATUS    RESTARTS   AGE\nactivator-77fc555665-rvrst        1\/1     Running   0          2m23s\nautoscaler-5c98b7c9b6-x8hh4       1\/1     Running   0          2m21s\nautoscaler-hpa-5cfd4f6845-w87kq   1\/1     Running   0          2m22s\ncontroller-7fd74c8f67-tprm8       1\/1     Running   0          2m19s\nwebhook-74847bb77c-txr2g          1\/1     Running   0          2m17s\n$ kubectl get pods -n gloo-system\nNAME                                      READY   STATUS    RESTARTS   AGE\ndiscovery-859d7fbc9c-8xhvh                1\/1     Running   0          51s\ngloo-545886d9c6-85mwt                     1\/1     Running   0          51s\ningress-67d4996d75-lkkmw                  1\/1     Running   0          50s\nknative-external-proxy-767dfd656c-wwv2z   1\/1     Running   0          50s\nknative-internal-proxy-6fdddcc6b5-7vqd8   1\/1     Running   0          51s<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0411\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 OpenWhisk, \u0447\u0430\u0441\u0442\u044c 4\" src=\"\/wp-content\/uploads\/2019\/12\/95addacff73d115ebf60dda5549d989c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>\u0421\u0431\u043e\u0440\u043a\u0430 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430 OpenWhisk \u043f\u043e\u0432\u0435\u0440\u0445 Knative<\/em><\/p>\n<p><\/p>\n<ol>\n<li>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tektoncd\/catalog.git\">\u044d\u0442\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f<\/a><\/noindex>:<\/li>\n<\/ol>\n<p><\/p>\n<pre><code class=\"plaintext\">$ git clone https:\/\/github.com\/tektoncd\/catalog\/\n$ cd catalog\/openwhisk<\/code><\/pre>\n<p><\/p>\n<ol>\n<li>\u0412\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0432\u0438\u0434\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a Registry \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0438\u0445 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u0430 Kubernetes:<\/li>\n<\/ol>\n<p><\/p>\n<pre><code class=\"plaintext\">$ export DOCKER_USERNAME=&lt;your docker hub username&gt;\n$ export DOCKER_PASSWORD=&lt;your docker hub password&gt;\n$ sed -e 's\/${DOCKER_USERNAME}\/'\"$DOCKER_USERNAME\"'\/' -e 's\/${DOCKER_PASSWORD}\/'\"$DOCKER_PASSWORD\"'\/' docker-secret.yaml.tmpl &gt; docker-secret.yaml\n$ kubectl apply -f docker-secret.yaml<\/code><\/pre>\n<p><\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ kubectl get secret\nNAME                    TYPE                                  DATA      AGE\ndockerhub-user-pass     kubernetes.io\/basic-auth              2         21s<\/code><\/pre>\n<p><\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439:<\/li>\n<\/ol>\n<p><\/p>\n<pre><code class=\"plaintext\">$ kubectl apply -f service-account.yaml<\/code><\/pre>\n<p><\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ kubectl get serviceaccount\/openwhisk-runtime-builder\nNAME                        SECRETS   AGE\nopenwhisk-runtime-builder   2         31m<\/code><\/pre>\n<p><\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0437\u0430\u0434\u0430\u0447\u0443 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u043b\u044f OpenWhisk<\/li>\n<\/ol>\n<p><\/p>\n<pre><code class=\"plaintext\">$ kubectl apply -f openwhisk.yaml\ntask.tekton.dev\/openwhisk created<\/code><\/pre>\n<p><\/p>\n<ol>\n<li>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0437\u0430\u0434\u0430\u0447\u0443 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u0430 (\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 NodeJS):<\/li>\n<\/ol>\n<p><\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b taskrun.yaml \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"># Git Pipeline Resource for OpenWhisk NodeJS Runtime\napiVersion: tekton.dev\/v1alpha1\nkind: PipelineResource\nmetadata:\n    name: openwhisk-nodejs-runtime-git\nspec:\n    type: git\n    params:\n        - name: revision\n          value: master\n        - name: url\n          value: https:\/\/github.com\/apache\/openwhisk-runtime-nodejs.git\n---\n\n# Image Pipeline Resource for OpenWhisk NodeJS Sample Application\napiVersion: tekton.dev\/v1alpha1\nkind: PipelineResource\nmetadata:\n    name: openwhisk-nodejs-helloworld-image\nspec:\n    type: image\n    params:\n        - name: url\n          value: docker.io\/${DOCKER_USERNAME}\/openwhisk-nodejs-helloworld\n---\n\n# Task Run to build NodeJS image with the action source\napiVersion: tekton.dev\/v1alpha1\nkind: TaskRun\nmetadata:\n    name: openwhisk-nodejs-helloworld\nspec:\n    serviceAccountName: openwhisk-runtime-builder\n    taskRef:\n        name: openwhisk\n    inputs:\n        resources:\n            - name: runtime-git\n              resourceRef:\n                name: openwhisk-nodejs-runtime-git\n        params:\n            - name: DOCKERFILE\n              value: \".\/runtime-git\/core\/nodejs10Action\/knative\/Dockerfile\"\n            - name: OW_ACTION_NAME\n              value: \"nodejs-helloworld\"\n            - name: OW_ACTION_CODE\n              value: \"function main() {return {payload: 'Hello World!'};}\"\n            - name: OW_PROJECT_URL\n              value: \"\"\n    outputs:\n        resources:\n            - name: runtime-image\n              resourceRef:\n                name: openwhisk-nodejs-helloworld-image\n---<\/code><\/pre>\n<p><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sed 's\/${DOCKER_USERNAME}\/'\"$DOCKER_USERNAME\"'\/' -i taskrun.yaml<\/code><\/pre>\n<p><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ kubectl apply -f taskrun.yaml\npipelineresource.tekton.dev\/openwhisk-nodejs-runtime-git created\npipelineresource.tekton.dev\/openwhisk-nodejs-helloworld-image created\ntaskrun.tekton.dev\/openwhisk-nodejs-helloworld created<\/code><\/pre>\n<p><\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0438\u043c\u0435\u043d\u0438 pod`\u0430, \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0435\u0433\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0436\u0443\u0440\u043d\u0430\u043b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0448\u0430\u0433\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ kubectl get taskrun\nNAME                          SUCCEEDED   REASON      STARTTIME   COMPLETIONTIME\nopenwhisk-nodejs-helloworld   True        Succeeded   5m15s       44s\n$ kubectl get pod openwhisk-nodejs-helloworld-pod-4640d3\nNAME                                     READY   STATUS      RESTARTS   AGE\nopenwhisk-nodejs-helloworld-pod-4640d3   0\/6     Completed   0          5m20s\n$ kubectl logs openwhisk-nodejs-helloworld-pod-4640d3 -c step-git-source-openwhisk-nodejs-runtime-git-r8vhr\n{\"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\"}\n{\"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\"}\n{\"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\"}\n{\"level\":\"info\",\"ts\":1576532936.8202565,\"logger\":\"fallback-logger\",\"caller\":\"git\/git.go:109\",\"msg\":\"Successfully initialized and updated submodules in path \/workspace\/runtime-git\"}<\/code><\/pre>\n<p><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0443 \u043d\u0430\u0441 \u0432 Registry \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0437, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u044b kn, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Knative \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">kn service create nodejs-helloworld --image docker.io\/${DOCKER_USERNAME}\/openwhisk-nodejs-helloworld\nService 'nodejs-helloworld' successfully created in namespace 'default'.\nWaiting for service 'nodejs-helloworld' to become ready ... OK\n\nService URL:\nhttp:\/\/nodejs-helloworld.default.example.com<\/code><\/pre>\n<p><\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Gloo \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl -H \"Host: nodejs-helloworld.default.example.com\" -X POST $(glooctl proxy url --name knative-external-proxy)\n{\"OK\":true}\n$ curl -H \"Host: nodejs-helloworld.default.example.com\" -X POST $(glooctl proxy url --name knative-external-proxy)\n{\"payload\":\"Hello World!\"}<\/code><\/pre>\n<p><\/p>\n<h2 id=\"drugie-stati-cikla\">\u0414\u0440\u0443\u0433\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0446\u0438\u043a\u043b\u0430<\/h2>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/477336\/\">\u0411\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 OpenWhisk, \u0447\u0430\u0441\u0442\u044c 1<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/477628\/\">\u0411\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 OpenWhisk, \u0447\u0430\u0441\u0442\u044c 2<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/479492\/\">\u0411\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 OpenWhisk, \u0447\u0430\u0441\u0442\u044c 3<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/481000\/\">\u0411\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 OpenWhisk, \u0447\u0430\u0441\u0442\u044c 4<\/a><\/noindex><\/p>\n<p>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/481000\/\">habr.com<\/a><\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442 \u0446\u0438\u043a\u043b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043d\u044b\u0445 \u0437\u0430\u043c\u0435\u0442\u043e\u043a \u043e\u0431 OpenWhisk \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 Priti Desai. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f OpenWhisk \u043f\u043e\u0432\u0435\u0440\u0445 Kubernetes \u0441 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0441 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0422\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 OpenWhisk \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Knative \u0438 TektonCD \u0432 Kubernetes \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f Nodejs. \u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c OpenWhisk \u043d\u0430 Kubernetes \u0417\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439 \u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-54183","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442 \u0446\u0438\u043a\u043b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043d\u044b\u0445 \u0437\u0430\u043c\u0435\u0442\u043e\u043a \u043e\u0431 OpenWhisk \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 Priti Desai. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f OpenWhisk \u043f\u043e\u0432\u0435\u0440\u0445 Kubernetes \u0441 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0441 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0422\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 OpenWhisk \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Knative \u0438 TektonCD \u0432 Kubernetes \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f Nodejs. \u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c OpenWhisk \u043d\u0430 Kubernetes \u0417\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439 \u044f\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/besservernye-vychisleniya-na-osnove-openwhisk-chast-4\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0411\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 OpenWhisk, \u0447\u0430\u0441\u0442\u044c 4 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442 \u0446\u0438\u043a\u043b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043d\u044b\u0445 \u0437\u0430\u043c\u0435\u0442\u043e\u043a \u043e\u0431 OpenWhisk \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 Priti Desai. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f OpenWhisk \u043f\u043e\u0432\u0435\u0440\u0445 Kubernetes \u0441 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0441 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0422\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 OpenWhisk \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Knative \u0438 TektonCD \u0432 Kubernetes \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f Nodejs. \u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c OpenWhisk \u043d\u0430 Kubernetes \u0417\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439 \u044f\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/besservernye-vychisleniya-na-osnove-openwhisk-chast-4\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-19T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:10+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Serverlose Berechnungen basierend auf OpenWhisk, Teil 4 | ProHoster","description":"Dieser Artikel schlie\u00dft den Zyklus der \u00dcbersetzungen \u00fcber OpenWhisk von der Autorin Priti Desai ab. Heute betrachten wir den Prozess der Bereitstellung von OpenWhisk auf Kubernetes mit angepassten Befehlen, die mit den aktuellen Versionen von Anwendungen kompatibel sind. Au\u00dferdem wird der Prozess der Ausf\u00fchrung von OpenWhisk-Funktionen mit Knative und TektonCD in Kubernetes unter Verwendung der Node.js-Laufzeitumgebung beschrieben. Bereitstellung von OpenWhisk auf Kubernetes. In wenigen Tagen habe ich","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/besservernye-vychisleniya-na-osnove-openwhisk-chast-4","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0411\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 OpenWhisk, \u0447\u0430\u0441\u0442\u044c 4 | ProHoster","og:description":"\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442 \u0446\u0438\u043a\u043b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043d\u044b\u0445 \u0437\u0430\u043c\u0435\u0442\u043e\u043a \u043e\u0431 OpenWhisk \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 Priti Desai. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f OpenWhisk \u043f\u043e\u0432\u0435\u0440\u0445 Kubernetes \u0441 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0441 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0422\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 OpenWhisk \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Knative \u0438 TektonCD \u0432 Kubernetes \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f Nodejs. \u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c OpenWhisk \u043d\u0430 Kubernetes \u0417\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439 \u044f","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/besservernye-vychisleniya-na-osnove-openwhisk-chast-4","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-19T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:10+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54183","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 10:19:48","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:10:33","updated":"2026-01-24 10:19:48"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/54183","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=54183"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/54183\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=54183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=54183"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=54183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}