创建Node.js应用程序
先编写server.js
1 | var http = require('http'); |
然后在http://localhost:8080/中看到"Hello World”
创建Docker容器镜像
在hellonode文件夹中创建一个Dockerfile命名的文件。Dockerfile描述了build的镜像,通过现有的镜像扩展(extend)build Docker容器镜像,本教程中的镜像扩展(extend)了现有的Node.js镜像。
1 | FROM node:6.9.2 |
确保使用Minikube Docker守护进程
1 | eval $(minikube docker-env) |
注意:如果不在使用Minikube主机时,可以通过运行eval $(minikube docker-env -u)来撤消此更改。
使用Minikube Docker守护进程build Docker镜像:
1 | docker build -t hello-node:v1 . |
创建Deployment
使用kubectl run命令创建Deployment来管理Pod。Pod根据hello-node:v1Docker运行容器镜像:
1 | kubectl run hello-node --image=hello-node:v1 --port=8080 |
查看Deployment:
1 | kubectl get deployments |
输出:
1 | NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE |
查看Pod:
1 | kubectl get pods |
输出:
1 | NAME READY STATUS RESTARTS AGE |
查看群集events:
1 | kubectl get events |
查看kubectl配置:
1 | kubectl config view |
创建Service
默认情况,这Pod只能通过Kubernetes群集内部IP访问。要使hello-node容器从Kubernetes虚拟网络外部访问,须要使用Kubernetes Service暴露Pod。
我们可以使用kubectl expose命令将Pod暴露到外部环境:
1 | kubectl expose deployment hello-node --type=LoadBalancer |
查看刚创建的Service:
1 | kubectl get services |
输出:
1 | NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE |
通过–type=LoadBalancer flag来在群集外暴露Service,在支持负载均衡的云提供商上,将配置外部IP地址来访问Service。在Minikube上,该LoadBalancer type使服务可以通过minikube Service 命令访问。
1 | minikube service hello-node |
将打开浏览器,在本地IP地址为应用提供服务,显示“Hello World”的消息。
最后可以查看到一些日志
1 | kubectl logs <POD-NAME> |
更新应用程序
编辑server.js文件以返回新消息:
1 | response.end('Hello World Again!'); |
build新版本镜像
1 | docker build -t hello-node:v2 . |
Deployment更新镜像:
1 | kubectl set image deployment/hello-node hello-node=hello-node:v2 |
再次运行应用以查看新消息:
1 | minikube service hello-node |