一、准备一个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-deploymentlabels:app: k8s-boot-deploymentspec:replicas: 1selector:matchLabels:app: k8s-boottemplate:metadata:labels:app: k8s-bootspec:containers:- name: springboot-demoimage: k8s-boot:1.0imagePullPolicy: Neverports:- containerPort: 8080nodeSelector:testnode: test---apiVersion: v1kind: Servicemetadata:name: k8s-boot-servicespec:type: NodePortports:- port: 8080nodePort: 30000selector:app: k8s-boot
注意这里我们采用本地镜像,故imagePullPolicy: Never,而且借助NodeSelector使pod运行到镜像上传的节点上。
最后在浏览器输入:http://<worker node IP>:30000/hello即可访问我们写的SpringBoot项目
代码下载:
https://github.com/loveoobaby/blog_code
文章转载自CodingWithFun,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




