SpringBoot项目

新建springboot项目

@RestController
public class HelloWorldController {
@RequestMapping("/")
public String home() {
return "Hello Docker World";
}
}

构建镜像

前面说过怎么构建了

查看:

docker search hongdada|grep demo
hongdada/com.huishi.demo 0

docker方式启动

docker run -p 8080:8080 -t hongdada/com.huishi.demo:latest

  .   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.8.RELEASE) 2019-10-08 09:03:06.690 INFO 1 --- [ main] com.huishi.demo.DemoApplication : Starting DemoApplication v0.0.1-SNAPSHOT on 55df098daeb9 with PID 1 (/app.jar started by root in /)
2019-10-08 09:03:06.697 INFO 1 --- [ main] com.huishi.demo.DemoApplication : No active profile set, falling back to default profiles: default
2019-10-08 09:03:10.166 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2019-10-08 09:03:10.267 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-10-08 09:03:10.268 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.24]
2019-10-08 09:03:10.584 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-10-08 09:03:10.584 INFO 1 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 3685 ms
2019-10-08 09:03:11.126 INFO 1 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2019-10-08 09:03:11.536 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2019-10-08 09:03:11.549 INFO 1 --- [ main] com.huishi.demo.DemoApplication : Started DemoApplication in 5.986 seconds (JVM running for 7.011)

查看:

$ curl 18.16.202.95:8080
Hello Docker World

删除:

docker stop container_id
docker rm container_id

集成Kubernetes

NodePort

k8s-springboot-demo.yaml

apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: k8s-springboot-demo
labels:
app: k8s-springboot-demo
spec:
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: k8s-springboot-demo
template:
metadata:
labels:
app: k8s-springboot-demo
spec:
containers:
- name: k8s-springboot-demo
image: hongdada/com.huishi.demo:latest
ports:
- containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 30
timeoutSeconds: 30
imagePullPolicy: IfNotPresent
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule ---
apiVersion: v1
kind: Service
metadata:
name: k8s-springboot-demo
namespace: default
labels:
app: k8s-springboot-demo
spec:
ports:
- port: 8080
targetPort: 8080
selector:
app: k8s-springboot-demo
type: NodePort

创建deploy和service

[root@master demo]# kubectl apply -f k8s-springboot-demo.yaml
deployment.apps/k8s-springboot-demo created
service/k8s-springboot-demo created [root@master demo]# kubectl get po,svc,deploy -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/curl-6bf6db5c4f-vhsqc 1/1 Running 11 74d 10.244.2.56 slaver2 <none> <none>
pod/k8s-springboot-demo-766c489688-jcxjz 1/1 Running 0 3m40s 10.244.2.57 slaver2 <none> <none> NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/k8s-springboot-demo NodePort 10.105.149.77 <none> 8080:30516/TCP 3m40s app=k8s-springboot-demo
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 74d <none> NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.extensions/curl 1/1 1 1 74d curl radial/busyboxplus:curl run=curl
deployment.extensions/k8s-springboot-demo 1/1 1 1 3m40s k8s-springboot-demo hongdada/com.huishi.demo:latest app=k8s-springboot-demo

NodePort方式,可以到任意一个节点的30516端口查看

[root@master demo]# curl -i -X GET  slaver2:30516
HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 18
Date: Wed, 09 Oct 2019 01:30:20 GMT Hello Docker World [root@master demo]# curl -i -X GET master:30516
HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 18
Date: Wed, 09 Oct 2019 01:30:33 GMT Hello Docker World [root@master demo]# curl -i -X GET slaver1:30516
HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 18
Date: Wed, 09 Oct 2019 01:30:44 GMT Hello Docker World [root@master demo]# curl -i -X GET 18.16.202.163:30516
HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 18
Date: Wed, 09 Oct 2019 01:30:59 GM

ClusterIP

修改k8s-springboot-demo.yaml

apiVersion: v1
kind: Service
metadata:
name: k8s-springboot-demo
namespace: default
labels:
app: k8s-springboot-demo
spec:
ports:
- port: 8080
targetPort: 8080
selector:
app: k8s-springboot-demo
type: ClusterIP

将service的type修改为ClusterIP

应用:

[root@master demo]# vim k8s-springboot-demo.yaml
[root@master demo]# kubectl apply -f k8s-springboot-demo.yaml
deployment.apps/k8s-springboot-demo unchanged
The Service "k8s-springboot-demo" is invalid: spec.ports[0].nodePort: Forbidden: may not be used when `type` is 'ClusterIP'
[root@master demo]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/k8s-springboot-demo NodePort 10.105.149.77 <none> 8080:30516/TCP 37m
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 74d
[root@master demo]# kubectl delete svc k8s-springboot-demo
service "k8s-springboot-demo" deleted
[root@master demo]# kubectl apply -f k8s-springboot-demo.yaml
deployment.apps/k8s-springboot-demo unchanged
service/k8s-springboot-demo created
[root@master demo]# kubectl get po,svc -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/curl-6bf6db5c4f-vhsqc 1/1 Running 11 74d 10.244.2.56 slaver2 <none> <none>
pod/k8s-springboot-demo-766c489688-jcxjz 1/1 Running 0 37m 10.244.2.57 slaver2 <none> <none> NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/k8s-springboot-demo ClusterIP 10.111.95.86 <none> 8080/TCP 24s app=k8s-springboot-demo
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 74d <none>

ClusterIP方式不提供对外访问

如果实在要访问,可以使用kubectl proxy ,但是k8s官方不推荐这种方式。

LoadBalancer

将上述的服务删除,并设置为LoadBalancer方式

[root@master demo]# kubectl delete svc k8s-springboot-demo
service "k8s-springboot-demo" deleted
[root@master demo]# kubectl get po,svc,deploy
NAME READY STATUS RESTARTS AGE
pod/curl-6bf6db5c4f-vhsqc 1/1 Running 11 74d
pod/k8s-springboot-demo-766c489688-jcxjz 1/1 Running 0 16h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 74d NAME READY UP-TO-DATE AVAILABLE AGE
deployment.extensions/curl 1/1 1 1 74d
deployment.extensions/k8s-springboot-demo 1/1 1 1 16h

命令方式修改

[root@master demo]# kubectl expose deploy k8s-springboot-demo --type=LoadBalancer
service/k8s-springboot-demo exposed

上述两种方式也可以使用kubectl expose方式修改,比较快捷

yaml文件修改

修改k8s-springboot-demo.yaml

apiVersion: v1
kind: Service
metadata:
name: k8s-springboot-demo
namespace: default
labels:
app: k8s-springboot-demo
spec:
ports:
- port: 8080
targetPort: 8080
selector:
app: k8s-springboot-demo
type: LoadBalancer

将service的type修改为LoadBalancer

kubectl apply -f k8s-springboot-demo.yaml

查看:

[root@master demo]# kubectl get po,svc,deploy -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/curl-6bf6db5c4f-vhsqc 1/1 Running 11 74d 10.244.2.56 slaver2 <none> <none>
pod/k8s-springboot-demo-766c489688-jcxjz 1/1 Running 0 16h 10.244.2.57 slaver2 <none> <none> NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/k8s-springboot-demo LoadBalancer 10.101.182.15 <pending> 8080:30852/TCP 2m44s app=k8s-springboot-demo
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 74d <none> NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.extensions/curl 1/1 1 1 74d curl radial/busyboxplus:curl run=curl
deployment.extensions/k8s-springboot-demo 1/1 1 1 16h k8s-springboot-demo hongdada/com.huishi.demo:latest app=k8s-springboot-demo

集群内部访问服务:

[root@master demo]#  curl -i -X GET  10.101.182.15:8080
HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 18
Date: Wed, 09 Oct 2019 01:41:21 GMT Hello Docker World

集群外部访问服务:

[root@master demo]#  curl -i -X GET  master:30852
HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 18
Date: Wed, 09 Oct 2019 01:39:23 GMT Hello Docker World [root@master demo]# curl -i -X GET slaver1:30852
HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 18
Date: Wed, 09 Oct 2019 01:39:35 GMT Hello Docker World [root@master demo]# curl -i -X GET slaver2:30852
HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 18
Date: Wed, 09 Oct 2019 01:39:39 GMT Hello Docker World [root@master demo]# curl -i -X GET 18.16.202.95:30852
HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 18
Date: Wed, 09 Oct 2019 01:39:52 GMT Hello Docker World

参考:

Spring Boot 项目转容器化 K8S 部署实用经验分享

K8s 集群使用 ConfigMap 优雅加载 Spring Boot 配置文件

Spring Boot应用容器化及Kubernetes部署

基于Kubernetes和Springboot构建微服务

Docker / Kubernetes部署Java / SpringBoot项目

在Kubernetes中部署spring boot应用

Kubernetes部署Spring Boot应用的更多相关文章

  1. Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目

    在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集 ...

  2. 【SFA官方翻译】使用 Kubernetes、Spring Boot 2.0 和 Docker 的微服务快速指南

    [SFA官方翻译]使用 Kubernetes.Spring Boot 2.0 和 Docker 的微服务快速指南 原创: Darren Luo SpringForAll社区 今天 原文链接:https ...

  3. Docker Gitlab CI 部署 Spring Boot 项目

    目前在学习这一块的内容,但是可能每个人环境都不同,导致找不到一篇博客能够完全操作下来没有错误的,所以自己也写一下,记录一下整个搭建的过程. Docker 的安装这里就不赘述了,基本上几行命令都可以了, ...

  4. springboot(十六):使用Jenkins部署Spring Boot

    jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署分为三个步骤: 第一步,jenkins安装 第二步,插件安装和配置 第 ...

  5. Spring Boot 2.0(四):使用 Docker 部署 Spring Boot

    Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...

  6. 从零部署Spring boot项目到云服务器(正式部署)

    上一篇文章总结了在Linux云服务器上部署Spring Boot项目的准备过程,包括环境的安装配置,项目的打包上传等. 链接在这里:http://www.cnblogs.com/Lovebugs/p/ ...

  7. 使用Docker部署Spring boot项目

    Docker是一个使用广泛的Linux容器管理工具包,它允许用户创建镜像,并将其容器实例化.通过本指南,我们可以学习到如何使用Docker部署Spring Boot项目. 先决条件 开发之前,你必须具 ...

  8. Spring Boot2.0:使用Docker部署Spring Boot

    一.Spring Boot项目添加 Docker 支持1.在pom.xml中添加 Docker 构建插件 <plugins> <!-- Docker maven plugin --& ...

  9. (转)Spring Boot 2 (四):使用 Docker 部署 Spring Boot

    http://www.ityouknow.com/springboot/2018/03/19/spring-boot-docker.html Docker 技术发展为微服务落地提供了更加便利的环境,使 ...

随机推荐

  1. JavaWeb 笔记

    WEB-INF 目录 web.xml 文件配置 精准匹配 "/" "/index" "/go/index.html" 路径通配匹配 &quo ...

  2. JVM学习笔记1

    1.运行时数据结构 2.堆分代 3.垃圾收集器 Parallel Scavenge收集器:新生代称为PSYoungGen,老年代称为ParOldGen,永久代称为Metaspace ParNew收集器 ...

  3. linux 安装jdk 和tomcat

    #创建用户是为了区分操作权限,如果不区分的话可以直接用root用户执行文件目录为 /usr/lcdc #创建lcdc用户, #其中-d和-m选项用来为登录名lcdc, /usr/lcdc(/usr为默 ...

  4. Kubelet 证书如何自动续期

    一.问题现象和原因 Kubernetes 日志错误 当 Kubernetes 集群日志中出现 certificate has expired or is not yet valid 错误信息时,表明证 ...

  5. 【07月15日】A股滚动市盈率PE最低排名

    ​仅根据最新的市盈率计算公式进行排名,无法对未来的业绩做出预测. 方大集团(SZ000055) - 滚动市盈率PE:2.53 - 滚动市净率PB:1.13 - 滚动年化股息收益率:4.01% - 建筑 ...

  6. Python【每日一问】38

    问: 基础题: 设计一个经营杠杆系数函数DOL,它包含三个参数,S为营业收入,C为变动成本总额,F为固定成本的总额. 已知2018年的S为20,C为11,F为3,求2019年的经营杠杆系数. 提高题: ...

  7. JOSH是中国的“MicroEJ”~

    很多人不了解JOSH,我们推荐大家去看看MicroEJ,我们是中国版的MICROEJ,下面的文章翻译自MICROEJ的官网,让大家直观的了解~ MICROEJ被定位为可连接对象的ANDROID™的小兄 ...

  8. jQuery学习路线&review

    学习途径:http://www.w3school.com.cn/jquery/index.asp 路线图 转载自:https://www.cnblogs.com/lanren2017/p/723720 ...

  9. 前端学习:学习笔记(JS部分)

    前端学习:学习笔记(JS部分) 前端学习:JS学习总结(图解)    JS的简介 JS基本语法 JS内置对象 JS的函数 JS的事件 JS的BOM JS的DOM JS的简介 新建步骤 <body ...

  10. 【java】Execption的 e.getMessage()为null的解决方法

    ================================ 场景: 当代码出现异常时通常都需要将异常信息写入到日志中,异常信息越详细越有利于问题的排查.而通过的Exception.getMess ...