通过拉取代码,用maven打包成jar,命令如下 将jar,打包成docker镜像,创建一个名为 然后再运行下面命令打包 查看生成的image镜像 运行docker容器,并测试外网访问 将镜像推送到私有仓库 构建k8s最小管理单元pod,创建名为 运行 创建NodePort类型 service ,将应用暴露出来供外网访问,创建一个名为 运行 在k8s服务器上访问CLUSTER-IP:PORT , 如环境准备
2.1. Java环境安装命令 sudo yum install java-17-openjdk java-17-openjdk-devel
2.2. [java-17-openjdk] 是jre ,[java-17-openjdk-devel] 是编译工具,javac
2.3. maven 建议下载二进制包,解压,然后配置环境变量进行安装,不要用 yum install 的方式,因为这种方式会把额外安装 jre 版本,容易造成和项目java版本冲突docker run -d -p 5000:5000 --restart=always --name registry registry 进行安装参考项目打包
$ git clone https://github.com/mkyong/spring-boot.git
$ cd spring-boot-hello-world
$ mvn spring-boot:run
Dockerfile的文本文件,内容如下from openjdk:17.0.2-jdk
copy target/spring-boot-hello-world-1.0.jar /spring-boot-hello-world-1.0.jar
CMD ["java", "-jar", "/spring-boot-hello-world-1.0.jar"]
docker build -t my-java-app .
docker image ls
# 81是主机端口,外网访问,8080是容器端口,spring 项目监听的端口
docker run -p 81:8080 -it --rm --name my-running-app my-java-app
docker push my-java-app
部署到k8s
my-java-app.yaml,内容如下apiVersion: v1
kind: Pod
metadata:
name: spring-java-name
# 指定 label,便于检索 ,这里要记住,后面配置外网访问service的时候需要用到
labels:
app: spring-java-lable
spec:
containers:
- name: spring-java-container
# 指定镜像
image: my-java-app:latest
#imagePullPolicy: Never
# 指定暴露端口
ports:
# 这里只是个用于标识,和容器内应用监听的端口要一致,如果不一致,以容器实际端口为准
- containerPort: 8080
kubectl apply -f my-java-app.yaml命令进行打包,然后运行kubectl get pods查看打包后的pod状态java-service.yaml的文本文件,内容如下apiVersion: v1
kind: Service
metadata:
name: my-java-nodeport-service
spec:
type: NodePort
ports:
- port: 8001 # Service 公开的端口,内部访问
targetPort: 8080 # Pod 中容器的端口
nodePort: 30001 # NodePort,需要在 30000-32767 范围内选择,外部访问
selector:
app: spring-java-lable # 用于选择匹配的 Pod,基于pod label,而不是pod name
kubectl apply -f java-service.yaml 命令,启动service服务,然后运行kubectl get svc 命令查看所有service,会看到一个TYPE 为 NodePort 的service

curl 10.43.90.53:8001 或者在外网访问外放ip和端口,如curl 外网ip:30001 即可测试服务访问性