在Kubernetes集群中部署SpringBoot应用

一。构建项目镜像

[root@k8smaster ~]# cat Dockerfile
FROM xiaotiejiang_jdk1.8.0_341                      依赖于之前构建的jdk镜像
MAINTAINER xiaotiejiang
ADD 38-springboot-k8s-1.0.0.jar /opt
RUN chmod +x /opt/38-springboot-k8s-1.0.0.jar
CMD java -jar /opt/38-springboot-k8s-1.0.0.jar
[root@k8smaster ~]#
[root@k8smaster ~]#
[root@k8smaster ~]# docker build -t 38-springboot-k8s-1.0.0-jar .
Sending build context to Docker daemon 197.6MB
Step 1/5 : FROM xiaotiejiang_jdk1.8.0_341
---> 85b51c0da235
Step 2/5 : MAINTAINER xiaotiejiang
---> Using cache
---> 8fd99930608f
Step 3/5 : ADD 38-springboot-k8s-1.0.0.jar /opt
---> 7be4adf6d071
Step 4/5 : RUN chmod +x /opt/38-springboot-k8s-1.0.0.jar
---> Running in b6b91ab4f6fc
Removing intermediate container b6b91ab4f6fc
---> e2e69c31f18d
Step 5/5 : CMD java -jar /opt/38-springboot-k8s-1.0.0.jar
---> Running in 9dcf002378ac
Removing intermediate container 9dcf002378ac
---> b73e9cf9c676
Successfully built b73e9cf9c676
Successfully tagged 38-springboot-k8s-1.0.0-jar:latest
[root@k8smaster ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
38-springboot-k8s-1.0.0-jar latest b73e9cf9c676 7 seconds ago 655MB
xiaotiejiang-tomcat-8.0.52 latest b10cd279f5e7 13 hours ago 615MB
xiaotiejiang_jdk1.8.0_341 latest 85b51c0da235 19 hours ago 601MB

二。生成部署的资源清单文件

[root@k8smaster ~]# kubectl create deployment springboot-k8s --image=38-springboot-k8s-1.0.0-jar --dry-run -o yaml > boot-deploy.yaml
W1016 18:34:19.705610 31993 helpers.go:553] --dry-run is deprecated and can be replaced with --dry-run=client.
[root@k8smaster ~]#

根据实际需求修改清单:

[root@k8smaster ~]# cat boot-deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: springboot-k8s
  name: springboot-k8s
spec:
  replicas: 1
  selector:
    matchLabels:
      app: springboot-k8s
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: springboot-k8s
    spec:
      containers:
      - image: 38-springboot-k8s-1.0.0-jar
        name: 38-springboot-k8s-1-0-0-jar-nkmlz
        imagePullPolicy: Never                        加上这个,从本地拉取镜像,不然从中心仓库拉拉不到
        resources: {}
status: {}
[root@k8smaster ~]# 

 

 

三。执行kubectl apply -f boot-deploy.yaml 部署

查看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 ~]# kubectl get deploy
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

posted @ 2022-10-17 10:58  聚散浮沉  阅读(339)  评论(0编辑  收藏  举报