{"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\/sq\/blog\/administrirovanie\/besservernye-vychisleniya-na-osnove-openwhisk-chast-4","title":{"rendered":"P\u00ebrdorimi i llogarive pa server n\u00eb baz\u00eb t\u00eb OpenWhisk, pjesa 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\/sq\/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=\"sq_AL\" \/>\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\/sq\/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\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","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","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/besservernye-vychisleniya-na-osnove-openwhisk-chast-4","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/54183","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=54183"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/54183\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=54183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=54183"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=54183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}