我立刻开始尝试刚刚在11月5日发布的Google Container Engine (GKE)
你好,我在考虑是否要在公司的博客上写,但我决定在这里写。
马上说吧,Google容器引擎被宣布了,是吧!
我还听说这只是α版,但我想试试看!
由于我对一些词汇和理解的部分还不完全,可能也存在错误认识之处。如果能以评论或温暖的目光来关注和监督,我将不胜感激。
参考:
* 尝试使用 Google Container Engine (GKE)
* 体验使用 Google Container Engine (GKE)
Google 容器引擎(GKE)是什么?
这是一个由Google在2014年11月4日(日本时间5日)发布的云服务,它允许在Docker容器上运行应用程序,并使用Kubernetes进行管理。
GKE的缩写听起来是这样的。因为Google Compute Engine的缩写是GCE,为了避免名称重复,所以GKE就是这样的。
GKEとは(公式ページより)
Run Docker containers on Google Cloud Platform, powered by Kubernetes. Container Engine takes care of provisioning and maintaining the underlying virtual machine cluster, scaling your application, and operational logistics like logging, monitoring, and health management.
参考:Google Container Enginehttps://cloud.google.com/container-engine/
听说可以使用Docker快速创建容器呢。
我来试试根据官方教程进行操作。
Google Kubernetes Engine (GKE)初学者指南.
我会立刻开始试一试。
请提前完成预期的图像
这次我们将根据官方教程,在Docker上启动容器,并尝试创建一个由Web服务器和多个数据库服务器(redis)组成的多节点的Web应用程序。
这个是一个完成版的网页应用程序,长得大致就是这样的。
在内部,服务器配置似乎是这样创建的。
ID Image(s) Host Labels Status
---------- ---------- ---------- ---------- ----------
redis-master-pod gurpartap/redis k8s-first-vm2-node-1.c.glossy-infinity-756.internal/107.178.214.143 name=redis,role=master Running
e8efbf42-6646-11e4-9df1-42010af031e7 gurpartap/redis k8s-first-vm2-node-1.c.glossy-infinity-756.internal/107.178.214.143 name=redis,replicationController=redis-worker-controller,role=worker Running
e8f0c409-6646-11e4-9df1-42010af031e7 gurpartap/redis k8s-first-vm2-node-1.c.glossy-infinity-756.internal/107.178.214.143 name=redis,replicationController=redis-worker-controller,role=worker Running
a832b22e-6647-11e4-9df1-42010af031e7 kubernetes/guestbook k8s-first-vm2-node-1.c.glossy-infinity-756.internal/107.178.214.143 name=guestbook,replicationController=guestbook-controller Running
a833a97d-6647-11e4-9df1-42010af031e7 kubernetes/guestbook k8s-first-vm2-node-1.c.glossy-infinity-756.internal/107.178.214.143 name=guestbook,replicationController=guestbook-controller Running
a833cb33-6647-11e4-9df1-42010af031e7 kubernetes/guestbook k8s-first-vm2-node-1.c.glossy-infinity-756.internal/107.178.214.143 name=guestbook,replicationController=guestbook-controller Running
※ 最后执行了集群删除操作,文章中的URL已失效。
步骤1:注册
您可以通过点击“开始免费试用”按钮来开始使用Google云容器引擎。
我打算注册,然后去访问,结果立刻被怒斥了,苦笑。
看起来现在似乎只允许新用户,所以我将从Google中登出然后再试一次。
由于似乎不允许在该账户上使用Google Cloud平台的服务,所以我用从未使用过的账户重新登录了。
由于需要用户注册,在国家、账户类型、姓名和地址、付款方式以及账单沟通语言等方面进行回答,然后勾选最后的检查,并选择“同意并开始免费试用”。
让我们从「创建项目」开始,新建一个项目吧。
输入任意名称后,点击“创建”来创建项目。
在右下角会显示类似进度条的东西。
当プログレス表示结束后…可以看到项目的仪表板。
让我们在这里确认一下项目ID,以后会用到。
请从左侧菜单中选择“计算 -> 容器引擎”,然后点击“创建集群”。
似乎需要输入创建集群的信息。我输入了以下内容。
-
- Name: first-vm (任意の名前)
-
- Description: Hello GKE (無くても大丈夫)
-
- Zone: us-central1-f (デフォルト)
-
- Cluster Size: 1 (デフォルト)
- Machine type: f1-micro (試しに使ってみる程度なので最小に設定)
按下「创建」按钮继续。
只要达到这个状态,暂时算是成功了。
和项目ID一样,让我们先确认这里的集群名称(本次是first-vm)。稍后会用到它。
步骤2:启动Cluster和应用程序
让我们从GKE的文档页面查看“开始之前”的内容。
安装gcloud命令行工具。
根据文档显示,GKE似乎使用了名为gcloud命令行工具,所以我将尝试安装它。
如果是Mac的话,只需在终端中运行以下命令并重新启动终端即可。
$ curl https://sdk.cloud.google.com | bash
遇到困难的人可以参考“遇到了gcloud命令行工具的安装问题”等情况。
准备gcloud命令
首先,您需要进行身份验证。
$ gcloud auth login
浏览器打开并请求授权,让我们允许它。
下一步,我们将使您能够使用预览版功能。请执行以下命令。
$ gcloud components update preview
The following components will be installed:
-----------------------------------------------------------------------------------
| Developer Preview gcloud Commands | 2014.11.03 | < 1 MB |
| Native extensions for preview commands (Mac OS X, x86_64) | 4.1 | 2.4 MB |
-----------------------------------------------------------------------------------
Do you want to continue (Y/n)? Y #←Yでenter!
Creating update staging area...
Installing: Developer Preview gcloud Commands ... Done
Installing: Native extensions for preview commands (Mac OS X, x86_64) ... Done
Creating backup and activating new installation...
Done!
请在接下来要使用的命令行工具中注册要使用的项目。
$ gcloud config set project PROJECT_ID
这次使用的是一个名为”glossy-infinity-756″的ID。
$ gcloud config set project glossy-infinity-756
我会先存下来。
创建容器引擎集群
下载并解压缩Guestbook样本项目。
我认为解压缩后的guestbook文件夹内会有类似以下的json文件。
CONFIG_DIRにguestbookフォルダのパスを指定してあげます。ZONEやCLUSTER_NAMEも先ほど指定したものを記述します。
$ export CONFIG_DIR=/path/to/guestbook
$ export ZONE=us-central1-b
$ export CLUSTER_NAME=first-vm
$ gcloud preview container clusters --zone=$ZONE create $CLUSTER_NAME
看起来Container Engine集群已经启动了。
让我们来多方面地确认Cluster的信息。
$ gcloud preview container clusters --zone=$ZONE list
clusters:
- clusterApiVersion: 0.4.2
containerIpv4Cidr: 10.176.0.0/16
creationTimestamp: '2014-11-06T09:24:36+00:00'
description: Hello GKE
endpoint: 23.236.61.237
masterAuth:
password: Bgi9leQOu6CcucrC
user: admin
name: first-vm
nodeConfig:
machineType: f1-micro
sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/backports-debian-7-wheezy-v20141021
nodeRoutingPrefixSize: 24
numNodes: 1
servicesIpv4Cidr: 10.0.0.0/16
status: running
zone: us-central1-f
- clusterApiVersion: 0.4.2
containerIpv4Cidr: 10.117.0.0/16
creationTimestamp: '2014-11-06T14:54:16+00:00'
description: ''
endpoint: 146.148.45.116
masterAuth:
password: DJitqdgpUWIeTeOY
user: admin
name: first-vm2
nodeConfig:
machineType: n1-standard-1
sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/backports-debian-7-wheezy-v20141021
nodeRoutingPrefixSize: 24
numNodes: 1
servicesIpv4Cidr: 10.0.0.0/16
status: running
zone: us-central1-f
コンテナを立ち上げる際にpodファイルと呼ばれるものを利用します。
先ほどのguestbookフォルダ内のredis-master-pod.jsonを利用します。
gcloud preview container pods --cluster-name=$CLUSTER_NAME create redis-master-pod --zone=$ZONE --config-file=$CONFIG_DIR/redis-master-pod.json
Fetching cluster endpoint and auth data.
Waiting for cluster api initialization...done.
Using gcloud compute copy-files to fetch ssl certs from cluster master...
Warning: Permanently added '146.148.45.116' (RSA) to the list of known hosts.
kubecfg.key 100% 1708 1.7KB/s 00:00
Warning: Permanently added '146.148.45.116' (RSA) to the list of known hosts.
kubecfg.crt 100% 4347 4.3KB/s 00:00
Warning: Permanently added '146.148.45.116' (RSA) to the list of known hosts.
ca.crt 100% 1159 1.1KB/s 00:00
ID Image(s) Host Labels Status
---------- ---------- ---------- ---------- ----------
redis-master-pod gurpartap/redis <unassigned> name=redis,role=master Waiting
n0bisuke:guestbook sugawara_ryosuke$ gcloud preview container pods --cluster-name=$CLUSTER_NAME list --zone=$ZONE
ID Image(s) Host Labels Status
---------- ---------- ---------- ---------- ----------
redis-master-pod gurpartap/redis k8s-first-vm2-node-1.c.glossy-infinity-756.internal/107.178.214.143 name=redis,role=master Waiting
看起来它们运作得很顺利。
步骤3:尝试登录Docker
我将尝试登录已启动的Docker进程。
gcloud compute ssh –zone=$ZONE VM_NAME的格式是这样的。VM_NAME是指向上面的主机,格式为(VM_NAME).c.(PROJECT_ID).~。在这个例子中,VM_NAME是k8s-first-vm2-node-1。
$ gcloud compute ssh --zone=$ZONE k8s-first-vm2-node-1
Updated [https://www.googleapis.com/compute/v1/projects/glossy-infinity-756].
Warning: Permanently added '107.178.214.143' (RSA) to the list of known hosts.
Warning: Permanently added '107.178.214.143' (RSA) to the list of known hosts.
Linux k8s-first-vm2-node-1 3.16-0.bpo.2-amd64 #1 SMP Debian 3.16.3-2~bpo70+1 (2014-09-21) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
这是在SSH上运行的Docker命令。
通过使用docker ps命令,您可以知道docker进程已经启动。
user@k8s-first-vm2-node-1:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f8c165071d17 gurpartap/redis:latest "/usr/local/bin/redi 2 hours ago Up 2 hours k8s_redis-master.b0c7a75c_redis-master-pod.etcd_cc1fa69d-662e-11e4-9df1-42010af031e7_0c84d4d9
0605ed819e41 kubernetes/pause:go "/pause" 2 hours ago Up 2 hours k8s_net.645f884a_redis-master-pod.etcd_cc1fa69d-662e-11e4-9df1-42010af031e7_78c237d9
2c6c028b4da1 google/cadvisor:0.5.0 "/usr/bin/cadvisor" 15 hours ago Up 15 hours k8s_cadvisor.417cd83c_cadvisor-agent.file_9ab8bc25
b2142690dd0b kubernetes/pause:go "/pause" 15 hours ago Up 15 hours 0.0.0.0:4194->8080/tcp k8s_net.f72d85c8_cadvisor-agent.file_439950d7
设定redis-master-service。
从这里开始,您需要先从Docker注销,然后在自己的机器上继续工作。
$ gcloud preview container services --cluster-name=$CLUSTER_NAME create --zone=$ZONE --config-file=$CONFIG_DIR/redis-master-service.json
ID Labels Selector Port
---------- ---------- ---------- ----------
redis-master name=redis,role=master 6379
设置redis-worker-controller
$ gcloud preview container replicationcontrollers --cluster-name=$CLUSTER_NAME create --zone=$ZONE --config-file=$CONFIG_DIR/redis-worker-controller.json
ID Image(s) Selector Replicas
---------- ---------- ---------- ----------
redis-worker-controller gurpartap/redis name=redis,role=worker 2
请确保在json文件中检查这些细节设置。暂时使用默认设置并继续推进。
確認してみましょう。
$ gcloud preview container pods --cluster-name=$CLUSTER_NAME list --zone=$ZONE
ID Image(s) Host Labels Status
---------- ---------- ---------- ---------- ----------
redis-master-pod gurpartap/redis k8s-first-vm2-node-1.c.glossy-infinity-756.internal/107.178.214.143 name=redis,role=master Running
e8efbf42-6646-11e4-9df1-42010af031e7 gurpartap/redis k8s-first-vm2-node-1.c.glossy-infinity-756.internal/107.178.214.143 name=redis,replicationController=redis-worker-controller,role=worker Running
e8f0c409-6646-11e4-9df1-42010af031e7 gurpartap/redis k8s-first-vm2-node-1.c.glossy-infinity-756.internal/107.178.214.143 name=redis,replicationController=redis-worker-controller,role=worker Running
$ gcloud preview container replicationcontrollers --cluster-name=$CLUSTER_NAME list --zone=$ZONE
ID Image(s) Selector Replicas
---------- ---------- ---------- ----------
redis-worker-controller gurpartap/redis name=redis,role=worker 2
设定redis-worker-service
$ gcloud preview container services --cluster-name=$CLUSTER_NAME create --zone=$ZONE --config-file=$CONFIG_DIR/redis-worker-service.json
ID Labels Selector Port
---------- ---------- ---------- ----------
redis-worker name=redis,role=worker name=redis,role=worker 6379
设定 guestbook-controller
Redis的配置已经完成,现在需要配置Web应用程序。
$ gcloud preview container replicationcontrollers --cluster-name=$CLUSTER_NAME create --zone=$ZONE --config-file=$CONFIG_DIR/guestbook-controller.json
ID Image(s) Selector Replicas
---------- ---------- ---------- ----------
guestbook-controller kubernetes/guestbook name=guestbook 3
我会确认一下。
$ gcloud preview container replicationcontrollers --cluster-name=$CLUSTER_NAME list --zone=$ZONE
ID Image(s) Selector Replicas
---------- ---------- ---------- ----------
redis-worker-controller gurpartap/redis name=redis,role=worker 2
guestbook-controller kubernetes/guestbook name=guestbook 3
$ gcloud preview container pods --cluster-name=$CLUSTER_NAME list --zone=$ZONE
ID Image(s) Host Labels Status
---------- ---------- ---------- ---------- ----------
redis-master-pod gurpartap/redis k8s-first-vm2-node-1.c.glossy-infinity-756.internal/107.178.214.143 name=redis,role=master Running
e8efbf42-6646-11e4-9df1-42010af031e7 gurpartap/redis k8s-first-vm2-node-1.c.glossy-infinity-756.internal/107.178.214.143 name=redis,replicationController=redis-worker-controller,role=worker Running
e8f0c409-6646-11e4-9df1-42010af031e7 gurpartap/redis k8s-first-vm2-node-1.c.glossy-infinity-756.internal/107.178.214.143 name=redis,replicationController=redis-worker-controller,role=worker Running
a832b22e-6647-11e4-9df1-42010af031e7 kubernetes/guestbook k8s-first-vm2-node-1.c.glossy-infinity-756.internal/107.178.214.143 name=guestbook,replicationController=guestbook-controller Running
a833a97d-6647-11e4-9df1-42010af031e7 kubernetes/guestbook k8s-first-vm2-node-1.c.glossy-infinity-756.internal/107.178.214.143 name=guestbook,replicationController=guestbook-controller Running
a833cb33-6647-11e4-9df1-42010af031e7 kubernetes/guestbook k8s-first-vm2-node-1.c.glossy-infinity-756.internal/107.178.214.143 name=guestbook,replicationController=guestbook-controller Running
设定留言簿服务
$ gcloud preview container services --cluster-name=$CLUSTER_NAME create --zone=$ZONE --config-file=$CONFIG_DIR/guestbook-service.json
I1107 15:34:31.897271 03533 request.go:274] Waiting for completion of /operations/19
I1107 15:34:34.065865 03533 request.go:274] Waiting for completion of /operations/19
ID Labels Selector Port
---------- ---------- ---------- ----------
guestbook name=guestbook 3000
确认一下,如果显示有redis-master、redis-woerker和guestbook,那就没问题了。
$ gcloud preview container services --cluster-name=$CLUSTER_NAME list --zone=$ZONE
ID Labels Selector Port
---------- ---------- ---------- ----------
redis-master name=redis,role=master 6379
redis-worker name=redis,role=worker name=redis,role=worker 6379
guestbook name=guestbook 3000
防火墙设置
在外部连接时指定端口。
$ gcloud compute firewall-rules create $CLUSTER_NAME-node-3000 --allow=tcp:3000 --target-tags k8s-$CLUSTER_NAME-node
Created [https://www.googleapis.com/compute/v1/projects/glossy-infinity-756/global/firewalls/first-vm2-node-3000].
NAME NETWORK SRC_RANGES RULES SRC_TAGS TARGET_TAGS
first-vm2-node-3000 default 0.0.0.0/0 tcp:3000 k8s-first-vm2-node
步骤4:尝试使用一下
当我们到达这一步时,准备工作已经完成。现在让我们实际尝试一下访问。
我终于要尝试访问已经启动的应用程序。我将访问开发者控制台。
在Compute > Compute Engine > Network load balancing页面上,找到Forwarding rules选项卡,在那里可以看到IP地址,然后访问”http://IP地址:3000″。
当遇到这种情况时,只需访问http://173.255.118.66:3000/即可浏览网页。
然后应用程序在容器上启动,并创建了一个类似于留言板的东西!很简单吧。
我们公司的马先生也非常满意。
用这个简单的步骤就能实现多台服务器配置,太厉害了呢~
尝试删除或创建容器
尝试熄灭
$ gcloud preview container replicationcontrollers --cluster-name=$CLUSTER_NAME delete guestbook-controller --zone=$ZONE
Status
----------
Success
再做一个
$ gcloud preview container replicationcontrollers --cluster-name=$CLUSTER_NAME create --zone=$ZONE --config-file=$CONFIG_DIR/guestbook-controller.json
ID Image(s) Selector Replicas
---------- ---------- ---------- ----------
guestbook-controller kubernetes/guestbook name=guestbook 3
删除集群
因为用了很多东西,所以最后尝试删除。
$ export CLUSTER_NAME=first-vm
$ export ZONE=us-central1-f
$ gcloud preview container clusters --zone=$ZONE delete $CLUSTER_NAME
Waiting for cluster deletion...done.
name: operation-1415348533410-c624d2ae
operationType: deleteCluster
status: done
target: /projects/374990605251/zones/us-central1-f/clusters/first-vm2
zone: us-central1-f
稍等一下,集群将被删除。
概述
虽然GCP有许多不同类型的选择,可能会让人感到困惑,但我会记住GKE支持使用Docker。
我想学习得更细致,以便能够更顺利地处理更细节的事情。