mkdir nodeappk8s # 项目名称
cd nodeappk8s
npm init # 一路回车
vim app.js # 建立文件,内容在下面
npm i -S express # 安装依赖
# 在package.json文件中新增 {"start": "node app.js"}
npm start # 测试你的程序没有问题
vim Dockerfile # 建立Dockerfile, 内容在下面
docker build -t pengj/nodeappk8s:v1.0.0 . # 构建镜像, 请更改成本身帐号名称
docker run -p 8888:8888 pengj/nodeappk8s:v1.0.0 # 测试你的镜像没有问题
# 这里须要在你的docker仓库新建镜像,以后执行下面的操做; 个人地址为: https://hub.docker.com/u/pengj
# 若是先登陆再建立,则推送会报仓库不存在
docker login # 登陆, 输入帐号和密码
docker push pengj/nodeappk8s:v1.0.0 # 推送镜像
复制代码
app.js
内容node
var express = require('express');
var PORT = 8888;
var app = express();
app.get('/', function (req, res) {
res.send('Hello world\n');
});
app.listen(PORT);
console.log('Running on http://localhost:' + PORT);
复制代码
Dockerfile
内容git
#node镜像版本
FROM node:8-alpine
#声明做者
MAINTAINER Hapiman
#在image中建立文件夹
RUN mkdir -p /home/Service
#将该文件夹做为工做目录
WORKDIR /home/Service
# 将node工程下全部文件拷贝到Image下的文件夹中
COPY . /home/Service
#使用RUN命令执行npm install安装工程依赖库
RUN npm install
#暴露给主机的端口号
EXPOSE 8888
#执行npm start命令,启动Node工程
CMD [ "npm", "start" ]
复制代码
若是你没有搭建k8s
集群,能够参考k8s搭建程序员
# 新增名字为`node-kube-apps`的namespace,内容在下面,在nodeapp-k8s.yaml会使用
kubectl apply -f node-kube-apps.yaml
# 在master机器上建立nodeapp-k8s.yaml,内容在下面,你须要更换`pengj/nodeappk8s:v1.0.0`为你本身的镜像仓库或者直接使用(省事)
vim nodeapp-k8s.yaml
# 部署配置, 若是屡次部署会存在重复文件, 可使用kubectl delete -f nodeapp-k8s.yaml删除
kubectl apply -f nodeapp-k8s.yaml
# 执行成功会输出
# deployment "nodeapp-deploy" created
# service "nodeapp-svc" created
# ingress "nodeapp-ingress" created
复制代码
# 可能会出现0/2, 1/2的状况, 等一下子就OK
kubectl get deployments -n kube-apps |grep nodeapp
# nodeapp-deploy 2/2 2 2 109m
kubectl get svc -n kube-apps |grep nodeapp
# nodeapp-svc NodePort 10.97.144.116 <none> 8080:31000/TCP 109m
kubectl get ingress -n kube-apps |grep nodeapp
# nodeapp-ingress nodeappk8s.local 80 110m
kubectl get pods -n kube-apps |grep nodeapp
# nodeapp-deploy-5c84c9d676-m7zwc 1/1 Running 0 110m
# nodeapp-deploy-5c84c9d676-v8r6g 1/1 Running 0 110m
复制代码
两种访问方式:github
1.使用集群之间可见ip访问, 只可以在集群部署的机器上可用: curl http://10.97.144.116:8080/ping
golang
2.使用通用的ip访问, 可是须要使用配置文件中32000
端口才行docker
详细代码在这里express
nodeapp-k8s.yaml
文件中定义了3类资源Deployment
、Service
、Ingress
;npm
Deployment
设置了replicas: 2
,表示会运行两个POD
,strategy
的滚动策略为RollingUpdate
,resources
区域定义了一个POD的资源限制,经过livenessProbe
和readinessProbe
设置了健康检查json
kube-apps.yaml
内容vim
apiVersion: v1
kind: Namespace
metadata:
name: node-kube-apps
labels:
name: node-kube-apps
复制代码
nodeapp-k8s.yaml
内容
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nodeapp-deploy
namespace: node-kube-apps
labels:
k8s-app: nodeappk8s
spec:
replicas: 2
revisionHistoryLimit: 10
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
k8s-app: nodeappk8s
spec:
containers:
- image: pengj/nodeappk8s:v1.0.0
imagePullPolicy: Always
name: nodeappk8s
ports:
- containerPort: 8888
protocol: TCP
resources:
limits:
cpu: 100m
memory: 100Mi
requests:
cpu: 50m
memory: 50Mi
livenessProbe:
tcpSocket:
port: 8888
initialDelaySeconds: 10
timeoutSeconds: 3
readinessProbe:
httpGet:
path: /
port: 8888
initialDelaySeconds: 10
timeoutSeconds: 2
---
apiVersion: v1
kind: Service
metadata:
name: nodeapp-svc
namespace: node-kube-apps
labels:
k8s-app: nodeappk8s
spec:
type: NodePort
ports:
- name: api
port: 8888
targetPort: 8888
nodePort: 32000
selector:
k8s-app: nodeappk8s
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nodeapp-ingress
namespace: node-kube-apps
spec:
rules:
- host: nodeappk8s.local
http:
paths:
- path: /
backend:
serviceName: nodeapp-svc
servicePort: api
复制代码
一个探讨技术,金融,赚钱
的小圈子,为你提供最有味道
的内容,日日更新!