本文主要是搭建一个k8s平台,并部署一个springboot的jar包,后续以此作为学习k8s的环境。
1. 搭建k8s集群
网上有很多指导,大家可以在网上搜索一下,比如这个:K8s搭建集群-CSDN博客,本人通过VMware安装3台虚拟机,部署了3个节点,最终的效果如下,master节点的ip是192.168.102.10,node1节点的ip是192.168.102.11,node2节点的ip是192.168.102.12:
2. 编写java代码
本文实现一个springboot访问接口,在外部可通过80端口访问,关键代码如下:
package com.kingyal.test.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@RestController
public class HelloWorldController {
private static int count = 0;
@RequestMapping("/hello")
public String hello(String name){
count++;
String time = getCurrenttime();
String printLog = "hello String boot, current time is :"+
time +" ,count = " + String.valueOf(count);
System.out.println(printLog);
return printLog;
}
private String getCurrenttime() {
LocalDateTime currentDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
String timestamp = currentDateTime.format(formatter);
return timestamp;
}
}
3. 编写Dockerfile文件
dockerfile文件的目的是编译出对应的docker镜像,该文件必须命名为Dockerfile:
#基础镜像 java打包需要依赖jdk
FROM openjdk:8-jre-alpine
#将日志打印到/var/log目录下
VOLUME /var/log
#将虚拟机的war包,cp到docker容器内部
COPY springboot_demo-1.0-SNAPSHOT.jar springboot_demo-1.0-SNAPSHOT.jar
#指定docker容器时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Beijing' >/etc/timezone
# 脚本启动
ENTRYPOINT ["sh","-c","java -server -Dfile.encoding=utf-8 -Xms1024m -Xms1536m -jar -Dserver.port=80 -Dspring.profiles.active=prod springboot_demo-1.0-SNAPSHOT.jar"]
4. 编写yaml文件
编写yaml文件是k8s的关键文件,通过该文件,可以指定pod的相关参数,,该文件的命名必须以.yaml后缀结果,比如可取名为deployment.yaml,详情后续再说:
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-server
spec:
replicas: 1
selector:
matchLabels:
app: demo-server
template:
metadata:
labels:
app: demo-server
spec:
containers:
- name: demo-server
image: an/demo_server:v1.0.0
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: demo-server
spec:
selector:
app: demo-server
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 31001
type: NodePort
5. 部署到k8s,查看结果
将Dockerfile,yaml文件deployment.yaml,以及jar包上传到master节点的某个目录下:
将Dockerfile,以及jar包分别上传到node1,node2节点的某个目录下:
由于没有做镜像仓库,因此,需要在3个节点都编译镜像,在3个节点都执行此命令:docker image build -t an/demo_server:v1.0.0 .
执行docker images命令可看到镜像已经编译完成:
在master节点执行yaml文件,即执行此命令 kubectl apply -f deployment.yaml:
执行此命令 kubectl get pod -A -owide 查看pod运行状态,此时可以看到jar包对应的镜像在node2节点上生成了一个pod,并且正在运行中:
在mster节点执行此命令 curl http://192.168.102.12:31001/hello ,可以访问到pod中的tomcat返回的数据:
也可以在浏览器中输入 http://192.168.102.12:31001/hello,访问到数据:
至此,已经实现在k8s中部署jar包并成功访问,后续基于此环境继续深入学习k8s。