0%

k8s部署前端

宿主机部署方案

nginx + 前端静态文件

一般情况下,我们部署前端包的时候,都是直接将前端包上传到服务器上,然后通过nginx指向静态目录的位置。即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
http{
include mime.types;
default_type application/octet-stream;

server {
listen 80;
server_name localhost;

location / {
root /opt/app/rms_fg/dist;
index index.html;
}
}
}

Docker部署方案

制作镜像

基于nginx基础镜像,将前端包拷贝到镜像中nginx指定的位置。

  • 创建Dockerfile文件:vim Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#基础镜像必要,代表你的项目将构建在这个基础上面
FROM nginx
# 作者
MAINTAINER okami
LABEL authors="okami"
#指定参数
ARG port=80
ENV SERVER_NAME=dist
#允许指定端口转发
EXPOSE $port
# 创建静态文件存放的目录
RUN mkdir -p /opt/app/rms_fg/$SERVER_NAME
# 将静态文件拷贝至指定目录
COPY dist /opt/app/rms_fg/$SERVER_NAME/
RUN rm -rf /etc/nginx/nginx.conf
# 提前写好nginx配置文件,然后将准备好的配置文件拷贝至镜像中
COPY ./nginx.conf /etc/nginx/nginx.conf
  • 将前端包dist拷贝至Dockerfile同级目录
  • 在Dockerfile同级目录编写nginx的配置文件nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
user root;
worker_processes 1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

sendfile on;
keepalive_timeout 65;

server {
listen 80;
server_name localhost;

location / {
root /opt/app/rms_fg/dist;
index index.html;
}
}
}
  • 编译镜像,在Docekrfile的同级目录执行docker build
1
export serverName=dist && imageVersion=v1 && sudo docker build -t $serverName:$imageVersion .
  • 编辑结束后,可以通过docker images查看镜像

将镜像上传到镜像仓库

1
2
3
4
5
6
7
8
9
imageVersion=v1
serverName=dist
harbor_address=harbor.test-okami.com
harborProjectName=frontend-test

sudo docker login $harbor_address
sudo docker tag $serverName:$imageVersion $harbor_address/${harborProjectName}/${serverName}:${imageVersion}
sudo docker push $harbor_address/$harborProjectName/$serverName:$imageVersion

启动

  • 通过docker run命令即可启动一个容器

检查docker进程

  • 通过docker ps命令即可查看docker进程

k8s部署方案

使用k8s部署服务,前提需要在镜像仓库中有镜像

制作镜像并上传仓库

编写yaml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
apiVersion: v1
kind: ServiceAccount
metadata:
name: dist
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: dist
spec:
replicas: 2
selector:
matchLabels:
app: dist
version: v8
template:
metadata:
labels:
app: dist
version: v8
spec:
terminationGracePeriodSeconds: 0
serviceAccountName: dist
containers:
- name: dist
image: harbor.test-okami.com/frontend-test/dist:v1
imagePullPolicy: Always
ports:
- containerPort: 8080
securityContext:
runAsUser: 0
runAsGroup: 0
#fsGroup: 2000
allowPrivilegeEscalation: true
capabilities:
add: ["NET_ADMIN", "NET_RAW", "SYS_TIME"]

---
apiVersion: v1
kind: Service
metadata:
name: dist
labels:
app: dist
version: v1
spec:
type: LoadBalancer
ports:
- port: 80
name: http
appProtocol: HTTP
selector:
app: dist
version: v1

部署

  • 通过kubectl apply -f app.yaml -n <namespace>,将前端部署到k8s环境中

查看服务

  • 查看service

    1
    $ kubectl get svc -n <namespace>
  • 查看pods

    1
    $ kubectl get pods -n <namespace>	
  • 查看pod的日志

    1
    $ kubectl logs -f pod/<pod_name> -n <namespace> 
-------- 本文结束 感谢阅读 --------