本次试验仅作为如何学习 k8s 部署 nuxt 项目,所有服务器的操作均在本地模拟器(VMware )上执行。
1、将 nuxt 项目文件除了 node_module 外,全部上传至服务器。
2、编写 Dockerfile 文件
可在本地创建后上传或在服务器创建
# 基于 node 镜像,构建镜像前需先下载
FROM node:latest
# 镜像信息
MAINTAINER lzd
# 任意ip
ENV HOST 0.0.0.0
# 容器内创建目录mynuxt
RUN mkdir -p /usr/frontend/mynuxt
# 将当前目录文件复制到 /usr/frontend/mynuxt 目录
COPY . /usr/frontend/mynuxt
# 切换工作目录到 /usr/frontend/mynuxt 目录
WORKDIR /usr/frontend/mynuxt
# 暴露项目端口
EXPOSE 3000
# 设置 npm 源
RUN npm config set registry https://registry.npm.taobao.org
# 清除缓存
RUN npm cache clean --force
# 安装依赖
RUN npm install
# 打包构建项目
RUN npm run build
# 启动项目
CMD ["npm", "start"]
3、构建镜像
在当前目录下(/usr/frontend/mynuxt)运行:
docker build -t mynuxt:v1.0 .
4、标记镜像为私有仓库的镜像
docker tag mynuxt:v1.0 <仓库ip>:5000/mynuxt:v1.0
5、上传标记镜像
docker push <仓库ip>:5000/mynuxt:v1.0
由于上传的是本地私有仓库,可能会遇到如下报错:Get http://<ip>:5000/v2/: dial tcp <ip>:5000: connect: connection refused
,可执行:
docker start registry
再次重试上传
6、编写配置文件
rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: mynuxt
spec:
replicas: 1
selector:
app: mynuxt
template:
metadata:
labels:
app: mynuxt
spec:
containers:
- name: mynuxt
image: <标记仓库ip>:5000/mynuxt:v1.0
ports:
- containerPort: 3000
svc.yaml
,nodePort
有要求在 30000-32767 以内
apiVersion: v1
kind: Service
metadata:
name: mynuxt
spec:
type: NodePort
ports:
- port: 3000
nodePort: 30001
selector:
app: mynuxt
7、部署镜像
$ kubectl apply -f rc.yaml
$ kubectl apply -f svc.yaml
# 查看 rc、svc
$ kubectl get rc,svc
NAME DESIRED CURRENT READY AGE
replicationcontroller/mynuxt 1 1 0 16s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 56d
service/mynuxt NodePort 10.1.156.151 <none> 3000:30001/TCP 11s
# 查看 pod 状态
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
mynuxt-wpbns 1/1 Running 0 38m
部署成功后,可使用浏览器访问:http://<ip>:30001
查看效果。