## 如何在Kubernetes上部署Spring Boot的war包

欢迎来到本篇文章,今天我们将介绍如何在Kubernetes上部署Spring Boot的war包。如果你是一位刚入行的小白,不用担心,接下来我将一步步教会你如何实现这个目标。

### 步骤概览

首先,让我们来看一下这个部署的整体流程:

| 步骤 | 描述 |
| -------- | ------------------------------------------------------------ |
| 步骤一 | 构建Spring Boot应用并生成war包 |
| 步骤二 | 创建Docker镜像并上传到Docker Registry |
| 步骤三 | 部署war包至Kubernetes集群 |
| 步骤四 | 验证部署成功 |

### 具体步骤及代码示例

#### 步骤一:构建Spring Boot应用并生成war包

首先,我们需要确保Spring Boot应用正确,然后生成war包。在Spring Boot应用的pom.xml中,将项目打包方式改为war,并排除内嵌的tomcat。下面是示例代码:

```xml
war


org.springframework.boot
spring-boot-starter-tomcat
provided

```

接着,在主应用类上加上`SpringBootServletInitializer`类的继承,如下所示:

```java
import org.springframework.boot.web.support.SpringBootServletInitializer;

public class WarDeploymentApplication extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(WarDeploymentApplication.class);
}

public static void main(String[] args) {
SpringApplication.run(WarDeploymentApplication.class, args);
}
}
```

最后,通过Maven构建工具生成war包:

```shell
mvn clean package
```

#### 步骤二:创建Docker镜像并上传到Docker Registry

接下来,我们需要将war包打包到一个Docker镜像中,并上传到Docker Registry。我们需要编写Dockerfile文件来构建镜像,示例代码如下:

```Dockerfile
FROM openjdk:8-jdk-alpine

VOLUME /tmp

ARG JAR_FILE=target/*.war

COPY ${JAR_FILE} app.war

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.war"]
```

然后,通过如下命令构建并上传Docker镜像到Docker Registry:

```shell
docker build -t your_docker_image_name .
docker tag your_docker_image_name your_registry_host/your_repository_name/your_image_name
docker push your_registry_host/your_repository_name/your_image_name
```

#### 步骤三:部署war包至Kubernetes集群

现在,我们可以通过Kubernetes的Deployment和Service来部署war包。首先,创建Deployment的yaml文件,示例代码如下:

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: war-deployment
spec:
replicas: 3
selector:
matchLabels:
app: war-app
template:
metadata:
labels:
app: war-app
spec:
containers:
- name: war-container
image: your_registry_host/your_repository_name/your_image_name
ports:
- containerPort: 8080
```

然后,创建Service的yaml文件,示例代码如下:

```yaml
apiVersion: v1
kind: Service
metadata:
name: war-service
spec:
selector:
app: war-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: LoadBalancer
```

最后,在Kubernetes集群中部署war包:

```shell
kubectl apply -f war-deployment.yaml
kubectl apply -f war-service.yaml
```

#### 步骤四:验证部署成功

最后,可以通过浏览器访问Service的外部IP,即可验证部署是否成功。

通过以上步骤,我们成功地在Kubernetes上部署了一个Spring Boot的war包,希望这篇文章对你有所帮助。如果有任何疑问,请随时留言。祝你学习顺利!