在Kubernetes中部署Java应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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

在Kubernetes中部署Java应用_java

打包(打包的时间可能会有点长奥)
cd tomcat-java-demo-master
mvn clean package -Dmaven.test.skip=true

在Kubernetes中部署Java应用_java_02

打包完成后会生成target目录

在Kubernetes中部署Java应用_java_03

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

在Kubernetes中部署Java应用_docker_04

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

在Kubernetes中部署Java应用_tomcat_05

在Kubernetes中部署Java应用_docker_06

将镜像部署到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应用_docker_07

查看Pod

kubectl get pods

在Kubernetes中部署Java应用_tomcat_08

查看应用是否已经启动

kubectl logs java-demo-54bd9c78b9-9c88k

在Kubernetes中部署Java应用_tomcat_09

如果需要更新镜像的话可以使用以下命令(只有出现不是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应用_java_10

查看pod和service

kubectl get pods,svc

在Kubernetes中部署Java应用_tomcat_11

查看pod部署的节点

kubectl get pods -o wide

在Kubernetes中部署Java应用_docker_12

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

http://10.2.3.192:30667/

在Kubernetes中部署Java应用_java_13

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

以上是关于在Kubernetes中部署Java应用的主要内容,如果未能解决你的问题,请参考以下文章

初识Kubernetes(K8s):从一个单机部署实现Java Web应用例子开始

Kubernetes 部署策略

Kubernetes 部署策略

开年秀 | Kubernetes 2018容器热点私享会热力全开

云原生 | Kubernetes篇Kubernetes简介

当我添加 GSCFuse 并在 Kubernetes 中部署我的应用程序时收到此错误消息任何建议可能是啥问题