天天看點

在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應用
打包(打包的時間可能會有點長奧)
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 .      
在Kubernetes中部署Java應用
将鏡像推送到本地的私有倉庫
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應用
http://10.2.3.192:30667/