Maison >Java >javaDidacticiel >Comment déployer l'application SpringBoot sur K8S
Avant, nous avons construit notre propre entrepôt d'images. Cette fois, nous avons changé la méthode et téléchargé l'image sur
Docker Hub
.Docker Hub
中去。
首先我们得注册个Docker Hub
的账号,Docker Hub
地址:https://hub.docker.com/
部署应用使用之前的mall-tiny-fabric
项目,先修改pom.xml
文件,主要是增加Docker Hub
的认证信息和修改下镜像前缀,具体内容如下;
<configuration> <!-- Docker 远程管理地址--> <dockerHost>http://192.168.5.94:2375</dockerHost> <!-- 增加认证信息--> <authConfig> <push> <!--Docker Hub 客户名--> <username>macrodocker</username> <!--Docker Hub 密码--> <password>xxx</password> </push> </authConfig> <images> <image> <!--修改镜像前缀为Docker Hub 客户名--> <name>macrodocker/${project.name}:${project.version}</name> </image> </images> </configuration>
修改完成后使用package
命令先把镜像打包到Linux
服务器,再使用docker:push
命令把镜像推送到Docker Hub
中去:
推送成功以后即可以在Docker Hub
中看到镜像了。
接下来我们将把应用部署到K8S上去,包含
SpringBoot
应用的部署和MySQL
的部署。
部署MySQL
首先增加配置文件mysql-deployment.yaml
用于创立Deployment
,具体说明参考注释就可;
apiVersion: apps/v1kind: Deploymentmetadata: # 指定Deployment的名称 name: mysql-deployment # 指定Deployment的标签 labels: app: mysqlspec: # 指定创立的Pod副本数量 replicas: 1 # 定义如何查找要管理的Pod selector: # 管理标签app为mysql的Pod matchLabels: app: mysql # 指定创立Pod的模板 template: metadata: # 给Pod打上app:mysql标签 labels: app: mysql # Pod的模板规约 spec: containers: - name: mysql # 指定容器镜像 image: mysql:5.7 # 指定开放的端口 ports: - containerPort: 3306 # 设置环境变量 env: - name: MYSQL_ROOT_PASSWORD value: root # 使用存储卷 volumeMounts: # 将存储卷挂载到容器内部路径 - mountPath: /var/log/mysql name: log-volume - mountPath: /var/lib/mysql name: data-volume - mountPath: /etc/mysql name: conf-volume # 定义存储卷 volumes: - name: log-volume # hostPath类型存储卷在宿主机上的路径 hostPath: path: /home/docker/mydata/mysql/log # 当目录不存在时创立 type: DirectoryOrCreate - name: data-volume hostPath: path: /home/docker/mydata/mysql/data type: DirectoryOrCreate - name: conf-volume hostPath: path: /home/docker/mydata/mysql/conf type: DirectoryOrCreate
通过应用配置文件来创立Deployment
;通过应用配置文件来创立Deployment
;
kubectl apply -f mysql-deployment.yaml
运行成功后查询Deployment
,发现mysql-deployment
已经就绪;
[macro@linux-local k8s]$ kubectl get deploymentsNAME READY UP-TO-DATE AVAILABLE AGEmysql-deployment 1/1 1 1 38snginx-volume-deployment 2/2 2 2 6d5h
想要其余Pod
可以通过服务名称访问MySQL
,需要创立Service
,增加配置文件mysql-service.yaml
用于创立Service
;
apiVersion: v1kind: Servicemetadata: # 定义服务名称,其余Pod可以通过服务名称作为域名进行访问 name: mysql-servicespec: # 指定服务类型,通过Node上的静态端口暴露服务 type: NodePort # 管理标签app为mysql的Pod selector: app: mysql ports: - name: http protocol: TCP port: 3306 targetPort: 3306 # Node上的静态端口 nodePort: 30306
通过应用配置文件来创立Service
;
kubectl apply -f mysql-service.yaml
运行成功后查询Service
,发现mysql-service
已经暴露在Node的30306
端口上了;
[macro@linux-local k8s]$ kubectl get servicesNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d23hmysql-service NodePort 10.107.189.51 <none> 3306:30306/TCP 7snginx-service NodePort 10.101.171.181 <none> 80:30080/TCP 6d2h
部署完成后需要新建mall
数据库,并导入相关表,表地址: macrozheng/mall-learning/blob/master/document/sql/mall.sql
这里有个比较简单的方法来导入数据库,通过Navicat
创立连接,先配置一个SSH通道;
之后我们即可以像在Linux
服务器上访问数据库一样访问Minikube
中的数据库了,直接增加Minikube
中数据库IP和端口就可。
部署SpringBoot应用
首先增加配置文件mall-tiny-fabric-deployment.yaml
用于创立Deployment
,这里我们可以通过环境变量来覆盖SpringBoot
中的默认配置;
apiVersion: apps/v1kind: Deploymentmetadata: name: mall-tiny-fabric-deployment labels: app: mall-tiny-fabricspec: replicas: 1 selector: matchLabels: app: mall-tiny-fabric template: metadata: labels: app: mall-tiny-fabric spec: containers: - name: mall-tiny-fabric # 指定Docker Hub中的镜像地址 image: macrodocker/mall-tiny-fabric:0.0.1-SNAPSHOT ports: - containerPort: 8080 env: # 指定数据库连接地址 - name: spring.datasource.url value: jdbc:mysql://mysql-service:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai # 指定日志文件路径 - name: logging.path value: /var/logs volumeMounts: - mountPath: /var/logs name: log-volume volumes: - name: log-volume hostPath: path: /home/docker/mydata/app/mall-tiny-fabric/logs type: DirectoryOrCreate
通过应用配置文件来创立Deployment
;
kubectl apply -f mall-tiny-fabric-deployment.yaml
我们可以通过kubectl logs
命令来查看应用的启动日志;
[macro@linux-local k8s]$ kubectl get podsNAME READY STATUS RESTARTS AGEmall-tiny-fabric-deployment-8684857dff-pnz2t 1/1 Running 0 47smysql-deployment-5dccc96ccf-sfxvg 1/1 Running 0 25mnginx-volume-deployment-6f6c89976d-nv2rn 1/1 Running 4 6d6hnginx-volume-deployment-6f6c89976d-tmhc5 1/1 Running 4 6d5h[macro@linux-local k8s]$ kubectl logs -f mall-tiny-fabric-deployment-8684857dff-pnz2t
假如想要从外部访问SpringBoot
应用,需要创立Service
,增加配置文件mall-tiny-fabric-service.yaml
用于创立Service
;
apiVersion: v1kind: Servicemetadata: name: mall-tiny-fabric-servicespec: type: NodePort selector: app: mall-tiny-fabric ports: - name: http protocol: TCP port: 8080 targetPort: 8080 # Node上的静态端口 nodePort: 30180
通过应用配置文件来创立Service
;
kubectl apply -f mall-tiny-fabric-service.yaml
此时服务已经暴露到了Node的30180
端口上了;
[macro@linux-local k8s]$ kubectl get servicesNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d23hmall-tiny-fabric-service NodePort 10.100.112.84 <none> 8080:30180/TCP 5smysql-service NodePort 10.107.189.51 <none> 3306:30306/TCP 13mnginx-service NodePort 10.101.171.181 <none> 80:30080/TCP 6d2h
在Linux
服务器上,我们可以通过curl
命令来访问下项目的Swagger
页面,不过只能查看到返回的一串HTML
Docker Hub
, adresse Docker Hub
: https ://hub.docker.com/mall-tiny-fabric
précédent, modifiez d'abord le pom.xml code>, il s'agit principalement d'ajouter les informations d'authentification de <code>Docker Hub
et de modifier le préfixe de l'image. Le contenu spécifique est le suivant 🎜🎜🎜curl $(minikube ip):30180/swagger-ui.html
package
empaquete d'abord l'image sur le serveur Linux
, puis utilise le docker:push
commande pour pousser l'image vers Docker Hub
:🎜🎜Docker Hub
. 🎜🎜🎜SpringBoot
et le déploiement de MySQL
. 🎜🎜🎜Déployez MySQL🎜🎜mysql-deployment.yaml
pour créer un Déploiement
, veuillez vous référer aux commentaires pour des instructions spécifiques ; 🎜🎜🎜server { listen 80; server_name mall-tiny.macrozheng.com; #修改域名 location / { proxy_set_header Host $host:$server_port; proxy_pass http://192.168.49.2:30180; #修改为代理商服务地址 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }}
Déploiement
via les fichiers de configuration de l'application ; fichier de configuration pour créer un Déploiement
; 🎜🎜🎜192.168.5.94 mall-tiny.macrozheng.com
Déploiement
et recherchez le déploiement mysql
est prêt ; 🎜🎜🎜rrreeePod
soit accessible via le service nom MySQL, vous devez créer un <code>Service
et ajouter le fichier de configuration mysql-service.yaml
pour créer un Service
; 🎜🎜🎜rrreeeService
en appliquant le fichier de configuration 🎜🎜🎜rrreeeService
et constatez que mysql-service
a été exposé sur le port 30306Node ; 🎜🎜 🎜rrreee<ul class=" list-paddingleft -2">
<li>🎜Une fois le déploiement terminé, vous devez créer une nouvelle base de données <code>mall
et importer les tables pertinentes. L'adresse de la table est : macrozheng/mall-learning/blob/master/document/sql/mall.sql🎜🎜 Navicat
et configurez un SSH. canal en premier ; 🎜🎜Linux
. Pour accéder à la base de données dans Minikube
, ajoutez simplement l'IP et le port de la base de données dans Minikube
directement. 🎜🎜🎜🎜🎜🎜🎜 Déployer Application SpringBoot🎜🎜mall-tiny-fabric-deployment.yaml
pour créer un Déploiement code >, ici nous pouvons remplacer la configuration par défaut dans <code>SpringBoot
via des variables d'environnement 🎜🎜🎜rrreeeDéploiement
; 🎜🎜🎜rrreeekubectl logs
🎜 🎜🎜 ; rrreeeSpringBoot
depuis l'extérieur, vous devez créer un Service
et ajouter un fichier de configurationmall-tiny-fabric-service.yamlService
; li>🎜Configuration via le fichier d'application pour créer un Service
; 🎜🎜🎜rrreeePort 30180 du nœud
;🎜🎜🎜rrreeeLinux
, nous pouvons accéder au prochain projet via le curlSwagger
, mais vous ne pouvez afficher que la chaîne renvoyée de codes HTML
. 🎜🎜🎜rrreee🎜🎜Application d'accès externe🎜🎜因为使用
Minikube
安装的K8S Node
处于Linux
服务器的内网环境,无法直接从外部访问,所以我们需要安装一个Nginx
反向代理商下才能访问。
首先我们需要安装Nginx
,
安装完成后增加一个Nginx
的配置文件,这里我的配置路径为/mydata/nginx/conf/conf.d/
,用于将mall-tiny.macrozheng.com
域名的访问代理商到K8S
中的SpringBoot
应用中去,proxy_pass
为上面curl
使用的路径;
server { listen 80; server_name mall-tiny.macrozheng.com; #修改域名 location / { proxy_set_header Host $host:$server_port; proxy_pass http://192.168.49.2:30180; #修改为代理商服务地址 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }}
重启Nginx
服务,再修改访问Linux
服务器的本机host
文件,增加如下记录;
192.168.5.94 mall-tiny.macrozheng.com
之后就可直接在本机上访问K8S上的SpringBoot
应用了,访问地址:http://mall-tiny.macrozheng.com/swagger-ui.html
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!