{"id":34220,"date":"2023-05-29T14:14:32","date_gmt":"2023-07-04T05:16:38","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e8%bf%87%e5%9c%a8osx%e4%b8%8a%e4%bd%bf%e7%94%a8vagrant%e5%92%8ccoreos%e6%9d%a5%e5%b0%9d%e8%af%95kubernetes%e3%80%82\/"},"modified":"2024-04-30T06:29:57","modified_gmt":"2024-04-29T22:29:57","slug":"%e6%88%91%e8%af%95%e8%bf%87%e5%9c%a8osx%e4%b8%8a%e4%bd%bf%e7%94%a8vagrant%e5%92%8ccoreos%e6%9d%a5%e5%b0%9d%e8%af%95kubernetes%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e8%bf%87%e5%9c%a8osx%e4%b8%8a%e4%bd%bf%e7%94%a8vagrant%e5%92%8ccoreos%e6%9d%a5%e5%b0%9d%e8%af%95kubernetes%e3%80%82\/","title":{"rendered":"\u6211\u8bd5\u8fc7\u5728OSX\u4e0a\u4f7f\u7528Vagrant\u548cCoreOS\u6765\u5c1d\u8bd5Kubernetes"},"content":{"rendered":"<p>\u6211\u5728OSX + Vagrant + CoreOS\u4e0a\u5c1d\u8bd5\u4e86Kubernetes\uff0c\u5e76\u505a\u4e86\u4e00\u4e9b\u6574\u7406\uff0c\u4e0b\u9762\u662f\u6211\u7684\u5907\u5fd8\u5f55\u3002\u8bf7\u6ce8\u610f\uff0c\u7531\u4e8e\u6574\u7406\u4e86\u4e00\u4e9b\u6b65\u9aa4\uff0c\u53ef\u80fd\u4e0d\u80fd\u76f4\u63a5\u8fd0\u884c\u3002<\/p>\n<h1>\u501f\u9274<\/h1>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">GoogleCloudPlatform\/kubernetes<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Running Kubernetes Example on CoreOS, Part 1<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Running CoreOS on Vagrant<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">kelseyhightower\/kubernetes-coreos<\/ul>\n<h1>\u6b65\u9aa4<\/h1>\n<h2>\u4f7f\u7528Vagrant\u542f\u52a8CoreOS\uff0c\u5e76\u8fdb\u884cSSH\u767b\u5f55\u3002<\/h2>\n<p>\u53c2\u7167Running CoreOS on Vagrant\u7684Vagrantfile\u8fdb\u884c\u83b7\u53d6\u5e76\u542f\u52a8\u3002\u5728CoreOS\u4e0a\u8fd0\u884cKubernetes\u793a\u4f8b\uff0c\u7b2c\u4e00\u90e8\u5206\u3002<\/p>\n<blockquote><p>\u8fd9\u4e2a\u6559\u7a0b\u53ea\u9700\u8981\u4e00\u4e2a\u8282\u70b9\u7684\u96c6\u7fa4\u5373\u53ef\u3002<\/p><\/blockquote>\n<p>\u5728config.rb\u6587\u4ef6\u4e2d\uff0c\u7531\u4e8e\u67d0\u4e2a\u539f\u56e0\uff0c$num_instances\u53ef\u4ee5\u4fdd\u6301\u4e3a1\u3002\u56e0\u6b64\uff0c\u6211\u76f4\u63a5\u4f7f\u7528\u4e86\u6240\u6709\u6ce8\u91ca\u884c\u7684config.rb.sample\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"go\">git clone https:\/\/github.com\/coreos\/coreos-vagrant.git\r\ncd coreos-vagrant\r\ncp config.rb.sample\r\nvagrant up\r\n<\/span><\/code><\/pre>\n<p>\u4e00\u65e6\u542f\u52a8\u540e\uff0c\u4f7f\u7528SSH\u8fdb\u884c\u767b\u5f55\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"go\">vagrant ssh\r\n<\/span><\/code><\/pre>\n<h2>\u5728CoreOS\u4e0a\u8bbe\u7f6e\u548c\u542f\u52a8Kubernetes\u670d\u52a1<\/h2>\n<p>\u6839\u636ekelseyhightower\/kubernetes-coreos\u7684\u6b65\u9aa4\u6765\u8fd0\u884cCoreOS\u4e0a\u7684Kubernetes\u793a\u4f8b\uff0c\u56e0\u4e3a\u300a\u5728CoreOS\u4e0a\u8fd0\u884cKubernetes\u793a\u4f8b\uff0c\u7b2c1\u90e8\u5206\u300b\u7684\u8bf4\u660e\u5df2\u7ecf\u8fc7\u65f6\u3002<\/p>\n<h3>\u521b\u5efa\u4e00\u4e2a Kubernetes \u5b89\u88c5\u76ee\u5f55\u3002<\/h3>\n<p>\u5728\u8fd9\u91cc\uff0c\u6211\u53c2\u8003\u4e86kelseyhightower\/kubernetes-coreos\u7684&#8221;Running Kubernetes Example on CoreOS, Part 1&#8243;\uff0c\u5f97\u51fa\u4ee5\u4e0b\u7ed3\u679c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"go\">sudo mkdir -p \/opt\/kubernetes \r\nsudo chown -R core: \/opt\/kubernetes\r\ncd \/opt\/kubernetes\r\n<\/span><\/code><\/pre>\n<h3>\u5b89\u88c5Kubernetes\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6<\/h3>\n<pre class=\"post-pre\"><code><span class=\"go\">sudo mkdir -p \/opt\/bin\r\nsudo wget http:\/\/storage.googleapis.com\/kubernetes\/binaries.tar.gz\r\nsudo tar -xvf binaries.tar.gz -C \/opt\/bin\r\n<\/span><\/code><\/pre>\n<p>\u6211\u4f1a\u68c0\u67e5kubecfg\u662f\u5426\u5728\u8def\u5f84\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> which kubecfg\r\n<span class=\"go\">\/opt\/bin\/kubecfg\r\n<\/span><\/code><\/pre>\n<h3>\u6dfb\u52a0Kubernetes\u7684systemd\u5355\u4f4d\u6587\u4ef6<\/h3>\n<pre class=\"post-pre\"><code><span class=\"go\">git clone https:\/\/github.com\/kelseyhightower\/kubernetes-coreos.git\r\nsudo cp kubernetes-coreos\/units\/* \/etc\/systemd\/system\/\r\n<\/span><\/code><\/pre>\n<h3>\u542f\u52a8Kubernetes\u670d\u52a1<\/h3>\n<pre class=\"post-pre\"><code><span class=\"go\">sudo systemctl start apiserver\r\nsudo systemctl start controller-manager\r\nsudo systemctl start kubelet\r\nsudo systemctl start proxy\r\n<\/span><\/code><\/pre>\n<h3>\u663e\u793apod\u5217\u8868<\/h3>\n<p>\u56e0\u4e3a\u6211\u8fd8\u6ca1\u6709\u521b\u5efa\u4efb\u4f55\u4e1c\u897f\uff0c\u6240\u4ee5\u662f\u7a7a\u7684\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes $<\/span> kubecfg list \/pods\r\n<span class=\"go\">Name                Image(s)            Host                Labels\r\n----------          ----------          ----------          ----------\r\n<\/span><\/code><\/pre>\n<h2>Redis\u7684\u793a\u4f8b\u6210\u529f\u8fd0\u884c\u3002<\/h2>\n<p>\u6211\u5c1d\u8bd5\u8fd0\u884c\u4e86\u300a\u5728CoreOS\u4e0a\u8fd0\u884cKubernetes\u793a\u4f8b\uff0c\u7b2c\u4e00\u90e8\u5206\u300b\u4e2d\u7684\u300a\u521b\u5efa\u4e00\u4e2aKubernetes\u5bb9\u5668\u300b\u4e00\u8282\u7684\u4f8b\u5b50\u3002<\/p>\n<p>\u5728\u4e0a\u8ff0\u6587\u7ae0\u4e2d\uff0c\u63d0\u5230\u7684\u662f \/opt\/kubernetes\/bin\/kubecfg\uff0c\u4f46\u662f\u8be5\u6587\u7ae0\u4e2d\u5c06\u5176\u8def\u5f84\u6dfb\u52a0\u5230\u4e86PATH\u4e2d\uff0c\u6240\u4ee5\u5728\u4e0b\u9762\u7684\u5185\u5bb9\u4e2d\uff0c\u53ea\u9700\u4f7f\u7528 kubecfg \u8fdb\u884c\u542f\u52a8\u3002\u53e6\u5916\uff0c\u7531\u4e8e\u7701\u7565\u4e86 -h http:\/\/127.0.0.1:8080 \u7684\u9009\u9879\uff0c\u7a0b\u5e8f\u4e5f\u80fd\u6b63\u5e38\u8fd0\u884c\u3002<\/p>\n<p>\u6211\u5728CoreOS\u7684\/opt\/kubernetes\u76ee\u5f55\u4e0b\u8fd0\u884c\u4e86\u4ee5\u4e0b\u547d\u4ee4\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"go\">mkdir kubernetes-coreos\/pods\r\n\r\n<\/span><span class=\"gp\">cat &lt;&lt;EOF &gt;<\/span> kubernetes-coreos\/pods\/redis.json\r\n<span class=\"go\">{\r\n  \"id\": \"redis\",\r\n  \"desiredState\": {\r\n    \"manifest\": {\r\n      \"version\": \"v1beta1\",\r\n      \"id\": \"redis\",\r\n      \"containers\": [{\r\n        \"name\": \"redis\",\r\n        \"image\": \"dockerfile\/redis\",\r\n        \"ports\": [{\r\n          \"containerPort\": 6379,\r\n          \"hostPort\": 6379\r\n        }]\r\n      }]\r\n    }\r\n  },\r\n  \"labels\": {\r\n    \"name\": \"redis\"\r\n  }\r\n}\r\nEOF\r\n\r\nkubecfg -c kubernetes-coreos\/pods\/redis.json create \/pods\r\n<\/span><\/code><\/pre>\n<p>\u6211\u653e\u7f6e\u4e86\u4e00\u6bb5\u65f6\u95f4\uff08\u5927\u7ea610\u5206\u949f\uff1f\uff09\uff0c\u7136\u540e\u4efb\u52a1\u987a\u5229\u5b8c\u6210\u4e86\u3002\u6211\u5c06\u663e\u793aPod\u5217\u8868\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes $<\/span> kubecfg list \/pods\r\n<span class=\"go\">Name                Image(s)            Host                Labels\r\n----------          ----------          ----------          ----------\r\nredis               dockerfile\/redis    127.0.0.1\/          name=redis\r\n<\/span><\/code><\/pre>\n<p>\u786e\u8ba4 docker0 \u63a5\u53e3\u7684 IP \u5730\u5740\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes $<\/span> ip a show docker0\r\n<span class=\"gp\">4: docker0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt;<\/span> mtu 1500 qdisc noqueue state UP\r\n<span class=\"go\">    link\/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff\r\n    inet 10.1.42.1\/16 scope global docker0\r\n       valid_lft forever preferred_lft forever\r\n    inet6 fe80::5484:7aff:fefe:9799\/64 scope link\r\n       valid_lft forever preferred_lft forever\r\n<\/span><\/code><\/pre>\n<p>\u4f7f\u7528Docker\u542f\u52a8Redis\u5ba2\u6237\u7aef\u8fdb\u884c\u64cd\u4f5c\u9a8c\u8bc1\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes $<\/span> docker run <span class=\"nt\">-t<\/span> <span class=\"nt\">-i<\/span> dockerfile\/redis \/usr\/local\/bin\/redis-cli <span class=\"nt\">-h<\/span> 10.1.42.1\r\n<span class=\"gp\">10.1.42.1:6379&gt;<\/span> keys <span class=\"k\">*<\/span>\r\n<span class=\"go\">(empty list or set)\r\n<\/span><span class=\"gp\">10.1.42.1:6379&gt;<\/span> <span class=\"nb\">set <\/span>foo bar\r\n<span class=\"go\">OK\r\n<\/span><span class=\"gp\">10.1.42.1:6379&gt;<\/span> get foo\r\n<span class=\"go\">\"bar\"\r\n<\/span><span class=\"gp\">10.1.42.1:6379&gt;<\/span> <span class=\"nb\">exit<\/span>\r\n<\/code><\/pre>\n<p>\u8ba9\u6211\u4eec\u5220\u9664pod\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes $<\/span> kubecfg delete \/pods\/redis\r\n<span class=\"go\">I0721 03:23:40.857563 03173 request.go:220] Waiting for completion of \/operations\/3\r\nStatus\r\n----------\r\nsuccess\r\n<\/span><\/code><\/pre>\n<p>\u6211\u786e\u8ba4\u4e86Pod\u6e05\u5355\u5df2\u7ecf\u6d88\u5931\u4e86\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes $<\/span> kubecfg list \/pods\r\n<span class=\"go\">Name                Image(s)            Host                Labels\r\n----------          ----------          ----------          ----------\r\n<\/span><\/code><\/pre>\n<h2>Kubernetes\u6e90\u7801\u4e2d\u5305\u542b\u7684guestbook\u793a\u4f8b\u5728\u4e2d\u9014\u51fa\u73b0\u4e86\u95ee\u9898\u3002<\/h2>\n<p>\u6211\u53c2\u8003\u4e86GuestBook example\u7684README\u5e76\u5c1d\u8bd5\u4e86\u4e00\u4e0b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"go\">git clone https:\/\/github.com\/GoogleCloudPlatform\/kubernetes\r\ncd kubernetes\r\n<\/span><\/code><\/pre>\n<h3>\u63d0\u524d\u51c6\u5907<\/h3>\n<p>\u5728GuestBook\u793a\u4f8b\u7684&#8221;\u7b2c\u96f6\u6b65\uff1a\u524d\u63d0\u6761\u4ef6&#8221;\u4e2d\uff0c&#8221;hack\/dev-build-and-up.sh&#8221;\u4f3c\u4e4e\u662f\u5728Google Cloud Engine\u4e0a\u5c1d\u8bd5\u65f6\u6240\u9700\u7684\u811a\u672c\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u5728\u8fd9\u91cc\u6267\u884c\u5b83\u3002<\/p>\n<p>\u6211\u8bd5\u7740\u8fd0\u884c\u4e86 hack\/build-go.sh\uff0c\u4f46\u51fa\u73b0\u4e86\u4e00\u4e2a\u9519\u8bef\uff0c\u63d0\u793a\u6211\u5c1a\u672a\u5b89\u88c5Go\u8bed\u8a00\u3002<\/p>\n<p>\u6211\u540e\u6765\u53d1\u73b0\uff0c\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u8fdb\u884c\u7684\u65f6\u5019\uff0c\u6211\u53d1\u73b0\u5728hack\/build-go.sh\u4e2d\u6784\u5efa\u7684\u547d\u4ee4\u6587\u4ef6\u540d\u4e0e\u6211\u4e4b\u524d\u63d0\u5230\u7684\u201c\u5b89\u88c5Kubernetes\u4e8c\u8fdb\u5236\u6587\u4ef6\u201d\u4e00\u8282\u4e2d\u63d0\u5230\u7684http:\/\/storage.googleapis.com\/kubernetes\/binaries.tar.gz\u4e2d\u4e0b\u8f7d\u7684\u6587\u4ef6\u540d\u662f\u76f8\u540c\u7684\u3002\u867d\u7136\u547d\u4ee4\u6587\u4ef6\u7684\u5927\u5c0f\u4e0d\u540c\uff0c\u4f46\u662f\u4f3c\u4e4e\u4e0d\u9700\u8981\u6267\u884c\u4ee5\u4e0b\u7684\u201c\u5b89\u88c5go\u201d\u548chack\/build-go.sh\u7684\u6b65\u9aa4\u3002<\/p>\n<h4>\u8fdb\u884cgo\u7684\u5b89\u88c5<\/h4>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 ~ $<\/span> <span class=\"nb\">uname<\/span> <span class=\"nt\">-m<\/span>\r\n<span class=\"go\">x86_64\r\n<\/span><\/code><\/pre>\n<p>\u5f53\u786e\u8ba4\u662fx86_64\u67b6\u6784\u540e\uff0c\u60a8\u53ef\u4ee5\u4ece &#8220;Downloads &#8211; The Go Programming Language&#8221; \u4e0b\u8f7d go1.3.linux-amd64.tar.gz \u6587\u4ef6\u5e76\u8fdb\u884c\u5b89\u88c5\u3002<\/p>\n<p>\u5e0c\u671b\u5c07GOPATH\u8a2d\u7f6e\u70ba~\/go\uff0c\u56e0\u6b64\u6211\u539f\u672c\u6253\u7b97\u5c07\u5b89\u88dd\u76ee\u9304\u8a2d\u7f6e\u70ba\/usr\/local\/go\uff0c\u4f46\u5617\u8a66\u4e86sudo mkdir \/usr\/local\/go\u7b49\u547d\u4ee4\u5f8c\uff0c\u537b\u51fa\u73fe\u4e86Read-only file system\u932f\u8aa4\uff0c\u56e0\u6b64\u6211\u6539\u70ba\u5728\/opt\/go\u5b89\u88dd\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"go\">cd\r\nwget http:\/\/golang.org\/dl\/go1.3.linux-amd64.tar.gz\r\nsudo tar xf go1.3.linux-amd64.tar.gz -C \/opt\r\n<\/span><\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u9700\u8981\u521b\u5efaGOPATH\u76ee\u5f55\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"go\">mkdir ~\/go\r\n<\/span><\/code><\/pre>\n<p>\/.bash_profile \u662f\u4e00\u4e2a\u7b26\u53f7\u94fe\u63a5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 ~ $<\/span> <span class=\"nb\">ls<\/span> <span class=\"nt\">-l<\/span> ~\/.bash_profile\r\n<span class=\"gp\">lrwxrwxrwx 1 core core 34 Jul 16 02:52 \/home\/core\/.bash_profile -&gt;<\/span> ..\/..\/usr\/share\/skel\/.bash_profile\r\n<\/code><\/pre>\n<p>\u522a\u9664\u4e26\u8907\u88fd<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 ~ $<\/span> <span class=\"nb\">rm<\/span> .bash_profile\r\n<span class=\"gp\">core@core-01 ~ $<\/span> <span class=\"nb\">cp<\/span> \/usr\/share\/skel\/.bash_profile .bash_profile\r\n<\/code><\/pre>\n<p>\u6211\u5df2\u7ecf\u6dfb\u52a0\u4e86\u4ee5\u4e0b\u8bbe\u7f6e\uff08\u4f46\u4e0d\u786e\u5b9a\u662f\u5426\u7b26\u5408CoreOS\u7684\u89c4\u8303\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">cat &lt;&lt;'EOF' &gt;<\/span><span class=\"o\">&gt;<\/span> ~\/.bash_profile\r\n<span class=\"go\">\r\nexport GOROOT=\/opt\/go\r\nexport GOPATH=~\/go\r\n<\/span><span class=\"gp\">export PATH=$<\/span>GOROOT\/bin:<span class=\"nv\">$GOPATH<\/span>\/bin:<span class=\"nv\">$PATH<\/span>\r\n<span class=\"go\">EOF\r\n<\/span><\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"gp\">exec $<\/span>SHELL <span class=\"nt\">-l<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 ~ $<\/span> which go\r\n<span class=\"go\">\/opt\/go\/bin\/go\r\n<\/span><span class=\"gp\">core@core-01 ~ $<\/span> go version\r\n<span class=\"go\">go version go1.3 linux\/amd64\r\n<\/span><\/code><\/pre>\n<h4>\u6267\u884c hack\/build-go.sh<\/h4>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 ~ $<\/span> <span class=\"nb\">cd<\/span> \/opt\/kubernetes\/kubernetes\r\n<span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> hack\/build-go.sh\r\n<span class=\"go\">+++ Building proxy\r\n+++ Building integration\r\n+++ Building apiserver\r\n+++ Building controller-manager\r\n+++ Building kubelet\r\n+++ Building kubecfg\r\n<\/span><\/code><\/pre>\n<p>\u6e90\u4ee3\u7801\u4f4d\u4e8ecmd\u76ee\u5f55\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> find cmd <span class=\"nt\">-type<\/span> f <span class=\"nt\">-ls<\/span>\r\n<span class=\"go\">  8974    4 -rw-r--r--   1 core     core         3114 Jul 21 03:29 cmd\/apiserver\/apiserver.go\r\n  8976    4 -rw-r--r--   1 core     core         1905 Jul 21 03:29 cmd\/controller-manager\/controller-manager.go\r\n  8978   12 -rw-r--r--   1 core     core         9421 Jul 21 03:29 cmd\/integration\/integration.go\r\n  8980    8 -rw-r--r--   1 core     core         7687 Jul 21 03:29 cmd\/kubecfg\/kubecfg.go\r\n  8982    4 -rw-r--r--   1 core     core         3836 Jul 21 03:29 cmd\/kubelet\/kubelet.go\r\n  8984    4 -rw-r--r--   1 core     core         2187 Jul 21 03:29 cmd\/proxy\/proxy.go\r\n<\/span><\/code><\/pre>\n<p>\u5df2\u7ecf\u5728output\/go\u76ee\u5f55\u4e2d\u521b\u5efa\u4e86\u7f16\u8bd1\u597d\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">ls<\/span> <span class=\"nt\">-l<\/span> output\/go\r\n<span class=\"go\">total 50852\r\n-rwxr-xr-x 1 core core 10412840 Jul 21 14:23 apiserver\r\n-rwxr-xr-x 1 core core  7893672 Jul 21 14:23 controller-manager\r\n-rwxr-xr-x 1 core core  9233288 Jul 21 14:23 integration\r\n-rwxr-xr-x 1 core core  8522640 Jul 21 14:23 kubecfg\r\n-rwxr-xr-x 1 core core  8523160 Jul 21 14:23 kubelet\r\n-rwxr-xr-x 1 core core  7471752 Jul 21 14:23 proxy\r\ndrwxr-xr-x 1 core core       20 Jul 21 14:23 src\r\n<\/span><\/code><\/pre>\n<p>\u6211\u5b89\u88c5\u5728\/opt\/bin\u76ee\u5f55\u4e0b\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u6709\u4ee5\u4e0b\u4e94\u4e2a\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">apiserver<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">controll-manager<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">kubecfg<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">kubelet<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">proxy<\/ul>\n<p>\u8f93\u51fa\/\u5728\u8fd9\u4e2a\u9879\u76ee\u4e2d\uff0c\u9664\u4e86\u4e0a\u8ff0\u7684integration\u4e8c\u8fdb\u5236\u6587\u4ef6\u4e4b\u5916\uff0c\u8fd8\u6709\u4e00\u4e2a\u540d\u4e3ago\u7684\u8f93\u51fa\u3002\u5982\u679c\u6211\u4eec\u641c\u7d22\u6e90\u7801\uff0c\u53ef\u80fd\u4f1a\u627e\u5230\u76f8\u5173\u4fe1\u606f\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">${<\/span><span class=\"nv\">KUBE_TARGET<\/span><span class=\"k\">}<\/span>\/linux\/amd64\/integration\r\n<\/code><\/pre>\n<p>\u4f3c\u4e4e\u662f\u88ab\u8c03\u7528\u5e76\u7528\u4e8e\u96c6\u6210\u6d4b\u8bd5\u7684\u547d\u4ee4\u3002<\/p>\n<p>\u6211\u5df2\u7ecf\u505c\u6b62\u4e86\u670d\u52a1\uff0c\u5e76\u5c06\u9664\u4e86integration\u4e4b\u5916\u7684\u6240\u6709\u6587\u4ef6\u590d\u5236\u5230\/opt\/bin\/\u76ee\u5f55\u4e0b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">sudo <\/span>systemctl stop apiserver\r\n<span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">sudo <\/span>systemctl stop controller-manager\r\n<span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">sudo <\/span>systemctl stop kubelet\r\n<span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">sudo <\/span>systemctl stop proxy\r\n<span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">sudo cp <\/span>output\/go\/<span class=\"o\">{<\/span>apiserver,controller-manager,kubecfg,kubelet,proxy<span class=\"o\">}<\/span> \/opt\/bin\r\n<\/code><\/pre>\n<p>\u968f\u540e\uff0c\u6211\u4eec\u542f\u52a8\u4e86\u670d\u52a1\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">sudo <\/span>systemctl start apiserver\r\n<span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">sudo <\/span>systemctl start controller-manager\r\n<span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">sudo <\/span>systemctl start kubelet\r\n<span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">sudo <\/span>systemctl start proxy\r\n<\/code><\/pre>\n<p>\u56e0\u6b64\uff0c\u6211\u5c1d\u8bd5\u7ee7\u7eed\u6267\u884c\uff0c\u4f46\u6700\u7ec8\u53d1\u73b0redis-slave\u7684\u542f\u52a8\u4ecd\u672a\u5b8c\u6210\uff0c\u60c5\u51b5\u6ca1\u6709\u6539\u53d8\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> kubecfg <span class=\"nt\">-c<\/span> examples\/guestbook\/redis-slave-controller.json create \/replicationControllers\r\n<span class=\"go\">I0721 14:55:39.058324 01343 request.go:220] Waiting for completion of \/operations\/9\r\nI0721 14:55:59.062134 01343 request.go:220] Waiting for completion of \/operations\/9\r\n^C\r\n<\/span><\/code><\/pre>\n<h3>\u542f\u52a8 Redis \u4e3b\u670d\u52a1\u5668<\/h3>\n<p>\u68c0\u67e5\u5b58\u50a8\u5e93\u4e2d\u5305\u542b\u7684\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">cat <\/span>examples\/guestbook\/redis-master.json\r\n<span class=\"go\">{\r\n  \"id\": \"redis-master-2\",\r\n  \"desiredState\": {\r\n    \"manifest\": {\r\n      \"version\": \"v1beta1\",\r\n      \"id\": \"redis-master-2\",\r\n      \"containers\": [{\r\n        \"name\": \"master\",\r\n        \"image\": \"dockerfile\/redis\",\r\n        \"ports\": [{\r\n          \"containerPort\": 6379,\r\n          \"hostPort\": 6379\r\n        }]\r\n      }]\r\n    }\r\n  },\r\n  \"labels\": {\r\n    \"name\": \"redis-master\"\r\n  }\r\n}\r\n<\/span><\/code><\/pre>\n<p>\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u542f\u52a8\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> kubecfg <span class=\"nt\">-c<\/span> examples\/guestbook\/redis-master.json create \/pods\r\n<span class=\"go\">I0721 03:47:11.215798 03349 request.go:220] Waiting for completion of \/operations\/8\r\nI0721 03:47:31.218575 03349 request.go:220] Waiting for completion of \/operations\/8\r\nName                Image(s)            Host                Labels\r\n----------          ----------          ----------          ----------\r\nredis-master-2      dockerfile\/redis    \/                   name=redis-master\r\n<\/span><\/code><\/pre>\n<p>\u6211\u4f1a\u68c0\u67e5\u4e00\u4e0bpod\u7684\u5217\u8868\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> kubecfg list \/pods\r\n<span class=\"go\">Name                Image(s)            Host                Labels\r\n----------          ----------          ----------          ----------\r\nredis-master-2      dockerfile\/redis    127.0.0.1\/          name=redis-master\r\n<\/span><\/code><\/pre>\n<p>\u6211\u5c1d\u8bd5\u4f7f\u7528 docker ps \u547d\u4ee4\u67e5\u770b\u4e86 Docker \u7684\u72b6\u6001\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> docker ps\r\n<span class=\"go\">CONTAINER ID        IMAGE                       COMMAND                CREATED              STATUS              PORTS                    NAMES\r\ne45fe7b25100        dockerfile\/redis:latest     redis-server \/etc\/re   About a minute ago   Up About a minute                            k8s--master--redis_-_master_-_2--4befd1d1\r\n<\/span><span class=\"gp\">787bb5ddf655        busybox:buildroot-2014.02   sh -c 'rm -f nap &amp;&amp;    About a minute ago   Up About a minute   0.0.0.0:6379-&gt;<\/span>6379\/tcp   k8s--net--redis_-_master_-_2--f8803f12\r\n<\/code><\/pre>\n<p>\u5728 GuestBook \u7684\u793a\u4f8b README \u6587\u4ef6\u4e2d\uff0c\u53ea\u663e\u793a\u4e86\u4e00\u884c\u5173\u4e8e redis-server \u7684\u914d\u7f6e &#8220;\/etc\/re&#8221;\uff0c\u4f46\u662f\u5728\u8fd9\u91cc\u663e\u793a\u4e86\u4e24\u884c\u3002<\/p>\n<p>\u5728GuestBook\u7684\u793a\u4f8b\u7684README\u4e2d\uff0c\u5b83\u662f\u5728Google Computing Engine\u4e0a\u8fd0\u884c\u7684\uff0c\u4f46\u662f\u5728\u8fd9\u91cc\uff0c\u5b83\u662f\u5728CoreOS\u4e0a\u8fd0\u884c\uff0c\u6240\u4ee5\u4f3c\u4e4e\u6709\u4e00\u4e9b\u5dee\u5f02\u3002<\/p>\n<h3>\u542f\u52a8\u4e3b\u670d\u52a1<\/h3>\n<p>\u6839\u636eGuestBook\u793a\u4f8b\u7684README\u6587\u4ef6\u6240\u8ff0<\/p>\n<blockquote><p>Kubernetes\u4e2d\u7684\u201cservice\u201d\u662f\u4e00\u4e2a\u547d\u540d\u7684\u8d1f\u8f7d\u5747\u8861\u5668\uff0c\u7528\u4e8e\u4ee3\u7406\u6d41\u91cf\u5230\u4e00\u4e2a\u6216\u591a\u4e2a\u5bb9\u5668\u3002Kubernetes\u96c6\u7fa4\u4e2d\u7684\u670d\u52a1\u53ef\u4ee5\u901a\u8fc7\u73af\u5883\u53d8\u91cf\u5728\u5176\u4ed6\u5bb9\u5668\u4e2d\u8fdb\u884c\u53d1\u73b0\u3002\u670d\u52a1\u6839\u636epod\u6807\u7b7e\u6765\u627e\u5230\u9700\u8981\u8fdb\u884c\u8d1f\u8f7d\u5747\u8861\u7684\u5bb9\u5668\u3002<\/p><\/blockquote>\n<p>\u542c\u8bf4\u5982\u6b64\u3002<\/p>\n<p>\u68c0\u67e5\u5b58\u50a8\u5e93\u4e2d\u5305\u542b\u7684\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">cat <\/span>examples\/guestbook\/redis-master-service.json\r\n<span class=\"go\">{\r\n  \"id\": \"redismaster\",\r\n  \"port\": 10000,\r\n  \"selector\": {\r\n    \"name\": \"redis-master\"\r\n  }\r\n}\r\n<\/span><\/code><\/pre>\n<p>\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u6307\u4ee4\u542f\u52a8\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> kubecfg <span class=\"nt\">-c<\/span> examples\/guestbook\/redis-master-service.json create \/services\r\n<span class=\"go\">I0721 03:56:40.888615 03412 request.go:220] Waiting for completion of \/operations\/9\r\nName                Labels              Selector            Port\r\n----------          ----------          ----------          ----------\r\nredismaster                             name=redis-master   10000\r\n<\/span><\/code><\/pre>\n<p>\u663e\u793a\u670d\u52a1\u5217\u8868\u65f6\u5185\u5bb9\u76f8\u540c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> kubecfg list \/services\r\n<span class=\"go\">Name                Labels              Selector            Port\r\n----------          ----------          ----------          ----------\r\nredismaster                             name=redis-master   10000\r\n<\/span><\/code><\/pre>\n<h3>\u542f\u52a8Slave\u7684pod\u3002<\/h3>\n<p>\u67e5\u770b\u5b58\u50a8\u5e93\u4e2d\u5305\u542b\u7684\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">cat <\/span>examples\/guestbook\/redis-slave-controller.json\r\n<span class=\"go\">  {\r\n    \"id\": \"redisSlaveController\",\r\n    \"desiredState\": {\r\n      \"replicas\": 2,\r\n      \"replicaSelector\": {\"name\": \"redisslave\"},\r\n      \"podTemplate\": {\r\n        \"desiredState\": {\r\n           \"manifest\": {\r\n             \"version\": \"v1beta1\",\r\n             \"id\": \"redisSlaveController\",\r\n             \"containers\": [{\r\n               \"image\": \"brendanburns\/redis-slave\",\r\n               \"ports\": [{\"containerPort\": 6379, \"hostPort\": 6380}]\r\n             }]\r\n           }\r\n         },\r\n         \"labels\": {\"name\": \"redisslave\"}\r\n        }},\r\n    \"labels\": {\"name\": \"redisslave\"}\r\n  }\r\n<\/span><\/code><\/pre>\n<p>\u6211\u8bd5\u7740\u542f\u52a8\u4e86\u4e00\u4e0b\uff0c\u4f46\u662f\u56e0\u4e3a\u4e00\u76f4\u91cd\u590d\u663e\u793a\u201c\u7b49\u5f85\u5b8c\u6210\u201d\uff0c\u800c\u4e14\u6ca1\u6709\u505c\u6b62\uff0c\u6240\u4ee5\u6211\u7528Ctrl+C\u505c\u6b62\u4e86\u5b83\u3002<\/p>\n<pre class=\"post-pre\"><code>core@core-01 \/opt\/kubernetes\/kubernetes $ kubecfg -c examples\/guestbook\/redis-slave-controller.json create \/replicationControllers\r\nI0721 04:24:00.818199 03499 request.go:220] Waiting for completion of \/operations\/67\r\nI0721 04:24:20.823015 03499 request.go:220] Waiting for completion of \/operations\/67\r\nI0721 04:24:40.826668 03499 request.go:220] Waiting for completion of \/operations\/67\r\n\u2026(\u7565)\u2026\r\n^C\r\n<\/code><\/pre>\n<p>\u7531\u4e8e redis-slave \u7684 Dockerfile \u4e5f\u5305\u542b\u5728\u5b58\u50a8\u5e93\u4e2d\uff0c\u6211\u5c1d\u8bd5\u67e5\u770b\u4e86\u5176\u5185\u5bb9\uff0c\u5e76\u53d1\u73b0\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">cat <\/span>examples\/guestbook\/redis-slave\/Dockerfile\r\n<span class=\"go\">FROM dockerfile\/redis\r\n\r\nADD run.sh \/run.sh\r\n\r\nRUN chmod a+x \/run.sh\r\n\r\nCMD \/run.sh\r\n<\/span><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">cat <\/span>examples\/guestbook\/redis-slave\/run.sh\r\n<span class=\"gp\">#<\/span><span class=\"o\">!<\/span>\/bin\/bash\r\n\r\n<span class=\"gp\">redis-server --slaveof $<\/span>SERVICE_HOST <span class=\"nv\">$REDISMASTER_SERVICE_PORT<\/span>\r\n<\/code><\/pre>\n<p>\u53ea\u662f\u542f\u52a8redis-server\u800c\u5df2\uff0c\u4e0d\u53ef\u80fd\u82b1\u8fd9\u4e48\u957f\u65f6\u95f4\uff0c\u4f3c\u4e4e\u6709\u4ec0\u4e48\u95ee\u9898\u3002<\/p>\n<p>\u5f53\u5c1d\u8bd5\u663e\u793a\/replicationControllers\u6e05\u5355\u65f6\uff0c\u4f3c\u4e4e\u5df2\u6210\u529f\u521b\u5efa\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes\/examples\/guestbook $<\/span> kubecfg list \/replicationControllers\r\n<span class=\"go\">Name                   Image(s)                   Selector            Replicas\r\n----------             ----------                 ----------          ----------\r\nredisSlaveController   brendanburns\/redis-slave   name=redisslave     2\r\n<\/span><\/code><\/pre>\n<p>\u6211\u5c1d\u8bd5\u663e\u793a\/pods\u7684\u5217\u8868\u3002\u6b65\u9aa4\u4e09\uff1a\u542f\u52a8\u590d\u5236\u7684\u4ecepod\u3002\u4f46\u662f\uff0c\u5728\u6211\u7684\u73af\u5883\u4e2d\u53ea\u663e\u793a\u4e86\u4e00\u4e2abrendanburns\/redis-slave\u7684pod\uff0c\u800c\u4e0d\u662f\u4e24\u4e2a\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> kubecfg list \/pods\r\n<span class=\"go\">Name                                   Image(s)                   Host                Labels\r\n----------                             ----------                 ----------          ----------\r\nredis-master-2                         dockerfile\/redis           127.0.0.1\/          name=redis-master\r\n169d845e-108c-11e4-b2af-0800273da0c1   brendanburns\/redis-slave   127.0.0.1\/          name=redisslave,replicationController=redisSlaveController\r\n<\/span><\/code><\/pre>\n<p>\u56e0\u4e3a\u4e0d\u592a\u6e05\u695a\u6b63\u5728\u53d1\u751f\u4ec0\u4e48\u4ee5\u53ca\u539f\u56e0\uff0c\u6240\u4ee5\u6211\u5148\u5c1d\u8bd5\u7740\u5f80\u524d\u8d70\u4e86\u4e00\u6b65\u3002<\/p>\n<h3>\u542f\u52a8Redis\u4ece\u670d\u52a1\u3002<\/h3>\n<p>\u6211\u4eec\u5c06\u68c0\u67e5\u5b58\u50a8\u5e93\u4e2d\u5305\u542b\u7684\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">cat <\/span>examples\/guestbook\/redis-slave-service.json\r\n<span class=\"go\">{\r\n  \"id\": \"redisslave\",\r\n  \"port\": 10001,\r\n  \"labels\": {\r\n    \"name\": \"redisslave\"\r\n  },\r\n  \"selector\": {\r\n    \"name\": \"redisslave\"\r\n  }\r\n}\r\n<\/span><\/code><\/pre>\n<p>\u542f\u52a8\u670d\u52a1\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> kubecfg <span class=\"nt\">-c<\/span> examples\/guestbook\/redis-slave-service.json create \/services\r\n<span class=\"go\">I0721 04:44:42.565445 03593 request.go:220] Waiting for completion of \/operations\/128\r\nName                Labels              Selector            Port\r\n----------          ----------          ----------          ----------\r\nredisslave          name=redisslave     name=redisslave     10001\r\n<\/span><\/code><\/pre>\n<p>\u8fd9\u4e2a\u4e8b\u60c5\u5df2\u7ecf\u987a\u5229\u7ed3\u675f\u4e86\u3002<\/p>\n<p>\u6211\u6765\u770b\u4e00\u4e0b\/services\u548c\/pods\u7684\u5217\u8868\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> kubecfg list \/services\r\n<span class=\"go\">Name                Labels              Selector            Port\r\n----------          ----------          ----------          ----------\r\nredismaster                             name=redis-master   10000\r\nredisslave          name=redisslave     name=redisslave     10001\r\n\r\n<\/span><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> kubecfg list \/pods\r\n<span class=\"go\">Name                                   Image(s)                   Host                Labels\r\n----------                             ----------                 ----------          ----------\r\nredis-master-2                         dockerfile\/redis           127.0.0.1\/          name=redis-master\r\n169d845e-108c-11e4-b2af-0800273da0c1   brendanburns\/redis-slave   127.0.0.1\/          name=redisslave,replicationController=redisSlaveController\r\n<\/span><\/code><\/pre>\n<h3>\u521b\u5efa\u524d\u7aef\u7684 pod<\/h3>\n<p>\u6211\u4eec\u5c06\u53c2\u8003GoogleCloudPlatform\/kubernetes\u7684\u793a\u4f8b\u4e2d\u7684guestbook\/README.md\u8fdb\u884c\u64cd\u4f5c\u3002<\/p>\n<p>\u67e5\u770b\u5b58\u50a8\u5e93\u4e2d\u7684\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">cat <\/span>examples\/guestbook\/frontend-controller.json\r\n<span class=\"go\">  {\r\n    \"id\": \"frontendController\",\r\n    \"desiredState\": {\r\n      \"replicas\": 3,\r\n      \"replicaSelector\": {\"name\": \"frontend\"},\r\n      \"podTemplate\": {\r\n        \"desiredState\": {\r\n           \"manifest\": {\r\n             \"version\": \"v1beta1\",\r\n             \"id\": \"frontendController\",\r\n             \"containers\": [{\r\n               \"image\": \"brendanburns\/php-redis\",\r\n               \"ports\": [{\"containerPort\": 80, \"hostPort\": 8000}]\r\n             }]\r\n           }\r\n         },\r\n         \"labels\": {\"name\": \"frontend\"}\r\n        }},\r\n    \"labels\": {\"name\": \"frontend\"}\r\n  }\r\n<\/span><\/code><\/pre>\n<p>\u7531\u4e8eexamples\/guestbook\/php-redis\/\u4e2d\u4f3c\u4e4e\u6709\u4e00\u4e2aDockerfile\uff0c\u6211\u4e5f\u4f1a\u68c0\u67e5\u5b83\u4ee5\u786e\u8ba4\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">cat <\/span>examples\/guestbook\/php-redis\/Dockerfile\r\n<span class=\"go\">FROM brendanburns\/php\r\n\r\nADD index.php \/var\/www\/index.php\r\nADD controllers.js \/var\/www\/controllers.js\r\nADD index.html \/var\/www\/index.html\r\n\r\nCMD \/run.sh\r\n<\/span><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">cat <\/span>examples\/guestbook\/php-redis\/index.php\r\n<span class=\"go\">&lt;?\r\n\r\n<\/span><span class=\"gp\">set_include_path('.:\/usr\/share\/php:\/usr\/share\/pear:\/vendor\/predis');<\/span>\r\n\r\n<span class=\"gp\">error_reporting(E_ALL);<\/span>\r\n<span class=\"gp\">ini_set('display_errors', 1);<\/span>\r\n\r\n<span class=\"gp\">require 'predis\/autoload.php';<\/span>\r\n\r\n<span class=\"gp\">if (isset($<\/span>_GET[<span class=\"s1\">'cmd'<\/span><span class=\"o\">])<\/span> <span class=\"o\">===<\/span> <span class=\"nb\">true<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n<span class=\"gp\">  header('Content-Type: application\/json');<\/span>\r\n<span class=\"gp\">  if ($<\/span>_GET[<span class=\"s1\">'cmd'<\/span><span class=\"o\">]<\/span> <span class=\"o\">==<\/span> <span class=\"s1\">'set'<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n<span class=\"gp\">    $<\/span>client <span class=\"o\">=<\/span> new Predis<span class=\"se\">\\C<\/span>lient<span class=\"o\">([<\/span>\r\n<span class=\"gp\">      'scheme' =&gt;<\/span> <span class=\"s1\">'tcp'<\/span>,\r\n<span class=\"gp\">      'host'   =&gt;<\/span> getenv<span class=\"o\">(<\/span><span class=\"s1\">'SERVICE_HOST'<\/span><span class=\"o\">)<\/span>,\r\n<span class=\"gp\">      'port'   =&gt;<\/span> getenv<span class=\"o\">(<\/span><span class=\"s1\">'REDISMASTER_SERVICE_PORT'<\/span><span class=\"o\">)<\/span>,\r\n<span class=\"gp\">    ]);<\/span>\r\n<span class=\"gp\">    $<\/span>client-&gt;set<span class=\"o\">(<\/span><span class=\"nv\">$_GET<\/span><span class=\"o\">[<\/span><span class=\"s1\">'key'<\/span><span class=\"o\">]<\/span>, <span class=\"nv\">$_GET<\/span><span class=\"o\">[<\/span><span class=\"s1\">'value'<\/span><span class=\"o\">])<\/span><span class=\"p\">;<\/span>\r\n<span class=\"gp\">    print('{\"message\": \"Updated\"}');<\/span>\r\n<span class=\"go\">  } else {\r\n<\/span><span class=\"gp\">    $<\/span>read_port <span class=\"o\">=<\/span> getenv<span class=\"o\">(<\/span><span class=\"s1\">'REDISMASTER_SERVICE_PORT'<\/span><span class=\"o\">)<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"gp\">    if (isset($<\/span>_ENV[<span class=\"s1\">'REDISSLAVE_SERVICE_PORT'<\/span><span class=\"o\">]))<\/span> <span class=\"o\">{<\/span>\r\n<span class=\"gp\">      $<\/span>read_port <span class=\"o\">=<\/span> getenv<span class=\"o\">(<\/span><span class=\"s1\">'REDISSLAVE_SERVICE_PORT'<\/span><span class=\"o\">)<\/span><span class=\"p\">;<\/span>\r\n<span class=\"go\">    }\r\n<\/span><span class=\"gp\">    $<\/span>client <span class=\"o\">=<\/span> new Predis<span class=\"se\">\\C<\/span>lient<span class=\"o\">([<\/span>\r\n<span class=\"gp\">      'scheme' =&gt;<\/span> <span class=\"s1\">'tcp'<\/span>,\r\n<span class=\"gp\">      'host'   =&gt;<\/span> getenv<span class=\"o\">(<\/span><span class=\"s1\">'SERVICE_HOST'<\/span><span class=\"o\">)<\/span>,\r\n<span class=\"gp\">      'port'   =&gt;<\/span> <span class=\"nv\">$read_port<\/span>,\r\n<span class=\"gp\">    ]);<\/span>\r\n\r\n<span class=\"gp\">    $<\/span>value <span class=\"o\">=<\/span> <span class=\"nv\">$client<\/span>-&gt;get<span class=\"o\">(<\/span><span class=\"nv\">$_GET<\/span><span class=\"o\">[<\/span><span class=\"s1\">'key'<\/span><span class=\"o\">])<\/span><span class=\"p\">;<\/span>\r\n<span class=\"gp\">    print('{\"data\": \"' . $<\/span>value <span class=\"nb\">.<\/span> <span class=\"s1\">'\"}'<\/span><span class=\"o\">)<\/span><span class=\"p\">;<\/span>\r\n<span class=\"go\">  }\r\n} else {\r\n<\/span><span class=\"gp\">  phpinfo();<\/span>\r\n<span class=\"gp\">} ?&gt;<\/span>\r\n<span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">cat <\/span>examples\/guestbook\/php-redis\/index.html\r\n<span class=\"gp\">&lt;html ng-app=\"redis\"&gt;<\/span>\r\n<span class=\"gp\">  &lt;head&gt;<\/span>\r\n<span class=\"gp\">    &lt;title&gt;<\/span>Guestbook&lt;\/title&gt;\r\n<span class=\"gp\">    &lt;link rel=\"stylesheet\" href=\"\/\/netdna.bootstrapcdn.com\/bootstrap\/3.1.1\/css\/bootstrap.min.css\"&gt;<\/span>\r\n<span class=\"gp\">    &lt;script src=\"https:\/\/ajax.googleapis.com\/ajax\/libs\/angularjs\/1.2.12\/angular.min.js\"&gt;<\/span>&lt;\/script&gt;\r\n<span class=\"gp\">    &lt;script src=\"\/controllers.js\"&gt;<\/span>&lt;\/script&gt;\r\n<span class=\"gp\">    &lt;script src=\"ui-bootstrap-tpls-0.10.0.min.js\"&gt;<\/span>&lt;\/script&gt;\r\n<span class=\"gp\">  &lt;\/head&gt;<\/span>\r\n<span class=\"gp\">  &lt;body ng-controller=\"RedisCtrl\"&gt;<\/span>\r\n<span class=\"gp\">    &lt;div style=\"width: 50%;<\/span> margin-left: 20px<span class=\"s2\">\"&gt;\r\n<\/span><span class=\"gp\">      &lt;h2&gt;<\/span><span class=\"s2\">Guestbook&lt;\/h2&gt;\r\n<\/span><span class=\"gp\">    &lt;form&gt;<\/span>\r\n<span class=\"gp\">    &lt;fieldset&gt;<\/span>\r\n<span class=\"gp\">    &lt;input ng-model=\"msg\" placeholder=\"Messages\" class=\"form-control\" type=\"text\" name=\"input\"&gt;<\/span><span class=\"s2\">&lt;br&gt;\r\n<\/span><span class=\"gp\">    &lt;button type=\"button\" class=\"btn btn-primary\" ng-click=\"controller.onRedis()\"&gt;<\/span><span class=\"s2\">Submit&lt;\/button&gt;\r\n<\/span><span class=\"gp\">    &lt;\/fieldset&gt;<\/span>\r\n<span class=\"gp\">    &lt;\/form&gt;<\/span>\r\n<span class=\"gp\">    &lt;div&gt;<\/span>\r\n<span class=\"gp\">      &lt;div ng-repeat=\"msg in messages\"&gt;<\/span>\r\n<span class=\"go\">        {{msg}}\r\n<\/span><span class=\"gp\">      &lt;\/div&gt;<\/span>\r\n<span class=\"gp\">    &lt;\/div&gt;<\/span>\r\n<span class=\"gp\">    &lt;\/div&gt;<\/span>\r\n<span class=\"gp\">  &lt;\/body&gt;<\/span>\r\n<span class=\"gp\">&lt;\/html&gt;<\/span>\r\n<span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> <span class=\"nb\">cat <\/span>examples\/guestbook\/php-redis\/controllers.js\r\n<span class=\"gp\">var redisApp = angular.module('redis', ['ui.bootstrap']);<\/span>\r\n<span class=\"go\">\r\n\/**\r\n * Constructor\r\n *\/\r\nfunction RedisController() {}\r\n\r\nRedisController.prototype.onRedis = function() {\r\n<\/span><span class=\"gp\">    this.scope_.messages.push(this.scope_.msg);<\/span>\r\n<span class=\"gp\">    this.scope_.msg = \"\";<\/span>\r\n<span class=\"gp\">    var value = this.scope_.messages.join();<\/span>\r\n<span class=\"go\">    this.http_.get(\"\/index.php?cmd=set&amp;key=messages&amp;value=\" + value)\r\n            .success(angular.bind(this, function(data) {\r\n<\/span><span class=\"gp\">                this.scope_.redisResponse = \"Updated.\";<\/span>\r\n<span class=\"gp\">            }));<\/span>\r\n<span class=\"gp\">};<\/span>\r\n\r\n<span class=\"gp\">redisApp.controller('RedisCtrl', function ($<\/span>scope, <span class=\"nv\">$http<\/span>, <span class=\"nv\">$location<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n<span class=\"gp\">        $<\/span>scope.controller <span class=\"o\">=<\/span> new RedisController<span class=\"o\">()<\/span><span class=\"p\">;<\/span>\r\n<span class=\"gp\">        $<\/span>scope.controller.scope_ <span class=\"o\">=<\/span> <span class=\"nv\">$scope<\/span><span class=\"p\">;<\/span>\r\n<span class=\"gp\">        $<\/span>scope.controller.location_ <span class=\"o\">=<\/span> <span class=\"nv\">$location<\/span><span class=\"p\">;<\/span>\r\n<span class=\"gp\">        $<\/span>scope.controller.http_ <span class=\"o\">=<\/span> <span class=\"nv\">$http<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"gp\">        $<\/span>scope.controller.http_.get<span class=\"o\">(<\/span><span class=\"s2\">\"\/index.php?cmd=get&amp;key=messages\"<\/span><span class=\"o\">)<\/span>\r\n<span class=\"go\">            .success(function(data) {\r\n<\/span><span class=\"gp\">                console.log(data);<\/span>\r\n<span class=\"gp\">                $<\/span>scope.messages <span class=\"o\">=<\/span> data.data.split<span class=\"o\">(<\/span><span class=\"s2\">\",\"<\/span><span class=\"o\">)<\/span><span class=\"p\">;<\/span>\r\n<span class=\"gp\">            });<\/span>\r\n<span class=\"gp\">});<\/span>\r\n<\/code><\/pre>\n<p>\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u542f\u52a8\u670d\u52a1\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> kubecfg <span class=\"nt\">-c<\/span> examples\/guestbook\/frontend-controller.json create \/replicationControllers\r\n<span class=\"go\">I0721 04:47:55.237466 03614 request.go:220] Waiting for completion of \/operations\/138\r\nI0721 04:48:15.242877 03614 request.go:220] Waiting for completion of \/operations\/138\r\nI0721 04:48:35.246837 03614 request.go:220] Waiting for completion of \/operations\/138\r\n\u2026(\u7565)\u2026\r\n^C\r\n<\/span><\/code><\/pre>\n<p>\u56e0\u4e3a\u4ed6\u4e00\u76f4\u6ca1\u6709\u56de\u6765\uff0c\u6240\u4ee5\u6211\u6309\u4e0b\u4e86Ctrl-C\u6765\u505c\u6b62\u5e76\u68c0\u67e5\u4e86\u72b6\u6001\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> kubecfg list \/pods\r\n<span class=\"go\">Name                                   Image(s)                   Host                Labels\r\n----------                             ----------                 ----------          ----------\r\nredis-master-2                         dockerfile\/redis           127.0.0.1\/          name=redis-master\r\n169d845e-108c-11e4-b2af-0800273da0c1   brendanburns\/redis-slave   127.0.0.1\/          name=redisslave,replicationController=redisSlaveController\r\n45ff7456-1092-11e4-b2af-0800273da0c1   brendanburns\/php-redis     127.0.0.1\/          name=frontend,replicationController=frontendController\r\n\r\n<\/span><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> kubecfg list \/replicationControllers\r\n<span class=\"go\">Name                   Image(s)                   Selector            Replicas\r\n----------             ----------                 ----------          ----------\r\nredisSlaveController   brendanburns\/redis-slave   name=redisslave     2\r\nfrontendController     brendanburns\/php-redis     name=frontend       3\r\n\r\n<\/span><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> kubecfg list \/services\r\n<span class=\"go\">Name                Labels              Selector            Port\r\n----------          ----------          ----------          ----------\r\nredismaster                             name=redis-master   10000\r\nredisslave          name=redisslave     name=redisslave     10001\r\n<\/span><\/code><\/pre>\n<p>\u5c1d\u8bd5\u4f7f\u7528curl\u8bbf\u95eehttp:\/\/localhost:8000\u65f6\uff0c\u8fd4\u56de\u4e86guestbook\u9875\u9762\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> curl http:\/\/localhost:8000\r\n<span class=\"gp\">&lt;html ng-app=\"redis\"&gt;<\/span>\r\n<span class=\"gp\">  &lt;head&gt;<\/span>\r\n<span class=\"gp\">    &lt;title&gt;<\/span>Guestbook&lt;\/title&gt;\r\n<span class=\"gp\">    &lt;link rel=\"stylesheet\" href=\"\/\/netdna.bootstrapcdn.com\/bootstrap\/3.1.1\/css\/bootstrap.min.css\"&gt;<\/span>\r\n<span class=\"gp\">    &lt;script src=\"https:\/\/ajax.googleapis.com\/ajax\/libs\/angularjs\/1.2.12\/angular.min.js\"&gt;<\/span>&lt;\/script&gt;\r\n<span class=\"gp\">    &lt;script src=\"\/controllers.js\"&gt;<\/span>&lt;\/script&gt;\r\n<span class=\"gp\">    &lt;script src=\"ui-bootstrap-tpls-0.10.0.min.js\"&gt;<\/span>&lt;\/script&gt;\r\n<span class=\"gp\">  &lt;\/head&gt;<\/span>\r\n<span class=\"gp\">  &lt;body ng-controller=\"RedisCtrl\"&gt;<\/span>\r\n<span class=\"gp\">    &lt;div style=\"width: 50%;<\/span> margin-left: 20px<span class=\"s2\">\"&gt;\r\n<\/span><span class=\"gp\">      &lt;h2&gt;<\/span><span class=\"s2\">Guestbook&lt;\/h2&gt;\r\n<\/span><span class=\"gp\">    &lt;form&gt;<\/span>\r\n<span class=\"gp\">    &lt;fieldset&gt;<\/span>\r\n<span class=\"gp\">    &lt;input ng-model=\"msg\" placeholder=\"Messages\" class=\"form-control\" type=\"text\" name=\"input\"&gt;<\/span><span class=\"s2\">&lt;br&gt;\r\n<\/span><span class=\"gp\">    &lt;button type=\"button\" class=\"btn btn-primary\" ng-click=\"controller.onRedis()\"&gt;<\/span><span class=\"s2\">Submit&lt;\/button&gt;\r\n<\/span><span class=\"gp\">    &lt;\/fieldset&gt;<\/span>\r\n<span class=\"gp\">    &lt;\/form&gt;<\/span>\r\n<span class=\"gp\">    &lt;div&gt;<\/span>\r\n<span class=\"gp\">      &lt;div ng-repeat=\"msg in messages\"&gt;<\/span>\r\n<span class=\"go\">        {{msg}}\r\n<\/span><span class=\"gp\">      &lt;\/div&gt;<\/span>\r\n<span class=\"gp\">    &lt;\/div&gt;<\/span>\r\n<span class=\"gp\">    &lt;\/div&gt;<\/span>\r\n<span class=\"gp\">  &lt;\/body&gt;<\/span>\r\n<span class=\"gp\">&lt;\/html&gt;<\/span>\r\n<\/code><\/pre>\n<p>\u5f53\u7528OSX\u7cfb\u7edf\u4e2d\u7684Chrome\u6d4f\u89c8\u5668\u6253\u5f00http:\/\/172.17.8.101:8000\/\u65f6\uff0c\u53ef\u4ee5\u770b\u5230\u4ee5\u4e0b\u7684\u663e\u793a\u5185\u5bb9\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d1c0637434c4406c0fb67\/136-0.png\" alt=\"guestbook.png\" \/><\/div>\n<p>\u7136\u800c\uff0c\u65e0\u8bba\u8f93\u5165\u4ec0\u4e48\u7136\u540e\u70b9\u51fb\u63d0\u4ea4\u6309\u94ae\uff0c\u90fd\u6ca1\u6709\u4efb\u4f55\u53cd\u5e94\u3002<\/p>\n<p>\u5f53\u60a8\u91cd\u65b0\u52a0\u8f7dhttp:\/\/172.17.8.101:8000\/\u5e76\u67e5\u770bChrome\u7684\u5f00\u53d1\u5de5\u5177\u63a7\u5236\u53f0\u65f6\uff0c\u53d1\u73b0\u4e86JavaScript\u9519\u8bef\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d1c0637434c4406c0fb67\/139-0.png\" alt=\"guestbook_js_error.png\" \/><\/div>\n<pre class=\"post-pre\"><code>br \/&gt;\r\n&lt;b&gt;Fatal error&lt;\/b&gt;:  Uncaught exception 'Predis\\Connection\\ConnectionException' with message 'Connection refused [tcp:\/\/127.0.0.1:10000]' in \/vendor\/predis\/predis\/lib\/Predis\/Connection\/AbstractConnection.php:141\r\nStack trace:\r\n#0 \/vendor\/predis\/predis\/lib\/Predis\/Connection\/StreamConnection.php(96): Predis\\Connection\\AbstractConnection-&amp;gt;onConnectionError('Connection refu...', 111)\r\n#1 \/vendor\/predis\/predis\/lib\/Predis\/Connection\/StreamConnection.php(70): Predis\\Connection\\StreamConnection-&amp;gt;tcpStreamInitializer(Object(Predis\\Connection\\ConnectionParameters))\r\n#2 \/vendor\/predis\/predis\/lib\/Predis\/Connection\/AbstractConnection.php(96): Predis\\Connection\\StreamConnection-&amp;gt;createResource()\r\n#3 \/vendor\/predis\/predis\/lib\/Predis\/Connection\/StreamConnection.php(144): Predis\\Connection\\AbstractConnection-&amp;gt;connect()\r\n#4 \/vendor\/predis\/predis\/lib\/Predis\/Connection\/AbstractConnection.php(181): Predis\\Connection\\StreamConnection-&amp;gt;connect()\r\n#5 \/vendor\/predis\/predis\/lib\/Predis\/Connection\/StreamConnection.php(183): Predis\\Connection\\AbstractConnection-&amp;gt;ge in &lt;b&gt;\/vendor\/predis\/predis\/lib\/Predis\/Connection\/AbstractConnection.php&lt;\/b&gt; on line &lt;b&gt;141&lt;\/b&gt;&lt;br \/&gt;\r\n controllers.js:26\r\n\r\n\r\nTypeError: Cannot read property 'split' of undefined\r\n    at http:\/\/172.17.8.101:8000\/controllers.js:27:37\r\n    at https:\/\/ajax.googleapis.com\/ajax\/libs\/angularjs\/1.2.12\/angular.min.js:66:373\r\n    at A (https:\/\/ajax.googleapis.com\/ajax\/libs\/angularjs\/1.2.12\/angular.min.js:93:5)\r\n    at A (https:\/\/ajax.googleapis.com\/ajax\/libs\/angularjs\/1.2.12\/angular.min.js:93:5)\r\n    at https:\/\/ajax.googleapis.com\/ajax\/libs\/angularjs\/1.2.12\/angular.min.js:94:173\r\n    at h.$eval (https:\/\/ajax.googleapis.com\/ajax\/libs\/angularjs\/1.2.12\/angular.min.js:102:456)\r\n    at h.$digest (https:\/\/ajax.googleapis.com\/ajax\/libs\/angularjs\/1.2.12\/angular.min.js:100:218)\r\n    at h.$apply (https:\/\/ajax.googleapis.com\/ajax\/libs\/angularjs\/1.2.12\/angular.min.js:103:264)\r\n    at f (https:\/\/ajax.googleapis.com\/ajax\/libs\/angularjs\/1.2.12\/angular.min.js:67:120)\r\n    at H (https:\/\/ajax.googleapis.com\/ajax\/libs\/angularjs\/1.2.12\/angular.min.js:71:191) angular.js:9435\r\n<\/code><\/pre>\n<p>\u770b\u8d77\u6765predis\u65e0\u6cd5\u8fde\u63a5\u5230tcp:\/\/127.0.0.1:10000\u3002\u4e3a\u4ec0\u4e48\u7aef\u53e3\u662f10000\u4ecd\u7136\u662f\u4e2a\u8c1c\u3002\u6839\u636e\u4e0a\u8ff0\u7684index.php\u6587\u4ef6\uff0c\u5982\u679c\u8bbe\u7f6e\u4e86REDISSLAVE_SERVICE_PORT\u73af\u5883\u53d8\u91cf\uff0c\u5219\u4f7f\u7528\u8be5\u503c\uff0c\u5982\u679c\u6ca1\u6709\u8bbe\u7f6e\uff0c\u5219\u4f7f\u7528REDISMASTER_SERVICE_PORT\u73af\u5883\u53d8\u91cf\u7684\u503c\u3002<\/p>\n<p>\u5728\u8fd9\u4e2a\u65f6\u95f4\u70b9\u4e0a\uff0cdocker ps\u7684\u60c5\u51b5\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">core@core-01 \/opt\/kubernetes\/kubernetes $<\/span> docker ps <span class=\"nt\">--no-trunc<\/span>\r\n<span class=\"go\">CONTAINER ID                                                       IMAGE                             COMMAND                                           CREATED             STATUS              PORTS                    NAMES\r\n150252488eb48d673ea27cc624f67d19894b0e6f7131b000d7f257b0fddff450   brendanburns\/php-redis:latest     \/bin\/sh -c \/run.sh                                46 minutes ago      Up 46 minutes                                k8s----45ff7456_-_1092_-_11e4_-_b2af_-_0800273da0c1--8fafe560\r\n<\/span><span class=\"gp\">d0c0d44598a1fc7e18bf3e37d4332dad2af23a61644092d3f7fb24344d6e0a1d   busybox:buildroot-2014.02         sh -c 'rm -f nap &amp;&amp; mkfifo nap &amp;&amp; exec cat nap'   50 minutes ago      Up 50 minutes       0.0.0.0:8000-&gt;<\/span>80\/tcp     k8s--net--45ff7456_-_1092_-_11e4_-_b2af_-_0800273da0c1--94270597\r\n<span class=\"go\">0f4f8e809955377da2c176e0114795fa23d38f7d18e6237e27332a8a861ec101   brendanburns\/redis-slave:latest   \/bin\/sh -c \/run.sh                                About an hour ago   Up About an hour                             k8s----169d845e_-_108c_-_11e4_-_b2af_-_0800273da0c1--c8c817c2\r\n<\/span><span class=\"gp\">56c29b155bab49ac10f76e963c7c431555accb4881a9d9dcf12952ed85265738   busybox:buildroot-2014.02         sh -c 'rm -f nap &amp;&amp; mkfifo nap &amp;&amp; exec cat nap'   About an hour ago   Up About an hour    0.0.0.0:6380-&gt;<\/span>6379\/tcp   k8s--net--169d845e_-_108c_-_11e4_-_b2af_-_0800273da0c1--196db470\r\n<span class=\"go\">e45fe7b2510009127e2700cb628a2ac2fc3cfafff2278040d2d0d26fc21a6935   dockerfile\/redis:latest           redis-server \/etc\/redis\/redis.conf                About an hour ago   Up About an hour                             k8s--master--redis_-_master_-_2--4befd1d1\r\n<\/span><span class=\"gp\">787bb5ddf655ef576b1425f64772291296ce5cc983836153787a56587ad41c85   busybox:buildroot-2014.02         sh -c 'rm -f nap &amp;&amp; mkfifo nap &amp;&amp; exec cat nap'   About an hour ago   Up About an hour    0.0.0.0:6379-&gt;<\/span>6379\/tcp   k8s--net--redis_-_master_-_2--f8803f12\r\n<\/code><\/pre>\n<p>Redis\u7684\u4ece\u670d\u52a1\u5668\u7aef\u53e3\u662f6380\uff0c\u4e3b\u670d\u52a1\u5668\u7aef\u53e3\u662f6379\uff0c\u6240\u4ee5\u7aef\u53e3\u53d8\u621010000\u662f\u4e0d\u6b63\u5e38\u7684\u3002\u4e5f\u8bb8\uff0cbrendanburns\/php-redis\u955c\u50cf\u5728Docker Hub\u6ce8\u518c\u7684Dockerfile\u548cindex.php\u4e0e\u4e0a\u8ff0\u786e\u8ba4\u7684\u53ef\u80fd\u4e0d\u540c\u3002<\/p>\n<p>\u56e0\u4e3a\u6211\u7d2f\u4e86\uff0c\u6240\u4ee5\u6682\u65f6\u5c31\u5230\u8fd9\u91cc\u5427\u3002\u5982\u679c\u5fc3\u8840\u6765\u6f6e\u7684\u8bdd\uff0c\u6211\u4f1a\u5728\u672c\u5730\u4f7f\u7528docker build\u518d\u6b21\u5c1d\u8bd5\uff0c\u800c\u4e0d\u662f\u4eceDocker Hub\u4e0b\u8f7d\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6211\u5728OSX + Vagrant + CoreOS\u4e0a\u5c1d\u8bd5\u4e86Kubernetes\uff0c\u5e76\u505a\u4e86\u4e00\u4e9b\u6574\u7406\uff0c\u4e0b\u9762\u662f\u6211\u7684\u5907\u5fd8\u5f55 [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-34220","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>\u6211\u8bd5\u8fc7\u5728OSX\u4e0a\u4f7f\u7528Vagrant\u548cCoreOS\u6765\u5c1d\u8bd5Kubernetes - 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\/\u6211\u8bd5\u8fc7\u5728osx\u4e0a\u4f7f\u7528vagrant\u548ccoreos\u6765\u5c1d\u8bd5kubernetes\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u6211\u8bd5\u8fc7\u5728OSX\u4e0a\u4f7f\u7528Vagrant\u548cCoreOS\u6765\u5c1d\u8bd5Kubernetes\" \/>\n<meta property=\"og:description\" content=\"\u6211\u5728OSX + Vagrant + CoreOS\u4e0a\u5c1d\u8bd5\u4e86Kubernetes\uff0c\u5e76\u505a\u4e86\u4e00\u4e9b\u6574\u7406\uff0c\u4e0b\u9762\u662f\u6211\u7684\u5907\u5fd8\u5f55 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u6211\u8bd5\u8fc7\u5728osx\u4e0a\u4f7f\u7528vagrant\u548ccoreos\u6765\u5c1d\u8bd5kubernetes\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-04T05:16:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T22:29:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d1c0637434c4406c0fb67\/136-0.png\" \/>\n<meta name=\"author\" content=\"\u6e05, \u626c\" \/>\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, \u626c\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 \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\/%e6%88%91%e8%af%95%e8%bf%87%e5%9c%a8osx%e4%b8%8a%e4%bd%bf%e7%94%a8vagrant%e5%92%8ccoreos%e6%9d%a5%e5%b0%9d%e8%af%95kubernetes%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e8%bf%87%e5%9c%a8osx%e4%b8%8a%e4%bd%bf%e7%94%a8vagrant%e5%92%8ccoreos%e6%9d%a5%e5%b0%9d%e8%af%95kubernetes%e3%80%82\/\",\"name\":\"\u6211\u8bd5\u8fc7\u5728OSX\u4e0a\u4f7f\u7528Vagrant\u548cCoreOS\u6765\u5c1d\u8bd5Kubernetes - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-07-04T05:16:38+00:00\",\"dateModified\":\"2024-04-29T22:29:57+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e8%bf%87%e5%9c%a8osx%e4%b8%8a%e4%bd%bf%e7%94%a8vagrant%e5%92%8ccoreos%e6%9d%a5%e5%b0%9d%e8%af%95kubernetes%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e8%bf%87%e5%9c%a8osx%e4%b8%8a%e4%bd%bf%e7%94%a8vagrant%e5%92%8ccoreos%e6%9d%a5%e5%b0%9d%e8%af%95kubernetes%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e8%bf%87%e5%9c%a8osx%e4%b8%8a%e4%bd%bf%e7%94%a8vagrant%e5%92%8ccoreos%e6%9d%a5%e5%b0%9d%e8%af%95kubernetes%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u6211\u8bd5\u8fc7\u5728OSX\u4e0a\u4f7f\u7528Vagrant\u548cCoreOS\u6765\u5c1d\u8bd5Kubernetes\"}]},{\"@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\/cb5556d2501da73d864cac945e8d9461\",\"name\":\"\u6e05, \u626c\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u626c\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e8%bf%87%e5%9c%a8osx%e4%b8%8a%e4%bd%bf%e7%94%a8vagrant%e5%92%8ccoreos%e6%9d%a5%e5%b0%9d%e8%af%95kubernetes%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u6211\u8bd5\u8fc7\u5728OSX\u4e0a\u4f7f\u7528Vagrant\u548cCoreOS\u6765\u5c1d\u8bd5Kubernetes - 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\/\u6211\u8bd5\u8fc7\u5728osx\u4e0a\u4f7f\u7528vagrant\u548ccoreos\u6765\u5c1d\u8bd5kubernetes\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u6211\u8bd5\u8fc7\u5728OSX\u4e0a\u4f7f\u7528Vagrant\u548cCoreOS\u6765\u5c1d\u8bd5Kubernetes","og_description":"\u6211\u5728OSX + Vagrant + CoreOS\u4e0a\u5c1d\u8bd5\u4e86Kubernetes\uff0c\u5e76\u505a\u4e86\u4e00\u4e9b\u6574\u7406\uff0c\u4e0b\u9762\u662f\u6211\u7684\u5907\u5fd8\u5f55 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u6211\u8bd5\u8fc7\u5728osx\u4e0a\u4f7f\u7528vagrant\u548ccoreos\u6765\u5c1d\u8bd5kubernetes\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-07-04T05:16:38+00:00","article_modified_time":"2024-04-29T22:29:57+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d1c0637434c4406c0fb67\/136-0.png"}],"author":"\u6e05, \u626c","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u626c","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"14 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e8%bf%87%e5%9c%a8osx%e4%b8%8a%e4%bd%bf%e7%94%a8vagrant%e5%92%8ccoreos%e6%9d%a5%e5%b0%9d%e8%af%95kubernetes%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e8%bf%87%e5%9c%a8osx%e4%b8%8a%e4%bd%bf%e7%94%a8vagrant%e5%92%8ccoreos%e6%9d%a5%e5%b0%9d%e8%af%95kubernetes%e3%80%82\/","name":"\u6211\u8bd5\u8fc7\u5728OSX\u4e0a\u4f7f\u7528Vagrant\u548cCoreOS\u6765\u5c1d\u8bd5Kubernetes - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-07-04T05:16:38+00:00","dateModified":"2024-04-29T22:29:57+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e8%bf%87%e5%9c%a8osx%e4%b8%8a%e4%bd%bf%e7%94%a8vagrant%e5%92%8ccoreos%e6%9d%a5%e5%b0%9d%e8%af%95kubernetes%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e8%bf%87%e5%9c%a8osx%e4%b8%8a%e4%bd%bf%e7%94%a8vagrant%e5%92%8ccoreos%e6%9d%a5%e5%b0%9d%e8%af%95kubernetes%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e8%bf%87%e5%9c%a8osx%e4%b8%8a%e4%bd%bf%e7%94%a8vagrant%e5%92%8ccoreos%e6%9d%a5%e5%b0%9d%e8%af%95kubernetes%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u6211\u8bd5\u8fc7\u5728OSX\u4e0a\u4f7f\u7528Vagrant\u548cCoreOS\u6765\u5c1d\u8bd5Kubernetes"}]},{"@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\/cb5556d2501da73d864cac945e8d9461","name":"\u6e05, \u626c","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g","caption":"\u6e05, \u626c"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e8%bf%87%e5%9c%a8osx%e4%b8%8a%e4%bd%bf%e7%94%a8vagrant%e5%92%8ccoreos%e6%9d%a5%e5%b0%9d%e8%af%95kubernetes%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\/34220","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\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=34220"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/34220\/revisions"}],"predecessor-version":[{"id":90265,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/34220\/revisions\/90265"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=34220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=34220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=34220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}