每天五分钟写K8:部署SpringBoot项目
Posted CodingWithFun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天五分钟写K8:部署SpringBoot项目相关的知识,希望对你有一定的参考价值。
一、准备一个SpringBoot的工程
用Spring Initializr创建一个spring boot的项目,之后加入一个controller即可
1@RestController
2@SpringBootApplication
3public class DemoApplication {
4
5 public static void main(String[] args) {
6 SpringApplication.run(DemoApplication.class, args);
7 }
8
9 @RequestMapping("/hello")
10 public String hello() {
11 return "Hello, world!";
12 }
13
14}
二、创建镜像
准备dockerfile文件
FROM openjdk:8-jdk-alpine
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENTRYPOINT [ "java", "-jar", "/app.jar"]
执行以下命令打包镜像,并上传到worker节点
docker build --build-arg JAR_FILE=./target/k8s-demo-0.0.1-SNAPSHOT.jar -t k8s-boot:1.0 .
如果worker节点有多个,需上传到所有节点,或者只上传到一个节点,但将该节点打上特殊label,调度的时候只调度到该标签节点。本文采用第二种方式处理。
对节点打标签的命令如下:
$ kubectl label nodes <hostname> <label key value>
本文中打标签命令如下:
kubectl label nodes <hostnode> testnode=test
三、kubectl发布应用
与以前不同的是deployment与Service放在同一文件中,内容如下:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: k8s-boot-deployment
labels:
app: k8s-boot-deployment
spec:
replicas: 1
selector:
matchLabels:
app: k8s-boot
template:
metadata:
labels:
app: k8s-boot
spec:
containers:
name: springboot-demo
image: k8s-boot:1.0
imagePullPolicy: Never
ports:
containerPort: 8080
nodeSelector:
testnode: test
---
apiVersion: v1
kind: Service
metadata:
name: k8s-boot-service
spec:
type: NodePort
ports:
port: 8080
nodePort: 30000
selector:
app: k8s-boot
注意这里我们采用本地镜像,故imagePullPolicy: Never,而且借助NodeSelector使pod运行到镜像上传的节点上。
最后在浏览器输入:http://<worker node IP>:30000/hello即可访问我们写的SpringBoot项目
代码下载:
https://github.com/loveoobaby/blog_code
以上是关于每天五分钟写K8:部署SpringBoot项目的主要内容,如果未能解决你的问题,请参考以下文章
部署 k8s Cluster(下)- 每天5分钟玩转 Docker 容器技术(119)