0%

k8s部署微服务

宿主机部署方案

Java环境 + 可运行的jar包 + 配置文件

一般情况下,我们部署微服务的时候,先安装Java环境,然后将jar包和配置文件上传到服务器,然后启动服务,查看服务日志

Docker部署方案

制作镜像

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

  • 创建Dockerfile文件:vim Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#基础镜像必要,代表你的项目将构建在这个基础上面
FROM java:8
# 作者
MAINTAINER okami

LABEL authors="okami"
#指定参数
ARG port=80
ENV JAVA_OPTS="" SERVER_NAME=okami-service NACOS_SERVER=nacos-headless.nacos:8848
#允许指定端口转发
EXPOSE $port
#创建目录
RUN mkdir -p /opt/app/rms_fg/$SERVER_NAME
#将jar包添加到容器中
ADD $SERVER_NAME-1.0.0-SNAPSHOT.jar /opt/app/rms_fg/$SERVER_NAME/$SERVER_NAME-1.0.0-SNAPSHOT.jar
#复制启动配置文件
COPY config /opt/app/rms_fg/$SERVER_NAME/config
#添加执行权限
#RUN chmod +x /opt/app/rms_fg/$SERVER_NAME/bin/*
#指定 Docker image 运行成 instance (也就是 Docker container) 时,要执行的命令或者文件
ENTRYPOINT ["sh", "-c", "cd /opt/app/rms_fg/$SERVER_NAME/ && java $JAVA_OPTS -jar /opt/app/rms_fg/$SERVER_NAME/$SERVER_NAME-1.0.0-SNAPSHOT.jar" ]
  • 将jar包和配置文件拷贝至Dockerfile同级目录

  • 编译镜像,在Docekrfile的同级目录执行docker build

1
export serverName=okami-service && imageVersion=v1 && sudo docker build -t $serverName:$imageVersion .
  • 编辑结束后,可以通过docker images查看镜像

将镜像上传到镜像仓库

1
2
3
4
5
6
7
8
9
imageVersion=v1
serverName=okami-service
harbor_address=harbor.test-okami.com
harborProjectName=service-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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
apiVersion: v1
kind: ServiceAccount
metadata:
name: okami-service
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: okami-service
spec:
replicas: 2
selector:
matchLabels:
app: okami-service
template:
metadata:
labels:
app: okami-service
spec:
terminationGracePeriodSeconds: 0
serviceAccountName: okami-service
containers:
- name: okami-service
image: harbor.test-okami.com/service-test/okami-service:v1
imagePullPolicy: Always
volumeMounts:
- mountPath: "/opt/app/rms_fg/logs"
name: okami-service-pv
ports:
- containerPort: 80
securityContext:
runAsUser: 0
runAsGroup: 0
allowPrivilegeEscalation: true
capabilities:
add: ["NET_ADMIN", "SYS_TIME"]
env:
- name: NACOS_SERVER
valueFrom:
configMapKeyRef:
name: okami-service
key: nacos-server
volumes:
- name: okami-service-pv #和上面的挂载目录一致
persistentVolumeClaim:
claimName: service-pvc #这里要绑定我们创建的pvc
---
apiVersion: v1
kind: Service
metadata:
name: okami-service
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: okami-service

---
apiVersion: v1
kind: ConfigMap
metadata:
name: okami-service
data:
nacos-server: "nacos-headless.nacos:8848"
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: service-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/opt/app/k8s/hostpath/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: service-pvc
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi

部署

  • 通过kubectl apply -f app.yaml -n <namespace>,将微服务署到k8s环境中

查看服务

  • 查看Deployment

    1
    $ kubectl get deployment -n <namespace>
  • 查看service

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

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

    1
    $ kubectl logs -f pod/<pod_name> -n <namespace> 
  • 进入pod的命令行

    1
    $ kubectl exec -it pod/<pod_name>  -n <namespace> -- bash
-------- 本文结束 感谢阅读 --------