每天五分钟写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-alpineARG JAR_FILEADD ${JAR_FILE} app.jarENTRYPOINT [ "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/v1beta1kind: Deploymentmetadata: name: k8s-boot-deployment labels: app: k8s-boot-deploymentspec: 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: v1kind: Servicemetadata: 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)

部署 k8s Cluster(上)- 每天5分钟玩转 Docker 容器技术(118)

五分钟带你玩转apollo使用k8s部署,吐血亲验

五分钟带你玩转apollo使用k8s部署,吐血亲验

k8s部署springboot项目

通过例子理解 k8s 架构 - 每天5分钟玩转 Docker 容器技术(122)