在Kubernetes中部署Java应用

1.环境准备

安装jdk1.8

安装maven

2.部署java应用

首先下载demo:​​https://github.com/lizhenliang/tomcat-java-demo​​

解压

unzip tomcat-java-demo-master.zip

数据库脚本导入数据库:/root/tomcat-java-demo-master/db/tables_ly_tomcat.sql

修改配置文件application.yml

vim /root/tomcat-java-demo-master/src/main/resources/application.yml
打包(打包的时间可能会有点长奥)
cd tomcat-java-demo-master
mvn clean package -Dmaven.test.skip=true

在Kubernetes中部署Java应用

打包完成后会生成target目录

在Kubernetes中部署Java应用

构建项目镜像
cd tomcat-java-demo-master
docker build -t 10.2.3.90/test/java-demo .

将镜像推送到本地的私有仓库
docker login 10.2.3.90 
docker push 10.2.3.90/test/java-demo:latest

在Kubernetes中部署Java应用

在Kubernetes中部署Java应用

将镜像部署到k8s中

由于访问的是私有仓库,需要生成密钥secret(此步骤非常关键)

kubectl create secret docker-registry regsecret --docker-server=10.2.3.90 --docker-username=admin --docker-password=123456
其中:
regsecret: 指定密钥的键名称, 可自行定义
--docker-server: 指定docker仓库地址
--docker-username: 指定docker仓库账号
--docker-password: 指定docker仓库密码
--docker-email: 指定邮件地址(选填)
在master、node1、node2分别添加私服地址

vim /etc/docker/daemon.json

{
"insecure-registries": [
"10.2.3.90"
]
}

service docker restart

生成一个模板
kubectl create deployment java-demo --image=10.2.3.90/test/java-demo:latest --dry-run -o yaml >deploy.yaml

生成的模板格式如下:

apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: java-demo
name: java-demo
spec:
replicas: 1
selector:
matchLabels:
app: java-demo
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: java-demo
spec:
containers:
- image: 10.2.3.90/test/java-demo:latest
name: java-demo
resources: {}
status: {}

修改后的deploy.yaml文件如下:

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: java-demo
name: java-demo
spec:
replicas: 3
selector:
matchLabels:
app: java-demo
template:
metadata:
labels:
app: java-demo
spec:
containers:
- image: 10.2.3.90/test/java-demo:latest
name: java-demo
imagePullSecrets: # 获取镜像需要的用户名密码
- name: regsecret

应用一下

kubectl apply -f deploy.yaml

在Kubernetes中部署Java应用

查看Pod

kubectl get pods

在Kubernetes中部署Java应用

查看应用是否已经启动

kubectl logs java-demo-54bd9c78b9-9c88k

在Kubernetes中部署Java应用

如果需要更新镜像的话可以使用以下命令(只有出现不是running的时候才使用)

kubectl delete pod  镜像的名字
通过service可以让用户也可以访问应用
kubectl expose deployment java-demo --port=80 --target-port=8080 --type=NodePort -o yaml --dry-run >svc.yaml

生成的模板信息如下:

apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: java-demo
name: java-demo
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: java-demo
type: NodePort
status:
loadBalancer: {}

应用一下

kubectl apply -f svc.yaml

在Kubernetes中部署Java应用

查看pod和service

kubectl get pods,svc

在Kubernetes中部署Java应用

查看pod部署的节点

kubectl get pods -o wide

在Kubernetes中部署Java应用

此时可以访问应用了,node1或者node2的ip加30667端口号就可以了,此处使用node1的ip

http://10.2.3.192:30667/

在Kubernetes中部署Java应用

至此在Kubernetes中部署Java应用已经完成。