要资料 文章 文库 Lib 视频 Code iProcess 课程 认证 咨询 工具 火云堂 讲座吧   成长之路  
会员   
 
追随技术信仰

随时听讲座
每天看新闻
 
 

Kubernetes教程
Kubernetes概述
Kubernetes设计架构
kubernetes设计理念
创建Kubernetes集群
基于Docker本地运行Kubernetes
使用Vagrant
本地运行Kubrenetes v1.0
Google Computer Engine入门
AWS EC2快速入门
在Azure上使用CoreOS和Weave的 Kubernetes
从零开始k8s
CoreOS部署Kubernetes集群
CloudStack部署Kubernetes集群
vSphere部署Kubernetes集群
Ferdora部署Kubernetes集群
CentOS部署Kubernetes集群
Ubuntu物理节点上部署Kubernets集群
Mesos部署Kubernetes集群
Kubernetes用户指南:应用程序管理
名词解释 Pods
名词解释 Labels
名词解释:Namespace
名词解释 Replication Controller
名词解释:Node
名词解释:ReplicaSets
名词解释 Services
名词解释 Volumes
名词解释:PV/PVC/StorageClass
名称解释:Deployment
名词解释:Secret
名词解释:StatefulSet
名词解释:DaemonSet
名词解释:Service Account
名词解释:CronJob
名词解释:Job
名词解释:Security Context和PSP
名词解释:Resource Quotas
名词解释:Network Policy
名词解释:Ingress
名词解释:ThirdPartyResources
名词解释:ConfigMap
名词解释:PodPreset
配置Kubernetes
管理应用:部署持续运行的应用
Horizontal Pod Autoscaling
管理应用:连接应用
管理应用: 在生产环境中使用Pods和容器
Kubernetes UI
Kube-API Server
授权插件
认证插件
API Server端口配置
Admission Controller
Service Accounts集群管理指南
使用Kubernetes在云上原生部署cassandra
Spark例子
Storm 示例
示例: 分布式任务队列 Celery, RabbitMQ和Flower
Kubernetes在Hazelcast平台上部署原生云应用
Meteor on Kuberenetes
配置文件使用入门
环境向导示例
在Kubernetes上运行你的第一个容器
kubectl
安装和设置kubectl
kubectl annotate
kubectl api-versions
kubectl apply
kubectl attach
kubectl cluster-info
kubectl config
 
 

Meteor on Kuberenetes
 
60 次浏览
5次  
 捐助

这个例子将会向你展示如何在Kubernetes上打包运行一个Meteor app。

从谷歌的计算引擎开始

Meteor使用MongoDB,并且我们使用GCEPersistentDisk类型的卷作为永久存储介质。所以,这个实例只使用于谷歌的计算引擎。如果想选用其它的方式,可以去查看一下卷使用文档。

首先,你需要完成如下操作:

建立一个谷歌云平台的项目。

启用Google的付费API??

安装谷歌云的SDK。

认证谷歌云并且将谷歌云的默认项目名称指向你希望部署Kubernetes集群的项目:

gcloud auth login
gcloud config set project <project-name>

之后,开启一个Kubernetes集群

wget -q -O - https://get.k8s.io | bash

所有细节和其它方式下启动集群的方法。

为你的Meteor APP创建一个容器

为了使一个Meteor APP能运行再Kubernetes上,你首先需要建立一个Docker容器。在建立之前你需要安装DOCKER。一旦这些都具备了,你需要将Dockerfile和.dockerignore这2个文件添加到当前的Meteor工程中。

Dockerfile文件中应该包含下面的语句。其中的ROOT_URL你应该替换为当前APP的主机名。

FROM chees/meteor-kubernetes
ENV ROOT_URL http://myawesomeapp.com

对于.dockerignore文件,应该包含下面的语句。它是为了告诉Docker,再建立你的容器时忽略以下指定路径的文件。

.meteor/local
packages/*/.build*

你可以在下面的链接中看到一个已经建立起来的Meteor工程:meteor-gke-example。你可以随意的使用这个例子中的APP。 如果你已经在你的Meteor工程中添加了移动平台,那么下面的步骤将不起作用。所以替换你的平台为 meteor list-platforms。

现在,你就可以在你的Meteor工程中运行下面的语句来建立一个容器:

docker build -t my-meteor .

推送一个注册表

对于Docker Hub,你需要利用下面的命令向Hub推送一个携带了你的用户名的APP图片,请注意替换<username>为你对应的Hub 用户名。命令如下:

docker tag my-meteor <username>/my-meteor
docker push <username>/my-meteor

对于Google Container Registry,你需要向GCR推送一个携带你的工程ID的APP图片,同时,请注意替换<project>为你的对应工程ID。

docker tag my-meteor gcr.io/<project>/my-meteor
gcloud docker push gcr.io/ <project>/my-meteor

运行

现在,你已经容器化了你的Meteor APP,是时候开始建立你的集群了。编辑meteor-controller.json 同时确保image:与你刚刚推送到Docker Hub或者GCR的容器是相对应的。 我们将需要一个MongoDB作为一个永久的Kubernetes卷来存放数据。我们将利用谷歌的计算引擎永久磁盘。创建MongoDB磁盘的命令如下:

gcloud compute disks create --size=200GB mongo-disk

你可以开启Mongo去使用那些磁盘,命令如下:

kubectl create -f examples/meteor/mongo-pod.json
kubectl create -f examples/meteor/mongo-service.json

等待Mongo完全启动,之后你就可以开启自己的Meteor APP:

kubectl create -f examples /meteor/meteor-service.json
kubectl create -f examples/ meteor/meteor-controller.json

需要注意的是,meteor-service.json创建了一个负载均衡器,所以你的APP要求能在Meteor Pods启动时,有效的通过负载均衡器的IP。我们会再建立RC之前建立一个服务,该服务会提供反向关联(或者其它的什么)用以帮助调度程序去排列pod,从而帮助调度程序匹配对应的pods。你可以通过下面的命令获得你的负载均衡器的IP:

kubectl get service meteor --template=" {{range .status.loadBalancer.ingress}} {{.ip}} {{end}}"

之后,你需要在你的环境上开启你的80号端口。如果是使用谷歌计算引擎的用户,你需要运行下面的命令:

gcloud compute firewal l- rules create meteo r-80 --allow = tcp:80 --target-tags kubernetes-minion

接下来呢?

首先,在Dockerfile中的FROM chees/meteor-kubernetes语句会指定Meteor APP的基础镜像。这个镜像的构建代码放置在示例代码工程的dockerbase/子目录下。你可以通过阅读Dockerfile文件中的代码来了解docker build的步骤。这个镜像是基于Node.js官方镜像构建的。它会安装Meteor并将用户的程序拷贝进去。其中的最后一行的命令指出了你的app需要通过怎样的命令在容器中运行起来。

ENTRYPOINT MONGO_URL= mongodb://$MONGO_SERVICE_HOST :$MONGO_SERVICE_PORT /usr/local/bin/node main.js

在上面的命令中,我们能看到传递到Meteor App的MongoDB主机和端口信息。MONGO_SERVICE...这个环境变量是由Kubernetes设置的,同时,由mongo-service.json指定了名为mongo的服务器的详细信息。

也许你已经了解,Meteor需要使用TCP长连接,以及持续性的Session(Sticky Sessions)。通过Kubernetes用户能够轻松的在集群Scale out时保持节点的Session相关性。在meteor-service.json文件中所包含的"sessionAffinity"* : *"ClientIP",就向我们提供了这些。

就向之前所提到的,mongo容器使用了一个被Kubernetes映射到永久磁盘的卷。在mongo-pod.json中,容器对指定的卷进行了划分:

{
"volumeMounts": [
{
"name": "mongo-disk",
"mountPath": "/data/db"
}

mongo-disk是指超出容器范围的卷:

{
"volumes": [
{
"name": "mongo-disk",
"gcePersistentDisk": {
"pdName": "mongo-disk",
"fsType": "ext4"
}
}
],

您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



60 次浏览
5次
 捐助
 

每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号