{"id":47043,"date":"2023-07-28T02:26:24","date_gmt":"2023-10-24T14:27:35","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8ibm%e5%ae%b9%e5%99%a8%ef%bc%88kubernetes%ef%bc%89%e4%b8%8a%e6%9e%84%e5%bb%baopenwhisk%e3%80%82\/"},"modified":"2024-04-30T15:42:02","modified_gmt":"2024-04-30T07:42:02","slug":"%e5%b0%9d%e8%af%95%e5%9c%a8ibm%e5%ae%b9%e5%99%a8%ef%bc%88kubernetes%ef%bc%89%e4%b8%8a%e6%9e%84%e5%bb%baopenwhisk%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8ibm%e5%ae%b9%e5%99%a8%ef%bc%88kubernetes%ef%bc%89%e4%b8%8a%e6%9e%84%e5%bb%baopenwhisk%e3%80%82\/","title":{"rendered":"\u5c1d\u8bd5\u5728IBM\u5bb9\u5668\uff08Kubernetes\uff09\u4e0a\u6784\u5efaOpenWhisk"},"content":{"rendered":"<p>\u8fd9\u662f\u4e00\u4e2a\u7a0d\u4f5c\u4e2d\u65ad\u540e\u518d\u6b21\u53d1\u5e03\u7684\u5e16\u5b50\u3002<br \/>\n\u4e4b\u524d\u5728Bluemix\u7528\u6237\u7fa4\u8ba8\u8bba\u4e86OpenWhisk\uff0c\u6211\u60f3\u63a5\u7740\u8ba8\u8bba\u4e0b\u53bb&#8230;\u4f46\u6700\u8fd1\u6211\u4eec\u4e0d\u5f97\u4e0d\u4e0eIBM Containers\uff08Kubernetes\uff09\u6df1\u5165\u4e86\u89e3\uff0c\u6240\u4ee5\u6211\u4eec\u51b3\u5b9a\u5728Kubernetes\u4e0a\u914d\u7f6eOpenWhisk\u73af\u5883\uff0c\u4e00\u8d77\u4eab\u53d7\u4e50\u8da3\u3002<\/p>\n<p>\u6211\u6b63\u5728Mac OS v10.12.5\u4e0a\u8fdb\u884c\u4ee5\u4e0b\u5c1d\u8bd5\u3002\u8bf7\u6ce8\u610f\uff0c\u6839\u636e\u60a8\u7684\u73af\u5883\uff0c\u6b65\u9aa4\u53ef\u80fd\u4f1a\u6709\u4e9b\u8bb8\u53d8\u5316\u3002<\/p>\n<h1>IBM\u5bb9\u5668\uff08Kubernetes\uff09\u662f\u4ec0\u4e48\uff1f<\/h1>\n<p>\u8fd9\u662f\u6700\u8fd1\u5728IBM Bluemix\u5e73\u53f0\u4e0a\u63a8\u51fa\u7684\u65b0\u7684CaaS\uff08\u5bb9\u5668\u5373\u670d\u52a1\uff09\u73af\u5883\u3002\u8be6\u7ec6\u4fe1\u606f\u53ef\u4ee5\u53c2\u8003\u4ee5\u4e0b\u5185\u5bb9\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">bluemix kubernetes cluster\u3092\u8a66\u3057\u3066\u307f\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">IBM Bluemix Container Service\u3067\u81ea\u524d\u306edocker image\u3092\u7a3c\u50cd\u3055\u305b\u308b\u307e\u3067<\/ul>\n<p>\u8fd9\u6b21\u6211\u4eec\u5c06\u5047\u8bbe\u5df2\u7ecf\u6709\u4e00\u4e2aKubernetes\u96c6\u7fa4\u73af\u5883\uff0c\u73af\u5883\u662f\u514d\u8d39\u7684\u591a\u79df\u6237\u7684Lite Cluster\u8db3\u591f\u4f7f\u7528\u3002\u5982\u679c\u9700\u8981\u5355\u79df\u6237\u7684\u73af\u5883\uff0c\u6211\u4eec\u4f1a\u63d0\u524d\u51c6\u5907\u4e00\u4e2a\u6807\u51c6\u7684Cluster\u3002<\/p>\n<h1>\u51c6\u5907\u4e0eOpenWhisk\u90e8\u7f72\u76f8\u5173\u7684\u4ee3\u7801\u3002<\/h1>\n<p>IBM\u5df2\u7ecf\u5728\u5176Bluemix\u5e73\u53f0\u4e0a\u516c\u5f00\u4e86\u7528\u4e8e\u5c06Openwhisk\u90e8\u7f72\u5230Kubernetes\u7684\u6b65\u9aa4\u3002<br \/>\n\uff081\uff09\u5229\u7528Bluemix\u5bb9\u5668\u670d\u52a1\uff0c\u5c06OpenWhisk\u90e8\u7f72\u5728Kubernetes\u4e0a<br \/>\n\u7136\u800c\uff0c\u5b9e\u9645\u4e0a\uff0c\u4ee5\u4e0b\u5b58\u50a8\u5e93\u4e2d\u7684\u4ee3\u7801\u662f\u5f15\u5165\u4ee3\u7801\u3002<br \/>\n\uff082\uff09 Github &#8211; \u7528\u4e8eKubernetes\u7684OpenWhisk\u90e8\u7f72<\/p>\n<p>\u5728\u5bfc\u5165\u4e4b\u524d\uff0c\u6700\u597d\u4e24\u4e2a\u90fd\u6709\uff0c\u56e0\u6b64\u6682\u65f6\u4f7f\u7528 &#8221; \\$HOME\/workspace &#8220;\uff08\\$HOME\u662f\u7ec8\u7aef\u7684\u4e3b\u76ee\u5f55\uff09\u901a\u8fc7 git clone \u547d\u4ee4\u62c9\u53d6\u5404\u81ea\u7684\u4ee3\u7801\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$git<\/span> clone https:\/\/github.com\/IBM\/OpenWhisk-on-Kubernetes.git\r\nCloning into <span class=\"s1\">'OpenWhisk-on-Kubernetes'<\/span>...\r\nremote: Counting objects: 222, <span class=\"k\">done<\/span><span class=\"nb\">.<\/span>\r\nremote: Total 222 <span class=\"o\">(<\/span>delta 0<span class=\"o\">)<\/span>, reused 0 <span class=\"o\">(<\/span>delta 0<span class=\"o\">)<\/span>, pack-reused 222\r\nReceiving objects: 100% <span class=\"o\">(<\/span>222\/222<span class=\"o\">)<\/span>, 716.35 KiB | 134.00 KiB\/s, <span class=\"k\">done<\/span><span class=\"nb\">.<\/span>\r\nResolving deltas: 100% <span class=\"o\">(<\/span>123\/123<span class=\"o\">)<\/span>, <span class=\"k\">done<\/span><span class=\"nb\">.<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"nv\">$git<\/span> clone https:\/\/github.com\/apache\/incubator-openwhisk-deploy-kube.git\r\nCloning into <span class=\"s1\">'incubator-openwhisk-deploy-kube'<\/span>...\r\nremote: Counting objects: 212, <span class=\"k\">done<\/span><span class=\"nb\">.<\/span>\r\nremote: Compressing objects: 100% <span class=\"o\">(<\/span>26\/26<span class=\"o\">)<\/span>, <span class=\"k\">done<\/span><span class=\"nb\">.<\/span>\r\nremote: Total 212 <span class=\"o\">(<\/span>delta 2<span class=\"o\">)<\/span>, reused 22 <span class=\"o\">(<\/span>delta 2<span class=\"o\">)<\/span>, pack-reused 180\r\nReceiving objects: 100% <span class=\"o\">(<\/span>212\/212<span class=\"o\">)<\/span>, 66.87 KiB | 54.00 KiB\/s, <span class=\"k\">done<\/span><span class=\"nb\">.<\/span>\r\nResolving deltas: 100% <span class=\"o\">(<\/span>58\/58<span class=\"o\">)<\/span>, <span class=\"k\">done<\/span><span class=\"nb\">.<\/span>\r\n<\/code><\/pre>\n<p>\u56e0\u4e3a\u4e4b\u540e\u53ef\u80fd\u6210\u4e3a\u540e\u7eed\u524d\u63d0\u6761\u4ef6\uff0c\u6240\u4ee5\u6211\u4f1a\u5c06OpenWhisk\u7684\u6e90\u4ee3\u7801\u5148\u4e0b\u8f7d\u5230\u6211\u7684\u7535\u8111\u4e0a\u3002\u8fd9\u6b21\u6211\u5c06\u8ddf\u4e0a\u9762\u63d0\u5230\u7684\u6e90\u4ee3\u7801\u4e00\u6837\uff0c\u5c06\u5176\u4fdd\u5b58\u5728\u201c\\$HOME\/workspace\u201d\u6587\u4ef6\u5939\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$git<\/span> clone <span class=\"nt\">--depth<\/span><span class=\"o\">=<\/span>1 https:\/\/github.com\/apache\/incubator-openwhisk.git openwhisk\r\n:\r\n<\/code><\/pre>\n<p>\u5efa\u8bae\u5c06OpenWhisk\u7684\u64cd\u4f5c\u547d\u4ee4wsk\u547d\u4ee4\u653e\u7f6e\u5728\u300c\\$HOME\/workspace\/openwhisk\/bin\u300d\u76ee\u5f55\u4e0b\uff0c\u5e76\u6dfb\u52a0\u5230\u7cfb\u7edf\u8def\u5f84\u4e2d\u3002\u60a8\u53ef\u4ee5\u4ece\u4ee5\u4e0b\u94fe\u63a5\u4e0b\u8f7dwsk\u547d\u4ee4\uff1a<br \/>\nhttps:\/\/openwhisk.ng.bluemix.net\/cli\/go\/download\/<\/p>\n<h1>\u8bbf\u95ee\u96c6\u7fa4<\/h1>\n<p>\u5728\u5047\u8bbe\u5df2\u7ecf\u521b\u5efa\u4e86\u540d\u4e3a\u201cmycluster\u201d\u7684\u96c6\u7fa4\u7684\u60c5\u51b5\u4e0b\uff0c\u901a\u8fc7Bluemix\u547d\u4ee4\u767b\u5f55\u540e\uff0c\u4e0b\u8f7d\u96c6\u7fa4\u7684\u914d\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code>$bluemix cs cluster-config mycluster\r\nDownloading cluster config for mycluster\r\nOK\r\nmycluster \u306e\u69cb\u6210\u306f\u6b63\u5e38\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3055\u308c\u307e\u3057\u305f\u3002 \u74b0\u5883\u5909\u6570\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3057\u3066 Kubernetes \u306e\u4f7f\u7528\u3092\u958b\u59cb\u3057\u3066\u304f\u3060\u3055\u3044\u3002\r\n\r\nexport KUBECONFIG=\/Users\/hoge\/.bluemix\/plugins\/container-service\/clusters\/mycluster\/kube-config-dal10-mycluster.yml\r\n<\/code><\/pre>\n<p>\u5982\u679c\u6210\u529f\u4e0b\u8f7d\u4e86\u914d\u7f6e\u4fe1\u606f\uff0c\u7136\u540e\u5c06\u73af\u5883\u53d8\u91cfKUBECONFIG\u5728\u7ec8\u7aef\u4e0a\u8bbe\u7f6e\u4e3a\u4e0e\u64cd\u4f5c\u7cfb\u7edf\u76f8\u5339\u914d\uff0c\u5e76\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u786e\u8ba4\u662f\u5426\u53ef\u4ee5\u8bbf\u95ee\u3002\u5982\u679c\u80fd\u591f\u786e\u8ba4\u670d\u52a1\u5668\u7248\u672c\uff0c\u5219\u5e94\u8be5\u6ca1\u6709\u95ee\u9898\u3002<\/p>\n<pre class=\"post-pre\"><code>$kubectl version\r\nClient Version: version.Info{Major:\"1\", Minor:\"6\", GitVersion:\"v1.6.6\", GitCommit:\"7fa1c1756d8bc963f1a389f4a6937dc71f08ada2\", GitTreeState:\"clean\", BuildDate:\"2017-06-16T18:34:20Z\", GoVersion:\"go1.7.6\", Compiler:\"gc\", Platform:\"darwin\/amd64\"}\r\nServer Version: version.Info{Major:\"1\", Minor:\"5+\", GitVersion:\"v1.5.6-4+abe34653415733\", GitCommit:\"abe346534157336e6bd5a70702756cff19d43a49\", GitTreeState:\"clean\", BuildDate:\"2017-05-18T16:52:50Z\", GoVersion:\"go1.7.4\", Compiler:\"gc\", Platform:\"linux\/amd64\"}\r\n<\/code><\/pre>\n<h1>\u521b\u5efa\u547d\u540d\u7a7a\u95f4<\/h1>\n<p>\u5728Kubernetes\u4e0a\u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\uff08namespace\uff09\u3002\u547d\u540d\u7a7a\u95f4\u662f\u4e00\u4e2a\u865a\u62df\u7684\u96c6\u7fa4\uff0c\u7528\u4e8e\u5b9a\u4e49\u5f53\u9700\u8981\u5206\u5272Pod\u7684\u4f5c\u7528\u8303\u56f4\u65f6\u3002\u547d\u540d\u7a7a\u95f4\u9ed8\u8ba4\u4e3a\u201copenwhisk\u201d\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># incubator-openwhisk-deploy-kube\u306b\u79fb\u52d5<\/span>\r\n<span class=\"nv\">$cd<\/span> <span class=\"nv\">$HOME<\/span>\/incubator-openwhisk-deploy-kube\r\n\r\n<span class=\"c\"># \u540d\u524d\u7a7a\u9593\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9\u30fb\u30d5\u30a1\u30a4\u30eb\u3092\u78ba\u8a8d<\/span>\r\n<span class=\"nv\">$cat<\/span> configure\/openwhisk_kube_namespace.yml \r\nkind: Namespace\r\napiVersion: v1\r\nmetadata:\r\n  name: openwhisk\r\n  labels:\r\n    name: openwhisk\r\n\r\n<span class=\"c\"># \u540d\u524d\u7a7a\u9593\u306e\u4f5c\u6210<\/span>\r\n<span class=\"nv\">$kubectl<\/span> apply <span class=\"nt\">-f<\/span> configure\/openwhisk_kube_namespace.yml\r\nnamespace <span class=\"s2\">\"openwhisk\"<\/span> created\r\n<\/code><\/pre>\n<h1>\u7d66\u4e88\u9069\u7576\u7684\u8a31\u53ef\u6b0a<\/h1>\n<p>\u4e3a\u4e86\u5728IBM\u5bb9\u5668\u7684Kubernetes\u4e0a\u914d\u7f6eOpenWhisk\uff0c\u60a8\u9700\u8981\u63d0\u4f9b\u9002\u5f53\u7684\u6743\u9650\u3002\u4ee5\u4e0b\u662f\u6743\u9650\u5b9a\u4e49\u7684\u5b9e\u65bd\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># OpenWhisk-on-Kubernetes\u306b\u79fb\u52d5<\/span>\r\n<span class=\"nv\">$cd<\/span> <span class=\"nv\">$HOME<\/span>\/OpenWhisk-on-Kubernetes\r\n\r\n<span class=\"c\"># \u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u3092\u4e0e\u3048\u308b\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9\u30fb\u30d5\u30a1\u30a4\u30eb\u3092\u78ba\u8a8d<\/span>\r\n<span class=\"nv\">$cat<\/span> permission.yaml\r\napiVersion: rbac.authorization.k8s.io\/v1alpha1\r\nkind: ClusterRoleBinding\r\nmetadata:\r\n  name: openwhisk:admin\r\nroleRef:\r\n  apiGroup: rbac.authorization.k8s.io\r\n  kind: ClusterRole\r\n  name: cluster-admin\r\nsubjects:\r\n- kind: ServiceAccount\r\n  name: default\r\n  namespace: openwhisk\r\n\r\n<span class=\"c\"># \u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u306e\u4f5c\u6210<\/span>\r\n<span class=\"nv\">$kubectl<\/span> create <span class=\"nt\">-f<\/span> permission.yaml\r\nclusterrolebinding <span class=\"s2\">\"openwhisk:admin\"<\/span> created\r\n<\/code><\/pre>\n<h1>\u69cb\u6210OpenWhisk\u3002<\/h1>\n<p>\u53ea\u9700\u8981\u8fdb\u884c\u4e00\u4e9b\u8bbe\u7f6e\uff0c\u5c31\u5b8c\u6210\u4e86\uff0c\u592a\u7b80\u5355\u4e86!! &#8230;\u867d\u7136\u975e\u5e38\u60f3\u8fd9\u6837\u8bf4\uff0c\u4f46\u6309\u7167README\u7ed9\u51fa\u7684\u914d\u7f6e\u5e76\u4e0d\u80fd\u521b\u5efa\u7528\u4e8e\u6267\u884c\u64cd\u4f5c\u7684\u8c03\u7528\u7a0b\u5e8f\uff0c\u6240\u4ee5\u65e0\u6cd5\u7ee7\u7eed\u8fdb\u884c\u3002<\/p>\n<blockquote><p>2017\/07\/14 \u8ffd\u8a18<br \/>\n\u5728Issue\u4e0a\u786e\u8ba4\u540e\uff0c\u53d1\u73b0\u6b63\u8bd5\u56fe\u8fdb\u884c\u89c4\u683c\u53d8\u66f4\u3002\u4e3a\u4e86\u5f15\u5165invoker\uff0c\u5df2\u7ecf\u51c6\u5907\u4e86\u76f8\u5e94\u7684\u8d44\u6e90\u6587\u4ef6\uff0c\u5e76\u8981\u6c42\u5355\u72ec\u8fdb\u884c\u5f15\u5165\u3002\u4ed3\u5e93\u7684\u66f4\u65b0\u4f3c\u4e4e\u8fd8\u672a\u5b8c\u6210\uff0c\u4e00\u65e6\u66f4\u65b0\u5b8c\u6210\uff0c\u5c06\u4f1a\u66f4\u65b0\u4ee5\u4e0b\u7684\u914d\u7f6e\u6b65\u9aa4\u8bf4\u660e\u3002<\/p><\/blockquote>\n<p>\u5728\u4e2d\u6587\u4e2d\u91cd\u65b0\u8868\u8fbe\u5982\u4e0b\uff1a<\/p>\n<p>\u6240\u4ee5\uff0c\u6211\u4eec\u9700\u8981\u81ea\u5df1\u521b\u5efa\u6240\u9700\u7684\u6620\u50cf\u3002\u8fd9\u4e5f\u5728README\u4e2d\u6709\u6240\u63d0\u53ca\uff0c\u53ea\u9700\u6309\u7167\u8bf4\u660e\u6765\u8fdb\u884c\u6784\u5efa\uff0c\u5c31\u4e0d\u4f1a\u8ff7\u5931\u65b9\u5411\u3002\u524d\u63d0\u662f\u60a8\u5fc5\u987b\u62e5\u6709DockerHub\u5e10\u6237\uff0c\u5982\u679c\u6ca1\u6709\uff0c\u5c31\u53bb\u83b7\u53d6\u4e00\u4e2a\u5427\u3002<\/p>\n<p>\u8f6c\u5230\u5b75\u5316\u5668-OpenWhisk-Deploy-Kube\u5e76\u8fd0\u884c\u811a\u672c&#8221;docker\/build.sh&#8221;\uff0c\u4f46\u662f\u7531\u4e8eMac OS\u4e0a\u7684sed\u9009\u9879\u4e0d\u540c\uff0c\u5b83\u80af\u5b9a\u4f1a\u4ea7\u751f\u9519\u8bef\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$cat<\/span> docker\/build.sh \r\n<span class=\"c\">#!\/usr\/bin\/env bash<\/span>\r\n:\r\n<span class=\"c\"># build nginx<\/span>\r\n<span class=\"nb\">pushd<\/span> <span class=\"nv\">$SCRIPTDIR<\/span>\/nginx\r\n <span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> blackbox\r\n <span class=\"nb\">pushd <\/span>blackbox\r\n   <span class=\"c\"># copy docker sdk to dockerSkeleton in scratch space<\/span>\r\n   <span class=\"nb\">cp<\/span> <span class=\"nv\">$OPENWHISK_DIR<\/span>\/sdk\/docker\/buildAndPush.sh <span class=\"nb\">.<\/span>\r\n   <span class=\"nb\">cp<\/span> <span class=\"nv\">$OPENWHISK_DIR<\/span>\/sdk\/docker\/Dockerfile <span class=\"nb\">.<\/span>\r\n   <span class=\"nb\">cp<\/span> <span class=\"nv\">$OPENWHISK_DIR<\/span>\/sdk\/docker\/example.c <span class=\"nb\">.<\/span>\r\n   <span class=\"nb\">cp<\/span> <span class=\"nv\">$OPENWHISK_DIR<\/span>\/sdk\/docker\/README.md <span class=\"nb\">.<\/span>\r\n\r\n   <span class=\"c\"># rename base image in Dockerfile (\u3053\u306e\u4e0b\u306e\u884c\u304c\u554f\u984c)<\/span>\r\n   <span class=\"nb\">sed<\/span> <span class=\"nt\">-i<\/span> <span class=\"s2\">\"s|FROM dockerskeleton|FROM openwhisk\/dockerskeleton|g\"<\/span> Dockerfile\r\n:\r\n<\/code><\/pre>\n<p>\u4f5c\u4e3a\u56de\u907f\u7b56\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528Homebrew\u5c06gnu-sed\u5b89\u88c5\u5e76\u5c06\u5176\u4f5c\u4e3ased\u7684\u522b\u540dgsed\u6ce8\u518c\uff0c\u6216\u8005\u76f4\u63a5\u5c06\u811a\u672c\u6539\u5199\u4e3agsed\u800c\u4e0d\u662fsed\u53ef\u80fd\u66f4\u4e3a\u5feb\u6377\u3002<\/p>\n<pre class=\"post-pre\"><code>$brew install gnu-sed\r\nUpdating Homebrew...\r\n==&gt; Auto-updated Homebrew!\r\nUpdated 1 tap (caskroom\/cask).\r\nNo changes to formulae.\r\n\r\n==&gt; Downloading https:\/\/homebrew.bintray.com\/bottles\/gnu-sed-4.4.sierra.bottle.tar.gz\r\n:\r\n?  \/usr\/local\/Cellar\/gnu-sed\/4.4: 12 files, 491KB\r\n<\/code><\/pre>\n<p>\u4e00\u65e6\u6211\u4eec\u91c7\u53d6\u4e86\u56de\u907f\u7b56\uff0c\u63a5\u4e0b\u6765\u5c06\u7acb\u5373\u8fdb\u884c\u6784\u5efa\u5904\u7406\u3002\u6267\u884c\u547d\u4ee4\u201cdocker\/build &lt;\uff08\u53ef\u9009\uff09openwhisk\u76ee\u5f55&gt;\u201d\u5373\u53ef\uff0c\u5176\u4e2d\u7b2c\u4e00\u4e2a\u53c2\u6570\u662fDockerHub\u7684\u5e10\u6237\u540d\uff0c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u662fOpenWhisk\u6e90\u4ee3\u7801\u5b58\u50a8\u5e93\u7684\u8def\u5f84\u5373\u53ef\u3002\u5c24\u5176\u662f\u7b2c\u4e8c\u4e2a\u53c2\u6570\uff0c\u5982\u679c\u5c06\u5176\u8bbe\u7f6e\u4e3a\u201c$HOME\/workspace\/openwhisk\u201d\uff0c\u5219\u65e0\u9700\u6307\u5b9a\u3002<\/p>\n<pre class=\"post-pre\"><code>$.\/docker\/build.sh ra1nmaker\r\n+ '[' -z ra1nmaker ']'\r\n+ OPENWHISK_DIR=\r\n+ '[' -z '' ']'\r\n+ cat\r\n  Second argument should be location of the OpenWhisk repo on the local\r\n:\r\nf5cfc06b640d: Layer already exists \r\n9669d6b73383: Layer already exists \r\nv1.6.2-dev: digest: sha256:0f98ed7d0be15dea93d47ef8e410f112dc464c4deb097d53ef94f061446ab9f0 size: 2620\r\n+ popd\r\n~\/workspace\/incubator-openwhisk-deploy-kube\r\n<\/code><\/pre>\n<p>\u5982\u679c\u6ca1\u6709\u7279\u522b\u7684\u9519\u8bef\u7684\u8bdd\uff0c\u5c31\u53ef\u4ee5\u4e86\u3002\u767b\u5f55\u5230DockerHub\u540e\uff0c\u53ef\u4ee5\u786e\u8ba4whisk_config\u8fd9\u4e2a\u540d\u79f0\u7684\u955c\u50cf\u5df2\u7ecf\u521b\u5efa\u6210\u529f\u4e86\u3002\u8fd9\u4e2a\u955c\u50cf\u662f\u7528\u6765\u6784\u5efaOpenWhisk\u7684\u914d\u7f6e\u7684\u955c\u50cf\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d7c5f913a08637a69c266\/36-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2017-07-12 21.37.54.png\" \/><\/div>\n<p>\u5f53\u51c6\u5907\u597d\u540e\uff0c\u6253\u5f00\u7528\u4e8e\u914d\u7f6eOpenWhisk\u7684\u8d44\u6e90\u6587\u4ef6\uff0c\u5e76\u5c06\u201cimage\u201d\u9879\u76ee\u66ff\u6362\u4e3a\u521b\u5efa\u7684\u56fe\u50cf\u3002<\/p>\n<pre class=\"post-pre\"><code>$cat configure\/configure_whisk.yml\r\n---\r\napiVersion: batch\/v1\r\nkind: Job\r\nmetadata:\r\n  name: configure-openwhisk\r\n  namespace: openwhisk\r\n  labels:\r\n    name: configure-openwhisk\r\nspec:\r\n  completions: 1\r\n  template:\r\n    metadata:\r\n      labels:\r\n        name: config\r\n    spec:\r\n      restartPolicy: Never\r\n      containers:\r\n      - name: configure-openwhisk\r\n        image: ra1nmaker\/whisk_config:v1.5.6\r\n        imagePullPolicy: Always\r\n        command: [ \"\/incubator-openwhisk-deploy-kube\/configure\/configure.sh\" ]\r\n<\/code><\/pre>\n<p>\u4e00\u65e6\u7de8\u8f2f\u5b8c\u6210\u5f8c\uff0c\u6211\u5011\u5c07\u5be6\u969b\u5c0e\u5165 OpenWhisk\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># OpenWhisk\u306e\u5c0e\u5165<\/span>\r\n<span class=\"nv\">$kubectl<\/span> apply <span class=\"nt\">-f<\/span> configure\/configure_whisk.yml\r\njob <span class=\"s2\">\"configure-openwhisk\"<\/span> created\r\n<\/code><\/pre>\n<p>\u6267\u884c\u540e\uff0c\u5c06\u5728Kubernetes\u4e0a\u521b\u5efaPod\uff0c\u5e76\u8fd0\u884cOpenWhisk\u7684\u914d\u7f6e\u4efb\u52a1\u3002\u5982\u679c\u60f3\u8981\u6838\u5b9e\u4f5c\u4e1a\u7684\u72b6\u6001\uff0c\u5efa\u8bae\u901a\u8fc7\u4ee5\u4e0b\u65b9\u5f0f\u5c3e\u968f\u65e5\u5fd7\u3002<\/p>\n<pre class=\"post-pre\"><code># \u69cb\u6210\u30b8\u30e7\u30d6\u7528\u306e\u30dd\u30c3\u30c9\u540d\u3092\u78ba\u8a8d\r\n$kubectl -n openwhisk get pods\r\nNAME                        READY     STATUS              RESTARTS   AGE\r\nconfigure-openwhisk-s520q   0\/1       ContainerCreating   0          30s\r\n\r\n# \u30dd\u30c3\u30c9\u304c\u30ec\u30c7\u30a3\u30fc\u306a\u72b6\u614b\u306b\u306a\u3063\u305f\u306e\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089\u3001\u30ed\u30b0\u3092tail\r\n$kubectl -n openwhisk logs -f configure-openwhisk-s520q\r\n:\r\nWednesday 12 July 2017  02:16:30 +0000 (0:00:00.040)       0:03:22.966 ******** \r\n=============================================================================== \r\ninvoker : wait until Invoker is up and running ------------------------- 82.59s\r\nconsul : wait until the Consul Server\/Agent in this host is up and running -- 40.93s\r\ncontroller : wait until the Controller in this host is up and running -- 12.35s\r\nGathering Facts --------------------------------------------------------- 8.03s\r\nGathering Facts --------------------------------------------------------- 7.74s\r\nGathering Facts --------------------------------------------------------- 7.73s\r\nGathering Facts --------------------------------------------------------- 7.69s\r\nGathering Facts --------------------------------------------------------- 7.68s\r\nkafka : create the active-ack and health topic -------------------------- 5.72s\r\nkafka : create the invoker topics --------------------------------------- 2.84s\r\nconsul : fill consul kv ------------------------------------------------- 2.46s\r\nkafka : wait until the Zookeeper in this host is up and running --------- 1.26s\r\nkafka : get kafka pods -------------------------------------------------- 1.16s\r\nconsul : create configmap ----------------------------------------------- 1.12s\r\nconsul : create consul deployment --------------------------------------- 1.10s\r\ninvoker : create invoker deployment ------------------------------------- 1.10s\r\nkafka : get zookeeper pods ---------------------------------------------- 1.10s\r\nkafka : create zookeeper deployment ------------------------------------- 1.09s\r\nkafka : create kafka deployment ----------------------------------------- 1.09s\r\ncontroller : create controller deployment ------------------------------- 1.09s\r\n+ popd\r\n\/\r\n<\/code><\/pre>\n<p>\u5f53\u4f5c\u4e1a\u6267\u884c\u5b8c\u6bd5\u540e\uff0cPod\u5c06\u505c\u6b62\u8fd0\u884c\u3002\u5728\u505c\u6b62\u540e\uff0c\u60a8\u53ef\u4ee5\u67e5\u770bPod\u5217\u8868\uff0c\u786e\u8ba4OpenWhisk\u7ec4\u4ef6\u7684Pod\u6b63\u5728\u8fd0\u884c\uff01<\/p>\n<pre class=\"post-pre\"><code>$kubectl -n openwhisk get pods --show-all=true\r\nNAME                          READY     STATUS      RESTARTS   AGE\r\nconfigure-openwhisk-s520q     0\/1       Completed   0          7m\r\nconsul-57995027-gtkfr         2\/2       Running     0          5m\r\ncontroller-3250411552-jxnrd   1\/1       Running     0          4m\r\ncouchdb-109298327-0h6c6       1\/1       Running     0          6m\r\ninvoker-0                     1\/1       Running     0          4m\r\nkafka-1060962555-62sx5        1\/1       Running     0          4m\r\nzookeeper-1304892743-w5vwj    1\/1       Running     0          4m\r\n<\/code><\/pre>\n<h1>\u914d\u7f6e\u7aef\u70b9<\/h1>\n<p>\u53ea\u8981\u6309\u7167README\u4e0a\u7684\u6b65\u9aa4\u8fdb\u884c\uff0c\u5c31\u8db3\u591f\u4e86\uff0c\u4f46\u4ee5\u4e0b\u662f\u4f5c\u4e3a\u5907\u5fd8\u5f55\u7559\u4e0b\u6765\u7684\u3002<\/p>\n<pre class=\"post-pre\"><code># nginx\u306e\u69cb\u6210\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u306b\u79fb\u52d5\u3059\u308b\r\n$ cd $HOME\/incubator-openwhisk-deploy-kube\/kubernetes\/nginx\r\n\r\n# \u30aa\u30ec\u30aa\u30ec\u8a3c\u660e\u66f8\u3092\u4f5c\u6210\u3059\u308b (\u672c\u5f53\u306f\u3053\u3053\u3067\u3061\u3083\u3093\u3068\u3057\u305f\u8a3c\u660e\u66f8\u3092\u767a\u884c\u3057\u305f\u3044\u3068\u3053\u308d)\r\n$.\/certs.sh localhost\r\n+ '[' -z localhost ']'\r\n+ mkdir -p certs\r\n+ openssl req -x509 -newkey rsa:2048 -keyout certs\/key.pem -out certs\/cert.pem -nodes -subj \/CN=localhost -days 365\r\nGenerating a 2048 bit RSA private key\r\n................+++\r\n....................................................+++\r\nwriting new private key to 'certs\/key.pem'\r\n\r\n# nginx\u306e\u69cb\u6210\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30f3\u30d5\u30a3\u30b0\u30fb\u30de\u30c3\u30d7\u306b\u767b\u9332\r\n$ kubectl -n openwhisk create configmap nginx --from-file=nginx.conf\r\nconfigmap \"nginx\" created\r\n\r\n# \u8a3c\u660e\u66f8\u3092\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u306b\u767b\u9332\r\n$ kubectl -n openwhisk create secret tls nginx --cert=certs\/cert.pem --key=certs\/key.pem\r\nsecret \"nginx\" created\r\n\r\n# Nginx\u306e\u69cb\u6210\u306e\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9\u30fb\u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3059\u308b (\u30a4\u30e1\u30fc\u30b8\u306e\u90e8\u5206\u3092\u7f6e\u304d\u63db\u3048\u308b)\r\n$cat nginx.yml\r\n:\r\n      containers:\r\n      - name: nginx\r\n        imagePullPolicy: Always\r\n        image: ra1nmaker\/whisk_nginx\r\n:\r\n\r\n# Nginx\u306e\u69cb\u6210\r\n$kubectl apply -f nginx.yml\r\nservice \"nginx\" created\r\ndeployment \"nginx\" created\r\n\r\n# \u7d50\u679c\u306e\u78ba\u8a8d\r\n$kubectl -n openwhisk get pods --show-all=true\r\nNAME                          READY     STATUS      RESTARTS   AGE\r\nconfigure-openwhisk-s520q     0\/1       Completed   0          14m\r\nconsul-57995027-gtkfr         2\/2       Running     0          12m\r\ncontroller-3250411552-jxnrd   1\/1       Running     0          11m\r\ncouchdb-109298327-0h6c6       1\/1       Running     0          13m\r\ninvoker-0                     1\/1       Running     0          10m\r\nkafka-1060962555-62sx5        1\/1       Running     0          11m\r\nnginx-599024668-lg718         1\/1       Running     0          1m\r\nzookeeper-1304892743-w5vwj    1\/1       Running     0          11m\r\n<\/code><\/pre>\n<h1>\u8bbf\u95eeOpenWhisk<\/h1>\n<p>\u901a\u8fc7\u51c6\u5907Nginx\uff0c\u5b9a\u4e49\u4e86\u8bbf\u95eeOpenWhisk\u7684\u7aef\u70b9\u3002\u6211\u4eec\u4f7f\u7528\u540d\u4e3aNodePort\u7684\u670d\u52a1\u6765\u4ece\u5916\u90e8\u8bbf\u95ee\uff0c\u6240\u4ee5\u9700\u8981\u901a\u8fc7\u547d\u4ee4\u786e\u8ba4\u8981\u8bbf\u95ee\u7684IP\u5730\u5740\u548c\u7aef\u53e3\uff0c\u5e76\u8fdb\u884c\u8bbf\u95ee\u3002<\/p>\n<pre class=\"post-pre\"><code># \u30ce\u30fc\u30c9\u306eIP\u30a2\u30c9\u30ec\u30b9\u3092\u78ba\u8a8d\r\n$kubectl get nodes\r\nNAME         STATUS    AGE       VERSION\r\nxx.xx.xx.xx   Ready     17d       v1.5.6-4+abe34653415733\r\n\r\n# \u78ba\u8a8d\u3057\u305fIP\u30a2\u30c9\u30ec\u30b9\u3092\u74b0\u5883\u5909\u6570WSK_IPADDR\u306b\u30bb\u30c3\u30c8\r\n$export WSK_IPADDR=xx.xx.xx.xx\r\n\r\n# NodePort\u3067\u516c\u958b\u3055\u308c\u3066\u3044\u308b\u30dd\u30fc\u30c8\u756a\u53f7\u3092\u74b0\u5883\u5909\u6570WSK_PORT\u306b\u57cb\u3081\u8fbc\u3080\r\n$export WSK_PORT=$(kubectl -n openwhisk describe service nginx | grep https-api | grep NodePort| awk '{print $3}' | cut -d'\/' -f1)\r\n\r\n# \u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u3092\u30bb\u30c3\u30c8\r\n# \u8a8d\u8a3c\u60c5\u5831\u306fREADME\u901a\u308a\u300c789c46b1-71f6-4ed5-8c54-816aa4f8c502:abczO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP\u300d\u3092\u4f7f\u7528\r\n$wsk property set --auth 789c46b1-71f6-4ed5-8c54-816aa4f8c502:abczO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP --apihost https:\/\/$WSK_IPADDR:$WSK_PORT\r\nok: whisk auth set. Run 'wsk property get --auth' to see the new value.\r\nok: whisk API host set to https:\/\/xx.xx.xx.xx:31800\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0a\u5c31\u662f\u547d\u4ee4\u884c\u8bbe\u7f6e\u7684\u5b8c\u6210\uff0c\u73b0\u5728\u53ea\u9700\u8981\u5bfc\u5165\u5fc5\u8981\u7684\u8f6f\u4ef6\u5305\u5373\u53ef\u3002<\/p>\n<h1>\u4f7f\u7528wsk\u5bfc\u5165\u7cfb\u7edf\u5305<\/h1>\n<p>\u8fd9\u4e5f\u53ea\u662f\u6309\u7167\u60ef\u4f8b\u666e\u901a\u5730\u5f15\u5165\u800c\u5df2\u3002<\/p>\n<pre class=\"post-pre\"><code># \u30ab\u30bf\u30ed\u30b0\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\r\ncd $HOME\/workspace\r\ngit clone https:\/\/github.com\/apache\/incubator-openwhisk-catalog\r\n\r\n# \u5c0e\u5165\u30b9\u30af\u30ea\u30d7\u30c8\u304c\u3042\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\r\ncd $workspace\/incubator-openwhisk-catalog\/packages\r\n\r\n# \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u5c0e\u5165\r\n# \u8a8d\u8a3c\u60c5\u5831\u306fREADME\u901a\u308a\u300c789c46b1-71f6-4ed5-8c54-816aa4f8c502:abczO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP\u300d\u3092\u4f7f\u7528\r\n$ .\/installCatalog.sh 789c46b1-71f6-4ed5-8c54-816aa4f8c502:abczO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP https:\/\/$WSK_IPADDR:$WSK_PORT\r\n\r\nInstalling OpenWhisk packages\r\nInstalling package installCombinators.sh with pid 32554\r\nInstalling package installGit.sh with pid 32555\r\nInstalling package installSlack.sh with pid 32556\r\nInstalling package installSystem.sh with pid 32557\r\nInstalling package installWatson.sh with pid 32558\r\nInstalling package installWeather.sh with pid 32559\r\nInstalling package installWebSocket.sh with pid 32560\r\nInstalling action combinator package.\r\nInstalling Git package.\r\nCreating package combinators with pid 32603\r\nInstalling whisk.system entities.\r\nCreating package github with pid 32604\r\nInstalling Watson package.\r\nInstalling Slack package.\r\nCreating package utils with pid 32605\r\nCreating package watson-translator with pid 32606\r\nCreating package slack with pid 32607\r\nCreating package samples with pid 32608\r\nInstalling WebSocket package.\r\nCreating package watson-speechToText with pid 32609\r\nCreating package websocket with pid 32610\r\nInstalling Weather package.\r\nCreating package watson-textToSpeech with pid 32611\r\nCreating package weather with pid 32612\r\nok: updated package github\r\nok: updated package watson-textToSpeech\r\nok: updated package watson-translator\r\nok: updated package websocket\r\nok: updated package watson-speechToText\r\nok: updated package weather\r\nok: updated package slack\r\nok: updated package utils\r\nok: updated package combinators\r\nok: updated package samples\r\n32604 finished with status 0\r\n32606 finished with status 0\r\n32609 finished with status 0\r\n32611 finished with status 0\r\n32610 finished with status 0\r\n32607 finished with status 0\r\n32612 finished with status 0\r\n32605 finished with status 0\r\nInstalling slack\/post with pid 32613\r\nInstalling websocket\/send with pid 32614\r\nInstalling github\/webhook with pid 32615\r\n32608 finished with status 0\r\n32603 finished with status 0\r\nInstalling weather\/forecast with pid 32616\r\nInstalling watson-speechToText\/speechToText with pid 32617\r\nInstalling utils\/echo with pid 32618\r\nInstalling combinators\/eca with pid 32619\r\nInstalling utils\/cat with pid 32620\r\nInstalling watson-translator\/translator with pid 32621\r\nInstalling combinators\/forwarder with pid 32622\r\nInstalling utils\/smash with pid 32623\r\nInstalling watson-translator\/languageId with pid 32624\r\nInstalling combinators\/retry with pid 32625\r\nInstalling utils\/split with pid 32626\r\nInstalling watson-textToSpeech\/textToSpeech with pid 32627\r\nInstalling combinators\/trycatch with pid 32628\r\nInstalling utils\/sort with pid 32629\r\nInstalling utils\/head with pid 32630\r\nInstalling utils\/date with pid 32631\r\nInstalling utils\/namespace with pid 32632\r\nInstalling utils\/hosturl with pid 32633\r\nInstalling samples\/helloWorld with pid 32634\r\nInstalling samples\/greeting with pid 32635\r\nInstalling samples\/wordCount with pid 32636\r\nInstalling samples\/curl with pid 32637\r\nok: updated action utils\/smash\r\nok: updated action combinators\/eca\r\n32619 finished with status 0\r\nok: updated action slack\/post\r\n32613 finished with status 0\r\nSlack package ERRORS = 0\r\nok: updated action combinators\/trycatch\r\nok: updated action utils\/sort\r\nok: updated action samples\/wordCount\r\nok: updated action utils\/echo\r\n32618 finished with status 0\r\nok: updated action samples\/helloWorld\r\nok: updated action samples\/greeting\r\nok: updated action utils\/split\r\nok: updated action utils\/namespace\r\nok: updated action combinators\/retry\r\nok: updated action combinators\/forwarder\r\nok: updated action samples\/curl\r\nok: updated action github\/webhook\r\nok: updated action weather\/forecast\r\n32622 finished with status 0\r\n32625 finished with status 0\r\n32628 finished with status 0\r\ncombinator package ERRORS = 0\r\n32554 finished with status 0\r\n32615 finished with status 0\r\nGit package ERRORS = 0\r\n32555 finished with status 0\r\n32556 finished with status 0\r\n32616 finished with status 0\r\nWeather package ERRORS = 0\r\nok: updated action utils\/hosturl\r\nok: updated action websocket\/send\r\n32614 finished with status 0\r\nWebSocket package ERRORS = 0\r\nok: updated action watson-textToSpeech\/textToSpeech\r\nok: updated action utils\/head\r\nok: updated action watson-speechToText\/speechToText\r\n32617 finished with status 0\r\nok: updated action utils\/cat\r\n32620 finished with status 0\r\n32623 finished with status 0\r\n32626 finished with status 0\r\n32629 finished with status 0\r\n32630 finished with status 0\r\nok: updated action watson-translator\/languageId\r\nok: updated action utils\/date\r\n32631 finished with status 0\r\n32632 finished with status 0\r\n32633 finished with status 0\r\n32634 finished with status 0\r\n32635 finished with status 0\r\n32636 finished with status 0\r\n32637 finished with status 0\r\nwhisk.system entities ERRORS = 0\r\n32557 finished with status 0\r\nok: updated action watson-translator\/translator\r\n32621 finished with status 0\r\n32624 finished with status 0\r\n32627 finished with status 0\r\nWatson package ERRORS = 0\r\n32558 finished with status 0\r\n32559 finished with status 0\r\n32560 finished with status 0\r\nopen catalog ERRORS = 0\r\n\r\n# \u5c0e\u5165\u3067\u304d\u305f\u304b\u306e\u78ba\u8a8d\r\n$wsk -i package list\r\npackages\r\n\/whisk.system\/watson-translator                                        shared\r\n\/whisk.system\/weather                                                  shared\r\n\/whisk.system\/utils                                                    shared\r\n\/whisk.system\/watson-textToSpeech                                      shared\r\n\/whisk.system\/github                                                   shared\r\n\/whisk.system\/slack                                                    shared\r\n\/whisk.system\/combinators                                              shared\r\n\/whisk.system\/websocket                                                shared\r\n\/whisk.system\/watson-speechToText                                      shared\r\n\/whisk.system\/samples                                                  shared\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0a\u5c31\u662f\u8bbe\u7f6e\u5b8c\u6210\u4e86\u3002<\/p>\n<h1>\u6d4b\u8bd5OpenWhisk<\/h1>\n<p>\u7136\u540e\u6211\u4f1a\u968f\u610f\u6267\u884c\u4e00\u4e9b\u884c\u52a8\u3002<\/p>\n<pre class=\"post-pre\"><code>$wsk -i action invoke \/whisk.system\/utils\/echo -p message hello --blocking --result\r\n{\r\n    \"message\": \"hello\"\r\n}\r\n<\/code><\/pre>\n<p>\u53ea\u8981\u6ca1\u6709\u9519\u8bef\uff0c\u5c31\u53ef\u4ee5\u6267\u884c\u5b8c\u6bd5\u4e86\uff01<\/p>\n<h1>\u603b\u7ed3<\/h1>\n<p>\u6211\u6309\u7167IBM Containers\uff08Kubernetes\uff09\u4e0a\u7684My OpenWhisk\u73af\u5883\u8bbe\u7f6e\u6b65\u9aa4\u8fdb\u884c\u4e86\u5b9e\u9a8c\u3002\u76ee\u524d\uff0c\u5982\u679c\u4e0d\u81ea\u5236\u955c\u50cf\u53ef\u80fd\u65e0\u6cd5\u987a\u5229\u8fdb\u884c\uff0c\u4f46\u6211\u8ba4\u4e3a\u5f88\u5feb\u4f1a\u6709\u4fee\u6b63\uff0c\u6240\u4ee5\u60a8\u53ef\u4ee5\u7b49\u5f85\u4fee\u6b63\u540e\u518d\u5c1d\u8bd5\u5f15\u5165\u3002<\/p>\n<p>\u5728\u6211\u4e2a\u4eba\u770b\u6765\uff0c\u7531\u4e8e\u6211OpenWhisk\u73af\u5883\u4e2d\u6ca1\u6709API Gateway\uff0c\u6211\u8ba1\u5212\u7ee7\u7eed\u5728\u8fd9\u4e2aKubernetes\u96c6\u7fa4\u4e2d\u7684OpenWhisk\u4e2d\u8fdb\u884c\u989d\u5916\u7684\u5f15\u5165\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u662f\u4e00\u4e2a\u7a0d\u4f5c\u4e2d\u65ad\u540e\u518d\u6b21\u53d1\u5e03\u7684\u5e16\u5b50\u3002 \u4e4b\u524d\u5728Bluemix\u7528\u6237\u7fa4\u8ba8\u8bba\u4e86OpenWhisk\uff0c\u6211\u60f3\u63a5\u7740\u8ba8\u8bba\u4e0b\u53bb&#038;#8 [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-47043","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5c1d\u8bd5\u5728IBM\u5bb9\u5668\uff08Kubernetes\uff09\u4e0a\u6784\u5efaOpenWhisk - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u5728ibm\u5bb9\u5668\uff08kubernetes\uff09\u4e0a\u6784\u5efaopenwhisk\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5c1d\u8bd5\u5728IBM\u5bb9\u5668\uff08Kubernetes\uff09\u4e0a\u6784\u5efaOpenWhisk\" \/>\n<meta property=\"og:description\" content=\"\u8fd9\u662f\u4e00\u4e2a\u7a0d\u4f5c\u4e2d\u65ad\u540e\u518d\u6b21\u53d1\u5e03\u7684\u5e16\u5b50\u3002 \u4e4b\u524d\u5728Bluemix\u7528\u6237\u7fa4\u8ba8\u8bba\u4e86OpenWhisk\uff0c\u6211\u60f3\u63a5\u7740\u8ba8\u8bba\u4e0b\u53bb&amp;#8 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u5728ibm\u5bb9\u5668\uff08kubernetes\uff09\u4e0a\u6784\u5efaopenwhisk\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-24T14:27:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T07:42:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d7c5f913a08637a69c266\/36-0.png\" \/>\n<meta name=\"author\" content=\"\u6e05, \u5b87\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u5b87\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8ibm%e5%ae%b9%e5%99%a8%ef%bc%88kubernetes%ef%bc%89%e4%b8%8a%e6%9e%84%e5%bb%baopenwhisk%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8ibm%e5%ae%b9%e5%99%a8%ef%bc%88kubernetes%ef%bc%89%e4%b8%8a%e6%9e%84%e5%bb%baopenwhisk%e3%80%82\/\",\"name\":\"\u5c1d\u8bd5\u5728IBM\u5bb9\u5668\uff08Kubernetes\uff09\u4e0a\u6784\u5efaOpenWhisk - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-10-24T14:27:35+00:00\",\"dateModified\":\"2024-04-30T07:42:02+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8ibm%e5%ae%b9%e5%99%a8%ef%bc%88kubernetes%ef%bc%89%e4%b8%8a%e6%9e%84%e5%bb%baopenwhisk%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8ibm%e5%ae%b9%e5%99%a8%ef%bc%88kubernetes%ef%bc%89%e4%b8%8a%e6%9e%84%e5%bb%baopenwhisk%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8ibm%e5%ae%b9%e5%99%a8%ef%bc%88kubernetes%ef%bc%89%e4%b8%8a%e6%9e%84%e5%bb%baopenwhisk%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5c1d\u8bd5\u5728IBM\u5bb9\u5668\uff08Kubernetes\uff09\u4e0a\u6784\u5efaOpenWhisk\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\",\"name\":\"\u6e05, \u5b87\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u5b87\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8ibm%e5%ae%b9%e5%99%a8%ef%bc%88kubernetes%ef%bc%89%e4%b8%8a%e6%9e%84%e5%bb%baopenwhisk%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5c1d\u8bd5\u5728IBM\u5bb9\u5668\uff08Kubernetes\uff09\u4e0a\u6784\u5efaOpenWhisk - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u5728ibm\u5bb9\u5668\uff08kubernetes\uff09\u4e0a\u6784\u5efaopenwhisk\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5c1d\u8bd5\u5728IBM\u5bb9\u5668\uff08Kubernetes\uff09\u4e0a\u6784\u5efaOpenWhisk","og_description":"\u8fd9\u662f\u4e00\u4e2a\u7a0d\u4f5c\u4e2d\u65ad\u540e\u518d\u6b21\u53d1\u5e03\u7684\u5e16\u5b50\u3002 \u4e4b\u524d\u5728Bluemix\u7528\u6237\u7fa4\u8ba8\u8bba\u4e86OpenWhisk\uff0c\u6211\u60f3\u63a5\u7740\u8ba8\u8bba\u4e0b\u53bb&#8 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u5728ibm\u5bb9\u5668\uff08kubernetes\uff09\u4e0a\u6784\u5efaopenwhisk\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-10-24T14:27:35+00:00","article_modified_time":"2024-04-30T07:42:02+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d7c5f913a08637a69c266\/36-0.png"}],"author":"\u6e05, \u5b87","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u5b87","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"9 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8ibm%e5%ae%b9%e5%99%a8%ef%bc%88kubernetes%ef%bc%89%e4%b8%8a%e6%9e%84%e5%bb%baopenwhisk%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8ibm%e5%ae%b9%e5%99%a8%ef%bc%88kubernetes%ef%bc%89%e4%b8%8a%e6%9e%84%e5%bb%baopenwhisk%e3%80%82\/","name":"\u5c1d\u8bd5\u5728IBM\u5bb9\u5668\uff08Kubernetes\uff09\u4e0a\u6784\u5efaOpenWhisk - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-10-24T14:27:35+00:00","dateModified":"2024-04-30T07:42:02+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8ibm%e5%ae%b9%e5%99%a8%ef%bc%88kubernetes%ef%bc%89%e4%b8%8a%e6%9e%84%e5%bb%baopenwhisk%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8ibm%e5%ae%b9%e5%99%a8%ef%bc%88kubernetes%ef%bc%89%e4%b8%8a%e6%9e%84%e5%bb%baopenwhisk%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8ibm%e5%ae%b9%e5%99%a8%ef%bc%88kubernetes%ef%bc%89%e4%b8%8a%e6%9e%84%e5%bb%baopenwhisk%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5c1d\u8bd5\u5728IBM\u5bb9\u5668\uff08Kubernetes\uff09\u4e0a\u6784\u5efaOpenWhisk"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e","name":"\u6e05, \u5b87","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","caption":"\u6e05, \u5b87"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8ibm%e5%ae%b9%e5%99%a8%ef%bc%88kubernetes%ef%bc%89%e4%b8%8a%e6%9e%84%e5%bb%baopenwhisk%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/47043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=47043"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/47043\/revisions"}],"predecessor-version":[{"id":92791,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/47043\/revisions\/92791"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=47043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=47043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=47043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}