gpt4 book ai didi

如何通过 3 个简单的步骤在 Kubernetes 上部署 Spring Boot 应用程序

转载 作者:知者 更新时间:2024-03-11 23:51:12 26 4
gpt4 key购买 nike

在本教程中,我们将学习如何使用 MinikubeJKube Maven 插件在 Kubernetes 上安装 Spring Boot 应用程序。

使用 Minikube 安装 Kubernetes 集群

Kubernetes 是一个开源系统,用于跨多个主机管理容器化应用程序。它为应用程序的部署、维护和扩展提供了基本机制。开始使用 Kubernetes 的最简单方法是安装 Minikube。

Minikube 是一个轻量级的 Kubernetes 实现,它在您的本地机器上创建一个 VM,并部署一个包含单个节点的简单集群,并附带一个 CLI,该 CLI 提供用于使用集群的基本引导操作,包括启动、停止、状态、并删除

安装 Minikube 的详细过程在:https://minikube.sigs.k8s.io/docs/start/

要安装二进制发行版,您只需下载它并在其上运行“安装”命令:

$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 $ sudo install minikube-linux-amd64 /usr/local/bin/minikube

完成后,启动“minikube start”命令,该命令将为您的环境选择驱动程序并下载运行 Kubernetes 组件所需的虚拟机:

minikube start

😄  minikube v1.15.1 on Fedora 29
    ▪ KUBECONFIG=/home/francesco/taskforce/install/auth/kubeconfig
✨  Using the kvm2 driver based on existing profile
👍  Starting control plane node minikube in cluster minikube
🎉  minikube 1.24.0 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.24.0
💡  To disable this notice, run: 'minikube config set WantUpdateNotification false'

🔄  Restarting existing kvm2 VM for "minikube" ...
🐳  Preparing Kubernetes v1.19.4 on Docker 19.03.13 ...
🔎  Verifying Kubernetes components...
🔎  Verifying registry addon...
🌟  Enabled addons: default-storageclass, storage-provisioner, registry, dashboard

❗  /usr/local/bin/kubectl is version 1.15.3, which may have incompatibilites with Kubernetes 1.19.4.
    ▪ Want kubectl v1.19.4? Try 'minikube kubectl -- get pods -A'
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

接下来,验证 default 和 kube-system 服务是否可用:

minikube service list
|----------------------|-----------------------------|--------------|-----|
|      NAMESPACE       |            NAME             | TARGET PORT  | URL |
|----------------------|-----------------------------|--------------|-----|
| default              | kubernetes                  | No node port |
| kube-system          | kube-dns                    | No node port |
| kube-system          | registry                    | No node port |
| kubernetes-dashboard | dashboard-metrics-scraper   | No node port |
| kubernetes-dashboard | kubernetes-dashboard        | No node port |
|----------------------|-----------------------------|--------------|-----|

太好了,您的 Kubernetes 集群现已启动并运行。

然后,为了使用 Minikube 的 Docker 实例构建 Docker 镜像,执行:

$ eval $(minikube docker-env)

命令 minikube docker-env 返回一组 Bash 环境变量导出,以配置您的本地环境以重用 Minikube 实例内的 Docker 守护程序。

如果您未能配置您的 Minikube 环境,您将在部署资源时看到错误:“Connection reset by peer”

编写示例 Spring Boot 应用程序

我们将在 Minikube 上部署一个最小的 Spring Boot 应用程序,其中只有一个 Hello World 控制器:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
  @RequestMapping("/")
  public String index() {
    return "Greetings from Spring Boot!!";
  }
}

为了在 Kubernetes 上部署这个 Spring Boot 应用程序,我们将使用 JKube。

Eclipse JKube 是一组插件和库,用于使用 Docker、JIB 或 S2I 构建策略构建容器镜像。 Eclipse JKube 也在编译时生成和部署 Kubernetes/OpenShift 清单。

要使用 JKube,只需将其作为 Maven 插件添加到您的项目中:

<?xml version="1.0" encoding="UTF-8"?><profile>
      
   <id>kubernetes</id>
      
   <build>
           
      <plugins>
                
         <plugin>
                     
            <groupId>org.eclipse.jkube</groupId>
                     
            <artifactId>kubernetes-maven-plugin</artifactId>
                     
            <version>${jkube.version}</version>
                      
            <configuration>
                           
               <resources>
                               
                  <labels>
                                    
                     <all>
                                         
                        <testProject>spring-boot-sample</testProject>
                                       
                     </all>
                                  
                  </labels>
                             
               </resources>
                           
               <generator>
                               
                  <includes>
                                    
                     <include>spring-boot</include>
                                  
                  </includes>
                               
                  <config>
                                    
                     <spring-boot>
                                         
                        <color>always</color>
                                       
                     </spring-boot>
                                  
                  </config>
                             
               </generator>
                          
               <enricher>
                               
                  <excludes>
                                    
                     <exclude>jkube-expose</exclude>
                                  
                  </excludes>
                               
                  <config>
                                    
                     <jkube-service>
                                         
                        <type>NodePort</type>
                                       
                     </jkube-service>
                                  
                  </config>
                             
               </enricher>
                        
            </configuration>
                      
            <executions>
                          
               <execution>
                               
                  <goals>
                                    
                     <goal>resource</goal>
                                    
                     <goal>build</goal>
                                    
                     <goal>helm</goal>
                                  
                  </goals>
                             
               </execution>
                        
            </executions>
                   
         </plugin>
              
      </plugins>
         
   </build>
    
</profile>

在 Kubernetes 上部署 Spring Boot 应用程序

Kubernetes 上部署应用程序,只需要 3 个简单的步骤:

  1. 创建您的 Kubernetes 资源描述符。``
mvn clean k8s:resource -Pkubernetes

然后通过达到构建目标来启动 docker build。

mvn package k8s:build -Pkubernetes

最后,在 Kubernetes 集群上部署您的应用程序:

mvn k8s:deploy -Pkubernetes

部署后,您可以看到 Kubernetes 集群内运行的 pod:

$ kubectl get pods 
NAME READY STATUS RESTARTS AGE 
spring-boot--5b7d6dfb6f-2nsnm 1/1 Running 0 23s

您可以尝试使用 minikube 服务命令访问您的应用程序,如下所示:

$ minikube service spring-boot 
|-----------|-------------|-------------|----------------------------| 
| NAMESPACE | NAME | TARGET PORT | URL | 
|-----------|-------------|-------------|----------------------------| 
| default | spring-boot | http | http://192.168.39.76:32429 | 
|-----------|-------------|-------------|----------------------------| 
Opening service default/spring-boot in default browser...

请注意,有一个影响某些 JDK 的已知问题:https://bugs.openjdk.java.net/browse/JDK-8236039

发生这种情况时,客户端会抛出异常:

“javax.net.ssl.SSLHandshakeException:扩展名 (5) 不应出现在证书请求中”

发生这种情况是因为 JDK 11 及更高版本支持可能导致上述错误的 TLS 1.3。

您可以通过将属性 -Djdk.tls.client.protocols=TLSv1.2 设置为 JVM 参数以使其使用 1.2 来解决此问题。作为替代方案,更新到最新版本 od JDK(在 JDK 15 中已完全解决)。

在 Kubernetes 上享受 Spring Boot!

您可以在以下位置找到此 Maven 项目的源代码:https://github.com/eclipse/jkube/tree/master/quickstarts/maven/spring-boot

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com