Maison > Java > javaDidacticiel > Comment déployer l'application SpringBoot sur K8S

Comment déployer l'application SpringBoot sur K8S

王林
Libérer: 2023-05-14 17:22:06
avant
1518 Les gens l'ont consulté

Poussez l'image vers Docker Hub

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/

    Comment déployer lapplication SpringBoot sur K8S


  • 部署应用使用之前的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>
Copier après la connexion
  • 修改完成后使用package命令先把镜像打包到Linux服务器,再使用docker:push命令把镜像推送到Docker Hub中去:Comment déployer lapplication SpringBoot sur K8S

  • 推送成功以后即可以在Docker Hub中看到镜像了。Comment déployer lapplication SpringBoot sur K8S

应用部署

接下来我们将把应用部署到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
Copier après la connexion
  • 通过应用配置文件来创立Deployment;通过应用配置文件来创立Deployment

kubectl apply -f mysql-deployment.yaml
Copier après la connexion
  • 运行成功后查询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
Copier après la connexion
  • 想要其余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
Copier après la connexion
  • 通过应用配置文件来创立Service

kubectl apply -f mysql-service.yaml
Copier après la connexion
  • 运行成功后查询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
Copier après la connexion
  • 部署完成后需要新建mall数据库,并导入相关表,表地址: macrozheng/mall-learning/blob/master/document/sql/mall.sql

  • 这里有个比较简单的方法来导入数据库,通过Navicat创立连接,先配置一个SSH通道;Comment déployer lapplication SpringBoot sur K8S

  • 之后我们即可以像在Linux服务器上访问数据库一样访问Minikube中的数据库了,直接增加Minikube中数据库IP和端口就可。

    Comment déployer lapplication SpringBoot sur K8S

部署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
Copier après la connexion
  • 通过应用配置文件来创立Deployment

kubectl apply -f mall-tiny-fabric-deployment.yaml
Copier après la connexion
  • 我们可以通过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
Copier après la connexion
  • 假如想要从外部访问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
Copier après la connexion
  • 通过应用配置文件来创立Service

kubectl apply -f mall-tiny-fabric-service.yaml
Copier après la connexion
  • 此时服务已经暴露到了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
Copier après la connexion
  • Linux服务器上,我们可以通过curl命令来访问下项目的Swagger页面,不过只能查看到返回的一串HTML

    • Nous devons d'abord enregistrer un compte Docker Hub, adresse Docker Hub : https ://hub.docker.com/
    Comment déployer des applications SpringBoot sur K8S Allez dans


  • 🎜Pour déployer l'application et utiliser le projet 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
    Copier après la connexion
    • 🎜Utilisez package empaquete d'abord l'image sur le serveur Linux, puis utilise le docker:push</code > commande pour pousser l'image vers <code>Docker HubComment pour déployer des applications SpringBoot sur K8S🎜🎜
    • 🎜 Une fois le push réussi, vous pouvez voir l'image dans Docker Hub. Comment déployer des applications SpringBoot sur K8S🎜🎜🎜

      Déploiement d'application🎜🎜🎜Ensuite, nous déploierons l'application sur K8S, y compris le déploiement de l'application SpringBoot et le déploiement de MySQL. 🎜🎜🎜Déployez MySQL🎜🎜
      • 🎜Ajoutez d'abord le fichier de configuration 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;    }}
        Copier après la connexion
        Copier après la connexion
        • 🎜Créez un 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
          Copier après la connexion
          Copier après la connexion
          • 🎜Après une exécution réussie, interrogez Déploiement et recherchez le déploiement mysql est prêt ; 🎜🎜🎜rrreee
            • 🎜 Vous souhaitez que le reste du Pod soit accessible via le service nom MySQL< /code>, vous devez créer un <code>Service et ajouter le fichier de configuration mysql-service.yaml pour créer un Service ; 🎜🎜🎜rrreee
              • 🎜Créez un Service en appliquant le fichier de configuration 🎜🎜🎜rrreee
                • 🎜Après une opération réussie, interrogez Service et constatez que mysql-service a été exposé sur le port 30306 de Node ; 🎜🎜 🎜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🎜🎜
                • 🎜Voici une méthode relativement simple pour importer la base de données Créez une connexion via Navicat et configurez un SSH. canal en premier ; Comment déployer des applications SpringBoot sur K8S🎜🎜
                • 🎜Après cela, nous pouvons accéder à la base de données sur le serveur 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. 🎜🎜Comment déployer des applications SpringBoot sur K8S🎜🎜🎜🎜🎜 Déployer Application SpringBoot🎜🎜
                  • 🎜Ajoutez d'abord le fichier de configuration 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 🎜🎜🎜rrreee
                    • 🎜Créé en appliquant le fichier de configuration Déploiement ; 🎜🎜🎜rrreee
                      • 🎜Nous pouvons afficher le journal de démarrage de l'application via la commande kubectl logs 🎜 🎜🎜 ; rrreee
                        • 🎜Si vous souhaitez accéder à l'application SpringBoot depuis l'extérieur, vous devez créer un Service et ajouter un fichier de configuration< code>mall-tiny-fabric-service.yaml est utilisé pour créer un Service ; li>🎜Configuration via le fichier d'application pour créer un Service ; 🎜🎜🎜rrreee
                          • 🎜À ce stade, le service a été exposé au Port 30180 du nœud ;🎜🎜🎜rrreee
                            • 🎜Sur le serveur Linux, nous pouvons accéder au prochain projet via le < code>curl sur la page Swagger, 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;    }}
                              Copier après la connexion
                              Copier après la connexion
                              • 重启Nginx服务,再修改访问Linux服务器的本机host文件,增加如下记录;

                              192.168.5.94 mall-tiny.macrozheng.com
                              Copier après la connexion
                              Copier après la connexion
                              • 之后就可直接在本机上访问K8S上的SpringBoot应用了,访问地址:http://mall-tiny.macrozheng.com/swagger-ui.html

                              • Comment déployer lapplication SpringBoot sur K8S

                              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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal