一。构建项目镜像

[root@k8smaster ~]# cat Dockerfile

#依赖的环境
FROM openjdk:8-jre
MAINTAINER Wilmiam
#挂在的数据卷
#VOLUME /tmp
#target/docker-0.0.1-SNAPSHOT.jar 这个是你打的包的目录
ADD ruoyi-admin.jar /opt
RUN chmod +x /opt/ruoyi-admin.jar
CMD java -jar /opt/ruoyi-admin.jar
#ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
#抛出的端口,这个就是需要绑定的端口
#EXPOSE 28888
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

k8s集群部署SpringBoot应用_docker

[root@k8smaster ~]#
[root@k8smaster ~]#
[root@k8smaster ~]# docker build -t  ruoyi-admin-jar .

k8s集群部署SpringBoot应用_jar_03

[root@k8smaster ~]# docker images

k8s集群部署SpringBoot应用_docker_04

二。生成部署的资源清单文件boot-deploy.yaml

[root@k8smaster ~]#  kubectl create deployment ruoyi-admin --image=ruoyi-admin-jar --dry-run -o yaml > boot-deploy.yaml

[root@k8smaster ~]#

根据实际需求修改清单boot-deploy.yaml:

[root@k8smaster ~]# cat boot-deploy.yaml
  • 1.
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: ruoyi-admin
  name: ruoyi-admin
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ruoyi-admin
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: ruoyi-admin
    spec:
      containers:
      - image: ruoyi-admin-jar
        name: ruoyi-admin-jar-nkmlz
        imagePullPolicy: Never  # 本地镜像, 不拉取中心库镜像
        resources: {}
status: {}
  • 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.

三 、

1、master镜像ruoyi-admin-jar:latest 导出一份放在node1、node2

k8s集群部署SpringBoot应用_docker_07

 docker save ruoyi-admin-jar:latest > ruoyi-admin-jar.tar

ruoyi-admin-jar.tar发到node1、node2

k8s集群部署SpringBoot应用_docker_09

node1、node2节点生成镜像

docker load -i  ruoyi-admin-jar.tar

 查看节点node1的pod

 注:

 2、执行kubectl apply -f boot-deploy.yaml 部署

k8s集群部署SpringBoot应用_docker_14

查看deploy控制器和pod

[root@k8smaster ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-6799fc88d8-62njk 1/1 Running 3 34h
springboot-k8s-b7554d449-d77pn 0/1 ImagePullBackOff 0 101s
tomcat-7d987c7694-59x5l 1/1 Running 2 24h

[root@k8smaster ~]# 
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 34h
springboot-k8s 0/1 1 0 2m2s
tomcat 1/1 1 1 24h

因为镜像是在master制作的,而部署会往node部署,所以部署会报没有镜像 ,decribe命令查看pod信息

[root@k8smaster ~]# kubectl describe pod 38-springboot-k8s-575778f6bf-7cj5q
Name: 38-springboot-k8s-575778f6bf-7cj5q
Namespace: default

Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 32s default-scheduler Successfully assigned default/38-springboot-k8s-575778f6bf-7cj5q to k8snode
Warning ErrImageNeverPull 2s (x4 over 31s) kubelet Container image "38-springboot-k8s-1.0.0-jar" is not present with pull policy of Never
Warning Failed 2s (x4 over 31s) kubelet Error: ErrImageNeverPull

这块我把master的镜像导出了一份,传到node节点,load下

[root@k8smaster ~]# docker save 38-springboot-k8s-1.0.0-jar:latest > 38-springboot-k8s-1.0.0-jar.tar

[root@k8snode ~]# docker load -i 38-springboot-k8s-1.0.0-jar.tar
74ddd0ec08fa: Loading layer [==================================================>] 238.6MB/238.6MB
26d918ce4c70: Loading layer [==================================================>] 370.6MB/370.6MB
23eb30954c24: Loading layer [==================================================>] 27.17MB/27.17MB
1731b4d6a190: Loading layer [==================================================>] 27.17MB/27.17MB
Loaded image: 38-springboot-k8s-1.0.0-jar:latest
[root@k8snode ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
38-springboot-k8s-1.0.0-jar latest b73e9cf9c676 14 minutes ago 655MB

然后再部署成功了

[root@k8smaster ~]# kubectl apply -f boot-deploy.yaml
deployment.apps/springboot-k8s created
[root@k8smaster ~]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 35h
springboot-k8s 1/1 1 1 3s
tomcat 1/1 1 1 25h
[root@k8smaster ~]#
[root@k8smaster ~]#
[root@k8smaster ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-6799fc88d8-62njk 1/1 Running 3 35h
springboot-k8s-6f7c749dc6-pb4rc 1/1 Running 0 17s
tomcat-7d987c7694-59x5l 1/1 Running 2 25h

上面是通过yaml部署,也可以直接用命令部署

kubectl create deployment springboot-k8s --image=38-springboot-k8s-1.0.0-jar

(1)、出现问题查看节点node1的pod

     kubectl get pods -n kube-system

k8s集群部署SpringBoot应用_docker_15

 (2)、解决

mv /etc/kubernetes/kubelet.conf    /etc/kubernetes/admin.conf 

k8s集群部署SpringBoot应用_spring_16

k8s集群部署SpringBoot应用_jar_17

[root@k8smaster ~]# cat Dockerfile

#依赖的环境
FROM openjdk:8-jre
MAINTAINER Wilmiam
#挂在的数据卷
#VOLUME /tmp
#target/docker-0.0.1-SNAPSHOT.jar 这个是你打的包的目录
ADD ruoyi-admin.jar /opt
RUN chmod +x /opt/ruoyi-admin.jar
CMD java -jar /opt/ruoyi-admin.jar
#ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
#抛出的端口,这个就是需要绑定的端口
#EXPOSE 28888
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

k8s集群部署SpringBoot应用_docker

[root@k8smaster ~]#
[root@k8smaster ~]#
[root@k8smaster ~]# docker build -t  ruoyi-admin-jar .

k8s集群部署SpringBoot应用_jar_03

[root@k8smaster ~]# docker images

k8s集群部署SpringBoot应用_docker_04

二。生成部署的资源清单文件boot-deploy.yaml

[root@k8smaster ~]#  kubectl create deployment ruoyi-admin --image=ruoyi-admin-jar --dry-run -o yaml > boot-deploy.yaml

[root@k8smaster ~]#

根据实际需求修改清单boot-deploy.yaml:

[root@k8smaster ~]# cat boot-deploy.yaml
  • 1.
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: ruoyi-admin
  name: ruoyi-admin
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ruoyi-admin
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: ruoyi-admin
    spec:
      containers:
      - image: ruoyi-admin-jar
        name: ruoyi-admin-jar-nkmlz
        imagePullPolicy: Never  # 本地镜像, 不拉取中心库镜像
        resources: {}
status: {}
  • 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.

三 、

1、master镜像ruoyi-admin-jar:latest 导出一份放在node1、node2

k8s集群部署SpringBoot应用_docker_07

 docker save ruoyi-admin-jar:latest > ruoyi-admin-jar.tar

ruoyi-admin-jar.tar发到node1、node2

k8s集群部署SpringBoot应用_docker_09

node1、node2节点生成镜像

docker load -i  ruoyi-admin-jar.tar

 查看节点node1的pod

 注:

 2、执行kubectl apply -f boot-deploy.yaml 部署

k8s集群部署SpringBoot应用_docker_14

查看deploy控制器和pod

[root@k8smaster ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-6799fc88d8-62njk 1/1 Running 3 34h
springboot-k8s-b7554d449-d77pn 0/1 ImagePullBackOff 0 101s
tomcat-7d987c7694-59x5l 1/1 Running 2 24h

[root@k8smaster ~]# 
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 34h
springboot-k8s 0/1 1 0 2m2s
tomcat 1/1 1 1 24h

因为镜像是在master制作的,而部署会往node部署,所以部署会报没有镜像 ,decribe命令查看pod信息

[root@k8smaster ~]# kubectl describe pod 38-springboot-k8s-575778f6bf-7cj5q
Name: 38-springboot-k8s-575778f6bf-7cj5q
Namespace: default

Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 32s default-scheduler Successfully assigned default/38-springboot-k8s-575778f6bf-7cj5q to k8snode
Warning ErrImageNeverPull 2s (x4 over 31s) kubelet Container image "38-springboot-k8s-1.0.0-jar" is not present with pull policy of Never
Warning Failed 2s (x4 over 31s) kubelet Error: ErrImageNeverPull

这块我把master的镜像导出了一份,传到node节点,load下

[root@k8smaster ~]# docker save 38-springboot-k8s-1.0.0-jar:latest > 38-springboot-k8s-1.0.0-jar.tar

[root@k8snode ~]# docker load -i 38-springboot-k8s-1.0.0-jar.tar
74ddd0ec08fa: Loading layer [==================================================>] 238.6MB/238.6MB
26d918ce4c70: Loading layer [==================================================>] 370.6MB/370.6MB
23eb30954c24: Loading layer [==================================================>] 27.17MB/27.17MB
1731b4d6a190: Loading layer [==================================================>] 27.17MB/27.17MB
Loaded image: 38-springboot-k8s-1.0.0-jar:latest
[root@k8snode ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
38-springboot-k8s-1.0.0-jar latest b73e9cf9c676 14 minutes ago 655MB

然后再部署成功了

[root@k8smaster ~]# kubectl apply -f boot-deploy.yaml
deployment.apps/springboot-k8s created
[root@k8smaster ~]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 35h
springboot-k8s 1/1 1 1 3s
tomcat 1/1 1 1 25h
[root@k8smaster ~]#
[root@k8smaster ~]#
[root@k8smaster ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-6799fc88d8-62njk 1/1 Running 3 35h
springboot-k8s-6f7c749dc6-pb4rc 1/1 Running 0 17s
tomcat-7d987c7694-59x5l 1/1 Running 2 25h

上面是通过yaml部署,也可以直接用命令部署

kubectl create deployment springboot-k8s --image=38-springboot-k8s-1.0.0-jar

(1)、出现问题查看节点node1的pod

     kubectl get pods -n kube-system

k8s集群部署SpringBoot应用_docker_15

 (2)、解决

mv /etc/kubernetes/kubelet.conf    /etc/kubernetes/admin.conf 

k8s集群部署SpringBoot应用_spring_16

k8s集群部署SpringBoot应用_jar_17